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