Following devices are supported:
- Panel heaters - Generation 3.
- Convection heaters - Generation 3.
- Oil heaters - Generation 3.
- Wi-Fi Socket - Generation 3.
Generation 3 heaters expose HTTP server, with a defined REST API. Local HTTP server works both when the device is connected to an existing WiFi network (to a router) or when the device is configured as an Access Point.
In the first scenario, the device IP address can be found in the router clients list.
In most cases, it is something like 192.168.1.105 or 10.0.0.95, depending on the local network configuration.
Once you have an IP address, you can just type it in a web browser (assuming your device is connected to the same WiFi network) to see the main page. It contains a summary of the heater status and reference to this document.
In the Access Point mode the heater has IP address 192.168.4.1.
All API requests are made by sending a HTTP request using one of the following methods, depending on the action being taken:
POSTcreate a resource,GETget a resource or list of resources.
Request data is passed as a JSON file content in the request body. Response data is also returned as a JSON file, with the scheme described below.
Each response will include aresult (result will be an object for single-record queries and an array for list queries) and status message. The status message contain the information of the result of the processing request. The list of status codes can be found in HTTP Response Codes. The result contains the result of a successful request. For example, a request to the GET status resource might return this:
{
"name": "panel heater gen. 3",
"custom_name": "",
"version": "0x210927",
"operation_key": "",
"mac_address": "XX:XX:XX:XX:XX:XX",
"status": "ok"
}Each response will be returned the field status with one of the following description:
ok- the request was successful,Failed to parse message body- the request body is incorrect or the parameters are invalid,Failed to execute the request- there was a problem with the processing request,Length of request body too long- the length of the request body is to long,Failed to create response body- there was a problem with the processing respone.
We provide a Postman collection with a set of requests that introduce the basic concepts of the API. The Postman collection and more information are available here. In the collection {{heater_addresss}} is the variable which determines the IP address of the device.
After setting API key with POST/set-api-key every request on every endpoint would need to contain this key as header. This operation (settign API key) triggers product to restart to change HTTP server to HTTPS server. That server uses self-signed certificate which can generate some warning massages but will provide better security.
Header's key must be "Authentication" and it's value should be API key.
GET/statusPOST/soft-resetPOST/hard-resetPOST/rebootGET/temperature-calibration-offsetPOST/temperature-calibration-offsetGET/control-statusGET/operation-modePOST/operation-modeGET/commercial-lockPOST/commercial-lockGET/child-lockPOST/child-lockGET/open-windowPOST/open-windowGET/weekly-programPOST/weekly-programGET/non-repeatable-timersPOST/non-repeatable-timersGET/display-unitPOST/display-unitGET/set-temperaturePOST/set-temperatureGET/oil-heater-powerPOST/oil-heater-powerGET/predictive-heating-typePOST/predictive-heating-typePOST/overwrite-weekly-programGET/vacation-modePOST/vacation-modeGET/timezone-offsetPOST/timezone-offsetPOST/set-temperature-in-independent-mode-nowGET/additional-socket-modePOST/additional-socket-mode
GET/pid-parametersPOST/pid-parametersGET/cloud-communicationPOST/cloud-communicationPOST/ota-updateGET/config-parameterPOST/config-parameterPOSTpost/max-heater-powerPOST/ablecloud-messageGET/scan-wifiPOST/device-configGET/hysterersis-parametersPOST/hysterersis-parametersGET/limited-heating-powerPOST/limited-heating-powerGET/controller-typePOST/controller-typePOST/set-custom-namePOST/increase-set-temperaturePOST/decrease-set-temperaturePOST/set-api-keyGET/commercial-lock-customizationPOST/commercial-lock-customization
Here, we provide example Python scripts which can control the Millheat heater gen. 3 via the REST API:
- examples/python/basic_control.py script queries the current control status to obtain current temperature and control signal (how much the heater is heating). Then it changes the set temperature every minute.
- examples/python/temperature_control.py script queries the status of the status device and set and get the temperature in a given temperature type. Then it changes the set temperature every minute.
- examples/python/timers.py script sets a few timers scheduled for the next few minutes, and queries the status to confirm the proper behavior. Note that the script doesn't need to keep running to have the timers working - they are stored and executed inside the device.
We also provide a simple example to control the Millheat heater gen. 3 with a Bash script:
- In examples/bash/query_ambient_temperature.sh script the ambient temperature is returned every second.
Return a quick summary of the device information.
| Field | Type | Description |
|---|---|---|
| name | string | the name of the device |
| custom_name | string | the custom name of the device |
| version | string | the API version number |
| operation_key | string | if there is some operation problem (like broken temperature sensor), it may be reported in this field |
| mac_address | string | device's MAC (Media Access Control) address |
-
Postman:
GET http://{{heater_address}}/statusRequest body: empty
-
Curl:
curl -X GET -H "Content-Type: application/json" http://{{heater_address}}/status
{
"name": "panel heater gen. 3",
"custom_name": "",
"version": "0x210927",
"operation_key": "",
"mac_address": "XX:XX:XX:XX:XX:XX",
"status": "ok"
}Perform a soft-reset of the device (configuration).
-
Postman:
POST http://{{heater_address}}/soft-resetRequest body: empty
The soft-reset performs before sending response.
Perform a hard-reset of the device.
-
Postman:
POST http://{{heater_address}}/hard-resetRequest body: empty
The hard-reset performs before sending response.
Perform a reboot of the heater control MCU
-
Postman:
POST http://{{heater_address}}/rebootRequest body: empty
The reboot performs before sending response.
Return the current value of temperature sensor calibration offset.
| Field | Type | Description |
|---|---|---|
| value | float | the calibration offset value in Celsius degrees |
-
Postman:
GET http://{{heater_address}}/temperature-calibration-offsetRequest body: empty
-
Curl:
curl -X GET -H "Content-Type: application/json" http://{{heater_address}}/temperature-calibration-offset
{
"value": 2.5,
"status": "ok"
}Set a new value of temperature sensor calibration offset.
| Field | Type | Description |
|---|---|---|
| value | float | the calibration offset value in Celsius degrees |
-
Postman:
POST http://{{heater_address}}/temperature-calibration-offsetRequest body:
{ "value": 2 } -
Curl:
curl -X POST -H "Content-Type: application/json" -d '{"value": 2}' http://{{heater_address}}/temperature-calibration-offset
{
"status": "ok"
}Return detailed information about the current device state and control status.
| Field | Type | Description |
|---|---|---|
| ambient_temperature | float | the temperature measured by sensor in Celsius degrees (with calibration offset value included) |
| current_power | float | the current heating power in Watts |
| control_signal | float | the control signal of the PID regulator (0-100%) |
| lock_active | string | the lock status (see ELockStatus) |
| open_window_active_now | string | the open widows status (see EOpenWindowStatus) |
| raw_ambient_temperature | float | the temperature measured by sensor in Celsius degrees without calibration offset value |
| set_temperature | float | the current set temperature in Celsius degrees |
| switched_on | float | true if the device is switched on - whether it is set to working, with heating |
| connected_to_cloud | bool | the information whether device has connection with the cloud |
| operation_mode | string | the current mode of operation (see EOprationMode) |
-
Postman:
GET http://{{heater_address}}/control-statusRequest body: empty
-
Curl:
curl -X GET -H "Content-Type: application/json" http://{{heater_address}}/control-status
{
"ambient_temperature": 22,
"current_power": 5,
"control_signal": 100,
"lock_active": "Child lock",
"open_window_active_now": "Enabled not active now",
"raw_ambient_temperature": 21,
"set_temperature": 1,
"switched_on": false,
"connected_to_cloud": true,
"operation_mode": "Control individually",
"status": "ok"
}Return the current operation mode.
| Field | Type | Description |
|---|---|---|
| mode | string | the current operation mode (see EOprationMode) |
-
Postman:
GET http://{{heater_address}}/operation-modeRequest body: empty
{
"mode": "Control individually",
"status": "ok"
}Set the operation mode.
| Field | Type | Description |
|---|---|---|
| mode | string | the operation mode to set (see EOprationMode) |
-
Postman:
POST http://{{heater_address}}/operation-modeRequest body:
{ "mode": "Control individually" }
{
"status": "ok"
}Return the status of the commercial lock.
| Field | Type | Description |
|---|---|---|
| value | bool | the status of the commercial lock |
-
Postman:
GET http://{{heater_address}}/commercial-lockRequest body: empty
{
"value": true,
"status": "ok"
}Set status of the commercial lock.
| Field | Type | Description |
|---|---|---|
| value | bool | the status of the commercial lock to set |
-
Postman:
GET http://{{heater_address}}/commercial-lockRequest body:
{ "value": true }
{
"status": "ok"
}Return the status of the child lock.
| Field | Type | Description |
|---|---|---|
| value | bool | the status of the child lock |
-
Postman:
GET http://{{heater_address}}/child-lockRequest body: empty
{
"value": false,
"status": "ok"
}Set status of the child lock.
| Field | Type | Description |
|---|---|---|
| value | bool | the status of the child lock to set |
-
Postman:
GET http://{{heater_address}}/child-lockRequest body:
{ "value": false }
{
"status": "ok"
}Return the current state of the open window functionality and its configuration parameters.
| Field | Type | Description |
|---|---|---|
| active_now | bool | true if open window functionality was activated and is active now |
| drop_temperature_threshold | float | the required temperature drop to trigger (activate) the open window functionality (in Celsius degrees) |
| drop_time_range | int | the time range when a drop of temperature will be expected (in seconds) |
| enabled | bool | the state of the open window functionality, true if open window functionality is enabled |
| increase_temperature_threshold | int | the time range when an increase of temperature will be expected (in seconds) |
| max_time | int | the maximum time duration of the open window activeness |
-
Postman:
GET http://{{heater_address}}/open-windowRequest body: empty
{
"active_now": false,
"drop_temperature_threshold": 5,
"drop_time_range": 900,
"enabled": true,
"increase_temperature_threshold": 3,
"increase_time_range": 900,
"max_time": 3600,
"status": "ok"
}Change the open window functionality parameters or enable/disable it.
| Field | Type | Description |
|---|---|---|
| drop_temperature_threshold | float | the required temperature drop to trigger (activate) the open window functionality (in Celsius degrees) |
| drop_time_range | int | the time range when a drop of temperature will be expected (in seconds) |
| enabled | bool | the state of the open window functionality, true if open window functionality is enabled |
| increase_temperature_threshold | int | the time range when an increase of temperature will be expected (in seconds) |
| increase_time_range | float | the time range when an increase of temperature will be expected |
| max_time | float | the maximum time duration of the open window activeness |
-
Postman:
POST http://{{heater_address}}/open-windowRequest body:
{ "drop_temperature_threshold": 5, "drop_time_range": 900, "enabled": true, "increase_temperature_threshold": 3, "increase_time_range": 900, "max_time": 3600 }
{
"status": "ok"
}Return the weekly program.
| Field | Type | Description |
|---|---|---|
| active | bool | state of the weekly program: true if is active, if false, the device works as an independent device |
| timers | list<string, int> | repeating pairs of values. A single pair represents time and value when the temperature mode should be changed. Time is a week time, in minutes since Monday 00:00, when to switch to a specific temperature type (set in the second field of the pair) (see ETemperatureType) |
-
Postman:
GET http://{{heater_address}}/weekly-programRequest body: empty
-
Curl:
curl -X GET -H "Content-Type: application/json" http://{{heater_address}}/weekly-program
{
"timers": [
{
"name": "Comfort",
"timestamp": 12
},
{
"name": "Away",
"timestamp": 30
},
{
"name": "Sleep",
"timestamp": 50
}
],
"active": false,
"status": "ok"
}Set the weekly program or repeatable timers. One also needs to set the timezone-offset. The device needs to connect to the WiFi to synchronize the time with NTP server after each restart.
To have the weekly program working, one needs to set operation-mode to "Weekly program" mode.
To have the repeatable timers working, one needs to set operation-mode to "Independent device" mode.
| Field | Type | Description |
|---|---|---|
| timers | list<string, int> | repeating pairs of values. A single pair represents time and value when the temperature mode should be changed. Time is a week time, in minutes since Monday 00:00 when to switch to a specific temperature type (set in the second field of the pair). For available temperature types (see GET set temperature) and ETemperatureType) |
-
Postman:
POST http://{{heater_address}}/weekly-programRequest body:
{ "timers": [ { "name": "Comfort", "timestamp": 12 }, { "name": "Away", "timestamp": 30 }, { "name": "Sleep", "timestamp": 50 } ] } -
Curl:
url -X POST -H "Content-Type: application/json" -d '{"timers": [{"name": "Comfort", "timestamp": 12},{"name": "Away", "timestamp": 30},{"name": "Sleep", "timestamp": 50}]}' http://{{heater_address}}/weekly-program
{
"status": "ok"
}Return the non-repeatable timers.
| Field | Type | Description |
|---|---|---|
| active | bool | true if operation mode is "Independent device" (see EOprationMode), false otherwise |
| timers | list<string, int> | repeating pairs of values. A single pair represents time and value when the temperature mode should be changed. Time defines when to switch to a specific temperature type (set in the second field of the pair). Time is as local unix timestamp, but in minutes, e.g. on 17.05.2021 the time is 27020801. |
-
Postman:
GET http://{{heater_address}}/non-repeatable-timersRequest body: empty
{
"non_repeatable_timers": [
{
"name": "Normal",
"timestamp": 27245338
},
{
"name": "Off",
"timestamp": 27245339
},
{
"name": "Normal",
"timestamp": 27245340
},
{
"name": "Off",
"timestamp": 27245341
}
],
"active": true,
"status": "ok"
}Set the non-repeatable timers.
One also needs to set the timezone-offset. The device needs to connect to the WiFi to synchronize the time with NTP server after each restart.
To have the non-repeatable timers working, one needs to set operation-mode to "Independent device" mode.
Please refer to example script examples/python/timers.py
| Field | Type | Description |
|---|---|---|
| timers | list<string, int> | A single pair represents time and value when the temperature mode should be changed. Time defines when to switch to a specific temperature type (set in the second field of the pair). Time is as local unix timestamp (so timezone is included), but in minutes, e.g. on 17.05.2021 the time is 27020801. Allowed temperature types for timers: "Normal", "Off", "AlwaysHeating" |
-
Postman:
POST http://{{heater_address}}/non-repeatable-timersRequest body:
{ "non_repeatable_timers": [ { "name": "Off", "timestamp": 12 }, { "name": "Away", "timestamp": 30 }, { "name": "Sleep", " timestamp": 50 } ] }
{
"status": "ok"
}Return the current temperature units used on the display.
| Field | Type | Description |
|---|---|---|
| value | string | the current temperature units: "Celsius" or "Fahrenheit" |
-
Postman:
GET http://{{heater_address}}/display-unitRequest body: empty
{
"value": "Farenheit",
"status": "ok"
}Set the current temperature units used on the display.
| Field | Type | Description |
|---|---|---|
| value | string | the temperature units: "Celsius" or "Fahrenheit" to set |
-
Postman:
POST http://{{heater_address}}/child-lockRequest body:
{ "value": "Farenheit" }
{
"status": "ok"
}Return temperature of the specified in body of the request temperature type.
In operation modes Control individually and Independent device one usally is interested in Normal temperature type.
| Field | Type | Description |
|---|---|---|
| value | float | the temperature in Celsius to set |
| Field | Type | Description |
|---|---|---|
| type | string | the temperature type to get (see ETemperatureType) |
-
Postman:
GET http://{{heater_address}}/set-temperatureRequest body:
{ "type": "Normal" } -
Curl:
curl -X GET -H "Content-Type: application/json" -d '{"type": "Normal"}' http://{{heater_address}}/set-temperature
{
"value": 30,
"status": "ok"
}Set temperature of the specified temperature type. This endpoint doesn't put the device in specific mode, it just sets the temperature
for chosen mode. One cannot send "Off" type using this endpoint as temperature for Off mode cannot be set (it is set to specified value by default).
If operation mode is "Control individually" or "Independent device" one is usually interested in "Normal" temperature type.
| Field | Type | Description |
|---|---|---|
| type | string | the temperature type to set (see ETemperatureType) |
| value | float | the temperature in Celsius to set |
-
Postman:
POST http://{{heater_address}}/set-temperatureRequest body:
{ "type": "Normal", "value": 30 } -
Curl:
curl -X POST -H "Content-Type: application/json" -d '{"type": "Normal", "value": 30}' http://{{heater_address}}/set-temperature
{
"status": "ok"
}Return the max heating level in percentage of the nominal wattage. Oil heater allows setting 3 different max power settings (40, 60 or 100% of the power), done by selecting number of active heating elements.
| Field | Type | Description |
|---|---|---|
| heating_level_percentage | int | the heating level in percentage |
-
Postman:
GET http://{{heater_address}}/oil-heater-powerRequest body: empty
{
"value": 100,
"status": "ok"
}Set the max heating level in percentage of the nominal wattage. Oil heater allows setting 3 different max power settings (40, 60 or 100% of the power), done by selecting number of active heating elements.
| Field | Type | Description |
|---|---|---|
| heating_level_percentage | int | the heating level in percentage: 0, 40, 60 or 100 to set |
-
Postman:
POST http://{{heater_address}}/oil-heater-powerRequest body:
{ "heating_level_percentage": 100 }
{
"status": "ok"
}Return the predictive heating type.
| Field | Type | Description |
|---|---|---|
| predictive_heating_type | string | the predictive heating type (see EPredictiveHeatingType) |
-
Postman:
GET http://{{heater_address}}/predictive-heating-typeRequest body: empty
{
"predictive_heating_type": "Off",
"status": "ok"
}Set the predictive heating type.
| Field | Type | Description |
|---|---|---|
| predictive_heating_type | string | the predictive heating type (see EPredictiveHeatingType) to set |
-
Postman:
POST http://{{heater_address}}/predictive-heating-typeRequest body:
{ "predictive_heating_type": "Off" }
{
"status": "ok"
}Overwrite the weekly program.
| Field | Type | Description |
|---|---|---|
| duration | int | the overwrite weekly program duration minutes |
| type | string | the temperature type to set (see ETemperatureType) |
-
Postman:
POST http://{{heater_address}}/overwrite-weekly-programRequest body:
{ "duration": 1, "type": "Away" }
{
"status": "ok"
}Get the vacation mode settings.
| Field | Type | Description |
|---|---|---|
| start_timestamp | int | the 32 bit timestamp in minutes |
| end_timestamp | int | the 32 bit timestamp in minutes |
-
Postman:
GET http://{{heater_address}}/vacation-modeRequest body: empty
{
"start_timestamp": 0,
"end_timestamp": 0,
"status": "ok"
}Set the vacation mode settings.
| Field | Type | Description |
|---|---|---|
| start_timestamp | int | the 32 bit timestamp in minutes (0 for no vacation mode) to set |
| end_timestamp | int | the 32 bit timestamp in minutes (0 for no vacation mode) to set |
-
Postman:
POST http://{{heater_address}}/vacation-modeRequest body:
{ "start_timestamp": 0, "end_timestamp": 0 }
{
"status": "ok"
}Get the timezone offset.
| Field | Type | Description |
|---|---|---|
| timezone_offset | int | the timezone offset in minutes from -840 to +720 |
-
Postman:
GET http://{{heater_address}}/timezone-offsetRequest body: empty
{
"timezone_offset": 1440,
"status": "ok"
}Set the timezone offset. Required to have weekly program and timers working.
| Field | Type | Description |
|---|---|---|
| timezone_offset | int | Device timezone offset in minutes |
-
Postman:
POST http://{{heater_address}}/timezone-offsetRequest body:
{ "timezone_offset": 60 }
{
"status": "ok"
}Change temperature in independent mode now. Use values 0.0 and 99.0 to set ALWAYS_ON and ALWAYS_OFF, respectively.
Apart from changing value for some temperature type, in "Independent device" operation mode, one also needs to call this command to change the current temperature.
| Field | Type | Description |
|---|---|---|
| temperature | float | the temperature value to set |
-
Postman:
POST http://{{heater_address}}/set-temperature-in-independent-mode-nowRequest body:
{ "temperature": 12.0 }
{
"status": "ok"
}Return the additional socket mode.
| Field | Type | Description |
|---|---|---|
| additional_mode | int | the additional socket mode |
-
Postman:
GET http://{{heater_address}}/additional-socket-modeRequest body: empty
{
"additional_mode": 3,
"status": "ok"
}Set the additional socket mode.
Body parameters
| Field | Type | Description |
|---|---|---|
| additional_mode | int | the additional mode <0 - 4> to set |
-
Postman:
POST http://{{heater_address}}/additional-socket-modeRequest body:
{ "additional_mode": 3 }
{
"status": "ok"
}Return PID parameters of the temperature PID controller.
| Field | Type | Description |
|---|---|---|
| kp | float | the proportional part gain |
| ki | float | the integral part gain |
| kd | float | the derivative part gain |
| kd_filter_N | float | the derivative filter time coefficient |
| windup_limit_percentage | float | the windup limit for integral part from 0 to 100 |
-
Postman:
GET http://{{heater_address}}/pid-parametersRequest body: empty
{
"kp": 70,
"ki": 0.02,
"kd": 4500,
"kd_filter_N": 60,
"windup_limit_percentage": 95,
"status": "ok"
}Set PID parameters. Setting PID parameters will change current regulator type to PID. PID regulator works only with panel heater.
| Field | Type | Description |
|---|---|---|
| kp | float | the proportional part gain |
| ki | float | the integral part gain |
| kd | float | the derivative part gain |
| kd_filter_N | float | the derivative filter time coefficient |
| windup_limit_percentage | float | the windup limit for integral part from 0 to 100 |
-
Postman:
POST http://{{heater_address}}/pid-parametersRequest body:
{ "kp": 70, "ki": 0.02, "kd": 4500, "kd_filter_N": 60, "windup_limit_percentage": 95, "status": "ok" }
{
"status": "ok"
}Return the cloud communication activeness status.
| Field | Type | Description |
|---|---|---|
| value | bool | the cloud communication activeness status, true if device is allowed to communicate with cloud |
-
Postman:
GET http://{{heater_address}}/cloud-communicationRequest body: empty
{
"value": true,
"status": "ok"
}Allows disabling cloud communication completely. Requires a reboot after this command.
| Field | Type | Description |
|---|---|---|
| value | bool | the cloud communication activeness status, true if device is allowed to communicate with cloud |
-
Postman:
POST http://{{heater_address}}/cloud-communicationRequest body:
{ "value": false }
{
"status": "ok"
}Perform OTA update, to replace the firmware. The device needs to have Internet access to perform it.
| Field | Type | Description |
|---|---|---|
| address | string (url) | the address to firmware binary for the heater, http address allowed |
-
Postman:
POST http://{{heater_address}}/ota-updateRequest body:
{ "value": false }
{
"status": "ok"
}Return the configuration parameter determined by the name in request message.
| Field | Type | Description |
|---|---|---|
| name | string | the name of the parameter to get |
| Field | Type | Description |
|---|---|---|
| value | string | the value of the parameter |
-
Postman:
GET http://{{heater_address}}/config-parameterRequest body:
{ "name": "Set" }
{
"value": "",
"status": "ok"
}Set the configuration parameter determined by the name in request message.
| Field | Type | Description |
|---|---|---|
| name | string | the name of the parameter to set |
| vaule | string | the value of the parameter |
-
Postman:
POST http://{{heater_address}}/cloud-communicationRequest body:
{ "name": "Set", "value": 70 }
{
"status": "ok"
}Set max heater power in Watts.
| Field | Type | Description |
|---|---|---|
| power | int | the value of the heater power in Watts |
| calibrate | bool | whether to perform the calibration with the chip measuring the power usage |
-
Postman:
POST http://{{heater_address}}/max-heater-powerRequest body:
{ "power": 12, "calibrate": false }
{
"status": "ok"
}Send a message and process it as if it would come from AbleCloud module.
| Field | Type | Description |
|---|---|---|
| message_code | int | code of the message |
| data | string | the binary data as hex string, e.g. string "1AB2550C" would be parsed to binary array {0x1A, 0xB2, 0x55, 0x0C} |
-
Postman:
POST http://{{heater_address}}/ablecloud-messageRequest body:
{ "message_code": 3, "data": 4443 }
{
"status": "ok"
}The heater has to be configured in the access mode (AP) mode. Then, you have to be connected to the network provided by your heater and check the IP adress which has format "192.168.4.x". The request should be post on this address.
Returns the list of WiFi networks scanned by ESP32, ordered by best signal (maximum 20 networks).
| Field | Type | Description |
|---|---|---|
| wifi | list | the list of WiFi networks scanned by ESP32 |
-
Postman:
GET http://192.168.4.x/scan-wifi
Request body: empty
{
"value": "",
"status": "ok"
}The heater has to be configured in the access mode (AP) mode. Then, you have to be connected to the network provided by your heater and check the IP adress which has format "192.168.4.x". The request should be post on this address. Post the device configuration, same as the one can be done via BLE.
| Field | Type | Description |
|---|---|---|
| ssid | string | the SSID of the WiFi |
| password | string | the password of the WiFi |
| connectivity_option | string | the connectivity option (see ECloudAndServerCommunicationType) |
-
Postman:
POST http://{{heater_address}}/device-configRequest body:
{ "ssid": "wifi_ssid", "password": "wifi_password", "connectivity_option": "sta_cloud_and_local_api" }
{
"status": "ok"
}Get current hysteresis setting.
| Field | Type | Description |
|---|---|---|
| temp_hysteresis_upper | float | upper offset (set temp + this -> stop heat) |
| temp_hysteresis_lower | float | lower offset (set temp - this -> start heat) |
-
Postman:
GET http://192.168.4.x/hysteresis-parameters
Request body: empty
{
"temp_hysteresis_upper": 2,
"temp_hysteresis_lower": 1,
"regulator_type": "hysteresis",
"status": "ok"
}Set hysteresis parameters. Setting hysteresis parameters will change current regulator type to hystersis.
AFTER CHANGING HYSTERESIS PARAMETERS RESTART IS REQUIRED
| Field | Type | Description |
|---|---|---|
| temp_hysteresis_upper | float | upper offset (set temp + this -> stop heat) |
| temp_hysteresis_lower | flaot | lower offset (set temp - this -> start heat) |
-
Postman:
POST http://{{heater_address}}/hysteresis-parametersRequest body:
{ "temp_hysteresis_upper": 1, "temp_hysteresis_lower": 1, }
{
"status": "ok"
}Get current maximum limited heating power (percentage of maximum power) (only Panel and Storage heater).
| Field | Type | Description |
|---|---|---|
| limited_heating_power | int | percentage of maximum power that heater can use. Value in range 10 - 100. |
| status | str | "ok" or error message |
-
Postman:
GET http://{{heater_address}}/limited-heating-power
{
"limited_heating_power": 75,
"status": "ok"
}Set current maximum limited heating power (percentage of maximum power) (only Panel and Storage heater).
| Field | Type | Description |
|---|---|---|
| limited_heating_power | int | percentage of maximum power that heater can use. Value in range 10 - 100. |
-
Postman:
POST http://{{heater_address}}/limited-heating-powerRequest body:
{ "limited_heating_power": 75, }
{
"status": "ok"
}Get current current regulator controller type. Hysteresis controller is available for oil, convertor and socket heaters. Slow PID is available for panel and storage heaters.
| Field | Type | Description |
|---|---|---|
| regulator_type | str | type of current controller type ("pid" or "hysteresis_or_slow_pid") |
| status | str | "ok" or error message |
-
Postman:
GET http://{{heater_address}}/controller-type
{
"regulator_type": "hysteresis_or_slow_pid",
"status": "ok"
}Set current current regulator controller type. Hysteresis controller is available for oil, convertor and socket heaters. Slow PID is available for panel and storage heaters.
| Field | Type | Description |
|---|---|---|
| regulator_type | str | type of current controller type ("pid", "hysteresis_or_slow_pid" or "unknown" - no change) |
-
Postman:
POST http://{{heater_address}}/controller-typeRequest body:
{ "regulator_type": "unknown", }
{
"status": "ok"
}Change your device's custom name.
| Field | Type | Description |
|---|---|---|
| device_name | str | new device custom name, it can have at most 32 characters |
-
Postman:
POST http://{{heater_address}}/set-custom-nameRequest body:
{ "device_name": "My new custom name", }
{
"status": "ok"
}Increase set temperature by one 0.5*C.
None
-
Postman:
POST http://{{heater_address}}/increase-set-temperatureRequest body:
None
{
"status": "ok"
}Decrease set temperature by 0.5*C.
None
-
Postman:
POST http://{{heater_address}}/decrease-set-temperatureRequest body:
None
{
"status": "ok"
}Set API key to authenticate users. BE CAREFULL!!! To reset API key one need to perform factory reset.
| Field | Type | Description |
|---|---|---|
| api_key | str | new API key, enables authentication and HTTPS server, it can have at most 63 characters |
-
Postman:
POST http://{{heater_address}}/set-api-keyRequest body:
{ "api_key": "asdasd" }
{
"status": "ok"
}Get commercial lock with range of possible temperature to change.
| Field | Type | Description |
|---|---|---|
| enable | bool | sets commercial lock state |
| min_allowed_temp_in_commercial_lock | float | minimal temperature that can be set while device has active commercial lock |
| max_allowed_temp_in_commercial_lock | float | maximal temperature that can be set while device has active commercial lock |
-
Postman:
GET http://{{heater_address}}/commercial-lock-customization
{
"enabled": false,
"min_allowed_temp_in_commercial_lock": 11,
"max_allowed_temp_in_commercial_lock": 30,
"status": "ok"
}Set commercial lock with range of possible temperature to change.
| Field | Type | Description |
|---|---|---|
| enable | bool | sets commercial lock state |
| min_allowed_temp_in_commercial_lock | float | minimal temperature that can be set while device has active commercial lock |
| max_allowed_temp_in_commercial_lock | float | maximal temperature that can be set while device has active commercial lock |
-
Postman:
POST http://{{heater_address}}/commercial-lock-customizationRequest body:
{ "enabled": false, "min_allowed_temp_in_commercial_lock": 11, "max_allowed_temp_in_commercial_lock": 30 }
{
"status": "ok"
}The ELockStatus variable allow to set one of the following lock mode:
| Value | Description |
|---|---|
| "No lock" | all buttons are active |
| "Child lock" | buttons on the device not active. In order to activate the child lock please turn on the heater and before 5 seconds pass, press the settings button for 3 seconds and release. |
| "Commercial lock" | buttons on the device not active. In order to activate the commercial lock please turn on the heater and before 10 seconds pass, press the settings button for 3 seconds and release. |
The Open Windows function is activated instantly when temperature drops within x1 min by x2 degrees
or more. The heater will automatically stop heating and FO will be displayed on in the display
of the heater. The heater will automatically start heating again if temperature will increase at
least by x3 degrees within x4 minutes.
| Value | Description |
|---|---|
| "Disabled not active now" | Open Windows functionality is disabled, so it is not working at all |
| "Enabled active now" | Open Window functionality is active, but the window is not detected as open, so the heater operates normally |
| "Enabled not active now" | Open Window functionality is active, and the window is detected as open, so the heater is not heating |
The Heater may operate in four operation modes:
| Value | Description |
|---|---|
| "Off" | the device is in off mode, it is not possible to send any comands to the device. The device doesn't follow neither weekly program nor it is in independent mode, nor in control individually |
| "Weekly program" | follow the weekly program, changing temperature by display buttons changes the temperature of the current temperature mode |
| "Independent device" | follow the single set value, with timers enabled |
| "Control individually" | follow the single set value, but not use any timers or weekly program |
| "Invalid" |
| Value | Description |
|---|---|
| "Off" | The temperature is set to default value of 0 (so that heater will not heat at all) that cannot be changed by the user. As one cannot set temperature for this type, it cannot be sent through set-temperature endpoint |
| "Normal" | a single value, used for operation modes "Independent device" and timers |
| "Comfort" | Temperature defined for type Comfort |
| "Sleep" | Temperature defined for type Sleep |
| "Away" | Temperature defined for type Away |
| "AlwaysHeating" | Heat all the time, regardless of the temperature. One cannot set temperature for this type. |
In weekly program one can set all of these types. For timers, one can set only "Normal", "Off", "AlwaysHeating" types.
Defines type of predictive heating functionality.
| Value | Description |
|---|---|
| "Off" | No predictive heating. Temperature will be change exactly with the weekly program timer |
| "Simple" | Simple predictive heating. Temperature will be change before the timer, with a fixed time for each Celsius degree |
| "Advanced" | Advanced predictive heating. Temperature will be change before the timer, with a time based on the current room model. Model is estimated while running. |
Defines how the device communicated via WiFi and cloud.
| Value | Description |
|---|---|
| "sta_cloud_without_local_api" | Device connects to the router. Cloud is enabled, but this WiFi API is disabled |
| "sta_cloud_and_local_api" | Device connects to the router. Cloud and this WiFi API both enabled |
| "sta_local_api_without_cloud" | Device connects to the router. Cloud is disabled, but this WiFi API is enabled |
| "ap_local_api_without_cloud" | Device behaves as Access Point. One can connect to the device via WiFi and communicate through this WiFi API |