supla-device
Loading...
Searching...
No Matches
proto.h
1/*
2 Copyright (C) AC SOFTWARE SP. Z O.O.
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19#ifndef supla_proto_H_
20#define supla_proto_H_
21
22#ifdef _WIN32
23// *** WINDOWS ***
24
25#include <WinSock2.h>
26#define _supla_int_t int
27#define _supla_int16_t short
28#define _supla_int64_t __int64
29#define _supla_timeval timeval
30
31#elif defined(__AVR__)
32// *** ARDUINO MEGA ***
33
34#define SPROTO_WITHOUT_OUT_BUFFER
35
36struct _supla_timeval {
37 long tv_sec[2];
38 long tv_usec[2];
39};
40
41#define timeval _supla_timeval
42
43#define _supla_int16_t int
44#define _supla_int_t long
45#define _supla_int64_t long long
46
47#elif defined(ESP8266) || defined(ESP32) || defined(ESP_PLATFORM)
48// *** Espressif NONOS SDK for ESP8266 OR ARDUINO WITH ESP8266 or ESP32 ***
49// *** ESP-IDF, ESP8266 RTOS SDK ***
50#ifndef ESP_PLATFORM
51#ifndef ARDUINO
52#include <mem.h>
53#define PROTO_ICACHE_FLASH ICACHE_FLASH_ATTR
54#endif /*ARDUINO*/
55#endif /*ESP_PLATFORM*/
56
57#if defined(ARDUINO) || defined(ESP_PLATFORM)
58// *** Only ARDUINO ESPxxx and ESP-IDS, RTOS SDK (NONOS is excluded) ***
59#define SPROTO_WITHOUT_OUT_BUFFER
60#endif /*ARDUINO_ARCH_ESP8266*/
61
62struct _supla_timeval {
63 long long tv_sec;
64 long long tv_usec;
65};
66
67#define _supla_int16_t short
68#define _supla_int_t int
69#define _supla_int64_t long long
70#elif defined(__arm__)
71// *** ARM - RPI? ***
72
73struct _supla_timeval {
74 long long tv_sec;
75 long long tv_usec;
76};
77
78#include <sys/time.h>
79#define _supla_int16_t short
80#define _supla_int_t int
81#define _supla_int64_t long long
82
83#else /*__arm__*/
84// *** OTHER? Linux, what else? ***
85#include <sys/time.h>
86#define _supla_int16_t short
87#define _supla_int_t int
88#define _supla_int64_t long long
89// timeval for 64 bit system
90#if __GNUC__
91#if __x86_64__ || __ppc64__
92#define _supla_timeval timeval
93#else
94// timeval for 32 bit system
95struct _supla_timeval {
96 long long tv_sec;
97 long long tv_usec;
98};
99
100#endif /* __x86_64__ || __ppc64__*/
101#endif /* __GNUC__*/
102#endif
103
104#ifndef PROTO_ICACHE_FLASH
105#define PROTO_ICACHE_FLASH
106#endif /*PROTO_ICACHE_FLASH*/
107
108#ifdef __cplusplus
109extern "C" {
110#endif
111
112#define SUPLA_TAG_SIZE 5
113extern char sproto_tag[SUPLA_TAG_SIZE];
114
115// DCS - device/client -> server
116// SDC - server -> device/client
117// DS - device -> server
118// SD - server -> device
119// CS - client -> server
120// SC - server -> client
121
122#define SUPLA_PROTO_VERSION 28
123#define SUPLA_PROTO_VERSION_MIN 1
124
125#if defined(ARDUINO_ARCH_AVR) || defined(ARDUINO) || defined(SUPLA_DEVICE)
126// All Arduino IDE and SuplaDevice compilations
127// Max packet size was reduced and register device is now send in chunks:
128// first is header, then channel data
129// SUPLA_MAX_DATA_SIZE should be bigger then calcfg, device config, channel
130// config MAXSIZE. Otherwise sending will fail
131#define SUPLA_MAX_DATA_SIZE 600 // Registration header without channels
132#define USE_DEPRECATED_EMEV_V2 // Temporary. It will be removed.
133#elif defined(ESP8266)
134#define USE_DEPRECATED_EMEV_V2 // Temporary. It will be removed.
135// supla-espressif-esp compilations
136#define SUPLA_MAX_DATA_SIZE 1536
137#else
138#define SUPLA_MAX_DATA_SIZE 10240
139#endif
140#define SUPLA_RC_MAX_DEV_COUNT 50
141#define SUPLA_SOFTVER_MAXSIZE 21
142
143#define SUPLA_CAPTION_MAXSIZE 401
144
145#define SUPLA_GUID_SIZE 16
146#define SUPLA_GUID_HEXSIZE 33
147#define SUPLA_LOCATION_PWD_MAXSIZE 33
148#define SUPLA_ACCESSID_PWD_MAXSIZE 33
149#define SUPLA_LOCATION_CAPTION_MAXSIZE SUPLA_CAPTION_MAXSIZE
150#define SUPLA_LOCATIONPACK_MAXCOUNT 20
151#define SUPLA_CHANNEL_CAPTION_MAXSIZE SUPLA_CAPTION_MAXSIZE
152#define SUPLA_CHANNEL_GROUP_CAPTION_MAXSIZE SUPLA_CAPTION_MAXSIZE
153#define SUPLA_CHANNELPACK_MAXCOUNT 20
154#define SUPLA_URL_HOST_MAXSIZE 101
155#define SUPLA_URL_PATH_MAXSIZE 101
156#define SUPLA_SERVER_NAME_MAXSIZE 65
157#define SUPLA_EMAIL_MAXSIZE 256 // ver. >= 7
158#define SUPLA_PASSWORD_MAXSIZE 64 // ver. >= 10
159#define SUPLA_AUTHKEY_SIZE 16 // ver. >= 7
160#define SUPLA_AUTHKEY_HEXSIZE 33 // ver. >= 7
161#define SUPLA_OAUTH_TOKEN_MAXSIZE 256 // ver. >= 10
162#define SUPLA_CHANNELGROUP_PACK_MAXCOUNT 20 // ver. >= 9
163#define SUPLA_CHANNELGROUP_CAPTION_MAXSIZE 401 // ver. >= 9
164#define SUPLA_CHANNELVALUE_PACK_MAXCOUNT 20 // ver. >= 9
165#define SUPLA_CHANNELEXTENDEDVALUE_PACK_MAXCOUNT 5 // ver. >= 10
166#define SUPLA_CHANNELEXTENDEDVALUE_PACK_MAXDATASIZE \
167 (SUPLA_MAX_DATA_SIZE - 50) // ver. >= 10
168#define SUPLA_CALCFG_DATA_MAXSIZE 128 // ver. >= 10
169#define SUPLA_TIMEZONE_MAXSIZE 51 // ver. >= 11
170#define SUPLA_ACTION_PARAM_MAXSIZE 500 // ver. >= 18
171
172#ifndef SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT
173#define SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT 100 // ver. >= 9
174#endif /*SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT*/
175
176#define SUPLA_SCENE_CAPTION_MAXSIZE SUPLA_CAPTION_MAXSIZE // ver. >= 18
177#define SUPLA_SCENE_PACK_MAXCOUNT 20 // ver. >= 18
178#define SUPLA_SCENE_STATE_PACK_MAXCOUNT 20 // ver. >= 18
179
180#define SUPLA_CHANNEL_RELATION_PACK_MAXCOUNT 100 // ver. >= 21
181
182#define SUPLA_CHANNEL_STATE_PACK_MAXCOUNT 20 // ver. >= 26
183
184#define SUPLA_DCS_CALL_GETVERSION 10
185#define SUPLA_SDC_CALL_GETVERSION_RESULT 20
186#define SUPLA_SDC_CALL_VERSIONERROR 30
187#define SUPLA_DCS_CALL_PING_SERVER 40
188#define SUPLA_SDC_CALL_PING_SERVER_RESULT 50
189#define SUPLA_DS_CALL_REGISTER_DEVICE 60
190#define SUPLA_DS_CALL_REGISTER_DEVICE_B 65 // ver. >= 2
191#define SUPLA_DS_CALL_REGISTER_DEVICE_C 67 // ver. >= 6
192#define SUPLA_DS_CALL_REGISTER_DEVICE_D 68 // ver. >= 7
193#define SUPLA_DS_CALL_REGISTER_DEVICE_E 69 // ver. >= 10
194#define SUPLA_SD_CALL_REGISTER_DEVICE_RESULT 70
195#define SUPLA_SD_CALL_REGISTER_DEVICE_RESULT_B 71 // ver. >= 25
196#define SUPLA_DS_CALL_REGISTER_DEVICE_F 75 // ver. >= 23
197#define SUPLA_DS_CALL_REGISTER_DEVICE_G 76 // ver. >= 25
198#define SUPLA_CS_CALL_REGISTER_CLIENT 80
199#define SUPLA_CS_CALL_REGISTER_CLIENT_B 85 // ver. >= 6
200#define SUPLA_CS_CALL_REGISTER_CLIENT_C 86 // ver. >= 7
201#define SUPLA_CS_CALL_REGISTER_CLIENT_D 87 // ver. >= 12
202#define SUPLA_SC_CALL_REGISTER_CLIENT_RESULT 90
203#define SUPLA_SC_CALL_REGISTER_CLIENT_RESULT_B 92 // ver. >= 9
204#define SUPLA_SC_CALL_REGISTER_CLIENT_RESULT_C 94 // ver. >= 17
205#define SUPLA_SC_CALL_REGISTER_CLIENT_RESULT_D 96 // ver. >= 19
206#define SUPLA_DS_CALL_DEVICE_CHANNEL_VALUE_CHANGED 100
207#define SUPLA_DS_CALL_DEVICE_CHANNEL_VALUE_CHANGED_B 102 // ver. >= 12
208#define SUPLA_DS_CALL_DEVICE_CHANNEL_VALUE_CHANGED_C 103 // ver. >= 12
209#define SUPLA_DS_CALL_DEVICE_CHANNEL_EXTENDEDVALUE_CHANGED 105 // ver. >= 10
210#define SUPLA_SD_CALL_CHANNEL_SET_VALUE 110
211#define SUPLA_SD_CALL_CHANNELGROUP_SET_VALUE 115 // ver. >= 13
212#define SUPLA_DS_CALL_CHANNEL_SET_VALUE_RESULT 120
213#define SUPLA_SC_CALL_LOCATION_UPDATE 130
214#define SUPLA_SC_CALL_LOCATIONPACK_UPDATE 140
215#define SUPLA_SC_CALL_CHANNELPACK_UPDATE 160
216#define SUPLA_SC_CALL_CHANNEL_VALUE_UPDATE 170
217#define SUPLA_SC_CALL_CHANNEL_VALUE_UPDATE_B 171
218#define SUPLA_CS_CALL_GET_NEXT 180
219#define SUPLA_SC_CALL_EVENT 190
220#define SUPLA_CS_CALL_CHANNEL_SET_VALUE 200
221#define SUPLA_CS_CALL_CHANNEL_SET_VALUE_B 205 // ver. >= 3
222#define SUPLA_DCS_CALL_SET_ACTIVITY_TIMEOUT 210 // ver. >= 2
223#define SUPLA_SDC_CALL_SET_ACTIVITY_TIMEOUT_RESULT 220 // ver. >= 2
224#define SUPLA_DS_CALL_GET_FIRMWARE_UPDATE_URL 300 // ver. >= 5
225#define SUPLA_SD_CALL_GET_FIRMWARE_UPDATE_URL_RESULT 310 // ver. >= 5
226#define SUPLA_DCS_CALL_GET_REGISTRATION_ENABLED 320 // ver. >= 7
227#define SUPLA_SDC_CALL_GET_REGISTRATION_ENABLED_RESULT 330 // ver. >= 7
228#define SUPLA_CS_CALL_OAUTH_TOKEN_REQUEST 340 // ver. >= 10
229#define SUPLA_SC_CALL_OAUTH_TOKEN_REQUEST_RESULT 350 // ver. >= 10
230#define SUPLA_SC_CALL_CHANNELPACK_UPDATE_B 360 // ver. >= 8
231#define SUPLA_SC_CALL_CHANNELPACK_UPDATE_C 361 // ver. >= 10
232#define SUPLA_SC_CALL_CHANNELPACK_UPDATE_D 362 // ver. >= 15
233#define SUPLA_SC_CALL_CHANNELPACK_UPDATE_E 363 // ver. >= 23
234#define SUPLA_SC_CALL_CHANNELGROUP_PACK_UPDATE 380 // ver. >= 9
235#define SUPLA_SC_CALL_CHANNELGROUP_PACK_UPDATE_B 381 // ver. >= 10
236#define SUPLA_SC_CALL_CHANNELGROUP_RELATION_PACK_UPDATE 390 // ver. >= 9
237#define SUPLA_SC_CALL_CHANNEL_RELATION_PACK_UPDATE 395 // ver. >= 21
238#define SUPLA_SC_CALL_CHANNELVALUE_PACK_UPDATE 400 // ver. >= 9
239#define SUPLA_SC_CALL_CHANNELVALUE_PACK_UPDATE_B 401 // ver. >= 15
240#define SUPLA_SC_CALL_CHANNELEXTENDEDVALUE_PACK_UPDATE 405 // ver. >= 10
241#define SUPLA_SC_CALL_CHANNEL_STATE_PACK_UPDATE 408 // ver. >= 26
242#define SUPLA_CS_CALL_SET_VALUE 410 // ver. >= 9
243#define SUPLA_CS_CALL_SUPERUSER_AUTHORIZATION_REQUEST 420 // ver. >= 10
244#define SUPLA_CS_CALL_GET_SUPERUSER_AUTHORIZATION_RESULT 425 // ver. >= 12
245#define SUPLA_SC_CALL_SUPERUSER_AUTHORIZATION_RESULT 430 // ver. >= 10
246#define SUPLA_CS_CALL_DEVICE_CALCFG_REQUEST 440 // ver. >= 10
247#define SUPLA_CS_CALL_DEVICE_CALCFG_REQUEST_B 445 // ver. >= 11
248#define SUPLA_SC_CALL_DEVICE_CALCFG_RESULT 450 // ver. >= 10
249#define SUPLA_SD_CALL_DEVICE_CALCFG_REQUEST 460 // ver. >= 10
250#define SUPLA_DS_CALL_DEVICE_CALCFG_RESULT 470 // ver. >= 10
251#define SUPLA_DCS_CALL_GET_USER_LOCALTIME 480 // ver. >= 11
252#define SUPLA_DCS_CALL_GET_USER_LOCALTIME_RESULT 490 // ver. >= 11
253#define SUPLA_CSD_CALL_GET_CHANNEL_STATE 500 // ver. >= 12
254#define SUPLA_DSC_CALL_CHANNEL_STATE_RESULT 510 // ver. >= 12
255#define SUPLA_CS_CALL_GET_CHANNEL_BASIC_CFG 520 // ver. >= 12
256#define SUPLA_SC_CALL_CHANNEL_BASIC_CFG_RESULT 530 // ver. >= 12
257#define SUPLA_CS_CALL_SET_CHANNEL_FUNCTION 540 // ver. >= 12
258#define SUPLA_SC_CALL_SET_CHANNEL_FUNCTION_RESULT 550 // ver. >= 12
259#define SUPLA_CS_CALL_CLIENTS_RECONNECT_REQUEST 560 // ver. >= 12
260#define SUPLA_SC_CALL_CLIENTS_RECONNECT_REQUEST_RESULT 570 // ver. >= 12
261#define SUPLA_CS_CALL_SET_REGISTRATION_ENABLED 580 // ver. >= 12
262#define SUPLA_SC_CALL_SET_REGISTRATION_ENABLED_RESULT 590 // ver. >= 12
263#define SUPLA_CS_CALL_DEVICE_RECONNECT_REQUEST 600 // ver. >= 12
264#define SUPLA_SC_CALL_DEVICE_RECONNECT_REQUEST_RESULT 610 // ver. >= 12
265#define SUPLA_DS_CALL_GET_CHANNEL_FUNCTIONS 620 // ver. >= 12
266#define SUPLA_SD_CALL_GET_CHANNEL_FUNCTIONS_RESULT 630 // ver. >= 12
267#define SUPLA_DCS_CALL_SET_CHANNEL_CAPTION 640 // ver. >= 12
268#define SUPLA_SCD_CALL_SET_CHANNEL_CAPTION_RESULT 650 // ver. >= 12
269#define SUPLA_CS_CALL_SET_CHANNEL_GROUP_CAPTION 642 // ver. >= 20
270#define SUPLA_SC_CALL_SET_CHANNEL_GROUP_CAPTION_RESULT 652 // ver. >= 20
271#define SUPLA_CS_CALL_SET_LOCATION_CAPTION 645 // ver. >= 14
272#define SUPLA_SC_CALL_SET_LOCATION_CAPTION_RESULT 655 // ver. >= 14
273#define SUPLA_DS_CALL_GET_CHANNEL_CONFIG 680 // ver. >= 16
274#define SUPLA_SD_CALL_GET_CHANNEL_CONFIG_RESULT 690 // ver. >= 16
275#define SUPLA_DS_CALL_SET_CHANNEL_CONFIG 681 // ver. >= 21
276#define SUPLA_SD_CALL_SET_CHANNEL_CONFIG_RESULT 691 // ver. >= 21
277#define SUPLA_SD_CALL_SET_CHANNEL_CONFIG 682 // ver. >= 21
278#define SUPLA_DS_CALL_SET_CHANNEL_CONFIG_RESULT 692 // ver. >= 21
279#define SUPLA_SD_CALL_CHANNEL_CONFIG_FINISHED 683 // ver. >= 21
280#define SUPLA_DS_CALL_SET_DEVICE_CONFIG 684 // ver. >= 21
281#define SUPLA_SD_CALL_SET_DEVICE_CONFIG_RESULT 694 // ver. >= 21
282#define SUPLA_SD_CALL_SET_DEVICE_CONFIG 685 // ver. >= 21
283#define SUPLA_DS_CALL_SET_DEVICE_CONFIG_RESULT 695 // ver. >= 21
284#define SUPLA_DS_CALL_ACTIONTRIGGER 700 // ver. >= 16
285#define SUPLA_CS_CALL_TIMER_ARM 800 // ver. >= 17
286#define SUPLA_SC_CALL_SCENE_PACK_UPDATE 900 // ver. >= 18
287#define SUPLA_SC_CALL_SCENE_STATE_PACK_UPDATE 910 // ver. >= 18
288#define SUPLA_CS_CALL_EXECUTE_ACTION 1000 // ver. >= 19
289#define SUPLA_CS_CALL_EXECUTE_ACTION_WITH_AUTH 1010 // ver. >= 19
290#define SUPLA_SC_CALL_ACTION_EXECUTION_RESULT 1020 // ver. >= 19
291#define SUPLA_CS_CALL_GET_CHANNEL_VALUE_WITH_AUTH 1030 // ver. >= 19
292#define SUPLA_SC_CALL_GET_CHANNEL_VALUE_RESULT 1040 // ver. >= 19
293#define SUPLA_CS_CALL_SET_SCENE_CAPTION 1045 // ver. >= 19
294#define SUPLA_SC_CALL_SET_SCENE_CAPTION_RESULT 1055 // ver. >= 19
295#define SUPLA_DS_CALL_REGISTER_PUSH_NOTIFICATION 1100 // ver. >= 20
296#define SUPLA_DS_CALL_SEND_PUSH_NOTIFICATION 1110 // ver. >= 20
297#define SUPLA_CS_CALL_REGISTER_PN_CLIENT_TOKEN 1120 // ver. >= 20
298#define SUPLA_SC_CALL_REGISTER_PN_CLIENT_TOKEN_RESULT 1121 // ver. >= 20
299#define SUPLA_CS_CALL_GET_CHANNEL_CONFIG 1200 // ver. >= 21
300#define SUPLA_SC_CALL_CHANNEL_CONFIG_UPDATE_OR_RESULT 1210 // ver. >= 21
301#define SUPLA_CS_CALL_SET_CHANNEL_CONFIG 1220 // ver. >= 21
302#define SUPLA_CS_CALL_GET_DEVICE_CONFIG 1240 // ver. >= 21
303#define SUPLA_SC_CALL_DEVICE_CONFIG_UPDATE_OR_RESULT 1250 // ver. >= 21
304#define SUPLA_DS_CALL_SET_SUBDEVICE_DETAILS 1260 // ver. >= 25
305
306#define SUPLA_RESULT_RESPONSE_TIMEOUT -8
307#define SUPLA_RESULT_CANT_CONNECT_TO_HOST -7
308#define SUPLA_RESULT_HOST_NOT_FOUND -6
309#define SUPLA_RESULT_CALL_NOT_ALLOWED -5
310#define SUPLA_RESULT_DATA_TOO_LARGE -4
311#define SUPLA_RESULT_BUFFER_OVERFLOW -3
312#define SUPLA_RESULT_DATA_ERROR -2
313#define SUPLA_RESULT_VERSION_ERROR -1
314#define SUPLA_RESULT_FALSE 0
315#define SUPLA_RESULT_TRUE 1
316
317// SUPLA_RESULTCODE_ are sent in TSuplaDataPacket.data (unsigned char)
318#define SUPLA_RESULTCODE_NONE 0
319#define SUPLA_RESULTCODE_UNSUPORTED 1
320#define SUPLA_RESULTCODE_FALSE 2
321#define SUPLA_RESULTCODE_TRUE 3
322#define SUPLA_RESULTCODE_TEMPORARILY_UNAVAILABLE 4
323#define SUPLA_RESULTCODE_BAD_CREDENTIALS 5
324#define SUPLA_RESULTCODE_LOCATION_CONFLICT 6
325#define SUPLA_RESULTCODE_CHANNEL_CONFLICT 7
326#define SUPLA_RESULTCODE_DEVICE_DISABLED 8
327#define SUPLA_RESULTCODE_ACCESSID_DISABLED 9
328#define SUPLA_RESULTCODE_LOCATION_DISABLED 10
329#define SUPLA_RESULTCODE_CLIENT_DISABLED 11
330#define SUPLA_RESULTCODE_CLIENT_LIMITEXCEEDED 12
331#define SUPLA_RESULTCODE_DEVICE_LIMITEXCEEDED 13
332#define SUPLA_RESULTCODE_GUID_ERROR 14
333#define SUPLA_RESULTCODE_DEVICE_LOCKED 15 // ver. >= 22
334#define SUPLA_RESULTCODE_REGISTRATION_DISABLED 17 // ver. >= 7
335#define SUPLA_RESULTCODE_ACCESSID_NOT_ASSIGNED 18 // ver. >= 7
336#define SUPLA_RESULTCODE_AUTHKEY_ERROR 19 // ver. >= 7
337#define SUPLA_RESULTCODE_NO_LOCATION_AVAILABLE 20 // ver. >= 7
338#define SUPLA_RESULTCODE_USER_CONFLICT 21 // Deprecated
339#define SUPLA_RESULTCODE_UNAUTHORIZED 22 // ver. >= 10
340#define SUPLA_RESULTCODE_AUTHORIZED 23 // ver. >= 10
341#define SUPLA_RESULTCODE_NOT_ALLOWED 24 // ver. >= 12
342#define SUPLA_RESULTCODE_CHANNELNOTFOUND 25 // ver. >= 12
343#define SUPLA_RESULTCODE_UNKNOWN_ERROR 26 // ver. >= 12
344#define SUPLA_RESULTCODE_DENY_CHANNEL_BELONG_TO_GROUP 27 // ver. >= 12
345#define SUPLA_RESULTCODE_DENY_CHANNEL_HAS_SCHEDULE 28 // ver. >= 12
346#define SUPLA_RESULTCODE_DENY_CHANNEL_IS_ASSOCIETED_WITH_SCENE 29 // ver. >= 12
347#define SUPLA_RESULTCODE_DENY_CHANNEL_IS_ASSOCIETED_WITH_ACTION_TRIGGER \
348 30 // ver. >= 16
349#define SUPLA_RESULTCODE_INACTIVE 31 // ver. >= 17
350#define SUPLA_RESULTCODE_CFG_MODE_REQUESTED 32 // ver. >= 18
351#define SUPLA_RESULTCODE_ACTION_UNSUPPORTED 33 // ver. >= 19
352#define SUPLA_RESULTCODE_SUBJECT_NOT_FOUND 34 // ver. >= 19
353#define SUPLA_RESULTCODE_INCORRECT_PARAMETERS 35 // ver. >= 19
354#define SUPLA_RESULTCODE_CLIENT_NOT_EXISTS 36 // ver. >= 19
355#define SUPLA_RESULTCODE_COUNTRY_REJECTED 37
356#define SUPLA_RESULTCODE_CHANNEL_IS_OFFLINE 38 // ver. >= 19
357#define SUPLA_RESULTCODE_NOT_REGISTERED 39 // ver. >= 20
358#define SUPLA_RESULTCODE_DENY_CHANNEL_IS_ASSOCIETED_WITH_VBT 40 // >= 20
359#define SUPLA_RESULTCODE_DENY_CHANNEL_IS_ASSOCIETED_WITH_PUSH 41 // >= 20
360#define SUPLA_RESULTCODE_RESTART_REQUESTED 42 // ver. >= 25
361#define SUPLA_RESULTCODE_IDENTIFY_REQUESTED 43 // ver. >= 25
362#define SUPLA_RESULTCODE_MALFORMED_EMAIL 44 // ver. >= ?
363#define SUPLA_RESULTCODE_RESET_TO_FACTORY_SETTINGS 45 // ver. >= 28
364
365#define SUPLA_OAUTH_RESULTCODE_ERROR 0 // ver. >= 10
366#define SUPLA_OAUTH_RESULTCODE_SUCCESS 1 // ver. >= 10
367#define SUPLA_OAUTH_TEMPORARILY_UNAVAILABLE 2 // ver. >= 10
368
369#define SUPLA_DEVICE_NAME_MAXSIZE 201
370#define SUPLA_CLIENT_NAME_MAXSIZE 201
371#define SUPLA_SENDER_NAME_MAXSIZE 201
372#define SUPLA_INITIATOR_NAME_MAXSIZE SUPLA_SENDER_NAME_MAXSIZE
373
374#define SUPLA_CHANNELMAXCOUNT 128
375
376#define SUPLA_CHANNELVALUE_SIZE 8
377
378#if defined(__AVR__) || defined(ESP8266) || defined(ESP32) || \
379 defined(ESP_PLATFORM) || defined(ARDUINO) || defined(SUPLA_DEVICE)
380#define SUPLA_CHANNELEXTENDEDVALUE_SIZE 256
381#else
382#define SUPLA_CHANNELEXTENDEDVALUE_SIZE 1024
383#endif
384
385#define SUPLA_CHANNELTYPE_SENSORNO 1000 // name DEPRECATED
386// use BINARYSENSOR instead
387#define SUPLA_CHANNELTYPE_BINARYSENSOR 1000
388#define SUPLA_CHANNELTYPE_SENSORNC 1010 // DEPRECATED
389#define SUPLA_CHANNELTYPE_DISTANCESENSOR 1020 // ver. >= 5
390#define SUPLA_CHANNELTYPE_CALLBUTTON 1500 // ver. >= 4
391#define SUPLA_CHANNELTYPE_RELAYHFD4 2000 // DEPRECATED
392#define SUPLA_CHANNELTYPE_RELAYG5LA1A 2010 // DEPRECATED
393#define SUPLA_CHANNELTYPE_2XRELAYG5LA1A 2020 // DEPRECATED
394#define SUPLA_CHANNELTYPE_RELAY 2900
395#define SUPLA_CHANNELTYPE_THERMOMETERDS18B20 3000 // DEPRECATED
396#define SUPLA_CHANNELTYPE_DHT11 3010 // ver. >= 4 DEPRECATED
397#define SUPLA_CHANNELTYPE_DHT22 3020 // ver. >= 4 DEPRECATED
398#define SUPLA_CHANNELTYPE_DHT21 3022 // ver. >= 5 DEPRECATED
399#define SUPLA_CHANNELTYPE_AM2302 3030 // ver. >= 4 DEPRECATED
400#define SUPLA_CHANNELTYPE_AM2301 3032 // ver. >= 5 DEPRECATED
401
402#define SUPLA_CHANNELTYPE_THERMOMETER 3034 // ver. >= 8
403#define SUPLA_CHANNELTYPE_HUMIDITYSENSOR 3036 // ver. >= 8
404#define SUPLA_CHANNELTYPE_HUMIDITYANDTEMPSENSOR 3038 // ver. >= 8
405#define SUPLA_CHANNELTYPE_WINDSENSOR 3042 // ver. >= 8
406#define SUPLA_CHANNELTYPE_PRESSURESENSOR 3044 // ver. >= 8
407#define SUPLA_CHANNELTYPE_RAINSENSOR 3048 // ver. >= 8
408#define SUPLA_CHANNELTYPE_WEIGHTSENSOR 3050 // ver. >= 8
409#define SUPLA_CHANNELTYPE_WEATHER_STATION 3100 // ver. >= 8
410#define SUPLA_CHANNELTYPE_CONTAINER 3200 // ver. >= 26
411
412// Since ver. >= 28 channel types DIMMER, RGBLIGHTING, DIMMERANDRGBLIGHTING
413// support all RGBW/dimmer related functions, when their RGBW_FuncList is != 0.
414// List of supported functions should be determined based on the RGBW_FuncList
415// bitmap value.
416#define SUPLA_CHANNELTYPE_DIMMER 4000 // ver. >= 4
417#define SUPLA_CHANNELTYPE_RGBLEDCONTROLLER 4010 // ver. >= 4
418#define SUPLA_CHANNELTYPE_DIMMERANDRGBLED 4020 // ver. >= 4
419
420#define SUPLA_CHANNELTYPE_ELECTRICITY_METER 5000 // ver. >= 10
421#define SUPLA_CHANNELTYPE_IMPULSE_COUNTER 5010 // ver. >= 10
422
423#define SUPLA_CHANNELTYPE_THERMOSTAT 6000 // ver. >= 11
424#define SUPLA_CHANNELTYPE_THERMOSTAT_HEATPOL_HOMEPLUS 6010 // ver. >= 11
425#define SUPLA_CHANNELTYPE_HVAC 6100 // ver. >= 21
426
427#define SUPLA_CHANNELTYPE_VALVE_OPENCLOSE 7000 // ver. >= 12
428#define SUPLA_CHANNELTYPE_VALVE_PERCENTAGE 7010 // ver. >= 12
429#define SUPLA_CHANNELTYPE_BRIDGE 8000 // ver. >= 12
430#define SUPLA_CHANNELTYPE_GENERAL_PURPOSE_MEASUREMENT 9000 // ver. >= 23
431#define SUPLA_CHANNELTYPE_GENERAL_PURPOSE_METER 9010 // ver. >= 23
432#define SUPLA_CHANNELTYPE_ENGINE 10000 // ver. >= 12
433#define SUPLA_CHANNELTYPE_ACTIONTRIGGER 11000 // ver. >= 16
434#define SUPLA_CHANNELTYPE_DIGIGLASS 12000 // ver. >= 12
435
436#define SUPLA_CHANNELDRIVER_MCP23008 2
437
438#define SUPLA_CHANNELFNC_NONE 0
439#define SUPLA_CHANNELFNC_CONTROLLINGTHEGATEWAYLOCK 10
440#define SUPLA_CHANNELFNC_CONTROLLINGTHEGATE 20
441#define SUPLA_CHANNELFNC_CONTROLLINGTHEGARAGEDOOR 30
442#define SUPLA_CHANNELFNC_THERMOMETER 40
443#define SUPLA_CHANNELFNC_HUMIDITY 42
444#define SUPLA_CHANNELFNC_HUMIDITYANDTEMPERATURE 45
445#define SUPLA_CHANNELFNC_OPENINGSENSOR_GATEWAY 50
446#define SUPLA_CHANNELFNC_OPENINGSENSOR_GATE 60
447#define SUPLA_CHANNELFNC_OPENINGSENSOR_GARAGEDOOR 70
448#define SUPLA_CHANNELFNC_NOLIQUIDSENSOR 80
449#define SUPLA_CHANNELFNC_CONTROLLINGTHEDOORLOCK 90
450#define SUPLA_CHANNELFNC_OPENINGSENSOR_DOOR 100
451#define SUPLA_CHANNELFNC_CONTROLLINGTHEROLLERSHUTTER 110
452#define SUPLA_CHANNELFNC_CONTROLLINGTHEROOFWINDOW 115 // ver. >= 13
453#define SUPLA_CHANNELFNC_OPENINGSENSOR_ROLLERSHUTTER 120
454#define SUPLA_CHANNELFNC_OPENINGSENSOR_ROOFWINDOW 125 // ver. >= 13
455#define SUPLA_CHANNELFNC_POWERSWITCH 130
456#define SUPLA_CHANNELFNC_LIGHTSWITCH 140
457#define SUPLA_CHANNELFNC_RING 150
458#define SUPLA_CHANNELFNC_ALARM 160
459#define SUPLA_CHANNELFNC_NOTIFICATION 170
460#define SUPLA_CHANNELFNC_DIMMER 180
461#define SUPLA_CHANNELFNC_DIMMER_CCT 185 // ver. >= 28
462#define SUPLA_CHANNELFNC_RGBLIGHTING 190
463#define SUPLA_CHANNELFNC_DIMMERANDRGBLIGHTING 200
464#define SUPLA_CHANNELFNC_DIMMER_CCT_AND_RGB 205 // ver. >= 28
465#define SUPLA_CHANNELFNC_DEPTHSENSOR 210 // ver. >= 5
466#define SUPLA_CHANNELFNC_DISTANCESENSOR 220 // ver. >= 5
467#define SUPLA_CHANNELFNC_OPENINGSENSOR_WINDOW 230 // ver. >= 8
468#define SUPLA_CHANNELFNC_HOTELCARDSENSOR 235 // ver. >= 21
469#define SUPLA_CHANNELFNC_ALARMARMAMENTSENSOR 236 // ver. >= 21
470#define SUPLA_CHANNELFNC_MAILSENSOR 240 // ver. >= 8
471#define SUPLA_CHANNELFNC_WINDSENSOR 250 // ver. >= 8
472#define SUPLA_CHANNELFNC_PRESSURESENSOR 260 // ver. >= 8
473#define SUPLA_CHANNELFNC_RAINSENSOR 270 // ver. >= 8
474#define SUPLA_CHANNELFNC_WEIGHTSENSOR 280 // ver. >= 8
475#define SUPLA_CHANNELFNC_WEATHER_STATION 290 // ver. >= 8
476#define SUPLA_CHANNELFNC_STAIRCASETIMER 300 // ver. >= 8
477#define SUPLA_CHANNELFNC_ELECTRICITY_METER 310 // ver. >= 10
478#define SUPLA_CHANNELFNC_IC_ELECTRICITY_METER 315 // ver. >= 12
479#define SUPLA_CHANNELFNC_IC_GAS_METER 320 // ver. >= 10
480#define SUPLA_CHANNELFNC_IC_WATER_METER 330 // ver. >= 10
481#define SUPLA_CHANNELFNC_IC_HEAT_METER 340 // ver. >= 10
482#define SUPLA_CHANNELFNC_IC_EVENTS 350 // ver. >= 21
483#define SUPLA_CHANNELFNC_IC_SECONDS 360 // ver. >= 21
484#define SUPLA_CHANNELFNC_THERMOSTAT_HEATPOL_HOMEPLUS 410 // ver. >= 11
485#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT 420 // ver. >= 21
486#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT_HEAT_COOL 422 // ver. >= 21
487#define SUPLA_CHANNELFNC_HVAC_DRYER 423 // ver. >= 21
488#define SUPLA_CHANNELFNC_HVAC_FAN 424 // ver. >= 21
489#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT_DIFFERENTIAL 425 // ver. >= 21
490#define SUPLA_CHANNELFNC_HVAC_DOMESTIC_HOT_WATER 426 // ver. >= 21
491#define SUPLA_CHANNELFNC_VALVE_OPENCLOSE 500 // ver. >= 12
492#define SUPLA_CHANNELFNC_VALVE_PERCENTAGE 510 // ver. >= 12
493#define SUPLA_CHANNELFNC_GENERAL_PURPOSE_MEASUREMENT 520 // ver. >= 23
494#define SUPLA_CHANNELFNC_GENERAL_PURPOSE_METER 530 // ver. >= 23
495#define SUPLA_CHANNELFNC_CONTROLLINGTHEENGINESPEED 600 // ver. >= 12
496#define SUPLA_CHANNELFNC_ACTIONTRIGGER 700 // ver. >= 16
497#define SUPLA_CHANNELFNC_DIGIGLASS_HORIZONTAL 800 // ver. >= 14
498#define SUPLA_CHANNELFNC_DIGIGLASS_VERTICAL 810 // ver. >= 14
499#define SUPLA_CHANNELFNC_CONTROLLINGTHEFACADEBLIND 900 // ver. >= 24
500#define SUPLA_CHANNELFNC_TERRACE_AWNING 910 // ver. >= 24
501#define SUPLA_CHANNELFNC_PROJECTOR_SCREEN 920 // ver. >= 24
502#define SUPLA_CHANNELFNC_CURTAIN 930 // ver. >= 24
503#define SUPLA_CHANNELFNC_VERTICAL_BLIND 940 // ver. >= 24
504#define SUPLA_CHANNELFNC_ROLLER_GARAGE_DOOR 950 // ver. >= 24
505#define SUPLA_CHANNELFNC_PUMPSWITCH 960 // ver. >= 25
506#define SUPLA_CHANNELFNC_HEATORCOLDSOURCESWITCH 970 // ver. >= 25
507#define SUPLA_CHANNELFNC_CONTAINER 980 // ver. >= 26
508#define SUPLA_CHANNELFNC_SEPTIC_TANK 981 // ver. >= 26
509#define SUPLA_CHANNELFNC_WATER_TANK 982 // ver. >= 26
510#define SUPLA_CHANNELFNC_CONTAINER_LEVEL_SENSOR 990 // ver. >= 26
511#define SUPLA_CHANNELFNC_FLOOD_SENSOR 1000 // ver. >= 27
512#define SUPLA_CHANNELFNC_MOTION_SENSOR 1010 // ver. >= 27
513#define SUPLA_CHANNELFNC_BINARY_SENSOR 1020 // ver. >= 27
514
515// Channel's FuncList bit values:
516#define SUPLA_BIT_FUNC_CONTROLLINGTHEGATEWAYLOCK 0x00000001
517#define SUPLA_BIT_FUNC_CONTROLLINGTHEGATE 0x00000002
518#define SUPLA_BIT_FUNC_CONTROLLINGTHEGARAGEDOOR 0x00000004
519#define SUPLA_BIT_FUNC_CONTROLLINGTHEDOORLOCK 0x00000008
520#define SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER 0x00000010
521#define SUPLA_BIT_FUNC_POWERSWITCH 0x00000020
522#define SUPLA_BIT_FUNC_LIGHTSWITCH 0x00000040
523#define SUPLA_BIT_FUNC_STAIRCASETIMER 0x00000080 // ver. >= 8
524#define SUPLA_BIT_FUNC_THERMOMETER 0x00000100 // ver. >= 12
525#define SUPLA_BIT_FUNC_HUMIDITYANDTEMPERATURE 0x00000200 // ver. >= 12
526#define SUPLA_BIT_FUNC_HUMIDITY 0x00000400 // ver. >= 12
527#define SUPLA_BIT_FUNC_WINDSENSOR 0x00000800 // ver. >= 12
528#define SUPLA_BIT_FUNC_PRESSURESENSOR 0x00001000 // ver. >= 12
529#define SUPLA_BIT_FUNC_RAINSENSOR 0x00002000 // ver. >= 12
530#define SUPLA_BIT_FUNC_WEIGHTSENSOR 0x00004000 // ver. >= 12
531#define SUPLA_BIT_FUNC_CONTROLLINGTHEROOFWINDOW 0x00008000 // ver. >= 13
532#define SUPLA_BIT_FUNC_CONTROLLINGTHEFACADEBLIND 0x00010000 // ver. >= 17
533#define SUPLA_BIT_FUNC_HVAC_THERMOSTAT 0x00020000 // ver. >= 21
534#define SUPLA_BIT_FUNC_HVAC_THERMOSTAT_HEAT_COOL 0x00040000 // ver. >= 21
535#define SUPLA_BIT_FUNC_HVAC_THERMOSTAT_DIFFERENTIAL 0x00080000 // ver. >= 21
536#define SUPLA_BIT_FUNC_HVAC_DOMESTIC_HOT_WATER 0x00100000 // ver. >= 21
537#define SUPLA_BIT_FUNC_TERRACE_AWNING 0x00200000 // ver. >= 24
538#define SUPLA_BIT_FUNC_PROJECTOR_SCREEN 0x00400000 // ver. >= 24
539#define SUPLA_BIT_FUNC_CURTAIN 0x00800000 // ver. >= 24
540#define SUPLA_BIT_FUNC_VERTICAL_BLIND 0x01000000 // ver. >= 24
541#define SUPLA_BIT_FUNC_ROLLER_GARAGE_DOOR 0x02000000 // ver. >= 24
542#define SUPLA_BIT_FUNC_PUMPSWITCH 0x04000000 // ver. >= 25
543#define SUPLA_BIT_FUNC_HEATORCOLDSOURCESWITCH 0x08000000 // ver. >= 25
544
545// Channel's RGBW_FuncList bit values (only for SUPLA_CHANNELTYPE_DIMMER,
546// SUPLA_CHANNELTYPE_RGBLEDCONTROLLER, SUPLA_CHANNELTYPE_DIMMERANDRGBLED):
547#define SUPLA_RGBW_BIT_FUNC_DIMMER 0x00000001 // ver. >= 28
548#define SUPLA_RGBW_BIT_FUNC_RGB_LIGHTING 0x00000002 // ver. >= 28
549#define SUPLA_RGBW_BIT_FUNC_DIMMER_AND_RGB_LIGHTING 0x00000004 // ver. >= 28
550#define SUPLA_RGBW_BIT_FUNC_DIMMER_CCT 0x00000008 // ver. >= 28
551#define SUPLA_RGBW_BIT_FUNC_DIMMER_CCT_AND_RGB 0x00000010 // ver. >= 28
552
553#define SUPLA_EVENT_CONTROLLINGTHEGATEWAYLOCK 10
554#define SUPLA_EVENT_CONTROLLINGTHEGATE 20
555#define SUPLA_EVENT_CONTROLLINGTHEGARAGEDOOR 30
556#define SUPLA_EVENT_CONTROLLINGTHEDOORLOCK 40
557#define SUPLA_EVENT_CONTROLLINGTHEROLLERSHUTTER 50
558#define SUPLA_EVENT_TERRACE_AWNING 51 // ver. >= 24
559#define SUPLA_EVENT_CURTAIN 52 // ver. >= 24
560#define SUPLA_EVENT_PROJECTOR_SCREEN 53 // ver. >= 24
561#define SUPLA_EVENT_ROLLER_GARAGE_DOOR 54 // ver. >= 24
562#define SUPLA_EVENT_CONTROLLINGTHEROOFWINDOW 55
563#define SUPLA_EVENT_CONTROLLINGTHEFACADEBLIND 56 // ver. >= 24
564#define SUPLA_EVENT_VERTICAL_BLIND 57 // ver. >= 24
565#define SUPLA_EVENT_POWERONOFF 60
566#define SUPLA_EVENT_LIGHTONOFF 70
567#define SUPLA_EVENT_STAIRCASETIMERONOFF 80 // ver. >= 9
568#define SUPLA_EVENT_VALVEOPENCLOSE 90 // ver. >= 12
569#define SUPLA_EVENT_SET_BRIDGE_VALUE_FAILED 100 // ver. >= 12
570
571#define SUPLA_URL_PROTO_HTTP 0x01
572#define SUPLA_URL_PROTO_HTTPS 0x02
573
574#define SUPLA_PLATFORM_UNKNOWN 0
575#define SUPLA_PLATFORM_ESP8266 1
576
577#define SUPLA_TARGET_CHANNEL 0
578#define SUPLA_TARGET_GROUP 1
579#define SUPLA_TARGET_IODEVICE 2
580
581#define SUPLA_MFR_UNKNOWN 0
582#define SUPLA_MFR_ACSOFTWARE 1
583#define SUPLA_MFR_TRANSCOM 2
584#define SUPLA_MFR_LOGI 3
585#define SUPLA_MFR_ZAMEL 4
586#define SUPLA_MFR_NICE 5
587#define SUPLA_MFR_ITEAD 6
588#define SUPLA_MFR_DOYLETRATT 7
589#define SUPLA_MFR_HEATPOL 8
590#define SUPLA_MFR_FAKRO 9
591#define SUPLA_MFR_PEVEKO 10
592#define SUPLA_MFR_WEKTA 11
593#define SUPLA_MFR_STA_SYSTEM 12
594#define SUPLA_MFR_DGF 13
595#define SUPLA_MFR_COMELIT 14
596#define SUPLA_MFR_POLIER 15
597#define SUPLA_MFR_ERGO_ENERGIA 16
598#define SUPLA_MFR_SOMEF 17
599#define SUPLA_MFR_AURATON 18
600#define SUPLA_MFR_HPD 19
601#define SUPLA_MFR_LUKFUD 20
602#define SUPLA_MFR_WALA 21
603
604// BIT map definition for TDS_SuplaRegisterDevice_*::Flags (32 bit)
605#define SUPLA_DEVICE_FLAG_CALCFG_ENTER_CFG_MODE 0x0010 // ver. >= 17
606#define SUPLA_DEVICE_FLAG_SLEEP_MODE_ENABLED 0x0020 // ver. >= 18
607#define SUPLA_DEVICE_FLAG_CALCFG_SET_TIME 0x0040 // ver. >= 21
608#define SUPLA_DEVICE_FLAG_DEVICE_CONFIG_SUPPORTED 0x0080 // ver. >= 21
609#define SUPLA_DEVICE_FLAG_DEVICE_LOCKED 0x0100 // ver. >= 22
610#define SUPLA_DEVICE_FLAG_CALCFG_SUBDEVICE_PAIRING 0x0200 // ver. >= 25
611#define SUPLA_DEVICE_FLAG_CALCFG_IDENTIFY_DEVICE 0x0400 // ver. >= 25
612#define SUPLA_DEVICE_FLAG_CALCFG_RESTART_DEVICE 0x0800 // ver. >= 25
613#define SUPLA_DEVICE_FLAG_ALWAYS_ALLOW_CHANNEL_DELETION 0x1000 // ver. >= 25
614#define SUPLA_DEVICE_FLAG_BLOCK_ADDING_CHANNELS_AFTER_DELETION \
615 0x2000 // ver. >= 25
616#define SUPLA_DEVICE_FLAG_CALCFG_FACTORY_RESET_SUPPORTED 0x4000 // ver. >= 28
617#define SUPLA_DEVICE_FLAG_AUTOMATIC_FIRMWARE_UPDATE_SUPPORTED \
618 0x8000 // ver. >= 28
619#define SUPLA_DEVICE_FLAG_CALCFG_SET_CFG_MODE_PASSWORD_SUPPORTED \
620 0x10000 // ver. >= 28
621
622// BIT map definition for TDS_SuplaRegisterDevice_F::ConfigFields (64 bit)
623// type: TDeviceConfig_StatusLed
624#define SUPLA_DEVICE_CONFIG_FIELD_STATUS_LED (1ULL << 0) // v. >= 21
625// type: TDeviceConfig_ScreenBrightness
626#define SUPLA_DEVICE_CONFIG_FIELD_SCREEN_BRIGHTNESS (1ULL << 1) // v. >= 21
627// type: TDeviceConfig_ButtonVolume
628#define SUPLA_DEVICE_CONFIG_FIELD_BUTTON_VOLUME (1ULL << 2) // v. >= 21
629// type: TDeviceConfig_DisableUserInterface
630#define SUPLA_DEVICE_CONFIG_FIELD_DISABLE_USER_INTERFACE \
631 (1ULL << 3) // v. >= 21
632// type: TDeviceConfig_AutomaticTimeSync
633#define SUPLA_DEVICE_CONFIG_FIELD_AUTOMATIC_TIME_SYNC (1ULL << 4) // v. >= 21
634// type: TDeviceConfig_HomeScreenOffDelay
635#define SUPLA_DEVICE_CONFIG_FIELD_HOME_SCREEN_OFF_DELAY (1ULL << 5) // v. >= 21
636// type: TDeviceConfig_HomeScreenContent
637#define SUPLA_DEVICE_CONFIG_FIELD_HOME_SCREEN_CONTENT (1ULL << 6) // v. >= 21
638// type: TDeviceConfig_HomeScreenOffDelayType
639#define SUPLA_DEVICE_CONFIG_FIELD_HOME_SCREEN_OFF_DELAY_TYPE \
640 (1ULL << 7) // v. >= 24
641// type: TDeviceConfig_PowerStatusLed
642#define SUPLA_DEVICE_CONFIG_FIELD_POWER_STATUS_LED (1ULL << 8) // v. >= 25
643// type: TDeviceConfig_Modbus
644#define SUPLA_DEVICE_CONFIG_FIELD_MODBUS (1ULL << 9) // v. >= 27
645// type: TDeviceConfig_FirmwareUpdate
646#define SUPLA_DEVICE_CONFIG_FIELD_FIRMWARE_UPDATE (1ULL << 10) // v. >= 28
647
648// BIT map definition for TDS_SuplaDeviceChannel_C::Flags (32 bit)
649// BIT map definition for TDS_SuplaDeviceChannel_D::Flags (64 bit)
650// BIT map definition for TDS_SuplaDeviceChannel_E::Flags (64 bit)
651#define SUPLA_CHANNEL_FLAG_ZWAVE_BRIDGE 0x0001 // ver. >= 12
652#define SUPLA_CHANNEL_FLAG_IR_BRIDGE 0x0002 // ver. >= 12 DEPRECATED
653#define SUPLA_CHANNEL_FLAG_RF_BRIDGE 0x0004 // ver. >= 12 DEPRECATED
654#define SUPLA_CHANNEL_FLAG_OCR 0x0008 // ver. >= 26
655#define SUPLA_CHANNEL_FLAG_FLOOD_SENSORS_SUPPORTED 0x0010 // ver. >= 27
656#define SUPLA_CHANNEL_FLAG_FILL_LEVEL_REPORTING_IN_FULL_RANGE \
657 0x0020 // ver. >= 27
658#define SUPLA_CHANNEL_FLAG_VALVE_MOTOR_ALARM_SUPPORTED 0x0040 // ver. >= 27
659#define SUPLA_CHANNEL_FLAG_RS_SBS_AND_STOP_ACTIONS 0x0080 // ver. >= 17
660#define SUPLA_CHANNEL_FLAG_RGBW_COMMANDS_SUPPORTED 0x0100 // ver. >= 21
661#define SUPLA_CHANNEL_FLAG_ALWAYS_ALLOW_CHANNEL_DELETION 0x0200 // ver. >= 27
662// Free bits for future use: 0x0400, 0x0800
663#define SUPLA_CHANNEL_FLAG_RS_AUTO_CALIBRATION 0x1000 // ver. >= 15
664#define SUPLA_CHANNEL_FLAG_CALCFG_RESET_COUNTERS 0x2000 // ver. >= 15
665#define SUPLA_CHANNEL_FLAG_CALCFG_RECALIBRATE 0x4000 // ver. >= 15
666#define SUPLA_CHANNEL_FLAG_CALCFG_IDENTIFY_SUBDEVICE 0x8000 // ver. >= 25
667#define SUPLA_CHANNEL_FLAG_CHANNELSTATE 0x00010000 // ver. >= 12
668#define SUPLA_CHANNEL_FLAG_PHASE1_UNSUPPORTED 0x00020000 // ver. >= 12
669#define SUPLA_CHANNEL_FLAG_PHASE2_UNSUPPORTED 0x00040000 // ver. >= 12
670#define SUPLA_CHANNEL_FLAG_PHASE3_UNSUPPORTED 0x00080000 // ver. >= 12
671#define SUPLA_CHANNEL_FLAG_TIME_SETTING_NOT_AVAILABLE 0x00100000 // ver. >= 12
672#define SUPLA_CHANNEL_FLAG_RSA_ENCRYPTED_PIN_REQUIRED 0x00200000 // ver. >= 12
673#define SUPLA_CHANNEL_FLAG_OFFLINE_DURING_REGISTRATION 0x00400000 // ver. >= 12
674#define SUPLA_CHANNEL_FLAG_ZIGBEE_BRIDGE 0x00800000 // ver. >= 12
675#define SUPLA_CHANNEL_FLAG_COUNTDOWN_TIMER_SUPPORTED 0x01000000 // ver. >= 12
676#define SUPLA_CHANNEL_FLAG_LIGHTSOURCELIFESPAN_SETTABLE \
677 0x02000000 // ver. >= 12
678#define SUPLA_CHANNEL_FLAG_POSSIBLE_SLEEP_MODE_deprecated \
679 0x04000000 // ver. >= 12 DEPRECATED
680#define SUPLA_CHANNEL_FLAG_RUNTIME_CHANNEL_CONFIG_UPDATE \
681 0x08000000 // ver. >= 21
682#define SUPLA_CHANNEL_FLAG_WEEKLY_SCHEDULE 0x10000000 // ver. >= 21
683#define SUPLA_CHANNEL_FLAG_HAS_PARENT 0x20000000 // ver. >= 21
684#define SUPLA_CHANNEL_FLAG_CALCFG_RESTART_SUBDEVICE 0x40000000 // ver. >= 25
685#define SUPLA_CHANNEL_FLAG_BATTERY_COVER_AVAILABLE 0x80000000 // ver. >= 25
686#pragma pack(push, 1)
687
688typedef struct {
689 char tag[SUPLA_TAG_SIZE];
690 unsigned char version;
691 unsigned _supla_int_t rr_id; // Request/Response ID
692 unsigned _supla_int_t call_id;
693 unsigned _supla_int_t data_size;
694 char data[SUPLA_MAX_DATA_SIZE]; // Last variable in struct!
696
697typedef struct {
698 // server -> device|client
699 unsigned char proto_version_min;
700 unsigned char proto_version;
701 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
703
704typedef struct {
705 // server -> device|client
706 unsigned char server_version_min;
707 unsigned char server_version;
709
710typedef struct {
711 // device|client -> server
712 struct _supla_timeval now;
714
715// Compatibility with ESP8266
717 _supla_int_t tv_sec;
718 _supla_int_t tv_usec;
719};
720
721typedef struct {
722 // device|client -> server
723 struct timeval_compat now;
725
726typedef struct {
727 // server -> device|client
728 struct _supla_timeval now;
730
731typedef struct {
732 // device|client -> server
733 unsigned char activity_timeout;
735
736typedef struct {
737 // server -> device|client
738 unsigned char activity_timeout;
739 unsigned char min;
740 unsigned char max;
742
743typedef struct {
744 char value[SUPLA_CHANNELVALUE_SIZE];
745 char sub_value[SUPLA_CHANNELVALUE_SIZE]; // For example sensor value
747
748typedef struct {
749 char value[SUPLA_CHANNELVALUE_SIZE];
750 char sub_value[SUPLA_CHANNELVALUE_SIZE]; // For example sensor value
751 char sub_value_type; // SUBV_TYPE_
753
754#define SUBV_TYPE_NOT_SET_OR_OFFLINE 0
755#define SUBV_TYPE_SENSOR 1
756#define SUBV_TYPE_ELECTRICITY_MEASUREMENTS 2
757#define SUBV_TYPE_IC_MEASUREMENTS 3
758
759#define EV_TYPE_NONE 0
760#ifdef USE_DEPRECATED_EMEV_V1
761#define EV_TYPE_ELECTRICITY_METER_MEASUREMENT_V1 10
762#endif /*USE_DEPRECATED_EMEV_V1*/
763#ifdef USE_DEPRECATED_EMEV_V2
764#define EV_TYPE_ELECTRICITY_METER_MEASUREMENT_V2 12
765#endif /*USE_DEPRECATED_EMEV_V2*/
766#define EV_TYPE_ELECTRICITY_METER_MEASUREMENT_V3 14
767#define EV_TYPE_IMPULSE_COUNTER_DETAILS_V1 20
768#define EV_TYPE_THERMOSTAT_DETAILS_V1 30
769#define EV_TYPE_CHANNEL_STATE_V1 40
770#define EV_TYPE_TIMER_STATE_V1 50
771#define EV_TYPE_TIMER_STATE_V1_SEC 51
772#define EV_TYPE_CHANNEL_AND_TIMER_STATE_V1 60
773#define EV_TYPE_MULTI_VALUE 100
774
775#define CALCFG_TYPE_THERMOSTAT_DETAILS_V1 10
776
777typedef struct {
778 char type; // EV_TYPE_
779 unsigned _supla_int_t size;
780 char value[SUPLA_CHANNELEXTENDEDVALUE_SIZE]; // Last variable in struct!
781} TSuplaChannelExtendedValue; // v. >= 10
782
783typedef struct {
784 // server -> client
785 char EOL; // End Of List
786 _supla_int_t Id;
787 unsigned _supla_int_t
788 CaptionSize; // including the terminating null byte ('\0')
789 char Caption[SUPLA_LOCATION_CAPTION_MAXSIZE]; // Last variable in struct!
791
792typedef struct {
793 // server -> client
794 _supla_int_t count;
795 _supla_int_t total_left;
797 items[SUPLA_LOCATIONPACK_MAXCOUNT]; // Last variable in struct!
799
800typedef struct {
801 // device -> server
802 unsigned char Number;
803 _supla_int_t Type;
804 char value[SUPLA_CHANNELVALUE_SIZE];
806
807typedef struct {
808 // device -> server
809
810 _supla_int_t LocationID;
811 char LocationPWD[SUPLA_LOCATION_PWD_MAXSIZE]; // UTF8
812
813 char GUID[SUPLA_GUID_SIZE];
814 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
815 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
816
817 unsigned char channel_count;
819 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
821
822typedef struct {
823 // device -> server
824
825 unsigned char Number;
826 _supla_int_t Type;
827
828 _supla_int_t FuncList;
829 _supla_int_t Default;
830
831 char value[SUPLA_CHANNELVALUE_SIZE];
832} TDS_SuplaDeviceChannel_B; // ver. >= 2
833
834typedef struct {
835 unsigned char relatedChannelNumber; // ChannelNumber + 1.
836 unsigned _supla_int_t disablesLocalOperation;
838
839#define SUPLA_HVAC_VALUE_FLAG_SETPOINT_TEMP_HEAT_SET (1ULL << 0)
840#define SUPLA_HVAC_VALUE_FLAG_SETPOINT_TEMP_COOL_SET (1ULL << 1)
841// Tells if output responsible for heating function is enabled
842#define SUPLA_HVAC_VALUE_FLAG_HEATING (1ULL << 2)
843// Tells if output responsible for cooling function is enabled
844#define SUPLA_HVAC_VALUE_FLAG_COOLING (1ULL << 3)
845// Tells if channel works in Weekly Schedule mode. If set to 0, then it works
846// in manual mode
847#define SUPLA_HVAC_VALUE_FLAG_WEEKLY_SCHEDULE (1ULL << 4)
848#define SUPLA_HVAC_VALUE_FLAG_COUNTDOWN_TIMER (1ULL << 5)
849// FAN flag tells if fan function is enabled
850#define SUPLA_HVAC_VALUE_FLAG_FAN_ENABLED (1ULL << 6)
851#define SUPLA_HVAC_VALUE_FLAG_THERMOMETER_ERROR (1ULL << 7)
852#define SUPLA_HVAC_VALUE_FLAG_CLOCK_ERROR (1ULL << 8)
853#define SUPLA_HVAC_VALUE_FLAG_FORCED_OFF_BY_SENSOR (1ULL << 9)
854// Only for SUPLA_CHANNELFNC_HVAC_THERMOSTAT
855// If the COOL flag is not set, it means that the thermostat is working in
856// heating mode.
857#define SUPLA_HVAC_VALUE_FLAG_COOL (1ULL << 10)
858#define SUPLA_HVAC_VALUE_FLAG_WEEKLY_SCHEDULE_TEMPORAL_OVERRIDE (1ULL << 11)
859#define SUPLA_HVAC_VALUE_FLAG_BATTERY_COVER_OPEN (1ULL << 12)
860#define SUPLA_HVAC_VALUE_FLAG_CALIBRATION_ERROR (1ULL << 13)
861#define SUPLA_HVAC_VALUE_FLAG_ANTIFREEZE_OVERHEAT_ACTIVE (1ULL << 14)
862
863// HVAC modes are used in channel value (as a command from server or
864// as a status response from device to server) and in weekly schedules
865// programs. Programs can't use value TURN_ON and WEEKLY_SCHEDULE
866// Use SUPLA_HVAC_MODE_NOT_SET if you don't want to modify current mode, but
867// only to alter tempreature setpoints.
868#define SUPLA_HVAC_MODE_NOT_SET 0
869#define SUPLA_HVAC_MODE_OFF 1
870#define SUPLA_HVAC_MODE_HEAT 2
871#define SUPLA_HVAC_MODE_COOL 3
872#define SUPLA_HVAC_MODE_HEAT_COOL 4
873#define SUPLA_HVAC_MODE_FAN_ONLY 6
874#define SUPLA_HVAC_MODE_DRY 7
875// TURN ON mode is a command. Device will use it to turn on and then it will
876// restore previous mode which was used before turn off.
877#define SUPLA_HVAC_MODE_CMD_TURN_ON 8
878// Weekly schedule is a command. Device will use it to enable weekly schedule
879// mode and then it will set its mode according to schedule
880#define SUPLA_HVAC_MODE_CMD_WEEKLY_SCHEDULE 9
881// Switch to manual mode - it will restore previously used manual mode and
882// restore manual mode temperature setpoints when no new setpoints are given
883// in value.
884// It can be also used to switch to default manual mode, when no manual mode
885// was used earlier.
886#define SUPLA_HVAC_MODE_CMD_SWITCH_TO_MANUAL 10
887
888typedef struct {
889 unsigned char IsOn; // DS: 0/1 (for off/on) or 2..102 (for 0-100%)
890 unsigned char Mode; // SUPLA_HVAC_MODE_
891 _supla_int16_t
892 SetpointTemperatureHeat; // * 0.01 Celcius degree - used for heating
893 _supla_int16_t
894 SetpointTemperatureCool; // * 0.01 - Celcius degree used for cooling
895 unsigned _supla_int16_t Flags; // SUPLA_HVAC_VALUE_FLAG_
896} THVACValue;
897
898typedef struct {
899 // device -> server
900
901 unsigned char Number;
902 _supla_int_t Type;
903
904 union {
905 _supla_int_t FuncList;
906 unsigned _supla_int_t ActionTriggerCaps; // ver. >= 16
907 };
908
909 _supla_int_t Default;
910 _supla_int_t Flags;
911
912 union {
913 char value[SUPLA_CHANNELVALUE_SIZE];
914 TActionTriggerProperties actionTriggerProperties; // ver. >= 16
915 THVACValue hvacValue;
916 };
917} TDS_SuplaDeviceChannel_C; // ver. >= 10
918
919// Channel state flag values:
920#define SUPLA_CHANNEL_OFFLINE_FLAG_ONLINE 0
921#define SUPLA_CHANNEL_OFFLINE_FLAG_OFFLINE 1
922#define SUPLA_CHANNEL_OFFLINE_FLAG_ONLINE_BUT_NOT_AVAILABLE 2
923#define SUPLA_CHANNEL_OFFLINE_FLAG_OFFLINE_REMOTE_WAKEUP_NOT_SUPPORTED 3
924#define SUPLA_CHANNEL_OFFLINE_FLAG_FIRMWARE_UPDATE_ONGOING 4
925
926// Update below MAX value when new state is added to the list
927#define SUPLA_CHANNEL_OFFLINE_FLAG_MAX \
928 SUPLA_CHANNEL_OFFLINE_FLAG_FIRMWARE_UPDATE_ONGOING
929
930// Only in ONLINE state, ValidityTimeSec and value variables are used.
931// OFFLINE_REMOTE_WAKEUP_NOT_SUPPORTED - device doesn't support remote wakeup,
932// so we wait for it to initiate the communication.
933
934// Channel online flag values (only online/offline 0/1 values are exchanged,
935// compared to state flag values):
936#define SUPLA_CHANNEL_ONLINE_FLAG_ONLINE 1
937#define SUPLA_CHANNEL_ONLINE_FLAG_OFFLINE 0
938#define SUPLA_CHANNEL_ONLINE_FLAG_ONLINE_BUT_NOT_AVAILABLE \
939 SUPLA_CHANNEL_OFFLINE_FLAG_ONLINE_BUT_NOT_AVAILABLE
940#define SUPLA_CHANNEL_ONLINE_FLAG_STATE_REMOTE_WAKEUP_NOT_SUPPORTED \
941 SUPLA_CHANNEL_OFFLINE_FLAG_OFFLINE_REMOTE_WAKEUP_NOT_SUPPORTED
942#define SUPLA_CHANNEL_ONLINE_FLAG_FIRMWARE_UPDATE_ONGOING \
943 SUPLA_CHANNEL_OFFLINE_FLAG_FIRMWARE_UPDATE_ONGOING
944
945typedef struct {
946 // device -> server
947
948 unsigned char Number;
949 _supla_int_t Type;
950
951 union {
952 _supla_int_t FuncList;
953 unsigned _supla_int_t ActionTriggerCaps; // ver. >= 16
954 };
955
956 _supla_int_t Default;
957 _supla_int64_t Flags;
958
959 unsigned char Offline;
960 unsigned _supla_int_t ValueValidityTimeSec;
961
962 union {
963 char value[SUPLA_CHANNELVALUE_SIZE];
964 TActionTriggerProperties actionTriggerProperties; // ver. >= 16
965 THVACValue hvacValue;
966 };
967
968 unsigned char DefaultIcon;
969} TDS_SuplaDeviceChannel_D; // ver. >= 23
970
971typedef struct {
972 // device -> server
973
974 unsigned char Number;
975 _supla_int_t Type;
976
977 union {
978 _supla_int_t FuncList;
979 unsigned _supla_int_t ActionTriggerCaps; // ver. >= 16 only for
980 // SUPLA_CHANNELTYPE_ACTIONTRIGGER
981 unsigned _supla_int_t
982 RGBW_FuncList; // ver. >= 28 only for SUPLA_CHANNELTYPE_DIMMER,
983 // SUPLA_CHANNELTYPE_RGBLEDCONTROLLER,
984 // SUPLA_CHANNELTYPE_DIMMERANDRGBLED
985 };
986
987 _supla_int_t Default;
988 _supla_int64_t Flags;
989
990 unsigned char Offline; // see SUPLA_CHANNEL_OFFLINE_FLAG_
991
992 unsigned _supla_int_t ValueValidityTimeSec;
993
994 union {
995 char value[SUPLA_CHANNELVALUE_SIZE];
996 TActionTriggerProperties actionTriggerProperties; // ver. >= 16
997 THVACValue hvacValue;
998 };
999
1000 unsigned char DefaultIcon;
1001 unsigned char SubDeviceId; // 0 - no subdevice, 1..255 - subdevice id
1002} TDS_SuplaDeviceChannel_E; // ver. >= 25
1003
1004typedef struct {
1005 // device -> server
1006
1007 _supla_int_t LocationID;
1008 char LocationPWD[SUPLA_LOCATION_PWD_MAXSIZE]; // UTF8
1009
1010 char GUID[SUPLA_GUID_SIZE];
1011 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1012 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1013
1014 unsigned char channel_count;
1016 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1017} TDS_SuplaRegisterDevice_B; // ver. >= 2
1018
1019typedef struct {
1020 // device -> server
1021
1022 _supla_int_t LocationID;
1023 char LocationPWD[SUPLA_LOCATION_PWD_MAXSIZE]; // UTF8
1024
1025 char GUID[SUPLA_GUID_SIZE];
1026 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1027 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1028
1029 char ServerName[SUPLA_SERVER_NAME_MAXSIZE]; // ServerName is equal to Server
1030 // host name/IP
1031
1032 unsigned char channel_count;
1034 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1035} TDS_SuplaRegisterDevice_C; // ver. >= 6
1036
1037typedef struct {
1038 // device -> server
1039
1040 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1041 char AuthKey[SUPLA_AUTHKEY_SIZE];
1042
1043 char GUID[SUPLA_GUID_SIZE];
1044
1045 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1046 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1047
1048 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1049
1050 unsigned char channel_count;
1052 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1053} TDS_SuplaRegisterDevice_D; // ver. >= 7
1054
1055typedef struct {
1056 // device -> server
1057
1058 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1059 char AuthKey[SUPLA_AUTHKEY_SIZE];
1060
1061 char GUID[SUPLA_GUID_SIZE];
1062
1063 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1064 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1065
1066 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1067
1068 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1069 _supla_int16_t ManufacturerID;
1070 _supla_int16_t ProductID;
1071
1072 unsigned char channel_count;
1074 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1075} TDS_SuplaRegisterDevice_E; // ver. >= 10
1076
1077typedef struct {
1078 // device -> server
1079
1080 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1081 char AuthKey[SUPLA_AUTHKEY_SIZE];
1082
1083 char GUID[SUPLA_GUID_SIZE];
1084
1085 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1086 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1087
1088 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1089
1090 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1091 _supla_int16_t ManufacturerID;
1092 _supla_int16_t ProductID;
1093
1094 unsigned char channel_count;
1096
1097typedef struct {
1098 // device -> server
1099
1100 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1101 char AuthKey[SUPLA_AUTHKEY_SIZE];
1102
1103 char GUID[SUPLA_GUID_SIZE];
1104
1105 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1106 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1107
1108 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1109
1110 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1111 _supla_int16_t ManufacturerID;
1112 _supla_int16_t ProductID;
1113
1114 unsigned char channel_count;
1116 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1117} TDS_SuplaRegisterDevice_F; // ver. >= 23
1118
1119typedef struct {
1120 // device -> server
1121
1122 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1123 char AuthKey[SUPLA_AUTHKEY_SIZE];
1124
1125 char GUID[SUPLA_GUID_SIZE];
1126
1127 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1128 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1129
1130 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1131
1132 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1133 _supla_int16_t ManufacturerID;
1134 _supla_int16_t ProductID;
1135
1136 unsigned char channel_count;
1138 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1139} TDS_SuplaRegisterDevice_G; // ver. >= 25
1140
1141typedef struct {
1142 // server -> device
1143
1144 _supla_int_t result_code;
1145 unsigned char activity_timeout;
1146 unsigned char version;
1147 unsigned char version_min;
1149
1150#define CHANNEL_REPORT_CHANNEL_REGISTERED (1 << 0)
1151#define CHANNEL_REPORT_INCORRECT_CHANNEL_TYPE (1 << 1)
1152#define CHANNEL_REPORT_MAXSIZE 256
1153
1154typedef struct {
1155 // server -> device
1156
1157 _supla_int_t result_code;
1158 unsigned char activity_timeout;
1159 unsigned char version;
1160 unsigned char version_min;
1161
1162 unsigned _supla_int16_t channel_report_size;
1163 unsigned char channel_report
1164 [CHANNEL_REPORT_MAXSIZE]; // One byte per channel. The meaning of the
1165 // bits is determined by CHANNEL_REPORT_*.
1166} TSD_SuplaRegisterDeviceResult_B; // ver. >= 25
1167
1168typedef struct {
1169 // device -> server
1170
1171 unsigned char ChannelNumber;
1172 char value[SUPLA_CHANNELVALUE_SIZE];
1174
1175typedef struct {
1176 // device -> server
1177
1178 unsigned char ChannelNumber;
1179 unsigned char Offline;
1180 char value[SUPLA_CHANNELVALUE_SIZE];
1181} TDS_SuplaDeviceChannelValue_B; // v. >= 12
1182
1183typedef struct {
1184 // device -> server
1185
1186 unsigned char ChannelNumber;
1187 unsigned char Offline; // see SUPLA_CHANNEL_OFFLINE_FLAG_
1188
1189 unsigned _supla_int_t ValidityTimeSec;
1190 char value[SUPLA_CHANNELVALUE_SIZE];
1191} TDS_SuplaDeviceChannelValue_C; // v. >= 12
1192
1193typedef struct {
1194 // device -> server
1195
1196 unsigned char ChannelNumber;
1197 TSuplaChannelExtendedValue value; // Last variable in struct!
1199
1200typedef struct {
1201 // server -> device
1202 _supla_int_t SenderID;
1203 unsigned char ChannelNumber;
1204 union {
1205 unsigned _supla_int_t DurationMS;
1206 unsigned _supla_int_t DurationSec; // ver. >= 21. Applies to HVAC
1207 };
1208
1209 char value[SUPLA_CHANNELVALUE_SIZE];
1211
1212typedef struct {
1213 // server -> device
1214 _supla_int_t SenderID;
1215 _supla_int_t GroupID;
1216 unsigned char EOL; // End Of List
1217 unsigned char ChannelNumber;
1218 union {
1219 unsigned _supla_int_t DurationMS;
1220 unsigned _supla_int_t DurationSec; // ver. >= 21. Applies to HVAC
1221 };
1222 char value[SUPLA_CHANNELVALUE_SIZE];
1223} TSD_SuplaChannelGroupNewValue; // v. >= 13
1224
1225typedef struct {
1226 // device -> server
1227 unsigned char ChannelNumber;
1228 _supla_int_t SenderID;
1229 char Success;
1231
1232typedef struct {
1233 // server -> client
1234
1235 char EOL; // End Of List
1236 _supla_int_t Id;
1237 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1238
1239 TSuplaChannelValue value;
1241
1242typedef struct {
1243 // server -> client
1244
1245 char EOL; // End Of List
1246 _supla_int_t Id;
1247 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1248
1250} TSC_SuplaChannelValue_B; // ver. >= 15
1251
1252typedef struct {
1253 // server -> client
1254 _supla_int_t Id;
1255
1256 TSuplaChannelExtendedValue value; // Last variable in struct!
1258
1259typedef struct {
1260 // server -> client
1261
1262 _supla_int_t count;
1263 _supla_int_t total_left;
1264
1266 items[SUPLA_CHANNELVALUE_PACK_MAXCOUNT]; // Last variable in struct!
1267} TSC_SuplaChannelValuePack; // ver. >= 9
1268
1269typedef struct {
1270 // server -> client
1271
1272 _supla_int_t count;
1273 _supla_int_t total_left;
1274
1276 items[SUPLA_CHANNELVALUE_PACK_MAXCOUNT]; // Last variable in struct!
1277} TSC_SuplaChannelValuePack_B; // ver. >= 15
1278
1279typedef struct {
1280 // server -> client
1281
1282 _supla_int_t count;
1283 _supla_int_t total_left;
1284 unsigned _supla_int_t pack_size;
1285
1286 char pack[SUPLA_CHANNELEXTENDEDVALUE_PACK_MAXDATASIZE]; // Last variable in
1287 // struct!
1288} TSC_SuplaChannelExtendedValuePack; // ver. >= 10
1289
1290typedef struct {
1291 // server -> client
1292 char EOL; // End Of List
1293
1294 _supla_int_t Id;
1295 _supla_int_t LocationID;
1296 _supla_int_t Func;
1297 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1298
1299 TSuplaChannelValue value;
1300
1301 unsigned _supla_int_t
1302 CaptionSize; // including the terminating null byte ('\0')
1303 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1305
1306typedef struct {
1307 // server -> client
1308
1309 _supla_int_t count;
1310 _supla_int_t total_left;
1312 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1314
1315typedef struct {
1316 // server -> client
1317 char EOL; // End Of List
1318
1319 _supla_int_t Id;
1320 _supla_int_t LocationID;
1321 _supla_int_t Func;
1322 _supla_int_t AltIcon;
1323 unsigned _supla_int_t Flags;
1324 unsigned char ProtocolVersion;
1325 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1326
1327 TSuplaChannelValue value;
1328
1329 unsigned _supla_int_t
1330 CaptionSize; // including the terminating null byte ('\0')
1331 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1332} TSC_SuplaChannel_B; // ver. >= 8
1333
1334typedef struct {
1335 // server -> client
1336
1337 _supla_int_t count;
1338 _supla_int_t total_left;
1340 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1341} TSC_SuplaChannelPack_B; // ver. >= 8
1342
1343typedef struct {
1344 // server -> client
1345 char EOL; // End Of List
1346
1347 _supla_int_t Id;
1348 _supla_int_t DeviceID;
1349 _supla_int_t LocationID;
1350 _supla_int_t Type;
1351 _supla_int_t Func;
1352 _supla_int_t AltIcon;
1353 _supla_int_t UserIcon;
1354 _supla_int16_t ManufacturerID;
1355 _supla_int16_t ProductID;
1356
1357 unsigned _supla_int_t Flags;
1358 unsigned char ProtocolVersion;
1359 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1360
1361 TSuplaChannelValue value;
1362
1363 unsigned _supla_int_t
1364 CaptionSize; // including the terminating null byte ('\0')
1365 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1366} TSC_SuplaChannel_C; // ver. >= 10
1367
1368typedef struct {
1369 // server -> client
1370 char EOL; // End Of List
1371
1372 _supla_int_t Id;
1373 _supla_int_t DeviceID;
1374 _supla_int_t LocationID;
1375 _supla_int_t Type;
1376 _supla_int_t Func;
1377 _supla_int_t AltIcon;
1378 _supla_int_t UserIcon;
1379 _supla_int16_t ManufacturerID;
1380 _supla_int16_t ProductID;
1381
1382 unsigned _supla_int_t Flags;
1383 unsigned char ProtocolVersion;
1384 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1385
1387
1388 unsigned _supla_int_t
1389 CaptionSize; // including the terminating null byte ('\0')
1390 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1391} TSC_SuplaChannel_D; // ver. >= 15
1392
1393typedef struct {
1394 // server -> client
1395 char EOL; // End Of List
1396
1397 _supla_int_t Id;
1398 _supla_int_t DeviceID;
1399 _supla_int_t LocationID;
1400 _supla_int_t Type;
1401 _supla_int_t Func;
1402 _supla_int_t AltIcon;
1403 _supla_int_t UserIcon;
1404 _supla_int16_t ManufacturerID;
1405 _supla_int16_t ProductID;
1406 unsigned _supla_int_t DefaultConfigCRC32;
1407
1408 unsigned _supla_int64_t Flags;
1409 unsigned char ProtocolVersion;
1410 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1411
1413
1414 unsigned _supla_int_t
1415 CaptionSize; // including the terminating null byte ('\0')
1416 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1417} TSC_SuplaChannel_E; // ver. >= 23
1418
1419typedef struct {
1420 // server -> client
1421
1422 _supla_int_t count;
1423 _supla_int_t total_left;
1425 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1426} TSC_SuplaChannelPack_C; // ver. >= 10
1427
1428typedef struct {
1429 // server -> client
1430
1431 _supla_int_t count;
1432 _supla_int_t total_left;
1434 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1435} TSC_SuplaChannelPack_D; // ver. >= 15
1436
1437typedef struct {
1438 // server -> client
1439
1440 _supla_int_t count;
1441 _supla_int_t total_left;
1443 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1444} TSC_SuplaChannelPack_E; // ver. >= 23
1445
1446typedef struct {
1447 // server -> client
1448 char EOL; // End Of List
1449
1450 _supla_int_t Id;
1451 _supla_int_t LocationID;
1452 _supla_int_t Func;
1453 _supla_int_t AltIcon;
1454 unsigned _supla_int_t Flags;
1455
1456 unsigned _supla_int_t
1457 CaptionSize; // including the terminating null byte ('\0')
1458 char Caption[SUPLA_CHANNELGROUP_CAPTION_MAXSIZE]; // Last variable in struct!
1459} TSC_SuplaChannelGroup; // ver. >= 9
1460
1461typedef struct {
1462 // server -> client
1463 char EOL; // End Of List
1464
1465 _supla_int_t Id;
1466 _supla_int_t LocationID;
1467 _supla_int_t Func;
1468 _supla_int_t AltIcon;
1469 _supla_int_t UserIcon;
1470 unsigned _supla_int_t Flags;
1471
1472 unsigned _supla_int_t
1473 CaptionSize; // including the terminating null byte ('\0')
1474 char Caption[SUPLA_CHANNELGROUP_CAPTION_MAXSIZE]; // Last variable in struct!
1475} TSC_SuplaChannelGroup_B; // ver. >= 10
1476
1477typedef struct {
1478 // server -> client
1479
1480 _supla_int_t count;
1481 _supla_int_t total_left;
1483 items[SUPLA_CHANNELGROUP_PACK_MAXCOUNT]; // Last variable in struct!
1484} TSC_SuplaChannelGroupPack; // ver. >= 9
1485
1486typedef struct {
1487 // server -> client
1488
1489 _supla_int_t count;
1490 _supla_int_t total_left;
1492 items[SUPLA_CHANNELGROUP_PACK_MAXCOUNT]; // Last variable in struct!
1493} TSC_SuplaChannelGroupPack_B; // ver. >= 10
1494
1495typedef struct {
1496 // server -> client
1497 char EOL; // End Of List
1498
1499 _supla_int_t ChannelGroupID;
1500 _supla_int_t ChannelID;
1501} TSC_SuplaChannelGroupRelation; // ver. >= 9
1502
1503typedef struct {
1504 // server -> client
1505
1506 _supla_int_t count;
1507 _supla_int_t total_left;
1509 items[SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT]; // Last variable in
1510 // struct!
1512
1513#define CHANNEL_RELATION_TYPE_DEFAULT 0
1514#define CHANNEL_RELATION_TYPE_OPENING_SENSOR 1
1515#define CHANNEL_RELATION_TYPE_PARTIAL_OPENING_SENSOR 2
1516#define CHANNEL_RELATION_TYPE_METER 3
1517#define CHANNEL_RELATION_TYPE_MAIN_TERMOMETER 4
1518#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_FLOOR 5
1519#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_WATER 6
1520#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_GENERIC_HEATER 7
1521#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_GENERIC_COOLER 8
1522
1523#define CHANNEL_RELATION_TYPE_MASTER_THERMOSTAT 20
1524#define CHANNEL_RELATION_TYPE_HEAT_OR_COLD_SOURCE_SWITCH 21
1525#define CHANNEL_RELATION_TYPE_PUMP_SWITCH 22
1526
1527typedef struct {
1528 char EOL; // End Of List
1529 _supla_int_t Id;
1530 _supla_int_t ParentId;
1531 _supla_int16_t Type; // CHANNEL_RELATION_TYPE_
1532} TSC_SuplaChannelRelation; // ver. >= 21
1533
1534typedef struct {
1535 _supla_int_t count;
1536 _supla_int_t total_left;
1538 items[SUPLA_CHANNEL_RELATION_PACK_MAXCOUNT]; // Last variable in struct!
1540
1541typedef struct {
1542 // server -> client
1543 char EOL; // End Of List
1544
1545 _supla_int_t Id;
1546 _supla_int_t LocationId;
1547 _supla_int_t AltIcon;
1548 _supla_int_t UserIcon;
1549
1550 unsigned _supla_int16_t
1551 CaptionSize; // including the terminating null byte ('\0')
1552 char Caption[SUPLA_SCENE_CAPTION_MAXSIZE]; // Last variable in struct!
1553} TSC_SuplaScene; // ver. >= 18
1554
1555typedef struct {
1556 // server -> client
1557
1558 _supla_int_t count;
1559 _supla_int_t total_left;
1560 TSC_SuplaScene items[SUPLA_SCENE_PACK_MAXCOUNT]; // Last variable in struct!
1561} TSC_SuplaScenePack; // ver. >= 18
1562
1563typedef struct {
1564 // server -> client
1565 char EOL; // End Of List
1566
1567 _supla_int_t SceneId;
1568 unsigned _supla_int_t MillisecondsFromStart;
1569 unsigned _supla_int_t MillisecondsLeft;
1570
1571 _supla_int_t InitiatorId;
1572 unsigned _supla_int16_t
1573 InitiatorNameSize; // including the terminating null byte ('\0')
1574 char InitiatorName[SUPLA_INITIATOR_NAME_MAXSIZE]; // Last variable in struct!
1575} TSC_SuplaSceneState; // ver. >= 18
1576
1577typedef struct {
1578 // server -> client
1579
1580 _supla_int_t count;
1581 _supla_int_t total_left;
1583 items[SUPLA_SCENE_STATE_PACK_MAXCOUNT]; // Last variable in struct!
1584} TSC_SuplaSceneStatePack; // ver. >= 18
1585
1586#define ACTION_SUBJECT_TYPE_UNKNOWN 0
1587#define ACTION_SUBJECT_TYPE_CHANNEL 1
1588#define ACTION_SUBJECT_TYPE_CHANNEL_GROUP 2
1589#define ACTION_SUBJECT_TYPE_SCENE 3
1590#define ACTION_SUBJECT_TYPE_SCHEDULE 4
1591
1592#define ACTION_OPEN 10
1593#define ACTION_CLOSE 20
1594#define ACTION_SHUT 30
1595#define ACTION_REVEAL 40
1596#define ACTION_REVEAL_PARTIALLY 50
1597#define ACTION_SHUT_PARTIALLY 51
1598#define ACTION_TURN_ON 60
1599#define ACTION_TURN_ON_WITH_DURATION 61
1600#define ACTION_TURN_OFF 70
1601#define ACTION_TURN_OFF_WITH_DURATION 71
1602#define ACTION_SET_RGBW_PARAMETERS 80
1603#define ACTION_OPEN_CLOSE 90
1604#define ACTION_STOP 100
1605#define ACTION_TOGGLE 110
1606#define ACTION_UP_OR_STOP 140
1607#define ACTION_DOWN_OR_STOP 150
1608#define ACTION_STEP_BY_STEP 160
1609#define ACTION_UP 170
1610#define ACTION_DOWN 180
1611#define ACTION_ENABLE 200
1612#define ACTION_DISABLE 210
1613#define ACTION_SEND 220
1614#define ACTION_HVAC_SET_PARAMETERS 230
1615#define ACTION_HVAC_SWITCH_TO_PROGRAM_MODE 231
1616#define ACTION_HVAC_SWITCH_TO_MANUAL_MODE 232
1617#define ACTION_HVAC_SET_TEMPERATURES 233
1618#define ACTION_HVAC_SET_TEMPERATURE 234
1619#define ACTION_READ 1000
1620#define ACTION_SET 2000
1621#define ACTION_EXECUTE 3000
1622#define ACTION_INTERRUPT 3001
1623#define ACTION_INTERRUPT_AND_EXECUTE 3002
1624#define ACTION_COPY 10100
1625#define ACTION_FORWARD_OUTSIDE 10000
1626
1627#define SSP_FLAG_PERCENTAGE_AS_DELTA (1 << 0)
1628#define SSP_FLAG_TILT_AS_DELTA (1 << 1)
1629
1630typedef struct {
1631 char Percentage;
1632 unsigned char Flags; // SSP_FLAG_
1633 signed char Tilt;
1634 char Reserved[13];
1635} TAction_ShadingSystem_Parameters; // ver. >= 19
1636
1637typedef struct {
1638 char Brightness; // -1 == Ignore
1639 char ColorBrightness; // -1 == Ignore
1640 unsigned _supla_int_t Color; // 0 == Ignore
1641 char ColorRandom;
1642 char OnOff;
1643 char Command; // RGBW_COMMAND_, requires
1644 // SUPLA_CHANNEL_FLAG_RGBW_COMMANDS_SUPPORTED v. >= 21
1645 char WhiteTemperature; // ver. >= 28
1646 char Reserved[6];
1647} TAction_RGBW_Parameters; // ver. >= 19
1648
1649typedef struct {
1650 unsigned _supla_int_t DurationSec;
1651 unsigned char Mode; // for HVAC: SUPLA_HVAC_MODE_
1652 _supla_int16_t
1653 SetpointTemperatureHeat; // * 0.01 Celcius degree - used for heating
1654 _supla_int16_t
1655 SetpointTemperatureCool; // * 0.01 - Celcius degree used for coolingx
1656 unsigned _supla_int16_t Flags; // SUPLA_HVAC_VALUE_FLAG_
1658
1659typedef struct {
1660 _supla_int_t ActionId;
1661 _supla_int_t SubjectId;
1662 unsigned char SubjectType;
1663 unsigned _supla_int16_t ParamSize;
1664 char Param[SUPLA_ACTION_PARAM_MAXSIZE];
1665} TCS_Action; // ver. >= 19
1666
1667typedef struct {
1668 _supla_int_t AccessID;
1669 char AccessIDpwd[SUPLA_ACCESSID_PWD_MAXSIZE]; // UTF8
1670 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1671 char AuthKey[SUPLA_AUTHKEY_SIZE];
1672 char GUID[SUPLA_GUID_SIZE];
1673 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1674} TCS_ClientAuthorizationDetails; // ver. >= 19
1675
1676typedef struct {
1678 TCS_Action Action;
1679} TCS_ActionWithAuth; // ver. >= 19
1680
1681typedef struct {
1682 unsigned char ResultCode;
1683 _supla_int_t ActionId;
1684 _supla_int_t SubjectId;
1685 _supla_int_t SubjectType;
1686} TSC_ActionExecutionResult; // ver. >= 19
1687
1688typedef struct {
1689 // server -> client
1690 unsigned char ResultCode;
1691 _supla_int_t ChannelId; // Alias SubjectId
1692 _supla_int_t Function;
1693
1695 TSuplaChannelExtendedValue ExtendedValue; // Last variable in struct!
1696} TSC_GetChannelValueResult; // ver. >= 19;
1697
1698typedef struct {
1700 _supla_int_t ChannelId;
1701} TCS_GetChannelValueWithAuth; // ver. >= 19
1702
1703typedef struct {
1704 // client -> server
1705
1706 _supla_int_t AccessID;
1707 char AccessIDpwd[SUPLA_ACCESSID_PWD_MAXSIZE]; // UTF8
1708
1709 char GUID[SUPLA_GUID_SIZE];
1710 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1711 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1713
1714typedef struct {
1715 // client -> server
1716
1717 _supla_int_t AccessID;
1718 char AccessIDpwd[SUPLA_ACCESSID_PWD_MAXSIZE]; // UTF8
1719
1720 char GUID[SUPLA_GUID_SIZE];
1721 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1722 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1723
1724 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1725} TCS_SuplaRegisterClient_B; // ver. >= 6
1726
1727typedef struct {
1728 // client -> server
1729
1730 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1731 char AuthKey[SUPLA_AUTHKEY_SIZE];
1732
1733 char GUID[SUPLA_GUID_SIZE];
1734 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1735 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1736
1737 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1738} TCS_SuplaRegisterClient_C; // ver. >= 7
1739
1740typedef struct {
1741 // client -> server
1742
1743 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1744 char Password[SUPLA_PASSWORD_MAXSIZE]; // Optional - UTF8
1745 char AuthKey[SUPLA_AUTHKEY_SIZE];
1746
1747 char GUID[SUPLA_GUID_SIZE];
1748 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1749 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1750
1751 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1752} TCS_SuplaRegisterClient_D; // ver. >= 12
1753
1754typedef struct {
1755 // server -> client
1756
1757 _supla_int_t result_code;
1758 _supla_int_t ClientID;
1759 _supla_int_t LocationCount;
1760 _supla_int_t ChannelCount;
1761 unsigned char activity_timeout;
1762 unsigned char version;
1763 unsigned char version_min;
1765
1766typedef struct {
1767 // server -> client
1768
1769 _supla_int_t result_code;
1770 _supla_int_t ClientID;
1771 _supla_int_t LocationCount;
1772 _supla_int_t ChannelCount;
1773 _supla_int_t ChannelGroupCount;
1774 _supla_int_t Flags;
1775 unsigned char activity_timeout;
1776 unsigned char version;
1777 unsigned char version_min;
1778} TSC_SuplaRegisterClientResult_B; // ver. >= 9
1779
1780typedef struct {
1781 // server -> client
1782
1783 _supla_int_t result_code;
1784 _supla_int_t ClientID;
1785 _supla_int_t LocationCount;
1786 _supla_int_t ChannelCount;
1787 _supla_int_t ChannelGroupCount;
1788 _supla_int_t Flags;
1789 unsigned char activity_timeout;
1790 unsigned char version;
1791 unsigned char version_min;
1792 unsigned _supla_int_t serverUnixTimestamp; // current server time
1793} TSC_SuplaRegisterClientResult_C; // ver. >= 17
1794
1795typedef struct {
1796 // server -> client
1797
1798 _supla_int_t result_code;
1799 _supla_int_t ClientID;
1800 _supla_int16_t LocationCount;
1801 _supla_int16_t ChannelCount;
1802 _supla_int16_t ChannelGroupCount;
1803 _supla_int16_t SceneCount;
1804 _supla_int_t Flags;
1805 unsigned char activity_timeout;
1806 unsigned char version;
1807 unsigned char version_min;
1808 unsigned _supla_int_t serverUnixTimestamp; // current server time
1809} TSC_SuplaRegisterClientResult_D; // ver. >= 19
1810
1811typedef struct {
1812 // client -> server
1813 unsigned char ChannelId;
1814 char value[SUPLA_CHANNELVALUE_SIZE];
1815} TCS_SuplaChannelNewValue; // Deprecated
1816
1817typedef struct {
1818 // client -> server
1819 _supla_int_t ChannelId;
1820 char value[SUPLA_CHANNELVALUE_SIZE];
1822
1823typedef struct {
1824 // client -> server
1825 _supla_int_t Id;
1826 char Target; // SUPLA_TARGET_
1827 char value[SUPLA_CHANNELVALUE_SIZE];
1828} TCS_SuplaNewValue; // ver. >= 9
1829
1830typedef struct {
1831 // server -> client
1832 _supla_int_t Event;
1833 _supla_int_t ChannelID;
1834 unsigned _supla_int_t DurationMS;
1835
1836 _supla_int_t SenderID;
1837 unsigned _supla_int_t
1838 SenderNameSize; // including the terminating null byte ('\0')
1839 char
1840 SenderName[SUPLA_SENDER_NAME_MAXSIZE]; // Last variable in struct! | UTF8
1842
1843typedef struct {
1844 char Platform;
1845
1846 _supla_int_t Param1;
1847 _supla_int_t Param2;
1848 _supla_int_t Param3;
1849 _supla_int_t Param4;
1851
1852typedef struct {
1853 char available_protocols;
1854 char host[SUPLA_URL_HOST_MAXSIZE];
1855 _supla_int_t port;
1856 char path[SUPLA_URL_PATH_MAXSIZE];
1858
1859typedef struct {
1860 char exists;
1863
1864typedef struct {
1865 unsigned _supla_int_t client_timestamp; // time >= now == enabled
1866 unsigned _supla_int_t iodevice_timestamp; // time >= now == enabled
1868
1869typedef struct {
1870 unsigned _supla_int_t ExpiresIn;
1871 unsigned _supla_int_t
1872 TokenSize; // including the terminating null byte ('\0')
1873 char Token[SUPLA_OAUTH_TOKEN_MAXSIZE]; // Last variable in struct!
1874} TSC_OAuthToken; // ver. >= 10
1875
1876typedef struct {
1877 unsigned char ResultCode;
1878 TSC_OAuthToken Token;
1879} TSC_OAuthTokenRequestResult; // ver. >= 10
1880
1881typedef struct {
1882 // 3 phases
1883 unsigned _supla_int16_t freq; // * 0.01 Hz
1884 unsigned _supla_int16_t voltage[3]; // * 0.01 V
1885 unsigned _supla_int16_t
1886 current[3]; // * 0.001 A (0.01 A WHEN EM_VAR_CURRENT_OVER_65A)
1887 _supla_int_t
1888 power_active[3]; // * 0.00001 W (0.00001 kW WHEN EM_VAR_POWER_ACTIVE_KW)
1889 _supla_int_t power_reactive[3]; // * 0.00001 var (0.00001 kvar WHEN
1890 // EM_VAR_POWER_REACTIVE_KVAR)
1891 _supla_int_t power_apparent[3]; // * 0.00001 VA (0.00001 kVA WHEN
1892 // EM_VAR_POWER_APPARENT_KVA)
1893 _supla_int16_t power_factor[3]; // * 0.001
1894 _supla_int16_t phase_angle[3]; // * 0.1 degree
1895} TElectricityMeter_Measurement; // v. >= 10
1896
1897#define EM_VAR_FREQ 0x0001
1898#define EM_VAR_VOLTAGE 0x0002
1899#define EM_VAR_CURRENT 0x0004
1900#define EM_VAR_POWER_ACTIVE 0x0008
1901#define EM_VAR_POWER_REACTIVE 0x0010
1902#define EM_VAR_POWER_APPARENT 0x0020
1903#define EM_VAR_POWER_FACTOR 0x0040
1904#define EM_VAR_PHASE_ANGLE 0x0080
1905#define EM_VAR_FORWARD_ACTIVE_ENERGY 0x0100
1906#define EM_VAR_REVERSE_ACTIVE_ENERGY 0x0200
1907#define EM_VAR_FORWARD_REACTIVE_ENERGY 0x0400
1908#define EM_VAR_REVERSE_REACTIVE_ENERGY 0x0800
1909#define EM_VAR_CURRENT_OVER_65A 0x1000
1910#define EM_VAR_FORWARD_ACTIVE_ENERGY_BALANCED 0x2000
1911#define EM_VAR_REVERSE_ACTIVE_ENERGY_BALANCED 0x4000
1912
1913#define EM_VAR_VOLTAGE_PHASE_ANGLE_12 0x10000 // ver. >= 25
1914#define EM_VAR_VOLTAGE_PHASE_ANGLE_13 0x20000 // ver. >= 25
1915#define EM_VAR_VOLTAGE_PHASE_SEQUENCE 0x40000 // ver. >= 25
1916#define EM_VAR_CURRENT_PHASE_SEQUENCE 0x80000 // ver. >= 25
1917
1918#define EM_VAR_POWER_ACTIVE_KW 0x100000
1919#define EM_VAR_POWER_REACTIVE_KVAR 0x200000
1920#define EM_VAR_POWER_APPARENT_KVA 0x400000
1921
1922#define EM_PHASE_SEQUENCE_VOLTAGE 0x01
1923#define EM_PHASE_SEQUENCE_CURRENT 0x02
1924
1925#if defined(__AVR__) || defined(ESP8266) || defined(ESP32) || \
1926 defined(ESP_PLATFORM) || defined(ARDUINO) || defined(SUPLA_DEVICE)
1927#define EM_MEASUREMENT_COUNT 1
1928#else
1929#define EM_MEASUREMENT_COUNT 5
1930#endif
1931
1932#ifdef USE_DEPRECATED_EMEV_V1
1933// [IODevice->Server->Client]
1934typedef struct {
1935 unsigned _supla_int64_t total_forward_active_energy[3]; // * 0.00001 kWh
1936 unsigned _supla_int64_t total_reverse_active_energy[3]; // * 0.00001 kWh
1937 unsigned _supla_int64_t total_forward_reactive_energy[3]; // * 0.00001 kvarh
1938 unsigned _supla_int64_t total_reverse_reactive_energy[3]; // * 0.00001 kvarh
1939
1940 // The price per unit, total cost and currency is overwritten by the server
1941 // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
1942 _supla_int_t total_cost; // * 0.01
1943 _supla_int_t price_per_unit; // * 0.0001
1944 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
1945 char currency[3];
1946
1947 _supla_int_t measured_values;
1948 _supla_int_t period; // Approximate period between measurements in seconds
1949 _supla_int_t m_count;
1950 TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT]; // Last variable in
1951 // struct!
1952} TElectricityMeter_ExtendedValue; // v. >= 10
1953#endif /*USE_DEPRECATED_EMEV_V1*/
1954
1955#ifdef USE_DEPRECATED_EMEV_V2
1956// [IODevice->Server->Client]
1957typedef struct {
1958 unsigned _supla_int64_t total_forward_active_energy[3]; // * 0.00001 kWh
1959 unsigned _supla_int64_t total_reverse_active_energy[3]; // * 0.00001 kWh
1960 unsigned _supla_int64_t total_forward_reactive_energy[3]; // * 0.00001 kvarh
1961 unsigned _supla_int64_t total_reverse_reactive_energy[3]; // * 0.00001 kvarh
1962 unsigned _supla_int64_t
1963 total_forward_active_energy_balanced; // * 0.00001 kWh
1964 // Vector phase-to-phase balancing
1965 unsigned _supla_int64_t
1966 total_reverse_active_energy_balanced; // * 0.00001 kWh
1967 // Vector phase-to-phase balancing
1968
1969 // The price per unit, total cost and currency is overwritten by the server
1970 // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
1971 _supla_int_t total_cost; // * 0.01
1972 _supla_int_t total_cost_balanced; // * 0.01
1973 _supla_int_t price_per_unit; // * 0.0001
1974 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
1975 char currency[3];
1976
1977 _supla_int_t measured_values;
1978 _supla_int_t period; // Approximate period between measurements in seconds
1979 _supla_int_t m_count;
1980 TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT]; // Last variable in
1981 // struct!
1982} TElectricityMeter_ExtendedValue_V2; // v. >= 12
1983#endif /*USE_DEPRECATED_EMEV_V2*/
1984
1985// [IODevice->Server->Client]
1986typedef struct {
1987 unsigned _supla_int64_t total_forward_active_energy[3]; // * 0.00001 kWh
1988 unsigned _supla_int64_t total_reverse_active_energy[3]; // * 0.00001 kWh
1989 unsigned _supla_int64_t total_forward_reactive_energy[3]; // * 0.00001 kvarh
1990 unsigned _supla_int64_t total_reverse_reactive_energy[3]; // * 0.00001 kvarh
1991 unsigned _supla_int64_t
1992 total_forward_active_energy_balanced; // * 0.00001 kWh
1993 // Vector phase-to-phase balancing
1994 unsigned _supla_int64_t
1995 total_reverse_active_energy_balanced; // * 0.00001 kWh
1996 // Vector phase-to-phase balancing
1997
1998 // Voltage phase angle between phase 1 and 2
1999 unsigned _supla_int16_t voltage_phase_angle_12; // * 0.1 degree, 0..360
2000 // Voltage phase angle between phase 1 and 3
2001 unsigned _supla_int16_t voltage_phase_angle_13; // * 0.1 degree, 0..360
2002 unsigned char phase_sequence; // bit 0x1 - voltage, bit 0x2 current
2003 // EM_PHASE_SEQUENCE_*
2004 // bit value: 0 - 123 (clockwise)
2005 // bit value: 1 - 132 (counter-clockwise)
2006
2007 // The price per unit, total cost and currency is overwritten by the server
2008 // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
2009 _supla_int_t total_cost; // * 0.01
2010 _supla_int_t total_cost_balanced; // * 0.01
2011 _supla_int_t price_per_unit; // * 0.0001
2012 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
2013 char currency[3];
2014
2015 _supla_int_t measured_values;
2016 _supla_int_t period; // Approximate period between measurements in seconds
2017 _supla_int_t m_count;
2018 TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT]; // Last variable in
2019 // struct!
2021
2022#define EM_VALUE_FLAG_PHASE1_ON 0x01
2023#define EM_VALUE_FLAG_PHASE2_ON 0x02
2024#define EM_VALUE_FLAG_PHASE3_ON 0x04
2025
2026// [IODevice->Server->Client]
2027typedef struct {
2028 char flags;
2029 unsigned _supla_int_t total_forward_active_energy; // * 0.01 kW
2030} TElectricityMeter_Value; // v. >= 10
2031
2032typedef struct {
2033 // The price per unit, total cost and currency is overwritten by the server
2034 // total_cost = calculated_value * price_per_unit
2035 _supla_int_t total_cost; // * 0.01
2036 _supla_int_t price_per_unit; // * 0.0001
2037 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
2038 char currency[3];
2039 char custom_unit[9]; // UTF8 including the terminating null byte ('\0')
2040
2041 _supla_int_t impulses_per_unit;
2042 unsigned _supla_int64_t counter;
2043 _supla_int64_t calculated_value; // * 0.001
2045
2046typedef struct {
2047 unsigned _supla_int64_t counter;
2049
2050#define RS_VALUE_FLAG_TILT_IS_SET 0x1
2051#define RS_VALUE_FLAG_CALIBRATION_FAILED 0x2
2052#define RS_VALUE_FLAG_CALIBRATION_LOST 0x4
2053#define RS_VALUE_FLAG_MOTOR_PROBLEM 0x8
2054#define RS_VALUE_FLAG_CALIBRATION_IN_PROGRESS 0x10
2055
2056#define SUPLA_TILT_CONTROL_TYPE_UNKNOWN 0
2057#define SUPLA_TILT_CONTROL_TYPE_STANDS_IN_POSITION_WHILE_TILTING 1
2058#define SUPLA_TILT_CONTROL_TYPE_CHANGES_POSITION_WHILE_TILTING 2
2059#define SUPLA_TILT_CONTROL_TYPE_TILTS_ONLY_WHEN_FULLY_CLOSED 3
2060
2061// Roller shutter channel value payload
2062// Device -> Server -> Client
2063typedef struct {
2064 signed char position; // -1 == calibration. -1, 0% (open) - 100% (closed) DSC
2065 char reserved1;
2066 signed char bottom_position; // Percentage points to the windowsill, SC
2067 _supla_int16_t flags; // DSC
2068 char reserved2;
2069 char reserved3;
2070 char reserved4;
2072
2073typedef TDSC_RollerShutterValue TDSC_TerraceAwningValue;
2074typedef TDSC_RollerShutterValue TDSC_ProjectorScreen;
2075typedef TDSC_RollerShutterValue TDSC_CurtainValue;
2076typedef TDSC_RollerShutterValue TDSC_RollerGarageDoor;
2077
2078// Roller shutter channel value payload
2079// Client -> Server -> Device
2080typedef struct {
2081 signed char position; // 0 - STOP
2082 // 1 - DOWN (CLOSE)
2083 // 2 - UP (OPEN)
2084 // 3 - DOWN_OR_STOP (CLOSE_OR_STOP)
2085 // 4 - UP_OR_STOP (OPEN_OR_STOP)
2086 // 5 - STEP_BY_STEP
2087 // 10-110 - target position + 10 (0 open, 100 closed)
2088 char reserved[7];
2090
2091typedef TCSD_RollerShutterValue TCSD_TerraceAwningValue;
2092typedef TCSD_RollerShutterValue TCSD_ProjectorScreen;
2093typedef TCSD_RollerShutterValue TCSD_CurtainValue;
2094typedef TCSD_RollerShutterValue TCSD_RollerGarageDoor;
2095
2096// Facade blind channel value payload
2097// Device -> Server -> Client
2098typedef struct {
2099 signed char position; // -1 == calibration. -1, 0% (open) - 100% (closed) DSC
2100 signed char tilt; // -1 == not used/calibration, -1, 0% - 100%, DSC
2101 char reserved;
2102 _supla_int16_t flags; // DSC
2103 char reserved2[3];
2105
2106typedef TDSC_FacadeBlindValue TDSC_VerticalBlindValue;
2107
2108// Facade blind channel value payload
2109// Client -> Server -> Device
2110typedef struct {
2111 signed char position; // -1 - not set (actual behavior is device specific)
2112 // 0 - STOP
2113 // 1 - DOWN (CLOSE)
2114 // 2 - UP (OPEN)
2115 // 3 - DOWN_OR_STOP (CLOSE_OR_STOP)
2116 // 4 - UP_OR_STOP (OPEN_OR_STOP)
2117 // 5 - STEP_BY_STEP
2118 // 10-110 - target position + 10 (0 open, 100 closed)
2119 signed char tilt; // -1 - not set (actual behavior is device specific)
2120 // 10-110 - target position + 10
2121 char reserved[6];
2123
2124typedef TCSD_FacadeBlindValue TCSD_VerticalBlindValue;
2125
2126typedef struct {
2127 unsigned _supla_int64_t calculated_value; // * 0.001
2128} TSC_ImpulseCounter_Value; // v. >= 10
2129
2130typedef struct {
2131 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
2132 char Password[SUPLA_PASSWORD_MAXSIZE]; // UTF8
2134
2135typedef struct {
2136 _supla_int_t Result;
2138
2139#define SUPLA_CALCFG_RESULT_FALSE 0 // ver. >= 12
2140#define SUPLA_CALCFG_RESULT_TRUE 1 // ver. >= 12
2141#define SUPLA_CALCFG_RESULT_DONE 2 // ver. >= 12
2142#define SUPLA_CALCFG_RESULT_IN_PROGRESS 3 // ver. >= 12
2143#define SUPLA_CALCFG_RESULT_NODE_FOUND 4 // ver. >= 12
2144#define SUPLA_CALCFG_RESULT_SENDER_CONFLICT 100 // ver. >= 12
2145#define SUPLA_CALCFG_RESULT_TIMEOUT 101 // ver. >= 12
2146#define SUPLA_CALCFG_RESULT_NOT_SUPPORTED 102 // ver. >= 12
2147#define SUPLA_CALCFG_RESULT_ID_NOT_EXISTS 103 // ver. >= 12
2148#define SUPLA_CALCFG_RESULT_UNAUTHORIZED 104 // ver. >= 12
2149#define SUPLA_CALCFG_RESULT_DEBUG 105 // ver. >= 12
2150#define SUPLA_CALCFG_RESULT_NOT_SUPPORTED_IN_SLAVE_MODE 106 // ver. >= 12
2151
2152#define SUPLA_CALCFG_CMD_GET_CHANNEL_FUNCLIST 1000 // v. >= 11
2153#define SUPLA_CALCFG_CMD_CANCEL_ALL_CLIENT_COMMANDS 1010 // v. >= 12
2154#define SUPLA_CALCFG_CMD_ZWAVE_RESET_AND_CLEAR 2000 // v. >= 12
2155#define SUPLA_CALCFG_CMD_ZWAVE_ADD_NODE 2010 // v. >= 12
2156#define SUPLA_CALCFG_CMD_ZWAVE_REMOVE_NODE 2020 // v. >= 12
2157#define SUPLA_CALCFG_CMD_ZWAVE_GET_NODE_LIST 2030 // v. >= 12
2158#define SUPLA_CALCFG_CMD_ZWAVE_GET_ASSIGNED_NODE_ID 2040 // v. >= 12
2159#define SUPLA_CALCFG_CMD_ZWAVE_ASSIGN_NODE_ID 2050 // v. >= 12
2160#define SUPLA_CALCFG_CMD_ZWAVE_GET_WAKE_UP_SETTINGS 2060 // v. >= 12
2161#define SUPLA_CALCFG_CMD_ZWAVE_SET_WAKE_UP_TIME 2070 // v. >= 12
2162#define SUPLA_CALCFG_CMD_ZWAVE_CONFIG_MODE_ACTIVE 4000 // v. >= 12
2163#define SUPLA_CALCFG_CMD_DEBUG_STRING 5000 // v. >= 12
2164#define SUPLA_CALCFG_CMD_PROGRESS_REPORT 5001 // v. >= 12
2165#define SUPLA_CALCFG_CMD_SET_LIGHTSOURCE_LIFESPAN 6000 // v. >= 12
2166#define SUPLA_CALCFG_CMD_RESET_COUNTERS 7000 // v. >= 15
2167#define SUPLA_CALCFG_CMD_RECALIBRATE 8000 // v. >= 15
2168#define SUPLA_CALCFG_CMD_ENTER_CFG_MODE 9000 // v. >= 17
2169#define SUPLA_CALCFG_CMD_RESET_TO_FACTORY_SETTINGS 9010 // v. >= 28
2170#define SUPLA_CALCFG_CMD_CHECK_FIRMWARE_UPDATE 9020 // v. >= 28
2171#define SUPLA_CALCFG_CMD_START_FIRMWARE_UPDATE 9030 // v. >= 28
2172#define SUPLA_CALCFG_CMD_START_SECURITY_UPDATE 9040 // v. >= 28
2173#define SUPLA_CALCFG_CMD_SET_CFG_MODE_PASSWORD 9050 // v. >= 28
2174#define SUPLA_CALCFG_CMD_SET_TIME 9100 // v. >= 21
2175#define SUPLA_CALCFG_CMD_START_SUBDEVICE_PAIRING 9200 // v. >= 25
2176#define SUPLA_CALCFG_CMD_IDENTIFY_DEVICE 9300 // v. >= 25
2177#define SUPLA_CALCFG_CMD_IDENTIFY_SUBDEVICE 9310 // v. >= 25
2178#define SUPLA_CALCFG_CMD_RESTART_DEVICE 9400 // v. >= 25
2179#define SUPLA_CALCFG_CMD_RESTART_SUBDEVICE 9410 // v. >= 25
2180#define SUPLA_CALCFG_CMD_TAKE_OCR_PHOTO 9420 // v. >= 25
2181#define SUPLA_CALCFG_CMD_MUTE_ALARM_SOUND 9430 // v. >= 26
2182
2183#define SUPLA_CALCFG_DATATYPE_RS_SETTINGS 1000
2184#define SUPLA_CALCFG_DATATYPE_FB_SETTINGS 1100 // v. >= 17
2185
2186#define CALCFG_ZWAVE_SCREENTYPE_UNKNOWN 0
2187#define CALCFG_ZWAVE_SCREENTYPE_MULTILEVEL 1
2188#define CALCFG_ZWAVE_SCREENTYPE_BINARY 2
2189#define CALCFG_ZWAVE_SCREENTYPE_MULTILEVEL_AUTOSHADE 3
2190#define CALCFG_ZWAVE_SCREENTYPE_MULTILEVEL_COLOR_CONTROL 4
2191#define CALCFG_ZWAVE_SCREENTYPE_BINARY_COLOR_CONTROL 5
2192#define CALCFG_ZWAVE_SCREENTYPE_SENSOR 6
2193
2194#define ZWAVE_NODE_NAME_MAXSIZE 50
2195
2196#define ZWAVE_NODE_FLAG_CHANNEL_ASSIGNED 0x1
2197#define ZWAVE_NODE_FLAG_WAKEUP_TIME_SETTABLE 0x2
2198
2199typedef struct {
2200 unsigned char Id;
2201 unsigned char Flags;
2202 union {
2203 unsigned char ChannelNumber;
2204 _supla_int_t ChannelID;
2205 };
2206 unsigned char ScreenType;
2207 unsigned char NameSize; // including the terminating null byte ('\0')
2208 char Name[ZWAVE_NODE_NAME_MAXSIZE]; // UTF8. Last variable in struct!
2209} TCalCfg_ZWave_Node; // v. >= 12
2210
2211typedef struct {
2212 unsigned _supla_int_t MinimumSec : 24;
2213 unsigned _supla_int_t MaximumSec : 24;
2214 unsigned _supla_int_t ValueSec : 24;
2215 unsigned _supla_int_t IntervalStepSec : 24;
2217
2218typedef struct {
2219 unsigned _supla_int_t TimeSec : 24;
2221
2222typedef struct {
2223 _supla_int_t Command;
2224 unsigned char Progress; // 0 - 100%
2226
2227typedef struct {
2228 unsigned char ResetCounter; // 0 - NO, 1 - YES
2229 unsigned char SetTime; // 0 - NO, 1 - YES
2230 unsigned _supla_int16_t LightSourceLifespan; // 0 - 65535 hours
2232
2233#define SUPLA_CALCFG_SUBDEVICE_NAME_MAXSIZE 120
2234
2235// Subdevice Pairing result is send in TDS_DeviceCalCfgResult. Possible values:
2236// SUPLA_CALCFG_RESULT_TRUE - paring result/status is in Data
2237// SUPLA_CALCFG_RESULT_UNAUTHORIZED - unauthorized
2238// SUPLA_CALCFG_RESULT_NOT_SUPPORTED - not supported
2239// Only in case of TRUE, TCalCfg_SubdevicePairingResult is included in
2240// TDS_DeviceCalCfgResult.
2241#define SUPLA_CALCFG_PAIRINGRESULT_PROCEDURE_STARTED 0
2242#define SUPLA_CALCFG_PAIRINGRESULT_ONGOING 1
2243#define SUPLA_CALCFG_PAIRINGRESULT_NO_NEW_DEVICE_FOUND 2
2244#define SUPLA_CALCFG_PAIRINGRESULT_SUCCESS 3
2245#define SUPLA_CALCFG_PAIRINGRESULT_DEVICE_NOT_SUPPORTED 4
2246#define SUPLA_CALCFG_PAIRINGRESULT_RESOURCES_LIMIT_EXCEEDED 5
2247#define SUPLA_CALCFG_PAIRINGRESULT_NOT_STARTED_NOT_READY 6
2248#define SUPLA_CALCFG_PAIRINGRESULT_NOT_STARTED_BUSY 7
2249
2250typedef struct {
2251 unsigned _supla_int16_t
2252 ElapsedTimeSec; // Time in seconds since procedure was started
2253 unsigned _supla_int16_t MaximumDurationSec; // Time in seconds
2254 unsigned char PairingResult; // SUPLA_CALCFG_PAIRINGRESULT_
2255 unsigned char NameSize; // including the terminating null byte ('\0')
2256 char Name[SUPLA_CALCFG_SUBDEVICE_NAME_MAXSIZE]; // UTF8. Last variable in
2257 // struct!
2258} TCalCfg_SubdevicePairingResult; // v. >= 25
2259
2260// CALCFG == CALIBRATION / CONFIG
2261typedef struct {
2262 _supla_int_t ChannelID;
2263 _supla_int_t Command;
2264 _supla_int_t DataType;
2265 unsigned _supla_int_t DataSize;
2266 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2267} TCS_DeviceCalCfgRequest; // v. >= 10
2268
2269// CALCFG == CALIBRATION / CONFIG
2270typedef struct {
2271 _supla_int_t Id;
2272 char Target; // SUPLA_TARGET_
2273 _supla_int_t Command;
2274 _supla_int_t DataType;
2275 unsigned _supla_int_t DataSize;
2276 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2277} TCS_DeviceCalCfgRequest_B; // v. >= 11
2278
2279typedef struct {
2280 _supla_int_t ChannelID;
2281 _supla_int_t Command;
2282 _supla_int_t Result;
2283 unsigned _supla_int_t DataSize;
2284 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2285} TSC_DeviceCalCfgResult; // v. >= 10
2286
2287typedef struct {
2288 _supla_int_t SenderID;
2289 _supla_int_t ChannelNumber;
2290 _supla_int_t Command;
2291 char SuperUserAuthorized;
2292 _supla_int_t DataType;
2293 unsigned _supla_int_t DataSize;
2294 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2295} TSD_DeviceCalCfgRequest; // v. >= 10
2296
2297typedef struct {
2298 _supla_int_t ReceiverID;
2299 _supla_int_t ChannelNumber;
2300 _supla_int_t Command;
2301 _supla_int_t Result;
2302 unsigned _supla_int_t DataSize;
2303 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2304} TDS_DeviceCalCfgResult; // v. >= 10
2305
2306// Used in CALCFG recalibrate command
2307typedef struct {
2308 _supla_int_t FullOpeningTimeMS;
2309 _supla_int_t FullClosingTimeMS;
2311
2312#define SUPLA_FIRMWARE_CHECK_RESULT_UPDATE_NOT_AVAILABLE 0
2313#define SUPLA_FIRMWARE_CHECK_RESULT_UPDATE_AVAILABLE 1
2314#define SUPLA_FIRMWARE_CHECK_RESULT_ERROR 2
2315
2316typedef struct {
2317 unsigned char Result; // SUPLA_FIRMWARE_CHECK_RESULT_
2318 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
2319 char ChangelogUrl[SUPLA_URL_PATH_MAXSIZE];
2320} TCalCfg_FirmwareCheckResult; // v. >= 28
2321
2322// SetCfgModePassword result is send in TDS_DeviceCalCfgResult. Possible values:
2323// SUPLA_CALCFG_RESULT_TRUE - password successfully changed
2324// SUPLA_CALCFG_RESULT_UNAUTHORIZED - unauthorized
2325// SUPLA_CALCFG_RESULT_NOT_SUPPORTED - not supported
2326// SUPLA_CALCFG_RESULT_FALSE - password change failed (i.e. don't meet security
2327// requirements)
2328
2329typedef struct {
2330 // New password should be at least 8 characters long, at least one uppercase
2331 // letter, one lowercase letter and one number
2332 char NewPassword[SUPLA_PASSWORD_MAXSIZE];
2333} TCalCfg_SetCfgModePassword; // v. >= 28
2334
2335#define RGBW_BRIGHTNESS_ONOFF 0x1
2336#define RGBW_COLOR_ONOFF 0x2
2337
2338// Values from other fields are applied in a standard way
2339#define RGBW_COMMAND_NOT_SET 0
2340// Ignores all other bytes and turns on the dimmer
2341#define RGBW_COMMAND_TURN_ON_DIMMER 1
2342// Ignores all other bytes and turns off the dimmer
2343#define RGBW_COMMAND_TURN_OFF_DIMMER 2
2344// Ignores all other bytes and toggles the dimmer
2345#define RGBW_COMMAND_TOGGLE_DIMMER 3
2346// Ignores all other bytes and turns on the RGB
2347#define RGBW_COMMAND_TURN_ON_RGB 4
2348// Ignores all other bytes and turns off the RGB
2349#define RGBW_COMMAND_TURN_OFF_RGB 5
2350// Ignores all other bytes and toggles the RGB
2351#define RGBW_COMMAND_TOGGLE_RGB 6
2352// Ignores all other bytes and turns on the RGB and Dimmer
2353#define RGBW_COMMAND_TURN_ON_ALL 7
2354// Ignores all other bytes and turns off the RGB and Dimmer
2355#define RGBW_COMMAND_TURN_OFF_ALL 8
2356// Ignores all other bytes and toggles the RGB and Dimmer (with sync, so both
2357// will be off or both will be on)
2358#define RGBW_COMMAND_TOGGLE_ALL 9
2359// Stores brightness value and ignores all other bytes, if dimmer is off, it
2360// stays off
2361#define RGBW_COMMAND_SET_BRIGHTNESS_WITHOUT_TURN_ON 10
2362// Stores colorBrightness value and ignores all other bytes.
2363// If RGB is off, it stays off
2364#define RGBW_COMMAND_SET_COLOR_BRIGHTNESS_WITHOUT_TURN_ON 11
2365// Stores color value (R, G, B) and ignores all other bytes.
2366// If RGB is off, it stays off
2367#define RGBW_COMMAND_SET_RGB_WITHOUT_TURN_ON 12
2368// Start brightness dimmer adjustment (0..100..0 etc)
2369#define RGBW_COMMAND_BRIGHTNESS_ADJUSTMENT_DIMMER_START 13
2370// Start color brightness adjustment
2371#define RGBW_COMMAND_BRIGHTNESS_ADJUSTMENT_COLOR_START 14
2372// Start dimmer and rgb brightness adjustment
2373#define RGBW_COMMAND_BRIGHTNESS_ADJUSTMENT_ALL_START 15
2374// Stop brightness dimmer adjustment
2375#define RGBW_COMMAND_BRIGHTNESS_ADJUSTMENT_DIMMER_STOP 16
2376// Stop color brightness adjustment
2377#define RGBW_COMMAND_BRIGHTNESS_ADJUSTMENT_COLOR_STOP 17
2378// Stop dimmer and rgb brightness adjustment
2379#define RGBW_COMMAND_BRIGHTNESS_ADJUSTMENT_ALL_STOP 18
2380// Store dimmer white temperature value and ignores all other bytes
2381#define RGBW_COMMAND_SET_WHITE_TEMPERATURE_WITHOUT_TURN_ON 19
2382
2383typedef struct {
2384 char brightness; // 0..100
2385 char colorBrightness; // 0..100
2386 unsigned char B; // 0..255
2387 unsigned char G; // 0..255
2388 unsigned char R; // 0..255
2389 char onOff;
2390 char command; // RGBW_COMMAND_, requires
2391 // SUPLA_CHANNEL_FLAG_RGBW_COMMANDS_SUPPORTED v. >= 21
2392 char whiteTemperature; // v. >= 25, 0..100 (0 warm, 50 neutral, 100 cold)
2393} TRGBW_Value; // v. >= 10
2394
2395#define SUPLA_RELAY_FLAG_OVERCURRENT_RELAY_OFF 0x1
2396
2397typedef struct {
2398 char hi; // actual state of relay - 0 turned off, >= 1 - turned on
2399 unsigned _supla_int16_t flags; // SUPLA_RELAY_FLAG_*
2400} TRelayChannel_Value; // v. >= 15
2401
2402#define DIGIGLASS_TOO_LONG_OPERATION_WARNING 0x1
2403#define DIGIGLASS_PLANNED_REGENERATION_IN_PROGRESS 0x2
2404#define DIGIGLASS_REGENERATION_AFTER_20H_IN_PROGRESS 0x4
2405
2406typedef struct {
2407 unsigned char flags;
2408 unsigned char sectionCount; // 1 - 16 Filled by server
2409 unsigned _supla_int16_t mask; // bit mask. 0 - opaque, 1 - transparent
2410} TDigiglass_Value; // v. >= 14
2411
2412typedef struct {
2413 unsigned _supla_int16_t mask; // Bit mask. 0 - opaque, 1 - transparent
2414 unsigned _supla_int16_t
2415 active_bits; // Specifies which bits of the mask are not skipped
2416} TCSD_Digiglass_NewValue; // v. >= 14
2417
2418#define CONTAINER_FLAG_WARNING_LEVEL (1 << 0)
2419#define CONTAINER_FLAG_ALARM_LEVEL (1 << 1)
2420#define CONTAINER_FLAG_INVALID_SENSOR_STATE (1 << 2)
2421#define CONTAINER_FLAG_SOUND_ALARM_ON (1 << 3)
2422
2423typedef struct {
2424 unsigned char level; // 0 - unknown; 1-101 - container fill level 0-100%
2425 unsigned _supla_int16_t flags; // CONTAINER_FLAG_*
2426} TContainerChannel_Value; // v. >= 26
2427
2428typedef struct {
2429 unsigned char sec; // 0-59
2430 unsigned char min; // 0-59
2431 unsigned char hour; // 0-24
2432 unsigned char dayOfWeek; // 1 = Sunday, 2 = Monday, …, 7 = Saturday
2433} TThermostat_Time; // v. >= 11
2434
2435#define THERMOSTAT_SCHEDULE_DAY_SUNDAY 0x01
2436#define THERMOSTAT_SCHEDULE_DAY_MONDAY 0x02
2437#define THERMOSTAT_SCHEDULE_DAY_TUESDAY 0x04
2438#define THERMOSTAT_SCHEDULE_DAY_WEDNESDAY 0x08
2439#define THERMOSTAT_SCHEDULE_DAY_THURSDAY 0x10
2440#define THERMOSTAT_SCHEDULE_DAY_FRIDAY 0x20
2441#define THERMOSTAT_SCHEDULE_DAY_SATURDAY 0x40
2442#define THERMOSTAT_SCHEDULE_DAY_ALL 0xFF
2443
2444#define THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_TEMPERATURE 0
2445#define THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_PROGRAM 1
2446
2447typedef struct {
2448 unsigned char ValueType; // THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_
2449 char HourValue[7][24]; // 7 days x 24h
2450 // 0 = Sunday, 1 = Monday, …, 6 = Saturday
2451} TThermostat_Schedule; // v. >= 11
2452
2453typedef struct {
2454 unsigned char ValueType; // THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_
2455 unsigned char WeekDays; // THERMOSTAT_SCHEDULE_DAY_
2456 char HourValue[24];
2457} TThermostatValueGroup; // v. >= 11
2458
2459// Used in Heatpol ESP8266 based thermostat
2460typedef struct {
2461 TThermostatValueGroup Group[4];
2462} TThermostat_ScheduleCfg; // v. >= 11
2463
2464// Temperature definitions for Heatpol ESP8266 based thermostat
2465// TThermostatTemperatureCfg
2466#define TEMPERATURE_INDEX1 0x0001
2467#define TEMPERATURE_INDEX2 0x0002
2468#define TEMPERATURE_INDEX3 0x0004
2469#define TEMPERATURE_INDEX4 0x0008
2470#define TEMPERATURE_INDEX5 0x0010
2471#define TEMPERATURE_INDEX6 0x0020
2472#define TEMPERATURE_INDEX7 0x0040
2473#define TEMPERATURE_INDEX8 0x0080
2474#define TEMPERATURE_INDEX9 0x0100
2475#define TEMPERATURE_INDEX10 0x0200
2476// TThermostatTemperatureCfg has only 10 fields
2477
2478// Used in Heatpol ESP8266 based thermostat
2479typedef struct {
2480 _supla_int16_t Index; // BIT0 Temperature[0], BIT1 Temperature[1] etc...
2481 unsigned _supla_int16_t Temperature[10];
2483
2484// Temperature definitions for HVAC
2485// THVACTemperatureCfg
2486// Below values are settable by user in UI
2487// Temperature below which heating will be enabled as a freeze protection
2488#define TEMPERATURE_FREEZE_PROTECTION (1ULL << 0)
2489// Economic temperaturey
2490#define TEMPERATURE_ECO (1ULL << 1)
2491// Comfort temperature
2492#define TEMPERATURE_COMFORT (1ULL << 2)
2493#define TEMPERATURE_BOOST (1ULL << 3)
2494// Temperature above which cooling will be enabled as an overheating protection.
2495#define TEMPERATURE_HEAT_PROTECTION (1ULL << 4)
2496// Histeresis value - i.e. heating will be enabled when current temperature
2497// is histeresis/2 lower than current setpoint.
2498#define TEMPERATURE_HISTERESIS (1ULL << 5)
2499// AUX histeresis value - used to determine heating based on AUX temperature
2500// If aux histeresis is missing, then TEMPERATURE_HISTERESIS is used
2501#define TEMPERATURE_AUX_HISTERESIS (1ULL << 18)
2502// Turns on "alarm" when temperature is below this value. Can be visual effect
2503// or sound (if device is capable). It can also send AT to server (TBD)
2504#define TEMPERATURE_BELOW_ALARM (1ULL << 6)
2505// As above, but for tempertatures above threshold
2506#define TEMPERATURE_ABOVE_ALARM (1ULL << 7)
2507// Minimum temperature to be kept on heat/cold source (i.e. keeps floor always
2508// at least 19 degrees)
2509#define TEMPERATURE_AUX_MIN_SETPOINT (1ULL << 8)
2510// Maximum temperature to be kept on heat/cold source (i.e. protect floor
2511// from overheating and keep at most 28 degrees)
2512#define TEMPERATURE_AUX_MAX_SETPOINT (1ULL << 9)
2513
2514// Below values are readonly for user
2515// Minimum room (main thermometer) temperature to be set by user
2516#define TEMPERATURE_ROOM_MIN (1ULL << 10)
2517// Maximum room (main thermometer) temperature to be set by user
2518#define TEMPERATURE_ROOM_MAX (1ULL << 11)
2519// Minimum allowed temperature for heat/cold source (used with second
2520// thermomter for floor/water/etc.)
2521#define TEMPERATURE_AUX_MIN (1ULL << 12)
2522// Maximum allowed temperature for heat/cold source
2523#define TEMPERATURE_AUX_MAX (1ULL << 13)
2524// Minimum histereis value
2525#define TEMPERATURE_HISTERESIS_MIN (1ULL << 14)
2526// Maximum histereis value
2527#define TEMPERATURE_HISTERESIS_MAX (1ULL << 15)
2528// Minimum temperature offset in HEAT_COOL mode
2529#define TEMPERATURE_HEAT_COOL_OFFSET_MIN (1ULL << 16)
2530// Maximum temperature offset in HEAT_COOL mode
2531#define TEMPERATURE_HEAT_COOL_OFFSET_MAX (1ULL << 17)
2532// 5 values left for future use (value << 18 is defined earlier)
2533
2534#define SUPLA_TEMPERATURE_INVALID_INT16 -32768
2535
2536// Used in Supla Thermostat
2537typedef struct {
2538 unsigned _supla_int_t Index; // BIT0 Temperature[0], BIT1 Temperature[1]
2539 // etc...
2540 _supla_int16_t Temperature[24];
2542
2543// Heatpol ESP8266 based: Thermostat configuration commands - ver. >= 11
2544#define SUPLA_THERMOSTAT_CMD_TURNON 1
2545#define SUPLA_THERMOSTAT_CMD_SET_MODE_AUTO 2
2546#define SUPLA_THERMOSTAT_CMD_SET_MODE_COOL 3
2547#define SUPLA_THERMOSTAT_CMD_SET_MODE_HEAT 4
2548#define SUPLA_THERMOSTAT_CMD_SET_MODE_NORMAL 5
2549#define SUPLA_THERMOSTAT_CMD_SET_MODE_ECO 6
2550#define SUPLA_THERMOSTAT_CMD_SET_MODE_TURBO 7
2551#define SUPLA_THERMOSTAT_CMD_SET_MODE_DRY 8
2552#define SUPLA_THERMOSTAT_CMD_SET_MODE_FANONLY 9
2553#define SUPLA_THERMOSTAT_CMD_SET_MODE_PURIFIER 10
2554#define SUPLA_THERMOSTAT_CMD_SET_SCHEDULE 11
2555#define SUPLA_THERMOSTAT_CMD_SET_TIME 12
2556#define SUPLA_THERMOSTAT_CMD_SET_TEMPERATURE 13
2557
2558// Heatpol ESP8266 based: Thermostat value flags - ver. >= 11
2559#define SUPLA_THERMOSTAT_VALUE_FLAG_ON 0x0001
2560#define SUPLA_THERMOSTAT_VALUE_FLAG_AUTO_MODE 0x0002
2561#define SUPLA_THERMOSTAT_VALUE_FLAG_COOL_MODE 0x0004
2562#define SUPLA_THERMOSTAT_VALUE_FLAG_HEAT_MODE 0x0008
2563#define SUPLA_THERMOSTAT_VALUE_FLAG_ECO_MODE 0x0010
2564#define SUPLA_THERMOSTAT_VALUE_FLAG_DRY_MODE 0x0020
2565#define SUPLA_THERMOSTAT_VALUE_FLAG_FANONLY_MODE 0x0040
2566#define SUPLA_THERMOSTAT_VALUE_FLAG_PURIFIER_MODE 0x0080
2567
2568// Heatpol ESP8266 based: Thermostat fields - ver. >= 11
2569#define THERMOSTAT_FIELD_MeasuredTemperatures 0x01
2570#define THERMOSTAT_FIELD_PresetTemperatures 0x02
2571#define THERMOSTAT_FIELD_Flags 0x04
2572#define THERMOSTAT_FIELD_Values 0x08
2573#define THERMOSTAT_FIELD_Time 0x10
2574#define THERMOSTAT_FIELD_Schedule 0x20
2575
2576// Used in Heatpol ESP8266 based only
2577typedef struct {
2578 unsigned char Fields;
2579 _supla_int16_t MeasuredTemperature[10]; // * 0.01
2580 _supla_int16_t PresetTemperature[10]; // * 0.01
2581 _supla_int16_t Flags[8];
2582 _supla_int16_t Values[8];
2583 TThermostat_Time Time;
2584 TThermostat_Schedule Schedule; // 7 days x 24h (4bit/hour)
2585} TThermostat_ExtendedValue; // v. >= 11
2586
2587// Used in Heatpol ESP8266 based only
2588typedef struct {
2589 unsigned char IsOn;
2590 unsigned char Flags;
2591 _supla_int16_t MeasuredTemperature; // * 0.01
2592 _supla_int16_t PresetTemperature; // * 0.01
2593} TThermostat_Value; // v. >= 11
2594
2595typedef struct {
2596 unsigned _supla_int16_t year;
2597 unsigned char month;
2598 unsigned char day;
2599 unsigned char dayOfWeek; // 1 = Sunday, 2 = Monday, …, 7 = Saturday
2600 unsigned char hour;
2601 unsigned char min;
2602 unsigned char sec;
2603 unsigned _supla_int_t
2604 timezoneSize; // including the terminating null byte ('\0')
2605 char timezone[SUPLA_TIMEZONE_MAXSIZE]; // Last variable in struct!
2607
2608typedef struct {
2609 _supla_int_t SenderID;
2610 union {
2611 _supla_int_t ChannelID; // Client -> Server
2612 unsigned char ChannelNumber; // Server -> Device
2613 };
2614} TCSD_ChannelStateRequest; // v. >= 12 Client -> Server -> Device
2615
2616#define SUPLA_CHANNELSTATE_FIELD_IPV4 0x0001
2617#define SUPLA_CHANNELSTATE_FIELD_MAC 0x0002
2618#define SUPLA_CHANNELSTATE_FIELD_BATTERYLEVEL 0x0004
2619#define SUPLA_CHANNELSTATE_FIELD_BATTERYPOWERED 0x0008
2620#define SUPLA_CHANNELSTATE_FIELD_WIFIRSSI 0x0010
2621#define SUPLA_CHANNELSTATE_FIELD_WIFISIGNALSTRENGTH 0x0020
2622#define SUPLA_CHANNELSTATE_FIELD_BRIDGENODESIGNALSTRENGTH 0x0040
2623#define SUPLA_CHANNELSTATE_FIELD_UPTIME 0x0080
2624#define SUPLA_CHANNELSTATE_FIELD_CONNECTIONUPTIME 0x0100
2625#define SUPLA_CHANNELSTATE_FIELD_BATTERYHEALTH 0x0200
2626#define SUPLA_CHANNELSTATE_FIELD_BRIDGENODEONLINE 0x0400
2627#define SUPLA_CHANNELSTATE_FIELD_LASTCONNECTIONRESETCAUSE 0x0800
2628// When LIGHTSOURCELIFESPAN is set then LightSourceLifespan field is used.
2629// Additionally when LIGHTSOURCEOPERATINGTIME and OPERATINGTIME are NOT set,
2630// then LightSourceLifespanLeft is also used.
2631#define SUPLA_CHANNELSTATE_FIELD_LIGHTSOURCELIFESPAN 0x1000
2632// LIGHTSOURCEOPERATINGTIME, and OPERATINGTIME are mutually exclusive. Use only
2633// one of them.
2634#define SUPLA_CHANNELSTATE_FIELD_LIGHTSOURCEOPERATINGTIME 0x2000
2635// OPERATINGTIME is not implemented in apps
2636#define SUPLA_CHANNELSTATE_FIELD_OPERATINGTIME 0x4000
2637// SWITCHCYCLECOUNT and defualtIconField are mutually exclusive. Use only one
2638// of them.
2639#define SUPLA_CHANNELSTATE_FIELD_SWITCHCYCLECOUNT 0x8000
2640#define SUPLA_CHANNELSTATE_FIELD_DEVICE_BATTERYLEVEL 0x10000
2641
2642#define SUPLA_LASTCONNECTIONRESETCAUSE_UNKNOWN 0
2643#define SUPLA_LASTCONNECTIONRESETCAUSE_ACTIVITY_TIMEOUT 1
2644#define SUPLA_LASTCONNECTIONRESETCAUSE_WIFI_CONNECTION_LOST 2
2645#define SUPLA_LASTCONNECTIONRESETCAUSE_SERVER_CONNECTION_LOST 3
2646
2647typedef struct {
2648 _supla_int_t ReceiverID; // Not used in extended values
2649 union {
2650 // Not used in extended values
2651 _supla_int_t ChannelID; // Server -> Client
2652 unsigned char ChannelNumber; // Device -> Server
2653 };
2654 _supla_int_t Fields; // SUPLA_CHANNELSTATE_FIELD_*
2655 union {
2656 _supla_int_t defaultIconField;
2657 unsigned _supla_int_t SwitchCycleCount;
2658 };
2659 unsigned _supla_int_t IPv4;
2660 unsigned char MAC[6];
2661 unsigned char BatteryLevel; // 0 - 100%
2662 unsigned char BatteryPowered; // true(1)/false(0)
2663 char WiFiRSSI;
2664 unsigned char WiFiSignalStrength; // 0 - 100%
2665 unsigned char BridgeNodeOnline; // 0/1
2666 unsigned char BridgeNodeSignalStrength; // 0 - 100%
2667 unsigned _supla_int_t Uptime; // sec.
2668 unsigned _supla_int_t ConnectionUptime; // sec.
2669 unsigned char BatteryHealth;
2670 unsigned char LastConnectionResetCause; // SUPLA_LASTCONNECTIONRESETCAUSE_*
2671 unsigned _supla_int16_t LightSourceLifespan; // 0 - 65535 hours
2672 union {
2673 _supla_int16_t LightSourceLifespanLeft; // valid range: -32767 - 10000,
2674 // unit 0.01%, so 10000 = 100%
2675 // -32767 = -327.67%
2676 _supla_int_t LightSourceOperatingTime; // -3932100sec. - 3932100sec.
2677 // OperatingTime is not implemented in apps
2678 unsigned _supla_int_t OperatingTime; // time in seconds
2679 };
2680 char EOL; // End Of List // v. >= 26
2681 char EmptySpace[1]; // Empty space for future use
2682} TDSC_ChannelState; // v. >= 12 Device -> Server -> Client
2683
2684#define TChannelState_ExtendedValue TDSC_ChannelState
2685
2686typedef struct {
2687 _supla_int_t ChannelID;
2688} TCS_ChannelBasicCfgRequest; // v. >= 12
2689
2690typedef struct {
2691 union {
2692 // Remaining time to turn off
2693 unsigned _supla_int_t RemainingTimeMs;
2694 unsigned _supla_int_t RemainingTimeS;
2695 unsigned _supla_int_t CountdownEndsAt; // Unix timestamp - Filled by server
2696 };
2697
2698 unsigned char TargetValue[SUPLA_CHANNELVALUE_SIZE];
2699
2700 _supla_int_t SenderID;
2701 unsigned _supla_int_t
2702 SenderNameSize; // including the terminating null byte ('\0')
2703 char SenderName[SUPLA_SENDER_NAME_MAXSIZE]; // Last variable in struct!
2704 // UTF8 | Filled by server
2706
2707typedef struct {
2708 TChannelState_ExtendedValue Channel;
2709 TTimerState_ExtendedValue Timer; // Last variable in struct!
2711
2712typedef struct {
2713 char DeviceName[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
2714 char DeviceSoftVer[SUPLA_SOFTVER_MAXSIZE];
2715 _supla_int_t DeviceID;
2716 _supla_int_t DeviceFlags;
2717 _supla_int16_t ManufacturerID;
2718 _supla_int16_t ProductID;
2719
2720 _supla_int_t ID;
2721 unsigned char Number;
2722 _supla_int_t Type;
2723 _supla_int_t Func;
2724 _supla_int_t FuncList;
2725
2726 unsigned _supla_int_t ChannelFlags;
2727 unsigned _supla_int_t
2728 CaptionSize; // including the terminating null byte ('\0')
2729 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
2730} TSC_ChannelBasicCfg; // v. >= 12
2731
2732typedef struct {
2733 _supla_int_t ChannelID;
2734 _supla_int_t Func;
2735} TCS_SetChannelFunction; // v. >= 12
2736
2737typedef struct {
2738 _supla_int_t ChannelID;
2739 _supla_int_t Func;
2740 unsigned char ResultCode;
2741} TSC_SetChannelFunctionResult; // v. >= 12
2742
2743typedef struct {
2744 union {
2745 unsigned char ChannelNumber;
2746 _supla_int_t ID;
2747 };
2748
2749 unsigned _supla_int_t
2750 CaptionSize; // including the terminating null byte ('\0')
2751 char Caption[SUPLA_CAPTION_MAXSIZE]; // Last variable in struct!
2752} TDCS_SetCaption; // v. >= 12
2753
2754typedef struct {
2755 union {
2756 unsigned char ChannelNumber;
2757 _supla_int_t ID;
2758 };
2759
2760 unsigned char ResultCode;
2761 unsigned _supla_int_t
2762 CaptionSize; // including the terminating null byte ('\0')
2763 char Caption[SUPLA_CAPTION_MAXSIZE]; // Last variable in struct!
2764} TSCD_SetCaptionResult; // v. >= 12
2765
2766typedef struct {
2767 unsigned char ResultCode;
2769
2770typedef struct {
2771 // Disabled: 0
2772 // Ignore: <0
2773 _supla_int_t IODeviceRegistrationTimeSec;
2774 _supla_int_t ClientRegistrationTimeSec;
2775} TCS_SetRegistrationEnabled; // v. >= 12
2776
2777typedef struct {
2778 unsigned char ResultCode;
2780
2781typedef struct {
2782 _supla_int_t DeviceID;
2783} TCS_DeviceReconnectRequest; // v. >= 12
2784
2785typedef struct {
2786 _supla_int_t DeviceID;
2787 unsigned char ResultCode;
2789
2790typedef struct {
2791 // server -> device
2792
2793 unsigned char ChannelCount;
2794 _supla_int_t Functions[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
2795 // Functions[ChannelNumber]
2796} TSD_ChannelFunctions; // ver. >= 12
2797
2798typedef struct {
2799 unsigned char ChannelNumber;
2801
2802typedef struct {
2803 unsigned char ChannelNumber;
2804 _supla_int_t Param1;
2805 _supla_int_t Param2;
2806 _supla_int_t Param3;
2808
2809#define SUPLA_CHANNEL_CONFIG_MAXSIZE 512 // v. <= 19 - 128; v. >= 21 - 512
2810#define SUPLA_DEVICE_CONFIG_MAXSIZE 512
2811
2812// Default type is used for standard channel config (user modifiable)
2813#define SUPLA_CONFIG_TYPE_DEFAULT 0
2814// Weekly schedule
2815#define SUPLA_CONFIG_TYPE_WEEKLY_SCHEDULE 2
2816// For SUPLA_CHANNELFNC_HVAC_THERMOSTAT, ALT weekly schedule is used for
2817// cooling subfuction, while standard weelkly schedule is used for heating
2818#define SUPLA_CONFIG_TYPE_ALT_WEEKLY_SCHEDULE 3
2819#define SUPLA_CONFIG_TYPE_OCR 4
2820#define SUPLA_CONFIG_TYPE_EXTENDED 5
2821
2822/********************************************
2823 * DEVICE CONFIG STRUCTURES
2824 ********************************************/
2825
2826// SUPLA_DS_CALL_SET_DEVICE_CONFIG
2827// SUPLA_SD_CALL_SET_DEVICE_CONFIG
2828// Config field should contain fields stored in order as they appear in
2829// Fields parameter. Size of parameter depends on Field type.
2830typedef struct {
2831 unsigned char EndOfDataFlag; // 1 - last message; 0 - more messages will come
2832 unsigned char zero[8]; // for future use
2833 unsigned _supla_int64_t
2834 AvailableFields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2835 unsigned _supla_int64_t Fields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2836 unsigned _supla_int16_t ConfigSize;
2837 char Config[SUPLA_DEVICE_CONFIG_MAXSIZE]; // Last variable in struct!
2838} TSDS_SetDeviceConfig; // v. >= 21
2839
2840// SUPLA_SD_CALL_SET_DEVICE_CONFIG_RESULT
2841// SUPLA_DS_CALL_SET_DEVICE_CONFIG_RESULT
2842typedef struct {
2843 unsigned char Result; // SUPLA_CONFIG_RESULT_*
2844 unsigned char zero[9]; // for future use
2846
2847typedef struct {
2848 _supla_int_t DeviceId;
2849 unsigned char EndOfDataFlag; // 1 - last message; 0 - more messages will come
2850 unsigned char zero[8]; // for future use
2851 unsigned _supla_int64_t
2852 AvailableFields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2853 unsigned _supla_int64_t Fields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2854 unsigned _supla_int16_t ConfigSize;
2855 char Config[SUPLA_DEVICE_CONFIG_MAXSIZE]; // Last variable in struct!
2856} TSCS_DeviceConfig; // v. >= 21
2857
2858// SUPLA_SC_CALL_DEVICE_CONFIG_UPDATE_OR_RESULT
2859typedef struct {
2860 unsigned char Result; // SUPLA_CONFIG_RESULT_*. It matters when it is a
2861 // response to SUPLA_CS_CALL_GET_DEVICE_CONFIG
2862 TSCS_DeviceConfig Config; // Last variable in struct!
2864
2865// SUPLA_CS_CALL_GET_DEVICE_CONFIG
2866typedef struct {
2867 _supla_int_t DeviceId;
2868 unsigned _supla_int64_t Fields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2869 unsigned char zero[8]; // for future use
2871
2872#define SUPLA_DEVCFG_STATUS_LED_ON_WHEN_CONNECTED 0
2873#define SUPLA_DEVCFG_STATUS_LED_OFF_WHEN_CONNECTED 1
2874#define SUPLA_DEVCFG_STATUS_LED_ALWAYS_OFF 2
2875
2876typedef struct {
2877 unsigned char StatusLedType; // SUPLA_DEVCFG_STATUS_LED_
2878} TDeviceConfig_StatusLed; // v. >= 21
2879
2880typedef struct {
2881 unsigned char Disabled; // 1 - true; 0 - false
2882} TDeviceConfig_PowerStatusLed; // v. >= 25
2883
2884typedef struct {
2885 unsigned char ScreenBrightness; // 0-100%
2886 unsigned char Automatic; // 0 - false; 1 - true
2887 signed char AdjustmentForAutomatic;
2888} TDeviceConfig_ScreenBrightness; // v. >= 21
2889
2890typedef struct {
2891 unsigned char Volume; // 0-100%
2892} TDeviceConfig_ButtonVolume; // v. >= 21
2893
2894typedef struct {
2895 unsigned char DisableUserInterface; // 0 - false (local UI enabled)
2896 // 1 - true (local UI disabled)
2897 // 2 - partial
2898 // min/max allowed parameters are mandatory for "partial" variant
2899 unsigned _supla_int16_t minAllowedTemperatureSetpointFromLocalUI;
2900 unsigned _supla_int16_t maxAllowedTemperatureSetpointFromLocalUI;
2902
2903typedef struct {
2904 unsigned char AutomaticTimeSync; // 0 - disabled
2905 // 1 - enabled
2907
2908typedef struct {
2909 unsigned _supla_int16_t HomeScreenOffDelayS; // delay in seconds
2910 // 0 - disabled
2912
2913#define SUPLA_DEVCFG_HOME_SCREEN_OFF_DELAY_TYPE_ALWAYS_ENABLED 0
2914#define SUPLA_DEVCFG_HOME_SCREEN_OFF_DELAY_TYPE_ENABLED_WHEN_DARK 1
2915typedef struct {
2916 unsigned char
2917 HomeScreenOffDelayType; // SUPLA_DEVCFG_HOME_SCREEN_OFF_DELAY_TYPE_
2919
2920#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_NONE (1ULL << 0)
2921#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE (1ULL << 1)
2922#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE_AND_HUMIDITY (1ULL << 2)
2923#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TIME (1ULL << 3)
2924#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TIME_DATE (1ULL << 4)
2925#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE_TIME (1ULL << 5)
2926#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_MAIN_AND_AUX_TEMPERATURE (1ULL << 6)
2927#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_MODE_OR_TEMPERATURE (1ULL << 7)
2928
2929typedef struct {
2930 // bit field with all available modes (reported by device, readonly for other
2931 // components)
2932 unsigned _supla_int64_t ContentAvailable;
2933 // configured mode (settable)
2934 unsigned _supla_int64_t
2935 HomeScreenContent; // SUPLA_DEVCFG_HOME_SCREEN_CONTENT_
2937
2938// type: TDeviceConfig_Modbus
2939#define MODBUS_SERIAL_MODE_DISABLED 0
2940#define MODBUS_SERIAL_MODE_RTU 1
2941#define MODBUS_SERIAL_MODE_ASCII 2
2942
2943#define MODBUS_SERIAL_STOP_BITS_ONE 0
2944#define MODBUS_SERIAL_STOP_BITS_ONE_AND_HALF 1
2945#define MODBUS_SERIAL_STOP_BITS_TWO 2
2946
2947typedef struct {
2948 unsigned char Mode; // MODBUS_SERIAL_MODE_*
2949 _supla_int_t Baudrate; // 19200 (default and mandatory by modbus)
2950 unsigned char StopBits; // MODBUS_SERIAL_STOP_BITS_*
2951 unsigned char Reserved[20];
2953
2954#define MODBUS_NETWORK_MODE_DISABLED 0
2955#define MODBUS_NETWORK_MODE_TCP 1
2956#define MODBUS_NETWORK_MODE_UDP 2
2957
2958typedef struct {
2959 unsigned char Mode; // MODBUS_NETWORK_MODE_*
2960 unsigned int Port; // Default: 502
2961 unsigned char Reserved[20];
2963
2964// Readonly Modbus properties, which tells which functions/modes are
2965// available
2966typedef struct {
2967 struct {
2968 unsigned char Master : 1;
2969 unsigned char Slave : 1;
2970 unsigned char Rtu : 1;
2971 unsigned char Ascii : 1;
2972 unsigned char Tcp : 1;
2973 unsigned char Udp : 1;
2974 unsigned char Reserved : 2;
2975 unsigned char Reserved2 : 8;
2976 } Protocol;
2977 struct {
2978 unsigned char B4800 : 1;
2979 unsigned char B9600 : 1; // modbus mandatory
2980 unsigned char B19200 : 1; // modbus mandatory
2981 unsigned char B38400 : 1;
2982 unsigned char B57600 : 1;
2983 unsigned char B115200 : 1;
2984 unsigned char Reserved : 2;
2985 unsigned char Reserved2 : 8;
2986 } Baudrate;
2987 struct {
2988 unsigned char One : 1;
2989 unsigned char OneAndHalf : 1;
2990 unsigned char Two : 1;
2991 unsigned char Reserved : 5;
2992 } StopBits;
2993 unsigned char Reserved[20];
2995
2996#define MODBUS_ROLE_NOT_SET 0
2997#define MODBUS_ROLE_MASTER 1
2998#define MODBUS_ROLE_SLAVE 2
2999
3000typedef struct {
3001 unsigned char Role; // MODBUS_ROLE_*
3002 unsigned char ModbusAddress; // only for slave
3003 unsigned _supla_int_t SlaveTimeoutMs; // only for master
3004 ModbusSerialConfig SerialConfig;
3005 ModbusNetworkConfig NetworkConfig;
3006 ModbusConfigProperties Properties;
3007 unsigned char Reserved[20];
3009
3010// type: TDeviceConfig_FirmwareUpdate
3011// Forced off - firmware update is disabled by user on device (via local web
3012// interface) and can't be changed remotely
3013// Disabled - firmware update is disabled by user and can be changed remotely
3014// Security only - firmware update is enabled only for security updates
3015// All enabled - firmware update is enabled for all updates
3016#define SUPLA_FIRMWARE_UPDATE_POLICY_FORCED_OFF 0
3017#define SUPLA_FIRMWARE_UPDATE_POLICY_DISABLED 1
3018#define SUPLA_FIRMWARE_UPDATE_POLICY_SECURITY_ONLY 2 // default
3019#define SUPLA_FIRMWARE_UPDATE_POLICY_ALL_ENABLED 3
3020
3021typedef struct {
3022 unsigned char Policy; // SUPLA_FIRMWARE_UPDATE_POLICY_
3023 unsigned char Reserved[20];
3025
3026/********************************************
3027 * CHANNEL CONFIG STRUCTURES
3028 ********************************************/
3029
3030#define SUPLA_CONFIG_RESULT_FALSE 0
3031#define SUPLA_CONFIG_RESULT_TRUE 1
3032#define SUPLA_CONFIG_RESULT_DATA_ERROR 2
3033#define SUPLA_CONFIG_RESULT_TYPE_NOT_SUPPORTED 3
3034#define SUPLA_CONFIG_RESULT_FUNCTION_NOT_SUPPORTED 4
3035#define SUPLA_CONFIG_RESULT_LOCAL_CONFIG_DISABLED 5
3036#define SUPLA_CONFIG_RESULT_NOT_ALLOWED 6
3037#define SUPLA_CONFIG_RESULT_DEVICE_NOT_FOUND 7
3038
3039// SUPLA_CS_CALL_GET_CHANNEL_CONFIG
3040typedef struct {
3041 _supla_int_t ChannelId;
3042 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
3043 unsigned _supla_int_t Flags;
3044} TCS_GetChannelConfigRequest; // v. >= 21
3045
3046// SUPLA_CS_CALL_SET_CHANNEL_CONFIG
3047typedef struct {
3048 _supla_int_t ChannelId;
3049 _supla_int_t Func;
3050 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
3051 unsigned _supla_int16_t ConfigSize;
3052 char Config[SUPLA_CHANNEL_CONFIG_MAXSIZE]; // Last variable in struct!
3053 // v. >= 21
3054 // TChannelConfig_*
3056
3057// SUPLA_SC_CALL_CHANNEL_CONFIG_UPDATE
3058typedef struct {
3059 unsigned char Result; // SUPLA_CONFIG_RESULT_*. It matters when it is a
3060 // response to SUPLA_CS_CALL_GET_CHANNEL_CONFIG or
3061 // SUPLA_CS_CALL_SET_CHANNEL_CONFIG
3062 TSCS_ChannelConfig Config; // Last variable in struct!
3064
3065// SUPLA_DS_CALL_GET_CHANNEL_CONFIG
3066typedef struct {
3067 unsigned char ChannelNumber;
3068 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
3069 unsigned _supla_int_t Flags;
3070} TDS_GetChannelConfigRequest; // v. >= 16
3071
3072// SUPLA_SD_CALL_GET_CHANNEL_CONFIG_RESULT
3073// SUPLA_DS_CALL_SET_CHANNEL_CONFIG
3074// SUPLA_SD_CALL_SET_CHANNEL_CONFIG
3075typedef struct {
3076 unsigned char ChannelNumber;
3077 _supla_int_t Func;
3078 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
3079 unsigned _supla_int16_t ConfigSize;
3080 char Config[SUPLA_CHANNEL_CONFIG_MAXSIZE]; // Last variable in struct!
3081 // v. >= 16
3082 // TChannelConfig_*
3084
3085// SUPLA_DS_CALL_SET_CHANNEL_CONFIG
3086// SUPLA_SD_CALL_SET_CHANNEL_CONFIG
3087typedef TSD_ChannelConfig TSDS_SetChannelConfig; // v. >= 21
3088
3089// SUPLA_SD_CALL_SET_CHANNEL_CONFIG_RESULT
3090// SUPLA_DS_CALL_SET_CHANNEL_CONFIG_RESULT
3091typedef struct {
3092 unsigned char Result; // SUPLA_CONFIG_RESULT_*
3093 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
3094 unsigned char ChannelNumber;
3096
3097// SUPLA_SD_CALL_CHANNEL_CONFIG_FINISHED
3098typedef struct {
3099 unsigned char ChannelNumber;
3101
3102typedef struct {
3103 _supla_int_t TimeMS;
3104} TChannelConfig_StaircaseTimer; // v. >= 16
3105
3106typedef struct {
3107 _supla_int_t ClosingTimeMS;
3108 _supla_int_t OpeningTimeMS;
3109 unsigned char MotorUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3110 unsigned char ButtonsUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3111 signed char TimeMargin; // -1 default (device specific), 0 - not set/not used
3112 // 1 - no margin,
3113 // > 1 - 51% of opening/closing time added on extreme
3114 // positions - value should be decremented by 1.
3115 unsigned char VisualizationType; // 0 - default, other values depends on
3116 // Cloud and App support
3117 unsigned char Reserved[32];
3118} TChannelConfig_RollerShutter; // v. >= 16
3119
3120typedef TChannelConfig_RollerShutter TChannelConfig_TerraceAwning;
3121typedef TChannelConfig_RollerShutter TChannelConfig_ProjectorScreen;
3122typedef TChannelConfig_RollerShutter TChannelConfig_Curtain;
3123typedef TChannelConfig_RollerShutter TChannelConfig_RollerGarageDoor;
3124
3125typedef struct {
3126 _supla_int_t ClosingTimeMS;
3127 _supla_int_t OpeningTimeMS;
3128 _supla_int_t TiltingTimeMS;
3129 unsigned char MotorUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3130 unsigned char ButtonsUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3131 signed char TimeMargin; // -1 default (device specific), 0 - not set/not used
3132 // 1 - no margin,
3133 // > 1 - 51% of opening/closing time added on extreme
3134 // positions - value should be decremented by 1.
3135 unsigned _supla_int16_t
3136 Tilt0Angle; // 0 - 180 - degree corresponding to tilt 0
3137 unsigned _supla_int16_t
3138 Tilt100Angle; // 0 - 180 - degree corresponding to tilt 100
3139 unsigned char TiltControlType; // SUPLA_TILT_CONTROL_TYPE_
3140 unsigned char VisualizationType; // 0 - default, other values depends on
3141 // Cloud and App support
3142 unsigned char Reserved[32];
3143} TChannelConfig_FacadeBlind; // v. >= 24
3144
3145typedef TChannelConfig_FacadeBlind TChannelConfig_VerticalBlind;
3146
3147typedef struct {
3148 unsigned _supla_int_t ActiveActions;
3149} TChannelConfig_ActionTrigger; // v. >= 16
3150
3151// Weekly schedule definition for HVAC channel
3152typedef struct {
3153 unsigned char Mode; // for HVAC: SUPLA_HVAC_MODE_
3154 union {
3155 _supla_int16_t SetpointTemperatureHeat; // * 0.01 - used for heating
3156 _supla_int16_t Value1;
3157 };
3158 union {
3159 _supla_int16_t SetpointTemperatureCool; // * 0.01 - used for cooling
3160 _supla_int16_t Value2;
3161 };
3163
3164#define SUPLA_WEEKLY_SCHEDULE_PROGRAMS_MAX_SIZE 4
3165#define SUPLA_WEEKLY_SCHEDULE_VALUES_SIZE (7 * 24 * 4)
3166
3167typedef struct {
3168 // 4*5 = 20 B
3169 TWeeklyScheduleProgram Program[SUPLA_WEEKLY_SCHEDULE_PROGRAMS_MAX_SIZE];
3170 // "Quarters" contain Program setting for each 15 min. One 15 min program is
3171 // set on 4 bits, so in one byte we have settings for two 2x 15 min. 0 - off
3172 // 1 - program 1
3173 // 2 - program 2
3174 // 3 - program 3
3175 // 4 - program 4
3176 // (Quarter[0] & 0x0F) is Sunday, 0:00 to 0:14
3177 // (Quarter[0] & 0xF0) >> 4 is Sunday, 0:15 to 0:29
3178 // Days of week are numbered: 0 - Sunday, 1 - Monday, etc.
3179 unsigned char Quarters[SUPLA_WEEKLY_SCHEDULE_VALUES_SIZE / 2]; // 336 B
3180} TChannelConfig_WeeklySchedule; // v. >= 21
3181
3182// Config used for thermometers, humidity sensors, and thermometers with
3183// humidity channels.
3184// Correction is always applied by io device. Parameter
3185// AdjustmentAppliedByDevice is added in order to handle older versions where
3186// correction was applied by server. Devices supporting this setting will
3187// retreive config from server and if AdjustmentAppliedByDevice is set to 0,
3188// then they will store new correction value, set AdjustmentAppliedByDevice to 1
3189// and send it to server, so server will no longer apply correction.
3190typedef struct {
3191 _supla_int16_t TemperatureAdjustment; // * 0.01
3192 _supla_int16_t HumidityAdjustment; // * 0.01
3193 unsigned char AdjustmentAppliedByDevice; // 1/true - by device
3194 // 0/false - by server
3195 // Min/Max allowed adjustment values that channel supports. If set to 0, then
3196 // field is not supported by device and Cloud should use default -10..10 range
3197 // for correction. Otherwise, Cloud should use these values.
3198 _supla_int16_t MinTemperatureAdjustment; // * 0.01
3199 _supla_int16_t MaxTemperatureAdjustment; // * 0.01
3200 _supla_int16_t MinHumidityAdjustment; // * 0.01
3201 _supla_int16_t MaxHumidityAdjustment; // * 0.01
3202 unsigned char Reserved[27 - 4 * sizeof(_supla_int16_t)];
3204
3205// ChannelConfig for all binary sensors (all functions valid for
3206// SUPLA_CHANNELTYPE_BINARYSENSOR)
3207// Device doesn't apply this inverted logic on communication towards server.
3208// It is used only for interanal purposes and for other external interfaces
3209// like MQTT
3210//
3211// FilteringTimeMs is used to configure how long device should wait for stable
3212// input signal before changing it's state. If value is set to 0, then field
3213// is not used by device and server should ignore it. Device may impose minimum
3214// and maximum values for this field.
3215//
3216// Timeout is used to configure how long device should wait since last "1"
3217// detection before it sets "0". If value is set to 0, then field is not used
3218//
3219// Sensitivity is used to configure how sensitive device should be.
3220// Sensitivity 1 % (value == 2) is the lowest possible sensitivity.
3221// Sensitivity 100 % (value == 101) is the highest possible sensitivity.
3222// If value is set to 0, then field is not used
3223// Value 1 (0 %) means "OFF"
3224typedef struct {
3225 unsigned char InvertedLogic; // 0 - not inverted, 1 - inverted
3226 unsigned _supla_int16_t FilteringTimeMs; // 0 - not used, > 0 - time in ms
3227 unsigned _supla_int16_t
3228 Timeout; // 0 - not used, > 0 - time in 0.1 s, max 36000
3229 unsigned char Sensitivity; // 0 - not used, 1..101 - sensitivity 0..100 %
3230 // value 1 (0 %) means "OFF"
3231 unsigned char
3232 Reserved[29 - sizeof(unsigned char) - sizeof(unsigned _supla_int16_t)];
3233} TChannelConfig_BinarySensor; // v. >= 21
3234
3235// Not set is set when there is no thermometer for "AUX" available
3236// at all.
3237// Disabled is set when thermometer is available (i.e. we can read it and show
3238// to user), but it is not used by thermostat for any other purpose
3239// Other values are mainly for UI adjustement (i.e. show temperature as floor,
3240// as water, generic heater or cooler device)
3241#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_NOT_SET 0
3242#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_DISABLED 1
3243#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_FLOOR 2
3244#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_WATER 3
3245#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_GENERIC_HEATER 4
3246#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_GENERIC_COOLER 5
3247
3248#define SUPLA_HVAC_ALGORITHM_NOT_SET 0
3249#define SUPLA_HVAC_ALGORITHM_ON_OFF_SETPOINT_MIDDLE (1ULL << 0)
3250#define SUPLA_HVAC_ALGORITHM_ON_OFF_SETPOINT_AT_MOST (1ULL << 1)
3251#define SUPLA_HVAC_ALGORITHM_PID (1ULL << 2)
3252
3253// HVAC channel validation rules for thermometers:
3254// - MainThermometerChannelNo must be set
3255// - AuxThermometerChannelNo is validated and used only when
3256// AuxThermometerType != SUPLA_HVAC_AUX_THERMOMETER_TYPE_NOT_SET
3257// - AuxThermometerChannelNo != MainThermometerChannelNo
3258// - AuxThermometerChannelNo must be set for
3259// SUPLA_CHANNELFNC_HVAC_THERMOSTAT_DIFFERENTIAL. For other functions it is
3260// optional.
3261// - MainThermometerChannelNo and AuxThermometerChannelNo have to be
3262// SUPLA_CHANNELTYPE_HUMIDITYANDTEMPSENSOR or SUPLA_CHANNELTYPE_THERMOMETER
3263// - When AuxThermometerType == SUPLA_HVAC_AUX_THERMOMETER_TYPE_NOT_SET,
3264// AuxThermometerChannelNo is ignored, it can be set to 0.
3265
3266// HVAC channel validation for AntiFreezeAndOverheatProtectionEnabled:
3267// - function is available for channel functions: HEAT, COOL, HEAT_COOL
3268// - for other channel functions, this parameter is ignored
3269// - AntiFreeze/Overheat protection always use MainThermometerChannelNo as
3270// temperature source
3271
3272// HVAC channel validation for Algorithms:
3273// - AvailableAlgorithms is set only by device
3274// - UsedAlgorithm == 0 may be reported by device for incorrectly configured
3275// thermostat (i.e. there AvailableAlgorithms == 0), this shouldn't happen
3276// for devices with proper SW.
3277// - UsedAlgorithm & AvailableAlgorithms should evaluate to true
3278// - UsedAlgorithm should contain only one bit set
3279
3280// MinOnTimeS and MinOffTimeS:
3281// - function is always available
3282// - time is given in seconds
3283// - allowed range: 0 - 600 sec
3284
3285// OutputValueOnError:
3286// - function is always available
3287// - allowed values: -100 .. 100
3288// - it is recommended to use only -100 (cool), 0 (off), 100 (heat).
3289// - info: this range comes from assumption that cooling and heating may
3290// be enabled with gradients (i.e. for some thermostat with PWM output), but
3291// majority of thermostats are on/off, so only -100 (cool), 0 (off), and 100
3292// (heat) are proposed here.
3293
3294// Temperature validation rules:
3295// - Temperature in "Room Constrain" means:
3296// TEMPERATURE_ROOM_MIN <= t <= TEMPERATURE_ROOM_MAX
3297// - Temperature in "Aux Constrain" means:
3298// TEMPERATURE_AUX_MIN <= t <= TEMPERATURE_AUX_MAX
3299// - Temperatures (t_min, t_max) in "Auto Constrain" means:
3300// TEMPERATURE_ROOM_MIN <= t_min <= TEMPERATURE_ROOM_MAX AND
3301// TEMPERATURE_ROOM_MIN <= t_max <= TEMPERATURE_ROOM_MAX AND
3302// (t_max - t_min >= TEMPERATURE_HEAT_COOL_OFFSET_MIN) AND
3303// (t_max - t_min <= TEMPERATURE_HEAT_COOL_OFFSET_MAX)
3304
3305// TEMPERATURE_FREEZE_PROTECTION - has to be in Room Constrain when
3306// AntiFreezeAndOverheatProtectionEnabled is set
3307// TEMPERATURE_ECO - has to be in Room Constrain
3308// TEMPERATURE_COMFORT - has to be in Room Constrain
3309// TEMPERATURE_BOOST - has to be in Room Constrain
3310// TEMPERATURE_HEAT_PROTECTION - has to be in Room Constrain when function
3311// is COOL or HEAT_COOL
3312// TEMPERATURE_HISTERESIS and TEMPERATURE_AUX_HISTERESIS - has to be
3313// TEMPERATURE_HISTERESIS_MIN <= t <= TEMPERATURE_HISTERESIS_MAX
3314// TEMPERATURE_BELOW_ALARM - has to be in Room Constrain
3315// TEMPERATURE_ABOVE_ALARM - has to be in Room Constrain
3316// TEMPERATURE_AUX_MIN_SETPOINT - has to be in Aux Constrain and has
3317// to be < TEMPERATURE_AUX_MAX_SETPOINT
3318// TEMPERATURE_AUX_MAX_SETPOINT - has to be in Aux Constrain and has
3319// to be > TEMPERATURE_AUX_MIN_SETPOINT
3320
3321// Below values are readonly and defines device capabilities for current
3322// function:
3323// TEMPERATURE_ROOM_MIN < TEMPERATURE_ROOM_MAX
3324// TEMPERATURE_AUX_MIN < TEMPERATURE_AUX_MAX
3325// TEMPERATURE_HISTERESIS_MIN < TEMPERATURE_HISTERESIS_MAX
3326// TEMPERATURE_HEAT_COOL_OFFSET_MIN < TEMPERATURE_HEAT_COOL_OFFSET_MAX
3327
3328// Subfunction for SUPLA_CHANNELFNC_HVAC_THERMOSTAT
3329// Other channel functions dont' use subfunction setting (yet)
3330#define SUPLA_HVAC_SUBFUNCTION_NOT_SET 0
3331#define SUPLA_HVAC_SUBFUNCTION_HEAT 1
3332#define SUPLA_HVAC_SUBFUNCTION_COOL 2
3333
3334#define SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_NOT_SUPPORTED 0
3335#define SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_ROOM_TEMPERATURE 1
3336#define SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_AUX_HEATER_COOLER_TEMPERATURE 2
3337
3338#define LOCAL_UI_LOCK_FULL 0x1
3339#define LOCAL_UI_LOCK_TEMPERATURE 0x2
3340
3341typedef struct {
3342 unsigned _supla_int_t MainThermometerChannelNoReadonly : 1;
3343 unsigned _supla_int_t MainThermometerChannelNoHidden : 1;
3344 unsigned _supla_int_t AuxThermometerChannelNoReadonly : 1;
3345 unsigned _supla_int_t AuxThermometerChannelNoHidden : 1;
3346 unsigned _supla_int_t BinarySensorChannelNoReadonly : 1;
3347 unsigned _supla_int_t BinarySensorChannelNoHidden : 1;
3348 unsigned _supla_int_t AuxThermometerTypeReadonly : 1;
3349 unsigned _supla_int_t AuxThermometerTypeHidden : 1;
3350 unsigned _supla_int_t AntiFreezeAndOverheatProtectionEnabledReadonly : 1;
3351 unsigned _supla_int_t AntiFreezeAndOverheatProtectionEnabledHidden : 1;
3352 unsigned _supla_int_t UsedAlgorithmReadonly : 1;
3353 unsigned _supla_int_t UsedAlgorithmHidden : 1;
3354 unsigned _supla_int_t MinOnTimeSReadonly : 1;
3355 unsigned _supla_int_t MinOnTimeSHidden : 1;
3356 unsigned _supla_int_t MinOffTimeSReadonly : 1;
3357 unsigned _supla_int_t MinOffTimeSHidden : 1;
3358 unsigned _supla_int_t OutputValueOnErrorReadonly : 1;
3359 unsigned _supla_int_t OutputValueOnErrorHidden : 1;
3360 unsigned _supla_int_t SubfunctionReadonly : 1;
3361 unsigned _supla_int_t SubfunctionHidden : 1;
3362 unsigned _supla_int_t
3363 TemperatureSetpointChangeSwitchesToManualModeReadonly : 1;
3364 unsigned _supla_int_t TemperatureSetpointChangeSwitchesToManualModeHidden : 1;
3365 unsigned _supla_int_t AuxMinMaxSetpointEnabledReadonly : 1;
3366 unsigned _supla_int_t AuxMinMaxSetpointEnabledHidden : 1;
3367 unsigned _supla_int_t UseSeparateHeatCoolOutputsReadonly : 1;
3368 unsigned _supla_int_t UseSeparateHeatCoolOutputsHidden : 1;
3369 unsigned _supla_int_t TemperaturesFreezeProtectionReadonly : 1;
3370 unsigned _supla_int_t TemperaturesFreezeProtectionHidden : 1;
3371 unsigned _supla_int_t TemperaturesEcoReadonly : 1;
3372 unsigned _supla_int_t TemperaturesEcoHidden : 1;
3373 unsigned _supla_int_t TemperaturesComfortReadonly : 1;
3374 unsigned _supla_int_t TemperaturesComfortHidden : 1;
3375 unsigned _supla_int_t TemperaturesBoostReadonly : 1;
3376 unsigned _supla_int_t TemperaturesBoostHidden : 1;
3377 unsigned _supla_int_t TemperaturesHeatProtectionReadonly : 1;
3378 unsigned _supla_int_t TemperaturesHeatProtectionHidden : 1;
3379 unsigned _supla_int_t TemperaturesHisteresisReadonly : 1;
3380 unsigned _supla_int_t TemperaturesHisteresisHidden : 1;
3381 unsigned _supla_int_t TemperaturesBelowAlarmReadonly : 1;
3382 unsigned _supla_int_t TemperaturesBelowAlarmHidden : 1;
3383 unsigned _supla_int_t TemperaturesAboveAlarmReadonly : 1;
3384 unsigned _supla_int_t TemperaturesAboveAlarmHidden : 1;
3385 unsigned _supla_int_t TemperaturesAuxMinSetpointReadonly : 1;
3386 unsigned _supla_int_t TemperaturesAuxMinSetpointHidden : 1;
3387 unsigned _supla_int_t TemperaturesAuxMaxSetpointReadonly : 1;
3388 unsigned _supla_int_t TemperaturesAuxMaxSetpointHidden : 1;
3389 unsigned _supla_int_t MasterThermostatChannelNoReadonly : 1;
3390 unsigned _supla_int_t MasterThermostatChannelNoHidden : 1;
3391 unsigned _supla_int_t HeatOrColdSourceSwitchReadonly : 1;
3392 unsigned _supla_int_t HeatOrColdSourceSwitchHidden : 1;
3393 unsigned _supla_int_t PumpSwitchReadonly : 1;
3394 unsigned _supla_int_t PumpSwitchHidden : 1;
3395 unsigned _supla_int_t TemperaturesAuxHisteresisReadonly : 1;
3396 unsigned _supla_int_t TemperaturesAuxHisteresisHidden : 1;
3397 unsigned _supla_int_t Reserved : 10;
3399
3400typedef struct {
3401 union {
3402 _supla_int_t MainThermometerChannelId;
3403 // Channel numbers for thermometer config. Channels have to be local and
3404 // numbering is the same as for registration message
3405 unsigned char MainThermometerChannelNo;
3406 };
3407
3408 union {
3409 _supla_int_t AuxThermometerChannelId;
3410 unsigned char
3411 AuxThermometerChannelNo; // If the channel number points to itself, it
3412 // means that the aux thermometer is not set.
3413 };
3414
3415 union {
3416 _supla_int_t BinarySensorChannelId;
3417 unsigned char
3418 BinarySensorChannelNo; // If the channel number points to itself, it
3419 // means that the binary sensor is not set.
3420 };
3421
3422 // SUPLA_HVAC_AUX_THERMOMETER_TYPE_
3423 unsigned char AuxThermometerType;
3424 unsigned char AntiFreezeAndOverheatProtectionEnabled;
3425 // bit map SUPLA_HVAC_ALGORITHM_ (readonly)
3426 unsigned _supla_int16_t AvailableAlgorithms;
3427 // only one value of SUPLA_HVAC_ALGORITHM_
3428 unsigned _supla_int16_t UsedAlgorithm;
3429 // Below Min TimeS parameters defines minimum time of relay/output to be
3430 // be disabled or enabled in seconds. It is used to prevent to frequent relay
3431 // state change.
3432 // Allowed values are 0-600 (10 minutes)
3433 unsigned _supla_int16_t MinOnTimeS; // minimum allowed time for output to
3434 // be enabled
3435 unsigned _supla_int16_t MinOffTimeS; // minimum allowed time for output to
3436 // be disabled
3437 signed char OutputValueOnError; // -100 cool, 0 off (default), 100 heat
3438 unsigned char Subfunction; // SUPLA_HVAC_SUBFUNCTION_
3439 unsigned char TemperatureSetpointChangeSwitchesToManualMode; // 0 - off,
3440 // 1 - on (def)
3441 unsigned char AuxMinMaxSetpointEnabled; // 0 - off (default), 1 - on
3442 // For HEAT_COOL thermostats we have two outpus. They can either use
3443 // shared output for heating/cooling action and second output for heat vs
3444 // cool mode selection, or they can use separate outputs - one for heating
3445 // and one for cooling
3446 unsigned char UseSeparateHeatCoolOutputs; // 0 - off (default), 1 - on
3447 HvacParameterFlags ParameterFlags;
3448
3449 union {
3450 _supla_int_t MasterThermostatChannelId;
3451 struct {
3452 unsigned char MasterThermostatIsSet; // 0 - no; 1 - yes
3453 unsigned char MasterThermostatChannelNo;
3454 }; // v. >= 25
3455 };
3456
3457 union {
3458 _supla_int_t HeatOrColdSourceSwitchChannelId;
3459 struct {
3460 unsigned char HeatOrColdSourceSwitchIsSet; // 0 - no; 1 - yes
3461 unsigned char HeatOrColdSourceSwitchChannelNo;
3462 }; // v. >= 25
3463 };
3464
3465 union {
3466 _supla_int_t PumpSwitchChannelId;
3467 struct {
3468 unsigned char PumpSwitchIsSet; // 0 - no; 1 - yes
3469 unsigned char PumpSwitchChannelNo;
3470 }; // v. >= 25
3471 };
3472
3473 // TemperatureControlType allows to switch between work based on main
3474 // thermometer (room) and aux thermometer (heater/cooler).
3475 // Option is available only for SUPLA_CHANNELFNC_HVAC_THERMOSTAT
3476 // If set to 0, then it is not supported.
3477 unsigned char TemperatureControlType; // SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_
3478
3479 unsigned char LocalUILockingCapabilities; // LOCAL_UI_LOCK_*
3480 unsigned char LocalUILock; // LOCAL_UI_LOCK_*
3481
3482 // min/max allowed parameters are used only with LocalUILock &
3483 // LOCAL_UI_LOCK_TEMPERATURE
3484 _supla_int16_t MinAllowedTemperatureSetpointFromLocalUI;
3485 _supla_int16_t MaxAllowedTemperatureSetpointFromLocalUI;
3486 unsigned char Reserved[48 - sizeof(HvacParameterFlags) -
3487 sizeof(_supla_int_t) - sizeof(_supla_int_t) -
3488 sizeof(_supla_int_t) - sizeof(unsigned char) -
3489 sizeof(unsigned char) - sizeof(unsigned char) -
3490 sizeof(_supla_int16_t) - sizeof(_supla_int16_t)];
3491 THVACTemperatureCfg Temperatures;
3492} TChannelConfig_HVAC; // v. >= 21
3493
3494#define SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_LINEAR 0
3495#define SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_BAR 1
3496#define SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_CANDLE 2
3497
3498#define SUPLA_GENERAL_PURPOSE_UNIT_SIZE 15
3499
3500// General Purpose Mesurement channel config:
3501// Calculated value is: (value / ValueDivider) * ValueMultiplier + ValueAdded
3502typedef struct {
3503 // Value divider
3504 _supla_int_t ValueDivider; // 0.001 units; 0 is considered as 1
3505 // Value multiplier
3506 _supla_int_t ValueMultiplier; // 0.001 units; 0 is considered as 1
3507 // Value added
3508 _supla_int64_t ValueAdded; // 0.001 units
3509 // Display precicion
3510 unsigned char ValuePrecision; // 0 - 4 decimal points
3511 // Display unit (before value) - UTF8 including the terminating null byte '\0'
3512 char UnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3513 // Display unit (after value) - UTF8 including the terminating null byte '\0'
3514 char UnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3515 unsigned char
3516 NoSpaceBeforeValue; // 0 - with space (default), 1 - without space
3517 unsigned char
3518 NoSpaceAfterValue; // 0 - with space (default), 1 - without space
3519 // Keep history on server
3520 unsigned char KeepHistory; // 0 - no (default), 1 - yes
3521 // Chart type linear/bar/candle
3522 unsigned char ChartType; // SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_*
3523 // Channel refresh interval [ms], allowed range 1 .. 65535
3524 // Actual channel implementation may enforce minimum value
3525 // 0 - default - implementation dependent
3526 unsigned _supla_int16_t RefreshIntervalMs;
3527
3528 // Readonly and default parameters
3529 // Default value divider
3530 _supla_int_t DefaultValueDivider; // 0.001 units; 0 is considered as 1
3531 // Default value multiplier
3532 _supla_int_t DefaultValueMultiplier; // 0.001 units; 0 is considered as 1
3533 // Default value added
3534 _supla_int64_t DefaultValueAdded; // 0.001 units
3535 // Default display precicion
3536 unsigned char DefaultValuePrecision; // 0 - 4 decimal points
3537 // Default unit (before value) - UTF8 including the terminating null byte '\0'
3538 char DefaultUnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3539 // Default unit (after value) - UTF8 including the terminating null byte '\0'
3540 char DefaultUnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3541
3542 unsigned char Reserved[8];
3544
3545#define SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_INCREMENT_DECREMENT 0
3546#define SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_ALWAYS_INCREMENT 1
3547#define SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_ALWAYS_DECREMENT 2
3548
3549#define SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_BAR 0
3550#define SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_LINEAR 1
3551
3552// General Purpose Meter channel config:
3553// Calculated value is: (value / ValueDivider) * ValueMultiplier + ValueAdded
3554typedef struct {
3555 // Counter type
3556 unsigned char CounterType; // SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_*
3557
3558 // Value divider
3559 _supla_int_t ValueDivider; // 0.001 units; 0 is considered as 1
3560 // Value multiplier
3561 _supla_int_t ValueMultiplier; // 0.001 units; 0 is considered as 1
3562 // Value added
3563 _supla_int64_t ValueAdded; // 0.001 units
3564 // Display precicion
3565 unsigned char ValuePrecision; // 0 - 4 decimal points
3566 // Display unit (before value) - UTF8 including the terminating null byte '\0'
3567 char UnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3568 // Display unit (after value) - UTF8 including the terminating null byte '\0'
3569 char UnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3570 unsigned char
3571 NoSpaceBeforeValue; // 0 - with space (default), 1 - without space
3572 unsigned char
3573 NoSpaceAfterValue; // 0 - with space (default), 1 - without space
3574 // Keep history on server
3575 unsigned char KeepHistory; // 0 - no (default), 1 - yes
3576 // Chart type linear/bar/candle
3577 unsigned char ChartType; // SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_*
3578 // Include value added in history
3579 unsigned char IncludeValueAddedInHistory; // 0 - no (default), 1 - yes
3580 // Fill missing data
3581 unsigned char FillMissingData; // 0 - no (default), 1 - yes
3582 // Channel refresh interval [ms], allowed range 1 .. 65535
3583 // Actual channel implementation may enforce minimum value
3584 // 0 - default - implementation dependent
3585 unsigned _supla_int16_t RefreshIntervalMs;
3586
3587 // Readonly and default parameters
3588 // Default value divider
3589 _supla_int_t DefaultValueDivider; // 0.001 units; 0 is considered as 1
3590 // Default value multiplier
3591 _supla_int_t DefaultValueMultiplier; // 0.001 units; 0 is considered as 1
3592 // Default value added
3593 _supla_int64_t DefaultValueAdded; // 0.001 units
3594 // Default display precicion
3595 unsigned char DefaultValuePrecision; // 0 - 4 decimal points
3596 // Default unit (before value) - UTF8 including the terminating null byte '\0'
3597 char DefaultUnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3598 // Default unit (after value) - UTF8 including the terminating null byte '\0'
3599 char DefaultUnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3600
3601 unsigned char Reserved[8];
3603
3604#define EM_CT_TYPE_100A_33mA (1ULL << 0)
3605#define EM_CT_TYPE_200A_66mA (1ULL << 1)
3606#define EM_CT_TYPE_400A_133mA (1ULL << 2)
3607
3608#define EM_PHASE_LED_TYPE_OFF (1ULL << 0)
3609#define EM_PHASE_LED_TYPE_VOLTAGE_PRESENCE (1ULL << 1)
3610#define EM_PHASE_LED_TYPE_VOLTAGE_PRESENCE_INVERTED (1ULL << 2)
3611// Voltage level:
3612// - PhaseLedParam1 - "low threshold", units 0.01 V.
3613// When voltage < low threshold -> blue LED
3614// - PhaseLedParam2 - "high threshold", units 0.01 V.
3615// When voltage > high threshold -> red LED
3616// - Voltage between low and high threshold -> green LED
3617#define EM_PHASE_LED_TYPE_VOLTAGE_LEVEL (1ULL << 3)
3618// Active power direction:
3619// - PhaseLedParam1 - "low threshold", units 0.01 W.
3620// When power < low threshold -> green LED.
3621// - PhaseLedParam2 - "high threshold", units 0.01 W.
3622// When power > high threshold -> red LED
3623#define EM_PHASE_LED_TYPE_POWER_ACTIVE_DIRECTION (1ULL << 4)
3624
3625// Electricity meter channel config
3626typedef struct {
3627 // Selected CT type
3628 unsigned _supla_int64_t UsedCTType; // EM_CT_TYPE_
3629 // Selected phase LED type
3630 unsigned _supla_int64_t UsedPhaseLedType; // EM_PHASE_LED_TYPE_*
3631
3632 // Phase LED params (actual meaning depends on phase LED type)
3633 _supla_int_t PhaseLedParam1;
3634 _supla_int_t PhaseLedParam2;
3635
3636 // readonly, device capabilities
3637 unsigned _supla_int64_t AvailableCTTypes;
3638 unsigned _supla_int64_t AvailablePhaseLedTypes;
3639
3640 unsigned char Reserved[32];
3642
3643typedef struct {
3644 _supla_int_t PricePerUnit; // * 0.0001
3645 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
3646 char Currency[3];
3647 char CustomUnit[9]; // UTF8 including the terminating null byte ('\0')
3648
3649 _supla_int_t ImpulsesPerUnit;
3650 _supla_int64_t InitialValue; // 0.001 units
3651 unsigned char AddToHistory; // 0 - False, 1 - True
3652
3653 unsigned char Reserved[32];
3654} TChannelConfig_ImpulseCounter; // v. >= 25
3655
3656typedef struct {
3657 unsigned char FillLevel; // Fill level in 0-100 %
3658 union {
3659 _supla_int_t ChannelId;
3660 struct {
3661 unsigned char IsSet; // 0 - no; 1 - yes
3662 unsigned char ChannelNo;
3663 };
3664 };
3666
3667typedef struct {
3668 unsigned char WarningAboveLevel; // 0 - not set, 1-101 for 0-100%
3669 unsigned char AlarmAboveLevel; // 0 - not set, 1-101 for 0-100%
3670 unsigned char WarningBelowLevel; // 0 - not set, 1-101 for 0-100%
3671 unsigned char AlarmBelowLevel; // 0 - not set, 1-101 for 0-100%
3672
3673 unsigned char MuteAlarmSoundWithoutAdditionalAuth; // 0 - admin login is
3674 // required, 1 - regular
3675 // user is allowed
3676
3677 TContainer_SensorInfo SensorInfo[10];
3678 unsigned char Reserved[32];
3679} TChannelConfig_Container; // v. >= 26
3680
3681typedef struct {
3682 union {
3683 _supla_int_t ChannelId;
3684 struct {
3685 unsigned char IsSet; // 0 - no; 1 - yes
3686 unsigned char ChannelNo;
3687 };
3688 };
3689} TValve_SensorInfo; // v. >= 27
3690
3691#define SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_NONE 0
3692#define SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_ALWAYS 1
3693#define SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_ON_CHANGE 2
3694
3695typedef struct {
3697 SensorInfo[20]; // Flood sensors can be attached only if
3698 // SUPLA_CHANNEL_FLAG_FLOOD_SENSORS_SUPPORTED is set
3699 unsigned char CloseValveOnFloodType; // SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_*
3700 unsigned char Reserved[31];
3701} TChannelConfig_Valve; // v. >= 27
3702
3703#define SUPLA_OCR_AUTHKEY_SIZE 33
3704
3705#define OCR_LIGHTING_MODE_OFF (1ULL << 0)
3706#define OCR_LIGHTING_MODE_ALWAYS_ON (1ULL << 1)
3707#define OCR_LIGHTING_MODE_AUTO (1ULL << 2)
3708
3709typedef struct {
3710 char AuthKey[SUPLA_OCR_AUTHKEY_SIZE]; // Set by the server. Alphanumeric null
3711 // terminated string.
3712 char Host[SUPLA_URL_HOST_MAXSIZE]; // Set by the server. Including the
3713 // terminating null byte ('\0').
3714
3715 unsigned _supla_int_t
3716 PhotoIntervalSec; // 0 - Disabled. The server may discard the
3717 // value if it considers the frequency to be
3718 // too high or too low. The server can set
3719 // the accepted value.
3720 unsigned _supla_int64_t LightingMode; // OCR_LIGHTING_MODE *
3721 unsigned char LightingLevel; // 1-100%
3722 unsigned _supla_int64_t MaximumIncrement; // Maximum impulse increment
3723 // between shots. 0 == Unspecified
3724
3725 // readonly, device capabilities
3726 unsigned _supla_int64_t AvailableLightingModes;
3727 unsigned char Reserved[128];
3728} TChannelConfig_OCR; // v. >= 25
3729
3730typedef struct {
3731 // If OvercurrentMaxAllowed == 0, then overcurrent settings are not available.
3732 // If OvercurrentThreshold == 0, then overcurrent protection is disabled.
3733 unsigned _supla_int_t OvercurrentThreshold; // in 0.01 A
3734 unsigned _supla_int_t OvercurrentMaxAllowed; // in 0.01 A, readonly
3735 unsigned char DefaultRelatedMeterIsSet; // readonly, 1 - true, 0 - false
3736 unsigned char
3737 DefaultRelatedMeterChannelNo; // readonly, provides channel number of
3738 // related meter if RelatedMeterIsSet
3739 unsigned char Reserved[32];
3740} TChannelConfig_PowerSwitch; // v. >= 25
3741
3742typedef TChannelConfig_PowerSwitch TChannelConfig_LightSwitch;
3743
3744// Staircase timer ext use SUPLA_CONFIG_TYPE_EXTENDED
3745typedef TChannelConfig_PowerSwitch TChannelConfig_StaircaseTimer_Ext;
3746
3747typedef struct {
3748 _supla_int_t ChannelID;
3749 union {
3750 unsigned _supla_int_t DurationMS;
3751 unsigned _supla_int_t DurationSec; // ver. >= 21. Applies to HVAC
3752 };
3753 unsigned char On;
3754} TCS_TimerArmRequest; // v. >= 17
3755
3756// Recommended for bistable buttons
3757#define SUPLA_ACTION_CAP_TURN_ON (1 << 0)
3758#define SUPLA_ACTION_CAP_TURN_OFF (1 << 1)
3759#define SUPLA_ACTION_CAP_TOGGLE_x1 (1 << 2)
3760#define SUPLA_ACTION_CAP_TOGGLE_x2 (1 << 3)
3761#define SUPLA_ACTION_CAP_TOGGLE_x3 (1 << 4)
3762#define SUPLA_ACTION_CAP_TOGGLE_x4 (1 << 5)
3763#define SUPLA_ACTION_CAP_TOGGLE_x5 (1 << 6)
3764
3765// Recommended for monostable buttons
3766#define SUPLA_ACTION_CAP_HOLD (1 << 10)
3767#define SUPLA_ACTION_CAP_SHORT_PRESS_x1 (1 << 11)
3768#define SUPLA_ACTION_CAP_SHORT_PRESS_x2 (1 << 12)
3769#define SUPLA_ACTION_CAP_SHORT_PRESS_x3 (1 << 13)
3770#define SUPLA_ACTION_CAP_SHORT_PRESS_x4 (1 << 14)
3771#define SUPLA_ACTION_CAP_SHORT_PRESS_x5 (1 << 15)
3772
3773// Other Action Trigger events
3774#define SUPLA_ACTION_CAP_ROTATE_RIGHT (1 << 7)
3775#define SUPLA_ACTION_CAP_ROTATE_LEFT (1 << 8)
3776
3777#define SUPLA_VALVE_FLAG_FLOODING 0x1
3778#define SUPLA_VALVE_FLAG_MANUALLY_CLOSED 0x2
3779#define SUPLA_VALVE_FLAG_MOTOR_PROBLEM 0x4
3780
3781// Valve channel value
3782// Device -> Server -> Client
3783typedef struct {
3784 union {
3785 unsigned char closed; // 0 - open, 1 - closed
3786 unsigned char closed_percent;
3787 };
3788
3789 unsigned char flags; // see SUPLA_VALVE_FLAG_
3790} TValve_Value;
3791
3792// Valve channel value payload
3793// Client -> Server -> Device
3794typedef struct {
3795 unsigned char command; // 0 - close
3796 // 1 - open
3797 char reserved[7];
3798} TCSD_Valve;
3799
3800typedef struct {
3801 unsigned char ChannelNumber;
3802 _supla_int_t ActionTrigger;
3803 unsigned char zero[10]; // Place for future variables
3805
3806#define SUPLA_PN_TITLE_MAXSIZE 101
3807#define SUPLA_PN_BODY_MAXSIZE 256
3808#define SUPLA_PN_PROFILE_NAME_MAXSIZE 51
3809
3810#define PN_SERVER_MANAGED_TITLE (1 << 0)
3811#define PN_SERVER_MANAGED_BODY (1 << 1)
3812#define PN_SERVER_MANAGED_SOUND (1 << 2)
3813
3814typedef struct {
3815 unsigned char
3816 ServerManagedFields; // Specifies the fields that will be managed by the
3817 // server. This value is only considered for the
3818 // first notification within a given context and
3819 // applies to all subsequent notifications.
3820
3821 _supla_int16_t Context; // >= 0 Channel, -1 Device
3822 signed char Reserved[8];
3824
3825typedef struct {
3826 _supla_int16_t Context; // >= 0 Channel, -1 Device
3827 signed char Reserved[32];
3828 _supla_int_t SoundId;
3829 unsigned _supla_int16_t
3830 TitleSize; // Including the terminating null byte ('\0').
3831 unsigned _supla_int16_t
3832 BodySize; // Including the terminating null byte ('\0').
3833 signed char TitleAndBody[SUPLA_PN_TITLE_MAXSIZE +
3834 SUPLA_PN_BODY_MAXSIZE]; // Last variable in struct!
3836
3837#define SUPLA_SUBDEVICE_PRODUCT_CODE_MAXSIZE 51
3838#define SUPLA_SUBDEVICE_SERIAL_NUMBER_MAXSIZE 51
3839
3840typedef struct {
3841 // device -> server
3842 unsigned char SubDeviceId;
3843
3844 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8 - 201 B including the
3845 // terminating null byte ('\0').
3846 char SoftVer[SUPLA_SOFTVER_MAXSIZE]; // 21 B including the terminating null
3847 // byte ('\0').
3848 char ProductCode[SUPLA_SUBDEVICE_PRODUCT_CODE_MAXSIZE]; // 51 B including the
3849 // terminating null
3850 // byte ('\0').
3851 char
3852 SerialNumber[SUPLA_SUBDEVICE_SERIAL_NUMBER_MAXSIZE]; // 51 B including
3853 // the terminating
3854 // null byte ('\0').
3856
3857#define SUPLA_PN_CLIENT_TOKEN_MAXSIZE 256
3858#define PLATFORM_UNKNOWN 0
3859#define PLATFORM_IOS 1
3860#define PLATFORM_ANDROID 2
3861#define PLATFORM_HOMEGRAPH 3 // v. >= 23
3862
3863typedef struct {
3864 unsigned char DevelopmentEnv;
3865 _supla_int_t Platform;
3866 _supla_int_t AppId;
3867 signed char
3868 ProfileName[SUPLA_PN_PROFILE_NAME_MAXSIZE]; // Including the terminating
3869 // null byte ('\0').
3870 unsigned _supla_int16_t
3871 RealTokenSize; // It allows you to determine if the maximum size of the
3872 // Token variable is sufficient.
3873 unsigned _supla_int16_t
3874 TokenSize; // Including the terminating null byte ('\0'). Size
3875 // <= 1 removes the token
3876 signed char Token[SUPLA_PN_CLIENT_TOKEN_MAXSIZE]; // Last variable in struct!
3878
3879typedef struct {
3881 TCS_PnClientToken Token; // Last variable in struct!
3883
3884typedef struct {
3885 _supla_int_t ResultCode;
3887
3888typedef struct {
3889 _supla_int_t count;
3890 _supla_int_t total_left;
3892 items[SUPLA_CHANNEL_STATE_PACK_MAXCOUNT]; // Last variable in struct!
3894
3895#pragma pack(pop)
3896
3897void *PROTO_ICACHE_FLASH sproto_init(void);
3898void PROTO_ICACHE_FLASH sproto_free(void *spd_ptr);
3899
3900#ifndef SPROTO_WITHOUT_OUT_BUFFER
3901char PROTO_ICACHE_FLASH sproto_out_buffer_append(void *spd_ptr,
3902 TSuplaDataPacket *sdp);
3903unsigned _supla_int_t sproto_pop_out_data(void *spd_ptr, char *buffer,
3904 unsigned _supla_int_t buffer_size);
3905#endif /*SPROTO_WITHOUT_OUT_BUFFER*/
3906char PROTO_ICACHE_FLASH sproto_out_dataexists(void *spd_ptr);
3907char PROTO_ICACHE_FLASH sproto_in_buffer_append(
3908 void *spd_ptr, char *data, unsigned _supla_int_t data_size);
3909
3910char PROTO_ICACHE_FLASH sproto_pop_in_sdp(void *spd_ptr, TSuplaDataPacket *sdp);
3911char PROTO_ICACHE_FLASH sproto_in_dataexists(void *spd_ptr);
3912
3913unsigned char PROTO_ICACHE_FLASH sproto_get_version(void *spd_ptr);
3914void PROTO_ICACHE_FLASH sproto_set_version(void *spd_ptr,
3915 unsigned char version);
3916void PROTO_ICACHE_FLASH sproto_sdp_init(void *spd_ptr, TSuplaDataPacket *sdp);
3917char PROTO_ICACHE_FLASH sproto_set_data(TSuplaDataPacket *sdp, char *data,
3918 unsigned _supla_int_t data_size,
3919 unsigned _supla_int_t call_id);
3920TSuplaDataPacket *PROTO_ICACHE_FLASH sproto_sdp_malloc(void *spd_ptr);
3921void PROTO_ICACHE_FLASH sproto_sdp_free(TSuplaDataPacket *sdp);
3922
3923void PROTO_ICACHE_FLASH sproto_log_summary(void *spd_ptr);
3924void PROTO_ICACHE_FLASH sproto_buffer_dump(void *spd_ptr, unsigned char in);
3925
3926void PROTO_ICACHE_FLASH sproto_set_null_terminated_string(
3927 const char *src, char *dest, unsigned _supla_int_t *dest_size,
3928 unsigned int max_size);
3929
3930void PROTO_ICACHE_FLASH sproto__set_null_terminated_string(
3931 const char *src, char *dest, unsigned _supla_int16_t *dest_size,
3932 unsigned int max_size);
3933
3934#ifdef __cplusplus
3935}
3936#endif
3937
3938#endif /* supla_proto_H_ */
Definition proto.h:3341
Definition proto.h:2966
Definition proto.h:2958
Definition proto.h:2947
Definition proto.h:834
Definition proto.h:1649
Definition proto.h:1637
Definition proto.h:1630
Definition proto.h:2608
Definition proto.h:2412
Definition proto.h:2110
Definition proto.h:2080
Definition proto.h:3794
Definition proto.h:1676
Definition proto.h:1659
Definition proto.h:2686
Definition proto.h:1667
Definition proto.h:2270
Definition proto.h:2261
Definition proto.h:2781
Definition proto.h:3040
Definition proto.h:1698
Definition proto.h:2866
Definition proto.h:3863
Definition proto.h:3879
Definition proto.h:2732
Definition proto.h:2770
Definition proto.h:2130
Definition proto.h:1817
Definition proto.h:1811
Definition proto.h:1823
Definition proto.h:1714
Definition proto.h:1727
Definition proto.h:1740
Definition proto.h:1703
Definition proto.h:3747
Definition proto.h:2316
Definition proto.h:2227
Definition proto.h:2222
Definition proto.h:2307
Definition proto.h:2329
Definition proto.h:2250
Definition proto.h:2199
Definition proto.h:2218
Definition proto.h:2211
Definition proto.h:3147
Definition proto.h:3224
Definition proto.h:3667
Definition proto.h:3626
Definition proto.h:3125
Definition proto.h:3554
Definition proto.h:3400
Definition proto.h:3643
Definition proto.h:3709
Definition proto.h:3730
Definition proto.h:3106
Definition proto.h:3102
Definition proto.h:3695
Definition proto.h:3167
Definition proto.h:2423
Definition proto.h:3656
Definition proto.h:2743
Definition proto.h:721
Definition proto.h:710
Definition proto.h:731
Definition proto.h:2647
Definition proto.h:2098
Definition proto.h:2063
Definition proto.h:3800
Definition proto.h:2297
Definition proto.h:1843
Definition proto.h:3066
Definition proto.h:2798
Definition proto.h:2046
Definition proto.h:3825
Definition proto.h:3814
Definition proto.h:3840
Definition proto.h:1225
Definition proto.h:1175
Definition proto.h:1183
Definition proto.h:1168
Definition proto.h:822
Definition proto.h:898
Definition proto.h:945
Definition proto.h:971
Definition proto.h:800
Definition proto.h:1077
Definition proto.h:1004
Definition proto.h:1019
Definition proto.h:1037
Definition proto.h:1055
Definition proto.h:1097
Definition proto.h:1119
Definition proto.h:807
Definition proto.h:2903
Definition proto.h:2890
Definition proto.h:2894
Definition proto.h:3021
Definition proto.h:2929
Definition proto.h:2908
Definition proto.h:3000
Definition proto.h:2880
Definition proto.h:2884
Definition proto.h:2876
Definition proto.h:2406
Definition proto.h:1986
Definition proto.h:1881
Definition proto.h:2027
Definition proto.h:2537
Definition proto.h:888
Definition proto.h:2383
Definition proto.h:2397
Definition proto.h:2754
Definition proto.h:3047
Definition proto.h:2847
Definition proto.h:1681
Definition proto.h:2712
Definition proto.h:3058
Definition proto.h:2766
Definition proto.h:2279
Definition proto.h:2859
Definition proto.h:2785
Definition proto.h:1688
Definition proto.h:2032
Definition proto.h:2126
Definition proto.h:1876
Definition proto.h:1869
Definition proto.h:3884
Definition proto.h:2737
Definition proto.h:2777
Definition proto.h:2135
Definition proto.h:1279
Definition proto.h:1252
Definition proto.h:1486
Definition proto.h:1477
Definition proto.h:1503
Definition proto.h:1495
Definition proto.h:1461
Definition proto.h:1446
Definition proto.h:1334
Definition proto.h:1419
Definition proto.h:1428
Definition proto.h:1437
Definition proto.h:1306
Definition proto.h:1534
Definition proto.h:1527
Definition proto.h:3888
Definition proto.h:1269
Definition proto.h:1259
Definition proto.h:1242
Definition proto.h:1232
Definition proto.h:1315
Definition proto.h:1343
Definition proto.h:1368
Definition proto.h:1393
Definition proto.h:1290
Definition proto.h:1830
Definition proto.h:792
Definition proto.h:783
Definition proto.h:1766
Definition proto.h:1780
Definition proto.h:1795
Definition proto.h:1754
Definition proto.h:1555
Definition proto.h:1577
Definition proto.h:1563
Definition proto.h:1541
Definition proto.h:1864
Definition proto.h:697
Definition proto.h:726
Definition proto.h:704
Definition proto.h:2595
Definition proto.h:3091
Definition proto.h:2842
Definition proto.h:2830
Definition proto.h:3098
Definition proto.h:3075
Definition proto.h:2790
Definition proto.h:2802
Definition proto.h:2287
Definition proto.h:1859
Definition proto.h:1852
Definition proto.h:1212
Definition proto.h:1200
Definition proto.h:1154
Definition proto.h:1141
Definition proto.h:777
Definition proto.h:748
Definition proto.h:743
Definition proto.h:688
Definition proto.h:2479
Definition proto.h:2453
Definition proto.h:2577
Definition proto.h:2460
Definition proto.h:2447
Definition proto.h:2428
Definition proto.h:2588
Definition proto.h:2690
Definition proto.h:3681
Definition proto.h:3783
Definition proto.h:3152
Definition proto.h:716