以下是我從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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=sendnotification&subject=SUBJECT&body=THEBODY
You can post a notification to a specific notification system with:
/json.htm?type=command¶m=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¶m=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¶m=switchlight&idx=99&switchcmd=On
Turn a light/switch off
/json.htm?type=command¶m=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¶m=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 ¶m=udevice option instead (see update-section below).
Set a dimmable light to a certain level
/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=getscenedevices&idx=number&isscene=true
Add device to a scene
/json.htm?type=command¶m=addscenedevice&idx=number&isscene=true&devidx=deviceindex&command=1&level=number&hue=number
Delete device from a scene
/json.htm?type=command¶m=deletescenedevice&idx=number
List activation devices of a scene
/json.htm?type=command¶m=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¶m=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¶m=setsetpoint&idx=&setpoint=
idx = id of the thermostat
setpoint = value in Celsius (like 20.5)
Server control
Shutdown system
/json.htm?type=command¶m=system_shutdown
{
“status” : “OK”,
“title” : “SystemShutdown”
}
Reboot system
/json.htm?type=command¶m=system_reboot
{
“status” : “OK”,
“title” : “SystemReboot”
}
Create, delete, rename and disable commands
Create virtual hardware
/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=deletehardware&idx=
Delete a device or sensor
/json.htm?type=setused&used=false&idx=
Update devices/sensors
Note that when you use this ¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=udevice&idx=IDX&svalue=VALUE
IDX = device ID of Lux device
VALUE = value of luminosity in Lux (INTEGER/FLOAT)
Voltage
/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=setsecstatus&secstatus=&seccode=bfa2bea3x
{
“status”: “OK”,
“title”: “SetSecStatus”
}
User variables
Add a new variable
/json.htm?type=command¶m=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¶m=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¶m=getuservariables
List one variable
/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=clearlightlog&idx=
Text devices
/json.htm?type=textlog&idx=IDX
Delete
/json.htm?type=command¶m=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¶m=enabletimer&idx=timerID
Disable specific schedule(timer) for Devices
…/json.htm?type=command¶m=disabletimer&idx=timerID
Delete a specific schedule(timer) for Devices
…/json.htm?type=command¶m=deletetimer&idx=timerID
Enable specific schedule(timer) for Thermostats
…/json.htm?type=command¶m=enablesetpointtimer&idx=timerID
Disable specific schedule(timer) for Thermostats
…/json.htm?type=command¶m=disablesetpointtimer&idx=timerID
Delete a specific schedule(timer) for Thermostats
…/json.htm?type=command¶m=deletesetpointtimer&idx=timerID
Update parameters for a specific schedule(timer) for Devices
…/json.htm?type=command¶m=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¶m=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¶m=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¶m=enablescenetimer&idx=timerID
Disable specific schedule(timer) for Scenes/Groups
…/json.htm?type=command¶m=disablescenetimer&idx=timerID
Delete a specific schedule(timer) for Scenes/Groups
…/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=applyzwavenodeconfig&idx=10&valuelist=7_QWxhcm0gbXVzaWM%3D
would change parameter 7 (Configure Default Siren On Mode) to ‘Alarm music’, while
…/json.htm?type=command¶m=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¶m=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¶m=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);
ua->get(KaTeX parse error: Expected 'EOF', got '&' at position 34: …tm?type=devices&̲rid='.idx);
retrieve->decoded_content;
if ($retrieve->is_success) { res) } else { warn $retrieve->status_line };
$jres{result}[0]->{Status}; # ‘On’, ‘Off’, ‘Open’, ‘Closed’, etc
print “The switch state for idx 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