搬運--domoticz的 MQTT API接口 函數英文

以下是我從domoticz 官網搬運來的 MQTT 的 API 接口函數

https://www.domoticz.com/wiki

Domoticz API/JSON URL’s
Jump to navigation
Jump to search

Domoticz allows you to interact with all your switches and sensors using JSON, either interactively through a browser or programmatically from a scripting language. In fact, when you interact with the Domoticz UI through your browser by clicking on buttons and such, under the hood it’s JSON that actually communicates your changes back to the Domoticz engine (Hint: You can watch this behaviour at any time by enabling developer tools in your browser and watching the network tab’s traffic when you change something through the UI. See the section on changing a zwave device parameter for an example, with screenshot). This wiki describes how to use this versatile API.
Contents

1 Format
    1.1 Making output more readable
    1.2 Authorization
    1.3 Authorization with parameters
    1.4 Users
    1.5 Base64 encode
    1.6 Response
2 General usage
    2.1 A note on IDXes
    2.2 Retrieve status of Domoticz instance
    2.3 Get list of all defined users in the system
    2.4 Retrieve Domoticz logfile information
    2.5 Retrieve status of specific device
    2.6 Get status of all devices of a certain type
    2.7 Get status of all devices, including hidden ones
    2.8 Get status of all Favorite devices
    2.9 Get sunrise and sunset times
    2.10 Add a log message to the Domoticz log
    2.11 Use Notification Subsystem
    2.12 Get settings
3 Lights and switches
    3.1 Get details of all lights/switches
    3.2 Turn a light/switch on
    3.3 Turn a light/switch off
    3.4 Set a dimmable light to a certain level
    3.5 Set a light to a certain color or color temperature
    3.6 Set an RGB_CW_WW or CW_WW light to a certain color temperature
    3.7 Toggle a switch state between on/off
4 Scenes / Groups
    4.1 Get current state of all scenes & groups
    4.2 Turn a scene / group on or off
    4.3 Add a scene (0)
    4.4 Add a group (1)
    4.5 Delete a scene or group
    4.6 List devices in a scene
    4.7 Add device to a scene
    4.8 Delete device from a scene
    4.9 List activation devices of a scene
    4.10 List timers of a scene
    4.11 Add timer to a scene
    4.12 Enable/disable/delete specific scene schedule(timer)
5 Thermostat control
    5.1 Set Setpoint
6 Server control
    6.1 Shutdown system
    6.2 Reboot system
7 Create, delete, rename and disable commands
    7.1 Create virtual hardware
    7.2 Create a virtual sensor
    7.3 Create a device
    7.4 Rename hardware
    7.5 Rename device / sensor
    7.6 Enable hardware
    7.7 Disable hardware
    7.8 Delete hardware
    7.9 Delete a device or sensor
8 Update devices/sensors
    8.1 Temperature
    8.2 Humidity
    8.3 Barometer
    8.4 Temperature/humidity
    8.5 Temperature/humidity/barometer
    8.6 Temperature/barometer
    8.7 Rain
    8.8 Soil Moisture
    8.9 Wind
    8.10 UV
    8.11 Counter
    8.12 Electricity (instant and counter)
    8.13 Managed counter
    8.14 Electricity Current/Ampere 3 Phase
    8.15 Electricity P1 smart meter
    8.16 Air quality
    8.17 Pressure
    8.18 Percentage
    8.19 Visibility
    8.20 Gas
    8.21 Lux
    8.22 Voltage
    8.23 Text sensor
    8.24 Alert sensor
    8.25 Distance sensor
    8.26 Selector Switch
    8.27 Custom Sensor
    8.28 Note on counters
    8.29 Additional parameters (signal level & battery level)
9 Security
    9.1 Get Password
    9.2 Get security state
    9.3 Set security state
10 User variables
    10.1 Add a new variable
    10.2 Update an existing variable
    10.3 List all variables
    10.4 List one variable
    10.5 Delete a variable
11 trigger dzVents script using customEvent dzVents 3.0.0
12 Room Plans
    12.1 List all rooms
    12.2 List all devices in a room
13 History
    13.1 Switch devices
        13.1.1 Delete
    13.2 Text devices
        13.2.1 Delete
    13.3 Temperature
    13.4 Setpoint
    13.5 Energy, Gas, Water
14 Device Timer Schedules
    14.1 Get all schedules (timers)
    14.2 Get all schedules(timers) for Devices
    14.3 Get all schedules(timers) for Scenes
    14.4 Get all schedules(timers) for Thermostats
    14.5 Enable specific schedule(timer) for Devices
    14.6 Disable specific schedule(timer) for Devices
    14.7 Delete a specific schedule(timer) for Devices
    14.8 Enable specific schedule(timer) for Thermostats
    14.9 Disable specific schedule(timer) for Thermostats
    14.10 Delete a specific schedule(timer) for Thermostats
    14.11 Update parameters for a specific schedule(timer) for Devices
    14.12 Create a new schedule(timer) for an existing device
    14.13 Clear all schedules(timers) for a particular device
    14.14 Enable specific schedule(timer) for Scenes/Groups
    14.15 Disable specific schedule(timer) for Scenes/Groups
    14.16 Delete a specific schedule(timer) for Scenes/Groups
15 LMS and Kodi (Media Players)
    15.1 LMS
    15.2 Kodi
16 Evohome
    16.1 Updating the evohome controller mode
        16.1.1 Specify an until date
    16.2 Updating a zone setpoint
        16.2.1 Specifying a date/time for zone TemporaryOverride
    16.3 Turning HotWater ON/OFF
17 Configuring zwave devices
    17.1 Listing zwave node parameters
    17.2 Getting the battery levels
    17.3 Changing a zwave device parameter
18 Language-specific JSON examples
    18.1 Bash
    18.2 PHP
    18.3 Python
    18.4 Perl

Format

http://username:password@domoticz-ip<:port>/json.htm?api-call

<username:password@> = the username and password to access Domoticz, this is optional.
domoticz-ip = the IP-address or hostname of your Domoticz installation.
<:port> = the port number of your Domoticz installation, this is optional.

eg. http://192.168.1.2:8080/json.htm?type=command&param=udevice&idx=$idx&nvalue=0&svalue=79

Hint: You can have a look at the database for the nValue/sValue, or the .cpp code.
Making output more readable

By default, your browser will display the JSON-output in a unordered mess. To make it more readable you could use a browser plugin that formats the JSON to a more human-readable layout.
For Google Chrome you could use JSONView (Chrome web store). For other browsers a similar extension will probably exist. Look in the extensions/add-on store of your browser.

There are online sites which helps to do the same like https://jsonformatter.org. This site helps to format, tree view and validate JSON.
Authorization

When using some method other than a browser to connect to Domoticz it may be necessary to do Authorization differently. Authorization over HTTP is done by setting the “Authorization” HTTP request header when sending the request to Domoticz. The value of this header is a base64 encoded string of the username and password. When connecting to Domoticz using a browser and the URL method above the browser sets the appropriate header. When creating your own app or script this is not always done for you.

First the username and password are combined into one string "username:password"
This string is encoded using the RFC2045-MIME version of base64
The authorization method and a space i.e. "Basic " is then put before the encoded string.

This results in a header in the following format:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

How the header is send differs per programming language. Check the documentation of the language of your choice on how to set http request headers.

This method works with both the Basic-Auth and Login page options.
Authorization with parameters

An other way to set username and password when calling the API is :

http://domoticz-ip<:port>/json.htm?username=MkE=&password=OVM=&api-call

MkE= is the base64 encoded username ('2A' in this example)
OVM= is the base64 encoded password ('9S' in this example)

Users

When you use an user and password in this api, the user must have “user” or “admin” rights.
He also must have the right to access the device (see ‘SetDevices’ in users page).
Base64 encode

To encode a string using base64 you could use : codebeautify.org/base64-encode
Response

All responses include a status which is either OK on success or ERR on failure

{
“status” : “OK”
}

General usage

Please note that many characters are not permitted in URL strings, including spaces, brackets, etc. Depending on which options below you are using, it may be necessary to URL encode the string first. This is also called URI-encoding, escaping or percent-encoding. See URL encode/decode.

As an example, the string:

This is a test ! (Really)

when properly encoded, looks like this

This%20is%20a%20test%20%21%20%28Really%29

It’s also allowable to use a ‘+’ instead of ‘%20’ to encode spaces (this is normally reserved for HTML forms processing but Domoticz accepts both).
A note on IDXes

There are different categories of IDX values, such as for devices, for scenes, for timers, for hardware devices, etc. Make sure that you are using the correct IDX value when trying the commands below. Device IDXes can be found by looking at the Setup --> Devices tab in the UI. Similarly, Setup --> Hardware will list the hardware category IDXes. See the section(s) on scenes and timers/schedules below to see how to retrieve their particular IDXes or timerIDs using JSON.
Retrieve status of Domoticz instance

You can get the status of a Domoticz instance with:

/json.htm?type=command&param=getversion

{
“DomoticzUpdateURL”: “http://www.domoticz.com/download.php?channel=beta&type=release&system=linux&machine=armv7l”,
“HaveUpdate”: false,
“Revision”: 9540,
“SystemName”: “linux”,
“UseUpdate”: true,
“build_time”: “2018-05-29 14:27:24”,
“dzvents_version”: “2.4.6”,
“hash”: “30295913”,
“python_version”: “3.5.3 (default, Jan 19 2017, 14:11:04) \n[GCC 6.3.0 20170124]”,
“status”: “OK”,
“title”: “GetVersion”,
“version”: “3.9530”
}

Get list of all defined users in the system

/json.htm?type=users

{
“result”: [
{
“Enabled”: “true”,
“Password”: “abcdef1234567890abcdef1234567889”,
“RemoteSharing”: 1,
“Rights”: 2,
“TabsEnabled”: 127,
“Username”: “waaren”,
“idx”: “2”
},
{
“Enabled”: “true”,
“Password”: “abcdef1234567890abcdef1234567889”,
“RemoteSharing”: 0,
“Rights”: 2,
“TabsEnabled”: 0,
“Username”: “IFTTTx”,
“idx”: “3”
},
],
“status”: “OK”,
“title”: “Users”
}

Retrieve Domoticz logfile information

You can get the last couple (fixed at max. 100) of logmessages with:

/json.htm?type=command&param=getlog&lastlogtime=LASTLOGTIME&loglevel=LOGLEVEL

LOGLEVEL 1 = normal
2 = status
4 = error
268435455 = all

LASTLOGTIME starting with logmessages in LASTLOGTIME seconds since last epoch ( 0 = all available)

(In older versions &loglevel is ignored and the system will return all types) Somewhere around V3.9580 this changed and without the loglevel set, the system will only return type 1 messages
Retrieve status of specific device

You can get the status of a specific device with:

/json.htm?type=devices&rid=IDX

IDX = id of your device (This number can be found in the devices tab in the column "IDX")

{
“result” : [
{
“AddjMulti” : 1.0,
“AddjMulti2” : 1.0,
“AddjValue” : 0.0,
“AddjValue2” : 0.0,
“BatteryLevel” : 100,
“CustomImage” : 0,
“Data” : “24.1 C, (15.0 C), AutoWithEco”,
“Description” : “Groups: Sleeping Areas, Upstairs”,
“Favorite” : 0,
“HardwareID” : 12,
“HardwareName” : “Evohome”,
“HardwareType” : “Evohome USB (for HGI/S80)”,
“HardwareTypeVal” : 39,
“HaveTimeout” : false,
“ID” : “65be3”,
“LastUpdate” : “2019-06-16 11:08:09”,
“Name” : “Bedroom”,
“Notifications” : “false”,
“PlanID” : “0”,
“PlanIDs” : [ 0 ],
“Protected” : false,
“SetPoint” : 15.0,
“ShowNotifications” : true,
“SignalLevel” : “-”,
“Status” : “AutoWithEco”,
“SubType” : “Zone”,
“Temp” : 24.149999999999999,
“Timers” : “false”,
“Type” : “Heating”,
“TypeImg” : “override_mini”,
“Unit” : 6,
“Used” : 1,
“XOffset” : “0”,
“YOffset” : “0”,
“idx” : “600”
}
]
}

The array result[0] contains a hash/dict with name/value pairs of settings that are relevant to the device in question, in this example a thermostat.
Get status of all devices of a certain type

/json.htm?type=devices&filter=all&used=true&order=Name

This will return information about all used devices. If you want to retrieve information for a specific devicetype, you can use the following filters with &filter=:

light
weather
temp
utility
wind
rain
uv
baro
zwavealarms

Get status of all devices, including hidden ones

/json.htm?type=devices&used=true&displayhidden=1

Device names starting with a ‘$’ sign are invisible in both the Dashboard and Switches tabs in the Domoticz UI. If you want these devices included in the json output then displayhidden must be specified.
Get status of all Favorite devices

/json.htm?type=devices&used=true&filter=all&favorite=1

This will return only devices that are tagged as Favorite.
Get sunrise and sunset times

/json.htm?type=command&param=getSunRiseSet

{
“ServerTime” : “Sep 30 2013 17:15:21”,
“Sunrise” : “07:38:00”,
“Sunset” : “19:16:00”,
“status” : “OK”,
“title” : “getSunRiseSet”
}

Add a log message to the Domoticz log

You can add a log message to the system with:

/json.htm?type=command&param=addlogmessage&message=MESSAGE

MESSAGE = a string you want to log. Make sure to URL-encode any unsafe non-alphanumeric characters. See URL encode/decode

Use Notification Subsystem

You can post a notification to all enabled notification systems with:

/json.htm?type=command&param=sendnotification&subject=SUBJECT&body=THEBODY

You can post a notification to a specific notification system with:

/json.htm?type=command&param=sendnotification&subject=SUBJECT&body=THEBODY&subsystem=SUBSYSTEM

SUBJECT = a string you want to use as subject
THEBODY= a string you want to use as body
SUBSYSTEM= the notification method you want to use

gcm
http
kodi
lms
nma
prowl
pushalot
pushbullet
pushover
pushsafer

Get settings

/json.htm?type=settings

This will return the settings defined in “Setup” under a JSON form. For ex. :

{
“AcceptNewHardware” : 0,
“ActiveTimerPlan” : 0,
“ClickatellEnabled” : “”,
“ClickatellFrom” : “”,
“ClickatellPassword” : “”,

}

Lights and switches
Get details of all lights/switches

/json.htm?type=command&param=getlightswitches

OR

/json.htm?type=devices&filter=light&used=true&order=Name

Example output:

{
“result” : [
{
“IsDimmer” : false,
“Name” : “Bedroom lights”,
“SubType” : “Energenie”,
“Type” : “Lighting 1”,
“idx” : “43”
},
{
“IsDimmer” : false,
“Name” : “Hall”,
“SubType” : “Energenie”,
“Type” : “Lighting 1”,
“idx” : “30”
},
{
“IsDimmer” : true,
“Name” : “Lounge Light Front”,
“SubType” : “RGBW”,
“Type” : “Lighting Limitless/Applamp”,
“idx” : “32”
},
{
“IsDimmer” : true,
“Name” : “Lounge Lights All”,
“SubType” : “RGBW”,
“Type” : “Lighting Limitless/Applamp”,
“idx” : “66”
},
{
“IsDimmer” : true,
“Name” : “Lounge light back”,
“SubType” : “RGBW”,
“Type” : “Lighting Limitless/Applamp”,
“idx” : “33”
}
],
“status” : “OK”,
“title” : “GetLightSwitches”
}

Turn a light/switch on

/json.htm?type=command&param=switchlight&idx=99&switchcmd=On

Turn a light/switch off

/json.htm?type=command&param=switchlight&idx=99&switchcmd=Off

idx = id of your device (in this example 99).
switchcmd = "On" or "Off" (case sensitive!)

{
“status” : “OK”,
“title” : “SwitchLight”
}

beware that if the switch has the ‘protected’ attribute set then you need add key passcode (with the right passcode)

/json.htm?type=command&param=switchlight&idx=99&switchcmd=Off&passcode=YOUR_SWITCH_PASSWORD_AS_SET_IN_SETTINGS

or the status will be

{
“message” : “WRONG CODE”,
“status” : “ERROR”,
“title” : “SwitchLight”
}

Note that when you use &switchcmd, the http:// or script:// on/off actions of the corresponding switch are executed. If you just want to update the status of the switch in Domoticz without running these actions, use the &param=udevice option instead (see update-section below).
Set a dimmable light to a certain level

/json.htm?type=command&param=switchlight&idx=99&switchcmd=Set%20Level&level=6

Some lights have 100 dim levels (like zwave and others), other hardware (kaku/lightwaverf) have other ranges like 16/32
Level should be the dim level (not percentage), like 0-16 or 0-100 depending on the hardware used
When the light is off, it will be turned on

{
“status” : “OK”,
“title” : “SwitchLight”
}

Set a light to a certain color or color temperature

Color can be specified as either hue + brightness, RGB + optional brightness or a Domoticz JSON color object

Specify hue and brightness
Hue in degrees, 0…360
Brightness 0…100
/json.htm?type=command&param=setcolbrightnessvalue&idx=99&hue=274&brightness=40&iswhite=false
Note: There is no saturation parameter, specify RGB format Domoticz JSON color format for full color control

Specify RGB and brightness (optional)
RGB as hexadecimal number, RRGGBB without prefix (no 0x or #)
/json.htm?type=command&param=setcolbrightnessvalue&idx=99&hex=RRGGBB&brightness=100&iswhite=false
Note: The actual brightness of the light is a combination of RGB value and brightness. Brightness parameter may be omitted.
A site like colorhexa can be used to help pick hex values according to desired colours.

Specify Domoticz JSON color object and brightness
Example: Specify color mode with a dim blue color
/json.htm?type=command&param=setcolbrightnessvalue&idx=130&color={“m”:3,“t”:0,“r”:0,“g”:0,“b”:50,“cw”:0,“ww”:0}&brightness=100

Domoticz color format:

Domoticz color format is used as:

input parameter to:

    - setcolbrightnessvalue
    - updatetimer
    - addtimer
    - addscenedevice
    - updatescenedevice

In response from:

    - devices
    - getscenedevices
    - timers

Example: color={“m”:3,“t”:0,“r”:0,“g”:0,“b”:50,“cw”:0,“ww”:0}

ColorMode {
ColorModeNone = 0, // Illegal
ColorModeWhite = 1, // White. Valid fields: none
ColorModeTemp = 2, // White with color temperature. Valid fields: t
ColorModeRGB = 3, // Color. Valid fields: r, g, b.
ColorModeCustom = 4, // Custom (color + white). Valid fields: r, g, b, cw, ww, depending on device capabilities
ColorModeLast = ColorModeCustom,
};

Color {
ColorMode m;
uint8_t t; // Range:0…255, Color temperature (warm / cold ratio, 0 is coldest, 255 is warmest)
uint8_t r; // Range:0…255, Red level
uint8_t g; // Range:0…255, Green level
uint8_t b; // Range:0…255, Blue level
uint8_t cw; // Range:0…255, Cold white level
uint8_t ww; // Range:0…255, Warm white level (also used as level for monochrome white)
}

References This API call is called internally by dzVents when using the following device object methods:

setColor(r, g, b, br, cw, ww, m, t)
setColorBrightness()

Please ensure local access is enabled for 127.0.0.1 or 127.0.0.* (described here). for these to work correctly.
The parameters r, g, b, cw, ww, m and t map to the same values in the aforementioned color object.
The parameter br maps to brightness [0…100].
Set an RGB_CW_WW or CW_WW light to a certain color temperature

/json.htm?type=command&param=setkelvinlevel&idx=99&kelvin=1
Range of kelvin parameter: 0…100, 0 is coldest, 100 is warmest

References This API call is called internally by dzVents when using the following device object method:

setKelvin(Kelvin)

Please ensure local access is enabled for 127.0.0.1 or 127.0.0.* (described here). for this to work correctly.
Toggle a switch state between on/off

/json.htm?type=command&param=switchlight&idx=99&switchcmd=Toggle

{
“status” : “OK”,
“title” : “SwitchLight”
}

Scenes / Groups
Get current state of all scenes & groups

/json.htm?type=scenes

Example output:

{
“result” : [
{
“Favorite” : 1,
“HardwareID” : 0,
“LastUpdate” : “2013-09-29 19:11:01”,
“Name” : “My Scene”,
“Status” : “Off”,
“Timers” : “true”,
“Type” : “Scene”,
“idx” : “9”
},
{
“Favorite” : 1,
“HardwareID” : 0,
“LastUpdate” : “2013-09-30 11:49:13”,
“Name” : “My Group”,
“Status” : “Off”,
“Timers” : “false”,
“Type” : “Group”,
“idx” : “3”
}
],
“status” : “OK”,
“title” : “Scenes”
}

Turn a scene / group on or off

/json.htm?type=command&param=switchscene&idx=&switchcmd=

idx = id of your scene/group.
switchcmd = "On", "Off" or "Toggle" (case sensitive!)
Scenes can only be turned On

{
“status” : “OK”,
“title” : “SwitchScene”
}

Add a scene (0)

/json.htm?type=addscene&name=scenename&scenetype=0

Add a group (1)

/json.htm?type=addscene&name=scenename&scenetype=1

Delete a scene or group

/json.htm?type=deletescene&idx=number

List devices in a scene

/json.htm?type=command&param=getscenedevices&idx=number&isscene=true

Add device to a scene

/json.htm?type=command&param=addscenedevice&idx=number&isscene=true&devidx=deviceindex&command=1&level=number&hue=number

Delete device from a scene

/json.htm?type=command&param=deletescenedevice&idx=number

List activation devices of a scene

/json.htm?type=command&param=getsceneactivations&idx=number

Example output:

{
“result”: [
{
“code”: 0,
“codestr”: “-”,
“idx”: 249,
“name”: “Activator device”
},
{
“code”: 0,
“codestr”: “-”,
“idx”: 1048,
“name”: “Another Activator device”
}
],
“status”: “OK”,
“title”: “GetSceneActivations”
}

List timers of a scene

/json.htm?type=scenetimers&idx=number

Example output:

{
“result” : [
{
“Active” : “true”,
“Cmd” : 0,
“Date” : “07-02-2016”,
“Days” : 128,
“Hue” : 0,
“Level” : 100,
“Randomness” : true,
“Time” : “00:01”,
“Type” : 5,
“idx” : “16”
}
],
“status” : “OK”,
“title” : “SceneTimers”
}

Add timer to a scene

/json.htm?type=command&param=addscenetimer&idx=number&active=&timertype=&date=&hour=&min=&randomness=&command=&level=&days=

idx = index of your scene/group.
active = true/false
timertype = 0 = Before Sunrise, 1 = After Sunrise, 2 = On Time, 3 = Before Sunset, 4 = After Sunset, 5 = Fixed Date/Time
date = MM-DD-YYYY
hour = hour
min = minute
randomness = true/false
command = On/Off
level = 0..100 (%)
days = 0x80 = Everyday, 0x100 = Weekdays, 0x200 = Weekends, 0x01 = Mon, 0x02 = Tue, 0x04 = Wed, 0x08 = Thu, 0x10 = Fri, 0x20 = Sat, 0x40 = Sun

Enable/disable/delete specific scene schedule(timer)

Enable specific schedule(timer) for Scenes/Groups

Disable specific schedule(timer) for Scenes/Groups

Delete specific schedule(timer) for Scenes/Groups
Thermostat control
Set Setpoint

/json.htm?type=command&param=setsetpoint&idx=&setpoint=

idx = id of the thermostat
setpoint = value in Celsius (like 20.5)

Server control
Shutdown system

/json.htm?type=command&param=system_shutdown

{
“status” : “OK”,
“title” : “SystemShutdown”
}

Reboot system

/json.htm?type=command&param=system_reboot

{
“status” : “OK”,
“title” : “SystemReboot”
}

Create, delete, rename and disable commands
Create virtual hardware

/json.htm?type=command&param=addhardware&htype=15&port=1&name=Sensors1&enabled=true

afterwards to get the id, either you have your last created id from an index you maintain or sort the hardware page for last ID:

/json.htm?type=hardware

Create a virtual sensor

Temp+Humidity (see below for values)

/json.htm?type=createvirtualsensor&idx=29&sensorname=TempHum&sensortype=82

Electricity (see below for values)

/json.htm?type=createvirtualsensor&idx=29&sensorname=Energy&sensortype=90

and then get the device id from the list:

/json.htm?type=devices&filter=all&used=true&order=Name

1 Pressure (Bar) 0.0 nvalue=BAR (TBC)
2 Percentage 0.0 nvalue=PCT (TBC)
80 TEMP 0.0 svalue=TEMP
81 HUM 1 nvalue=HUM svalue=1 to 3
82 TEMP_HUM 0.0;50;1 svalue=TEMP;HUM;HUM_STATUS
84 TEMP_HUM_BARO 0.0;50;1;1010;1 svalue=TEMP;HUM;HUM_STATUS;BARO;BARO_FCST
85 RAIN 0;0 svalue=RAIN;Rain in mm/h
86 WIND 0;N;0;0;0;0 svalue=WIN_SPD;WIND_DIR;?;?;?;?
87 UV 0;0 svalue= (TBC)
113 RFXMeter 0 Can have several values, another order has to be sent to set the sub type:
type 3 Counter: svalue=COUNTER
type 2 Water: svalue=VOLUME
type 1 Gas:
type 0 Energy:
90 ENERGY 0;0.0 svalue=POWER;ENERGY
249 TypeAirQuality 0 nvalue=PPM

For the RFXMeter, another request is needed to set the utility, url is:

/json.htm?type=setused&idx=DEVICE_ID&name=RFXMeter&switchtype=SUBTYPE_VALUE&used=true

where DEVICE_ID is the device name, and the SUBTYPE_VALUE is one of:

0 for Energy
1 for Gas
2 for Water
3 for Counter

Create a device

IDX = id of your hardware (This number can be found in the hardware tab in the column "IDX")
SENSORNAME = sensor name
DEVICETYPE = type of device (from https://github.com/domoticz/domoticz/blob/development/hardware/hardwaretypes.h or https://github.com/domoticz/domoticz/blob/development/main/RFXtrx.h)
DEVICESUBTYPE = subtype of device (from https://github.com/domoticz/domoticz/blob/development/hardware/hardwaretypes.h or https://github.com/domoticz/domoticz/blob/development/main/RFXtrx.h)

Temp (Type: pTypeTEMP, subType: sTypeTEMP5)

/json.htm?type=createdevice&idx=29&sensorname=Temp5&devicetype=50&devicesubtype=5

Voltage (Type: pTypeGeneral, subType: sTypeVoltage)

/json.htm?type=createdevice&idx=29&sensorname=Voltage0&devicetype=243&devicesubtype=8

Rename hardware

/json.htm?type=command&param=updatehardware&htype=&name=&enabled=&idx=

To get the required data from the hardware first do

/json.htm?type=hardware

Rename device / sensor

/json.htm?type=setused&idx=&name=&used=true

Enable hardware

/json.htm?type=command&param=updatehardware&htype=&name=&enabled=true&port=&idx=

note Use the complete set of parms that you find when entering the enable command on the GUI because if not completely entered it will destroy your hardware table. Test first on a test system !!
Disable hardware

/json.htm?type=command&param=updatehardware&htype=&name=&enabled=false&idx=

To get the required data from the hardware first do

/json.htm?type=hardware

Delete hardware

/json.htm?type=command&param=deletehardware&idx=

Delete a device or sensor

/json.htm?type=setused&used=false&idx=

Update devices/sensors

Note that when you use this &param=udevice option, the device is updated without running the associated on/off script actions.

Expert usage. Directly set device parameters via JSON.
Be careful when firing values to domoticz.db as there is a chance to crash the database if parameters are wrong or missing. First go to the devices tab and notice the device index (idx) of the device you want to change
Temperature

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
TEMP = Temperature

Humidity

/json.htm?type=command&param=udevice&idx=IDX&nvalue=HUM&svalue=HUM_STAT

The above sets the parameters for a Humidity device

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
HUM = Humidity: 45%
HUM_STAT = Humidity_status

Humidity_status can be one of:

0=Normal
1=Comfortable
2=Dry
3=Wet

Barometer

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=BAR;BAR_FOR

The above sets the parameters for a Barometer device from hardware type ‘General’

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
BAR = Barometric pressure
BAR_FOR = Barometer forecast

Barometer forecast can be one of:

0 = Stable
1 = Sunny
2 = Cloudy
3 = Unstable
4 = Thunderstorm

Temperature/humidity

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
TEMP = Temperature
HUM = Humidity (0-100 %)
HUM_STAT = Humidity status

HUM_STAT can be one of:

0=Normal
1=Comfortable
2=Dry
3=Wet

Temperature/humidity/barometer

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT;BAR;BAR_FOR

The above sets the parameters for a Temp+Humidity+Barometer device

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
TEMP = Temperature
HUM = Humidity
HUM_STAT = Humidity status
BAR = Barometric pressure
BAR_FOR = Barometer forecast

Barometer forecast can be one of:

0 = No info
1 = Sunny
2 = Partly cloudy
3 = Cloudy
4 = Rain

Temperature/barometer

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;BAR;BAR_FOR;ALTITUDE

The above sets the parameters for a Temp+Humidity+Barometer device

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
TEMP = Temperature
BAR = Barometric pressure
BAR_FOR = Barometer forecast
ALTITUDE= Not used at the moment, can be 0

Barometer forecast can be one of:
0 = No Info
1 = Sunny
2 = Paryly Cloudy
3 = Cloudy
4 = Rain

Rain

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=RAINRATE;RAINCOUNTER

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
RAINRATE = amount of rain in last hour in [mm x 100]
RAINCOUNTER = continues counter of fallen Rain in [mm]

Soil Moisture

/json.htm?type=command&param=udevice&idx=IDX&nvalue=MOISTURE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
MOISTURE = moisture content in cb 0-200 where:

00 - 09 = saturated, 10 - 19 = adequately wet, 20 - 59 = irrigation advice, 60 - 99 = irrigation, 100-200 = Dangerously dry,
Wind

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=WB;WD;WS;WG;22;24

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
WB = Wind bearing (0-359)
WD = Wind direction (S, SW, NNW, etc.)
WS = 10 * Wind speed [m/s]
WG = 10 * Gust [m/s]
22 = Temperature
24 = Temperature Windchill

UV

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=UV;TEMP

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
UV = Float (example: 2.1) with current UV reading.

TEMP = temperature (only for UV subtype TFA (3), else specify 0)

Don’t loose the “;0” at the end - without it database may corrupt.

If no temp is in use, specify 0 as temperature
Counter

/json.htm?type=command&param=udevice&idx=IDX&svalue=COUNTER

IDX = id of your device (this number can be found in the devices tab in the column "IDX")
COUNTER = Integer of the overall total volume.

When there is a counter created, there is a possibility to change the units by clicking on “Change” at the utility tab.

Energy (kWh)
Gas (m3)
Water (m3)
Counter (no unit)

The counter will be treated with the divider which is defined in the parameters in the application settings. For example if the counter is set to “Water” and the value is passed as liters, the divider must set to 1000 (as the unit is m3). The device displays 2 values:

The status is the overall total volume (or counter).
The volume (or counter) of the day (in the top right corner).

The today’s volume (or counter) is calculated from the total volume (or counter).
Electricity (instant and counter)

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=POWER;ENERGY

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
POWER = current power
ENERGY = cumulative energy in Watt-hours (Wh) This is an incrementing counter. (if you choose as type "Energy read : Computed", this is just a "dummy" counter, not updatable because it's the result of DomoticZ calculs from POWER)

Managed counter

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=COUNTER;USAGE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
COUNTER = absolute counter energy (Wh, can be set to -1 if unknown or unused, in that case it won't show on dashboard or in logs)
USAGE = energy usage in Watt-hours (Wh).

Managed counter will not transfer automatically every day data from device status to history log, it’s up to an external script or plugin to insert data in history log database (useful to show non realtime consumption of energy provider that put energy information “in the cloud”).

To insert data in history log:

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=COUNTER;USAGE;DATE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
COUNTER = absolute counter energy (Wh, can be set to -1 if unknown or unused, in that case it won't show on dashboard or in logs)
USAGE = energy usage in Watt-hours (Wh)
DATE = date with %Y-%m-%d format (for instance 2019-09-24) to put data in last week/month/year history log, or "%Y-%m-%d %H:%M:%S" format (for instance 2019-10-03 14:00:00) to put data in last days history log

Electricity Current/Ampere 3 Phase

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=Ampere_1;=Ampere_2;=Ampere_3;

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
Ampere_1 = Ampere value Phase 1
Ampere_2 = Ampere value Phase 2
Ampere_3 = Ampere value Phase 3

Electricity P1 smart meter

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
USAGE1= energy usage meter tariff 1, This is an incrementing counter
USAGE2= energy usage meter tariff 2, This is an incrementing counter
RETURN1= energy return meter tariff 1, This is an incrementing counter
RETURN2= energy return meter tariff 2, This is an incrementing counter
CONS= actual usage power (Watt)
PROD= actual return power (Watt)

USAGE and RETURN are counters (they should only count up).
For USAGE and RETURN supply the data in total Wh with no decimal point.
(So if your meter displays f.i. USAGE1= 523,66 KWh you need to send 523660)
Air quality

/json.htm?type=command&param=udevice&idx=IDX&nvalue=PPM

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
PPM = CO2-concentration

Pressure

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=BAR

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
BAR = Pressure in Bar

Create sensor under Hardware > Dummy > Create virtual sensor
Percentage

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=PERCENTAGE

IDX = id of your device (this number can be found in the devices tab in the column "IDX")
PERCENTAGE = Percentage

Visibility

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=VISIBILITY

IDX = id of your device (this number can be found in the devices tab in the column "IDX")
VISIBILITY = in KM

Gas

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=USAGE

USAGE= Gas usage in liter (1000 liter = 1 m³)

So if your gas meter shows f.i. 145,332 m³ you should send 145332.
The USAGE is the total usage in liters from start, not f.i. the daily usage.
Lux

/json.htm?type=command&param=udevice&idx=IDX&svalue=VALUE

IDX = device ID of Lux device
VALUE = value of luminosity in Lux (INTEGER/FLOAT)

Voltage

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=VOLTAGE

IDX = device ID of Voltage device
VALUE = value of voltage sensor in Volts

Create sensor under Hardware > Dummy > Create virtual sensor
Text sensor

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEXT

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
TEXT = Text you want to display

Alert sensor

/json.htm?type=command&param=udevice&idx=IDX&nvalue=LEVEL&svalue=TEXT

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
TEXT = Text you want to display

Distance sensor

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=DISTANCE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
DISTANCE = distance in cm or inches, can be in decimals. For example 12.6

Selector Switch

/json.htm?type=command&param=switchlight&idx=IDX&switchcmd=Set%20Level&level=LEVEL

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
LEVEL = level of your selector (This number can be found in the edit selectors page, in the column "Level", 0 = Off)

Custom Sensor

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=VALUE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
VALUE = Value (like 12.345)

Note on counters

Usually, counters are updated daily to feed week/month/year history log views. Starting version 4.11774, if you want to disable that behavior to control everything from an external script or a plugin (already the case for managed counter), you can set the “DisableLogAutoUpdate” device option to “true”, for instance in a Python plugin:

Domoticz.Device(Name=“MyCounter”, Unit=1, Type=0xfa, Subtype=0x01, Options={“DisableLogAutoUpdate” : “true”).Create()

Starting version 4.11774, you can too directly insert data in in history log. Set the “AddDBLogEntry” device option to “true”, for instance in a Python plugin:

Domoticz.Device(Name=“MyCounter”, Unit=1, Type=0xfa, Subtype=0x01, Options={“AddDBLogEntry” : “true”).Create()

Then, depending on counters, you can insert values in history log. For most counters:

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=COUNTER;USAGE;DATE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
COUNTER = absolute counter energy (Wh)
USAGE = energy usage in Watt-hours (Wh)
DATE = date with %Y-%m-%d format (for instance 2019-09-24) to put data in last week/month/year history log, or "%Y-%m-%d %H:%M:%S" format (for instance 2019-10-03 14:00:00) to put data in last days history log

For multi meters (P1 Smart Meter, CM113, Electrisave and CM180i):

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD;DATE

IDX = id of your device (This number can be found in the devices tab in the column "IDX")
USAGE1= energy usage meter tariff 1, This is an incrementing counter
USAGE2= energy usage meter tariff 2, This is an incrementing counter
RETURN1= energy return meter tariff 1, This is an incrementing counter
RETURN2= energy return meter tariff 2, This is an incrementing counter
CONS= actual usage power (Watt)
PROD= actual return power (Watt)
DATE = date with %Y-%m-%d format (for instance 2019-09-24) to put data in last week/month/year history log, or "%Y-%m-%d %H:%M:%S" format (for instance 2019-10-03 14:00:00) to put data in last days history log

or

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD;COUNTER1;COUNTER2;COUNTER3;COUNTER4;DATE

as previously, plus absolute counter values
Additional parameters (signal level & battery level)

There are two additional parameters for the above commands, to specify the signal level (default 12) and the battery level (default 255)

battery level 255 = no battery device, else 0-100
example: &rssi=10&battery=89
Security
Get Password

to be able to set the security status, the (encoded) password is required.

/json.htm?type=settings

{
“AcceptNewHardware”: 0,
“ActiveTimerPlan”: 2,
“AllowWidgetOrdering”: 1,
“AuthenticationMethod”: 1,
“BatterLowLevel”: 0,
“CM113DisplayType”: 0,

“SecPassword”: “bfa2bea3x”,

“WindUnit”: 4,
“cloudenabled”: true,
“status”: “OK”,
“title”: “settings”
}

get the value from key “SecPassword” ;for the purpose of this wiki we assume the value read is “bfa2bea3x”
Get security state

/json.htm?type=command&param=getsecstatus

{
“secondelay”: 2,
“secstatus”: 1,
“status”: “OK”,
“title”: “GetSecStatus”
}

where secstatus is

0 = Disarmed
1 = Arm Home
2 = Arm Away
3 = Unknown

Set security state

/json.htm?type=command&param=setsecstatus&secstatus=&seccode=bfa2bea3x

{
“status”: “OK”,
“title”: “SetSecStatus”
}

User variables
Add a new variable

/json.htm?type=command&param=adduservariable&vname=USERVARIABLENAME&vtype=USERVARIABLETYPE&vvalue=USERVARIABLEVALUE

USERVARIABLENAME with the name of the variable
USERVARIABLETYPE is a digit (0,1,2,3,4) or a string (>= 4.10906) (Integer, Float, String, Date, Time)

0 = Integer, e.g. -1, 1, 0, 2, 10
1 = Float, e.g. -1.1, 1.2, 3.1
2 = String
3 = Date in format DD/MM/YYYY
4 = Time in 24 hr format HH:MM

USERVARIABLEVALUE with the value

All formats are checked by the api, when the variable does not match the required format it is not stored.
Update an existing variable

/json.htm?type=command&param=updateuservariable&vname=USERVARIABLENAME&vtype=USERVARIABLETYPE&vvalue=USERVARIABLEVALUE

Remember to change:

USERVARIABLENAME with the name of your variable
USERVARIABLETYPE according to the table from "Add a new variable"
USERVARIABLEVALUE with the new value

Note: events will only be triggered when the variabletype and variablename are not changed by the update command.
List all variables

/json.htm?type=command&param=getuservariables

List one variable

/json.htm?type=command&param=getuservariable&idx=IDX

IDX = id of your variable (This number can be found using the "List all variables" call above)

Delete a variable

/json.htm?type=command&param=deleteuservariable&idx=IDX

IDX = id of your variable (This number can be found using the "List all variables" call above)

trigger dzVents script using customEvent dzVents 3.0.0

/json.htm?type=command&param=customevent&event=MyEvent&data=MyData
Room Plans
List all rooms

/json.htm?type=plans&order=name&used=true

List all devices in a room

IDX = id of your room

/json.htm?type=command&param=getplandevices&idx=IDX

Show idx, name of the device like:

{
“result”: [
{
“DevSceneRowID”: “492”,
“Name”: “device name”,
“devidx”: “492”,
“idx”: “9”,
“order”: “9”,
“type”: 0
}
],
“status”: “OK”,
“title”: “GetPlanDevices”
}

/json.htm?type=devices&plan=IDX

show details of the devices like

{
“ActTime”: 1569909986,
“AstrTwilightEnd”: “21:14”,
“AstrTwilightStart”: “05:50”,
“CivTwilightEnd”: “19:54”,
“CivTwilightStart”: “07:09”,
“DayLength”: “11:39”,
“NautTwilightEnd”: “20:34”,
“NautTwilightStart”: “06:30”,
“ServerTime”: “2019-10-01 08:06:26”,
“SunAtSouth”: “13:32”,
“Sunrise”: “07:42”,
“Sunset”: “19:21”,
“app_version”: “4.11337”,
“result”: [
{
“AddjMulti”: 1,
“AddjMulti2”: 1,
“AddjValue”: 0,
“AddjValue2”: 0,
“BatteryLevel”: 255,
“CustomImage”: 0,
“Data”: “19.5 C, (13.5 C), PermanentOverride”,
“Description”: “”,
“Favorite”: 1,
“HardwareID”: 30,
“HardwareName”: “Evohome”,
“HardwareType”: “Evohome via Web API”,
“HardwareTypeVal”: 75,
“HaveTimeout”: false,
“ID”: “1168736”,
“LastUpdate”: “2019-10-01 08:05:35”,
“Name”: “Device name”,
“Notifications”: “false”,
“PlanID”: “4”,
“PlanIDs”: [
4
],
“Protected”: false,
“SetPoint”: 13.5,
“ShowNotifications”: true,
“SignalLevel”: 10,
“Status”: “PermanentOverride”,
“SubType”: “Zone”,
“Temp”: 19.5,
“Timers”: “false”,
“Type”: “Heating”,
“TypeImg”: “override_mini”,
“Unit”: 7,
“Used”: 1,
“XOffset”: “0”,
“YOffset”: “0”,
“idx”: “492”
}
],
“status”: “OK”,
“title”: “Devices”
}

History
Switch devices

/json.htm?type=lightlog&idx=IDX

Delete

/json.htm?type=command&param=clearlightlog&idx=
Text devices

/json.htm?type=textlog&idx=IDX

Delete

/json.htm?type=command&param=clearlightlog&idx=
Temperature

/json.htm?type=graph&sensor=temp&idx=IDX&range=day
/json.htm?type=graph&sensor=temp&idx=IDX&range=month
/json.htm?type=graph&sensor=temp&idx=IDX&range=year

Setpoint

See Temperature

Energy, Gas, Water

Instantaneous consumption :

/json.htm?type=graph&sensor=counter&idx=IDX&range=day&method=1

Totals by period :

/json.htm?type=graph&sensor=counter&idx=IDX&range=day
/json.htm?type=graph&sensor=counter&idx=IDX&range=month
/json.htm?type=graph&sensor=counter&idx=IDX&range=year

Device Timer Schedules
Get all schedules (timers)

…/json.htm?type=schedules

Typical result :

{
“result” : [
{
“Active” : “true”,
“Date” : “”,
“Days” : 128,
“DevName” : “Porch Light”,
“DeviceRowID” : 52,
“Hue” : 0,
“IsThermostat” : “false”,
“Level” : 100,
“MDay” : 0,
“Month” : 0,
“Occurence” : 0,
“Randomness” : “false”,
“ScheduleDate” : “2016-04-01 20:33:00”,
“Time” : “00:20”,
“TimerCmd” : 0,
“TimerID” : 9,
“TimerType” : 4,
“TimerTypeStr” : “After Sunset”,
“Type” : “Device”
},

Get all schedules(timers) for Devices

…/json.htm?type=schedules&filter=device

Get all schedules(timers) for Scenes

…/json.htm?type=schedules&filter=scene

Get all schedules(timers) for Thermostats

…/json.htm?type=schedules&filter=thermostat

Enable specific schedule(timer) for Devices

…/json.htm?type=command&param=enabletimer&idx=timerID

Disable specific schedule(timer) for Devices

…/json.htm?type=command&param=disabletimer&idx=timerID

Delete a specific schedule(timer) for Devices

…/json.htm?type=command&param=deletetimer&idx=timerID

Enable specific schedule(timer) for Thermostats

…/json.htm?type=command&param=enablesetpointtimer&idx=timerID

Disable specific schedule(timer) for Thermostats

…/json.htm?type=command&param=disablesetpointtimer&idx=timerID

Delete a specific schedule(timer) for Thermostats

…/json.htm?type=command&param=deletesetpointtimer&idx=timerID

Update parameters for a specific schedule(timer) for Devices

…/json.htm?type=command&param=updatetimer&idx=timerID&active=true&timertype=3&hour=0&min=20&randomness=true&command=0&days=12345

idx = timerID
active = true/false
timertype = 0 = Before Sunrise, 1 = After Sunrise, 2 = On Time, 3 = Before Sunset, 4 = After Sunset, 5 = Fixed Date/Time
hour = hour
min = minute
randomness = true/false
command = On=0 / Off=1 (inverted logic)
days = 1=Mon, 2=Tue, 3=Wed, 4=Thurs, 5=Fri, 6=Sat, 7=Sun

Create a new schedule(timer) for an existing device

…/json.htm?type=command&param=addtimer&idx=DeviceRowID&active=true&timertype=2&hour=0&min=20&randomness=false&command=0&days=1234567

idx = DeviceRowID = index of your device (other commands use a timerID as idx but here we use DeviceRowID).
active = true/false
timertype = 0 = Before Sunrise, 1 = After Sunrise, 2 = On Time, 3 = Before Sunset, 4 = After Sunset, 5 = Fixed Date/Time
hour = hour
min = minute
randomness = true/false
command = On=0 / Off=1 (inverted logic)
days = 1=Mon, 2=Tue, 3=Wed, 4=Thurs, 5=Fri, 6=Sat, 7=Sun

Clear all schedules(timers) for a particular device

…/json.htm?type=command&param=cleartimers&idx=DeviceRowID

idx = DeviceRowID = index of your device (other commands use a timerID as idx but here we use DeviceRowID).

Enable specific schedule(timer) for Scenes/Groups

…/json.htm?type=command&param=enablescenetimer&idx=timerID

Disable specific schedule(timer) for Scenes/Groups

…/json.htm?type=command&param=disablescenetimer&idx=timerID

Delete a specific schedule(timer) for Scenes/Groups

…/json.htm?type=command&param=deletescenetimer&idx=timerID

LMS and Kodi (Media Players)

While both Logitech Media Server and Kodi can be controlled by JSON RPC commands sent directly to the URL of the LMS server or Kodi instance, it can be useful to use Domoticz as a tunnel/proxy to send a number of widely-used commands because you may have an external port already open for Domoticz and because Domoticz also supports HTTPS.
LMS

/json.htm?type=command&param=lmsmediacommand&idx=nnn&action=ACTION

where ACTION can be: Left, Right, Up, Down, Favorites, Browse, NowPlaying, Shuffle, Repeat, Play, Pause, Stop, Rewind, Forward, Mute, VolumeUp, VolumeDown, PowerOn and PowerOff.
Kodi

/json.htm?type=command&param=kodimediacommand&idx=nnn&action=ACTION

where ACTION can be: PlayPause, Stop, FastForward, BigStepForward, Rewind, BigStepBack, ShowSubtitles, FullScreen, VolumeUp, VolumeDown, ChannelUp, ChannelDown, Channels Home, Back, ContextMenu, Info, Select, Down, Right, Up, Left
Evohome

These commands work regardless of which of the 3 implementation-modes for Evohome you have chosen for your system (WebAPI, USB device, Scripting). Some of them will also work for e.g. the Honeywell Round WiFi thermostat.
Updating the evohome controller mode

…/json.htm?type=command&param=switchmodal&idx=&status=&action=&ooc=

<idx> id number of the evohome controller device in Domoticz
<status> Auto, AutoWithReset, AutoWithEco, Away, DayOff, Custom, HeatingOff
<action> (1 = run on action script, 0 = disable)
<ooc> (1 = only trigger the event & log on change, 0 = always trigger & log)

Specify an until date

…/json.htm?type=command&param=switchmodal&idx=&status=&action=&ooc=&until=

as above
<until> ISO date time to run until. Format example 2018-09-15T15:53:00 or 2018-09-15T15:53:00+01:00 with timezone.

Note: most controller modes do not support the time part of the ISO data and will only act upon the date portion - this will require at least the next day to be reflected in the date number to successfully trigger an update.
Updating a zone setpoint

…/json.htm?type=setused&idx=&setpoint=&mode=&used=true

<idx> id number of the relevant evohome zone device in Domoticz
<setpoint> set point in degrees (will be ignored for Auto)
<mode> Auto, TemporaryOverride, PermanentOverride, FollowSchedule
used must be true

Specifying a date/time for zone TemporaryOverride

…/json.htm?type=setused&idx=&setpoint=&mode=TemporaryOverride&until=&used=true

as above
<until> ISO date time for the set point override. Format example 2018-09-15T15:53:00 or 2018-09-15T15:53:00+01:00 with timezone.

In this case, any combination of a date portion and a time portion that are in the future will meet with success.
Turning HotWater ON/OFF

…/json.htm?type=setused&idx=&setpoint=&state=&mode=&used=true

<idx> id number of the evohome DHW temp device in Domoticz
<setpoint> set point in degrees (will be ignored)
<state> On, Off
<mode> Auto, TemporaryOverride, PermanentOverride, FollowSchedule
used must be true

Configuring zwave devices
Listing zwave node parameters

…/json.htm?type=openzwavenodes&idx=controlleridx

controlleridx = the idx of your OpenZWave USB controller device, as listed under the 'Setup --> Hardware' tab.

Example output:

{
“NodesQueried” : true,
“ownNodeId” : 1,
“result” : [
{
“Description” : “Neo CoolCam Door/Window Detector”,
“HaveUserCodes” : false,
“HomeID” : 3554707869,
“IsPlus” : true,
“LastUpdate” : “2018-08-04 20:09:02”,
“Manufacturer_id” : “0x0258”,
“Manufacturer_name” : “Neo CoolCam”,
“Name” : “Garage DOor”,
“NodeID” : 40,
“PollEnabled” : “false”,
“Product_id” : “0x1082”,
“Product_name” : “Door/Window Detector”,
“Product_type” : “0x0003”,
“State” : “Sleeping”,
“Version” : 4,
“config” : [
{
“LastUpdate” : “2018-08-01 09:06:45”,
“help” : “This configuration parameter that can be used to adjust the amount of delay before the OFF command is transmitted. This parameter can be configured with the value of 0 through 65535, where 0 means send OFF command immediately and 65535 means 65535 seconds of delay.”,
“index” : 1,
“label” : “Configuring the OFF Delay”,
“type” : “short”,
“units” : “second”,
“value” : “0”
},
{
“LastUpdate” : “2018-08-01 09:06:45”,
“help” : “Basic Set Command will be sent where contains a value when the door/window is opened or closed, the receiver will take it for consideration; for instance, if a lamp module is received the Basic Set Command of which value is decisive as to how bright of dim level of lamp module shall be.”,
“index” : 2,
“label” : “Basic Set Level”,
“type” : “byte”,
“units” : “”,
“value” : “255”
},
{
“LastUpdate” : “2018-08-03 07:55:52”,
“help” : “”,
“index” : 2000,
“label” : “Wake-up Interval”,
“type” : “int”,
“units” : “Seconds”,
“value” : “43200”
}
],
“idx” : “11”
},
{
“Description” : “FIBARO System FGWPE/F Wall Plug”,
“HaveUserCodes” : false,
“HomeID” : 3554707869,
“IsPlus” : false,
“LastUpdate” : “2018-08-05 12:12:24”,
“Manufacturer_id” : “0x010f”,
“Manufacturer_name” : “FIBARO System”,
“Name” : “Studio”,
“NodeID” : 5,
.
.
.

Note the node_idx towards the end of each device’s entry (the “idx” : “11” in the example above for the Neo CoolCam Door/Window Detector). You don’t see this node_idx in the regular devices tab for Domoticz, but it is the idx you’ll need when changing a parameter through JSON (next section).

Getting the battery levels

…/json.htm?type=command&param=zwavegetbatterylevels&idx=controlleridx

controlleridx = the idx of your OpenZWave USB controller device, as listed under the 'Setup --> Hardware' tab.

Example output:

{
“result” : [
{
“battery” : 255,
“nodeID” : 17,
“nodeName” : “Designlamp bij TV”
},
{
“battery” : 255,
“nodeID” : 19,
“nodeName” : “Lichtknopje voorkamer”
},
{
“battery” : 100,
“nodeID” : 33,
“nodeName” : “Rookmelder”
}
],
“status” : “OK”,
“title” : “GetBatteryLevels”
}

Note: a Battery level of 255 indicates either a non battery powered device, or a battery powered device which has not yet send a battery measurement to OpenZWave yet.
Changing a zwave device parameter

…/json.htm?type=command&param=applyzwavenodeconfig&idx=node_idx&valuelist=plist

node_idx = the value found by searching through the output of openzwavenodes for the node in question (see above)
plist = the (partially) URI encoded and BASE64 encoded parameter list

The plist entries start with an unencoded decimal item number preceded by and followed by an underscore (e.g. 7), followed by the correctly-encoded string. You can check out the encodings at the following links: base64decode and at urlencode. In Base64, ‘Enable’ is written as ‘RW5hYmxl’, so it looks odd but it’s easy once you grasp it.

For example, if you are configuring a NEO Coolcam Siren through JSON,

…/json.htm?type=command&param=applyzwavenodeconfig&idx=10&valuelist=7_QWxhcm0gbXVzaWM%3D

would change parameter 7 (Configure Default Siren On Mode) to ‘Alarm music’, while

…/json.htm?type=command&param=applyzwavenodeconfig&idx=10&valuelist=7_RG9vciBiZWxsIG11c2lj%3D

would change it to ‘Door bell music’ (because ‘RG9vciBiZWxsIG11c2lj’ is the result of Base64 encoding ‘Door bell music’). Note: Any ‘%3D’ and such in the plist are the result of URI encoding an ‘=’ or other non-alphanumeric character.

The easiest way to learn about this is to change a zwave device parameter manually using your browser while you have developer tools enabled (hit ‘ctrl-shift-i’ in Chrome). Look under the network tab at the JSON sent back by the browser to Domoticz when you click on ‘Apply Configuration for This Device’.

…/json.htm?type=command&param=applyzwavenodeconfig&idx=10&valuelist=3_MjU1_1_SGlnaA%3D%3D_
2_MSBtaW51dGU%3D_4_TG93_5_MTA%3D_6_MQ%3D%3D_7_QWxhcm0gbXVzaWM%3D_8_RW5hYmxl_9_RGlzYWJsZQ%3D%3D_

The browser will actually send the full parameter list to Domoticz, including the unchanged values of any parameters you didn’t alter. If you modify one of them, however, you’ll see that edit reflected in the Base64-encoded JSON string.

Screenshotjsondebug.png
Language-specific JSON examples

The following tiny code snippets demonstrate the syntax for using JSON with Domoticz from some popular programming languages.
Bash

#!/bin/bash
curl -s ‘http://192.168.178.12:8080/json.htm?type=devices&rid=104’ | jq .result[0].Temp | sed ‘s/"//g’ | awk ‘{ print $1 }’

PHP

#!/usr/bin/php

<?php $json_string = file_get_contents("http://192.168.178.12:8080/json.htm?type=devices&rid=110"); $parsed_json = json_decode($json_string, true); $test_link = "/home/pi/output.txt"; $test_data = fopen ($test_link, "w+"); fwrite ($test_data, print_R($parsed_json, TRUE)); fclose ($test_data); ?>

Python

#!/usr/bin/python

import urllib
import urllib2
import requests

url = ‘http://192.168.178.12:8080/json.htm?type=command&param=udevice&nvalue=0&idx=’+idx+’&svalue=’+sval
try:
request = urllib2.Request(url)
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
print e.code; time.sleep(60)
except urllib2.URLError, e:
print e.args; time.sleep(60)

Perl

#!/usr/bin/perl

use LWP::UserAgent;
use JSON::XS;

$url{domo}=>‘http://192.168.178.12:8080’;
$idx=301;

$ua=LWP::UserAgent->new; $ua->timeout(5);
retrieve=retrieve=ua->get(KaTeX parse error: Expected 'EOF', got '&' at position 34: …tm?type=devices&̲rid='.idx);
res=res=retrieve->decoded_content;
if ($retrieve->is_success) { jres=JSON::XS>new>allownonref>decode(jres = JSON::XS->new->allow_nonref->decode(res) } else { warn $retrieve->status_line };
state=state=$jres{result}[0]->{Status}; # ‘On’, ‘Off’, ‘Open’, ‘Closed’, etc
print “The switch state for idx idxiscurrentlyidx is currently 'state’\n”;

Navigation menu

Log in

Page
Discussion

Read
View source
View history

Search

Wiki Main page
Domoticz Website
Domoticz Forum
Domoticz Github
Compatible Products
Random page

Special Pages

Special Pages
All Pages
Categories
Recent Changes

Tools

What links here
Related changes
Special pages
Printable version
Permanent link
Page information

This page was last edited on 4 March 2020, at 15:01.

Privacy policy
About Domoticz
Disclaimers

Powered by MediaWiki	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章