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