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