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// type: TDeviceConfig_Modbus
620#define SUPLA_DEVICE_CONFIG_FIELD_MODBUS (1ULL << 9) // v. >= 27
621
622// BIT map definition for TDS_SuplaDeviceChannel_C::Flags (32 bit)
623// BIT map definition for TDS_SuplaDeviceChannel_D::Flags (64 bit)
624// BIT map definition for TDS_SuplaDeviceChannel_E::Flags (64 bit)
625#define SUPLA_CHANNEL_FLAG_ZWAVE_BRIDGE 0x0001 // ver. >= 12
626#define SUPLA_CHANNEL_FLAG_IR_BRIDGE 0x0002 // ver. >= 12 DEPRECATED
627#define SUPLA_CHANNEL_FLAG_RF_BRIDGE 0x0004 // ver. >= 12 DEPRECATED
628#define SUPLA_CHANNEL_FLAG_OCR 0x0008 // ver. >= 26
629#define SUPLA_CHANNEL_FLAG_FLOOD_SENSORS_SUPPORTED 0x0010 // ver. >= 27
630#define SUPLA_CHANNEL_FLAG_FILL_LEVEL_REPORTING_IN_FULL_RANGE \
631 0x0020 // ver. >= 27
632#define SUPLA_CHANNEL_FLAG_VALVE_MOTOR_ALARM_SUPPORTED 0x0040 // ver. >= 27
633#define SUPLA_CHANNEL_FLAG_RS_SBS_AND_STOP_ACTIONS 0x0080 // ver. >= 17
634#define SUPLA_CHANNEL_FLAG_RGBW_COMMANDS_SUPPORTED 0x0100 // ver. >= 21
635#define SUPLA_CHANNEL_FLAG_ALWAYS_ALLOW_CHANNEL_DELETION 0x0200 // ver. >= 27
636// Free bits for future use: 0x0400, 0x0800
637#define SUPLA_CHANNEL_FLAG_RS_AUTO_CALIBRATION 0x1000 // ver. >= 15
638#define SUPLA_CHANNEL_FLAG_CALCFG_RESET_COUNTERS 0x2000 // ver. >= 15
639#define SUPLA_CHANNEL_FLAG_CALCFG_RECALIBRATE 0x4000 // ver. >= 15
640#define SUPLA_CHANNEL_FLAG_CALCFG_IDENTIFY_SUBDEVICE 0x8000 // ver. >= 25
641#define SUPLA_CHANNEL_FLAG_CHANNELSTATE 0x00010000 // ver. >= 12
642#define SUPLA_CHANNEL_FLAG_PHASE1_UNSUPPORTED 0x00020000 // ver. >= 12
643#define SUPLA_CHANNEL_FLAG_PHASE2_UNSUPPORTED 0x00040000 // ver. >= 12
644#define SUPLA_CHANNEL_FLAG_PHASE3_UNSUPPORTED 0x00080000 // ver. >= 12
645#define SUPLA_CHANNEL_FLAG_TIME_SETTING_NOT_AVAILABLE 0x00100000 // ver. >= 12
646#define SUPLA_CHANNEL_FLAG_RSA_ENCRYPTED_PIN_REQUIRED 0x00200000 // ver. >= 12
647#define SUPLA_CHANNEL_FLAG_OFFLINE_DURING_REGISTRATION 0x00400000 // ver. >= 12
648#define SUPLA_CHANNEL_FLAG_ZIGBEE_BRIDGE 0x00800000 // ver. >= 12
649#define SUPLA_CHANNEL_FLAG_COUNTDOWN_TIMER_SUPPORTED 0x01000000 // ver. >= 12
650#define SUPLA_CHANNEL_FLAG_LIGHTSOURCELIFESPAN_SETTABLE \
651 0x02000000 // ver. >= 12
652#define SUPLA_CHANNEL_FLAG_POSSIBLE_SLEEP_MODE_deprecated \
653 0x04000000 // ver. >= 12 DEPRECATED
654#define SUPLA_CHANNEL_FLAG_RUNTIME_CHANNEL_CONFIG_UPDATE \
655 0x08000000 // ver. >= 21
656#define SUPLA_CHANNEL_FLAG_WEEKLY_SCHEDULE 0x10000000 // ver. >= 21
657#define SUPLA_CHANNEL_FLAG_HAS_PARENT 0x20000000 // ver. >= 21
658#define SUPLA_CHANNEL_FLAG_CALCFG_RESTART_SUBDEVICE 0x40000000 // ver. >= 25
659#define SUPLA_CHANNEL_FLAG_BATTERY_COVER_AVAILABLE 0x80000000 // ver. >= 25
660#pragma pack(push, 1)
661
662typedef struct {
663 char tag[SUPLA_TAG_SIZE];
664 unsigned char version;
665 unsigned _supla_int_t rr_id; // Request/Response ID
666 unsigned _supla_int_t call_id;
667 unsigned _supla_int_t data_size;
668 char data[SUPLA_MAX_DATA_SIZE]; // Last variable in struct!
670
671typedef struct {
672 // server -> device|client
673 unsigned char proto_version_min;
674 unsigned char proto_version;
675 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
677
678typedef struct {
679 // server -> device|client
680 unsigned char server_version_min;
681 unsigned char server_version;
683
684typedef struct {
685 // device|client -> server
686 struct _supla_timeval now;
688
689// Compatibility with ESP8266
691 _supla_int_t tv_sec;
692 _supla_int_t tv_usec;
693};
694
695typedef struct {
696 // device|client -> server
697 struct timeval_compat now;
699
700typedef struct {
701 // server -> device|client
702 struct _supla_timeval now;
704
705typedef struct {
706 // device|client -> server
707 unsigned char activity_timeout;
709
710typedef struct {
711 // server -> device|client
712 unsigned char activity_timeout;
713 unsigned char min;
714 unsigned char max;
716
717typedef struct {
718 char value[SUPLA_CHANNELVALUE_SIZE];
719 char sub_value[SUPLA_CHANNELVALUE_SIZE]; // For example sensor value
721
722typedef struct {
723 char value[SUPLA_CHANNELVALUE_SIZE];
724 char sub_value[SUPLA_CHANNELVALUE_SIZE]; // For example sensor value
725 char sub_value_type; // SUBV_TYPE_
727
728#define SUBV_TYPE_NOT_SET_OR_OFFLINE 0
729#define SUBV_TYPE_SENSOR 1
730#define SUBV_TYPE_ELECTRICITY_MEASUREMENTS 2
731#define SUBV_TYPE_IC_MEASUREMENTS 3
732
733#define EV_TYPE_NONE 0
734#ifdef USE_DEPRECATED_EMEV_V1
735#define EV_TYPE_ELECTRICITY_METER_MEASUREMENT_V1 10
736#endif /*USE_DEPRECATED_EMEV_V1*/
737#ifdef USE_DEPRECATED_EMEV_V2
738#define EV_TYPE_ELECTRICITY_METER_MEASUREMENT_V2 12
739#endif /*USE_DEPRECATED_EMEV_V2*/
740#define EV_TYPE_ELECTRICITY_METER_MEASUREMENT_V3 14
741#define EV_TYPE_IMPULSE_COUNTER_DETAILS_V1 20
742#define EV_TYPE_THERMOSTAT_DETAILS_V1 30
743#define EV_TYPE_CHANNEL_STATE_V1 40
744#define EV_TYPE_TIMER_STATE_V1 50
745#define EV_TYPE_TIMER_STATE_V1_SEC 51
746#define EV_TYPE_CHANNEL_AND_TIMER_STATE_V1 60
747#define EV_TYPE_MULTI_VALUE 100
748
749#define CALCFG_TYPE_THERMOSTAT_DETAILS_V1 10
750
751typedef struct {
752 char type; // EV_TYPE_
753 unsigned _supla_int_t size;
754 char value[SUPLA_CHANNELEXTENDEDVALUE_SIZE]; // Last variable in struct!
755} TSuplaChannelExtendedValue; // v. >= 10
756
757typedef struct {
758 // server -> client
759 char EOL; // End Of List
760 _supla_int_t Id;
761 unsigned _supla_int_t
762 CaptionSize; // including the terminating null byte ('\0')
763 char Caption[SUPLA_LOCATION_CAPTION_MAXSIZE]; // Last variable in struct!
765
766typedef struct {
767 // server -> client
768 _supla_int_t count;
769 _supla_int_t total_left;
771 items[SUPLA_LOCATIONPACK_MAXCOUNT]; // Last variable in struct!
773
774typedef struct {
775 // device -> server
776 unsigned char Number;
777 _supla_int_t Type;
778 char value[SUPLA_CHANNELVALUE_SIZE];
780
781typedef struct {
782 // device -> server
783
784 _supla_int_t LocationID;
785 char LocationPWD[SUPLA_LOCATION_PWD_MAXSIZE]; // UTF8
786
787 char GUID[SUPLA_GUID_SIZE];
788 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
789 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
790
791 unsigned char channel_count;
793 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
795
796typedef struct {
797 // device -> server
798
799 unsigned char Number;
800 _supla_int_t Type;
801
802 _supla_int_t FuncList;
803 _supla_int_t Default;
804
805 char value[SUPLA_CHANNELVALUE_SIZE];
806} TDS_SuplaDeviceChannel_B; // ver. >= 2
807
808typedef struct {
809 unsigned char relatedChannelNumber; // ChannelNumber + 1.
810 unsigned _supla_int_t disablesLocalOperation;
812
813#define SUPLA_HVAC_VALUE_FLAG_SETPOINT_TEMP_HEAT_SET (1ULL << 0)
814#define SUPLA_HVAC_VALUE_FLAG_SETPOINT_TEMP_COOL_SET (1ULL << 1)
815// Tells if output responsible for heating function is enabled
816#define SUPLA_HVAC_VALUE_FLAG_HEATING (1ULL << 2)
817// Tells if output responsible for cooling function is enabled
818#define SUPLA_HVAC_VALUE_FLAG_COOLING (1ULL << 3)
819// Tells if channel works in Weekly Schedule mode. If set to 0, then it works
820// in manual mode
821#define SUPLA_HVAC_VALUE_FLAG_WEEKLY_SCHEDULE (1ULL << 4)
822#define SUPLA_HVAC_VALUE_FLAG_COUNTDOWN_TIMER (1ULL << 5)
823// FAN flag tells if fan function is enabled
824#define SUPLA_HVAC_VALUE_FLAG_FAN_ENABLED (1ULL << 6)
825#define SUPLA_HVAC_VALUE_FLAG_THERMOMETER_ERROR (1ULL << 7)
826#define SUPLA_HVAC_VALUE_FLAG_CLOCK_ERROR (1ULL << 8)
827#define SUPLA_HVAC_VALUE_FLAG_FORCED_OFF_BY_SENSOR (1ULL << 9)
828// Only for SUPLA_CHANNELFNC_HVAC_THERMOSTAT
829// If the COOL flag is not set, it means that the thermostat is working in
830// heating mode.
831#define SUPLA_HVAC_VALUE_FLAG_COOL (1ULL << 10)
832#define SUPLA_HVAC_VALUE_FLAG_WEEKLY_SCHEDULE_TEMPORAL_OVERRIDE (1ULL << 11)
833#define SUPLA_HVAC_VALUE_FLAG_BATTERY_COVER_OPEN (1ULL << 12)
834#define SUPLA_HVAC_VALUE_FLAG_CALIBRATION_ERROR (1ULL << 13)
835#define SUPLA_HVAC_VALUE_FLAG_ANTIFREEZE_OVERHEAT_ACTIVE (1ULL << 14)
836
837// HVAC modes are used in channel value (as a command from server or
838// as a status response from device to server) and in weekly schedules
839// programs. Programs can't use value TURN_ON and WEEKLY_SCHEDULE
840// Use SUPLA_HVAC_MODE_NOT_SET if you don't want to modify current mode, but
841// only to alter tempreature setpoints.
842#define SUPLA_HVAC_MODE_NOT_SET 0
843#define SUPLA_HVAC_MODE_OFF 1
844#define SUPLA_HVAC_MODE_HEAT 2
845#define SUPLA_HVAC_MODE_COOL 3
846#define SUPLA_HVAC_MODE_HEAT_COOL 4
847#define SUPLA_HVAC_MODE_FAN_ONLY 6
848#define SUPLA_HVAC_MODE_DRY 7
849// TURN ON mode is a command. Device will use it to turn on and then it will
850// restore previous mode which was used before turn off.
851#define SUPLA_HVAC_MODE_CMD_TURN_ON 8
852// Weekly schedule is a command. Device will use it to enable weekly schedule
853// mode and then it will set its mode according to schedule
854#define SUPLA_HVAC_MODE_CMD_WEEKLY_SCHEDULE 9
855// Switch to manual mode - it will restore previously used manual mode and
856// restore manual mode temperature setpoints when no new setpoints are given
857// in value.
858// It can be also used to switch to default manual mode, when no manual mode
859// was used earlier.
860#define SUPLA_HVAC_MODE_CMD_SWITCH_TO_MANUAL 10
861
862typedef struct {
863 unsigned char IsOn; // DS: 0/1 (for off/on) or 2..102 (for 0-100%)
864 unsigned char Mode; // SUPLA_HVAC_MODE_
865 _supla_int16_t
866 SetpointTemperatureHeat; // * 0.01 Celcius degree - used for heating
867 _supla_int16_t
868 SetpointTemperatureCool; // * 0.01 - Celcius degree used for cooling
869 unsigned _supla_int16_t Flags; // SUPLA_HVAC_VALUE_FLAG_
870} THVACValue;
871
872typedef struct {
873 // device -> server
874
875 unsigned char Number;
876 _supla_int_t Type;
877
878 union {
879 _supla_int_t FuncList;
880 unsigned _supla_int_t ActionTriggerCaps; // ver. >= 16
881 };
882
883 _supla_int_t Default;
884 _supla_int_t Flags;
885
886 union {
887 char value[SUPLA_CHANNELVALUE_SIZE];
888 TActionTriggerProperties actionTriggerProperties; // ver. >= 16
889 THVACValue hvacValue;
890 };
891} TDS_SuplaDeviceChannel_C; // ver. >= 10
892
893// Channel state flag values:
894#define SUPLA_CHANNEL_OFFLINE_FLAG_ONLINE 0
895#define SUPLA_CHANNEL_OFFLINE_FLAG_OFFLINE 1
896#define SUPLA_CHANNEL_OFFLINE_FLAG_ONLINE_BUT_NOT_AVAILABLE 2
897#define SUPLA_CHANNEL_OFFLINE_FLAG_OFFLINE_REMOTE_WAKEUP_NOT_SUPPORTED 3
898#define SUPLA_CHANNEL_OFFLINE_FLAG_FIRMWARE_UPDATE_ONGOING 4
899
900// Update below MAX value when new state is added to the list
901#define SUPLA_CHANNEL_OFFLINE_FLAG_MAX \
902 SUPLA_CHANNEL_OFFLINE_FLAG_FIRMWARE_UPDATE_ONGOING
903
904// Only in ONLINE state, ValidityTimeSec and value variables are used.
905// OFFLINE_REMOTE_WAKEUP_NOT_SUPPORTED - device doesn't support remote wakeup,
906// so we wait for it to initiate the communication.
907
908// Channel online flag values (only online/offline 0/1 values are exchanged,
909// compared to state flag values):
910#define SUPLA_CHANNEL_ONLINE_FLAG_ONLINE 1
911#define SUPLA_CHANNEL_ONLINE_FLAG_OFFLINE 0
912#define SUPLA_CHANNEL_ONLINE_FLAG_ONLINE_BUT_NOT_AVAILABLE \
913 SUPLA_CHANNEL_OFFLINE_FLAG_ONLINE_BUT_NOT_AVAILABLE
914#define SUPLA_CHANNEL_ONLINE_FLAG_STATE_REMOTE_WAKEUP_NOT_SUPPORTED \
915 SUPLA_CHANNEL_OFFLINE_FLAG_OFFLINE_REMOTE_WAKEUP_NOT_SUPPORTED
916#define SUPLA_CHANNEL_ONLINE_FLAG_FIRMWARE_UPDATE_ONGOING \
917 SUPLA_CHANNEL_OFFLINE_FLAG_FIRMWARE_UPDATE_ONGOING
918
919typedef struct {
920 // device -> server
921
922 unsigned char Number;
923 _supla_int_t Type;
924
925 union {
926 _supla_int_t FuncList;
927 unsigned _supla_int_t ActionTriggerCaps; // ver. >= 16
928 };
929
930 _supla_int_t Default;
931 _supla_int64_t Flags;
932
933 unsigned char Offline;
934 unsigned _supla_int_t ValueValidityTimeSec;
935
936 union {
937 char value[SUPLA_CHANNELVALUE_SIZE];
938 TActionTriggerProperties actionTriggerProperties; // ver. >= 16
939 THVACValue hvacValue;
940 };
941
942 unsigned char DefaultIcon;
943} TDS_SuplaDeviceChannel_D; // ver. >= 23
944
945typedef struct {
946 // device -> server
947
948 unsigned char Number;
949 _supla_int_t Type;
950
951 union {
952 _supla_int_t FuncList;
953 unsigned _supla_int_t ActionTriggerCaps; // ver. >= 16
954 };
955
956 _supla_int_t Default;
957 _supla_int64_t Flags;
958
959 unsigned char Offline; // see SUPLA_CHANNEL_OFFLINE_FLAG_
960
961 unsigned _supla_int_t ValueValidityTimeSec;
962
963 union {
964 char value[SUPLA_CHANNELVALUE_SIZE];
965 TActionTriggerProperties actionTriggerProperties; // ver. >= 16
966 THVACValue hvacValue;
967 };
968
969 unsigned char DefaultIcon;
970 unsigned char SubDeviceId; // 0 - no subdevice, 1..255 - subdevice id
971} TDS_SuplaDeviceChannel_E; // ver. >= 25
972
973typedef struct {
974 // device -> server
975
976 _supla_int_t LocationID;
977 char LocationPWD[SUPLA_LOCATION_PWD_MAXSIZE]; // UTF8
978
979 char GUID[SUPLA_GUID_SIZE];
980 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
981 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
982
983 unsigned char channel_count;
985 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
986} TDS_SuplaRegisterDevice_B; // ver. >= 2
987
988typedef struct {
989 // device -> server
990
991 _supla_int_t LocationID;
992 char LocationPWD[SUPLA_LOCATION_PWD_MAXSIZE]; // UTF8
993
994 char GUID[SUPLA_GUID_SIZE];
995 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
996 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
997
998 char ServerName[SUPLA_SERVER_NAME_MAXSIZE]; // ServerName is equal to Server
999 // host name/IP
1000
1001 unsigned char channel_count;
1003 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1004} TDS_SuplaRegisterDevice_C; // ver. >= 6
1005
1006typedef struct {
1007 // device -> server
1008
1009 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1010 char AuthKey[SUPLA_AUTHKEY_SIZE];
1011
1012 char GUID[SUPLA_GUID_SIZE];
1013
1014 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1015 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1016
1017 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1018
1019 unsigned char channel_count;
1021 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1022} TDS_SuplaRegisterDevice_D; // ver. >= 7
1023
1024typedef struct {
1025 // device -> server
1026
1027 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1028 char AuthKey[SUPLA_AUTHKEY_SIZE];
1029
1030 char GUID[SUPLA_GUID_SIZE];
1031
1032 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1033 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1034
1035 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1036
1037 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1038 _supla_int16_t ManufacturerID;
1039 _supla_int16_t ProductID;
1040
1041 unsigned char channel_count;
1043 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1044} TDS_SuplaRegisterDevice_E; // ver. >= 10
1045
1046typedef struct {
1047 // device -> server
1048
1049 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1050 char AuthKey[SUPLA_AUTHKEY_SIZE];
1051
1052 char GUID[SUPLA_GUID_SIZE];
1053
1054 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1055 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1056
1057 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1058
1059 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1060 _supla_int16_t ManufacturerID;
1061 _supla_int16_t ProductID;
1062
1063 unsigned char channel_count;
1065
1066typedef struct {
1067 // device -> server
1068
1069 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1070 char AuthKey[SUPLA_AUTHKEY_SIZE];
1071
1072 char GUID[SUPLA_GUID_SIZE];
1073
1074 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1075 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1076
1077 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1078
1079 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1080 _supla_int16_t ManufacturerID;
1081 _supla_int16_t ProductID;
1082
1083 unsigned char channel_count;
1085 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1086} TDS_SuplaRegisterDevice_F; // ver. >= 23
1087
1088typedef struct {
1089 // device -> server
1090
1091 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1092 char AuthKey[SUPLA_AUTHKEY_SIZE];
1093
1094 char GUID[SUPLA_GUID_SIZE];
1095
1096 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
1097 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1098
1099 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1100
1101 _supla_int_t Flags; // SUPLA_DEVICE_FLAG_*
1102 _supla_int16_t ManufacturerID;
1103 _supla_int16_t ProductID;
1104
1105 unsigned char channel_count;
1107 channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
1108} TDS_SuplaRegisterDevice_G; // ver. >= 25
1109
1110typedef struct {
1111 // server -> device
1112
1113 _supla_int_t result_code;
1114 unsigned char activity_timeout;
1115 unsigned char version;
1116 unsigned char version_min;
1118
1119#define CHANNEL_REPORT_CHANNEL_REGISTERED (1 << 0)
1120#define CHANNEL_REPORT_INCORRECT_CHANNEL_TYPE (1 << 1)
1121#define CHANNEL_REPORT_MAXSIZE 256
1122
1123typedef struct {
1124 // server -> device
1125
1126 _supla_int_t result_code;
1127 unsigned char activity_timeout;
1128 unsigned char version;
1129 unsigned char version_min;
1130
1131 unsigned _supla_int16_t channel_report_size;
1132 unsigned char channel_report
1133 [CHANNEL_REPORT_MAXSIZE]; // One byte per channel. The meaning of the
1134 // bits is determined by CHANNEL_REPORT_*.
1135} TSD_SuplaRegisterDeviceResult_B; // ver. >= 25
1136
1137typedef struct {
1138 // device -> server
1139
1140 unsigned char ChannelNumber;
1141 char value[SUPLA_CHANNELVALUE_SIZE];
1143
1144typedef struct {
1145 // device -> server
1146
1147 unsigned char ChannelNumber;
1148 unsigned char Offline;
1149 char value[SUPLA_CHANNELVALUE_SIZE];
1150} TDS_SuplaDeviceChannelValue_B; // v. >= 12
1151
1152typedef struct {
1153 // device -> server
1154
1155 unsigned char ChannelNumber;
1156 unsigned char Offline; // see SUPLA_CHANNEL_OFFLINE_FLAG_
1157
1158 unsigned _supla_int_t ValidityTimeSec;
1159 char value[SUPLA_CHANNELVALUE_SIZE];
1160} TDS_SuplaDeviceChannelValue_C; // v. >= 12
1161
1162typedef struct {
1163 // device -> server
1164
1165 unsigned char ChannelNumber;
1166 TSuplaChannelExtendedValue value; // Last variable in struct!
1168
1169typedef struct {
1170 // server -> device
1171 _supla_int_t SenderID;
1172 unsigned char ChannelNumber;
1173 union {
1174 unsigned _supla_int_t DurationMS;
1175 unsigned _supla_int_t DurationSec; // ver. >= 21. Applies to HVAC
1176 };
1177
1178 char value[SUPLA_CHANNELVALUE_SIZE];
1180
1181typedef struct {
1182 // server -> device
1183 _supla_int_t SenderID;
1184 _supla_int_t GroupID;
1185 unsigned char EOL; // End Of List
1186 unsigned char ChannelNumber;
1187 union {
1188 unsigned _supla_int_t DurationMS;
1189 unsigned _supla_int_t DurationSec; // ver. >= 21. Applies to HVAC
1190 };
1191 char value[SUPLA_CHANNELVALUE_SIZE];
1192} TSD_SuplaChannelGroupNewValue; // v. >= 13
1193
1194typedef struct {
1195 // device -> server
1196 unsigned char ChannelNumber;
1197 _supla_int_t SenderID;
1198 char Success;
1200
1201typedef struct {
1202 // server -> client
1203
1204 char EOL; // End Of List
1205 _supla_int_t Id;
1206 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1207
1208 TSuplaChannelValue value;
1210
1211typedef struct {
1212 // server -> client
1213
1214 char EOL; // End Of List
1215 _supla_int_t Id;
1216 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1217
1219} TSC_SuplaChannelValue_B; // ver. >= 15
1220
1221typedef struct {
1222 // server -> client
1223 _supla_int_t Id;
1224
1225 TSuplaChannelExtendedValue value; // Last variable in struct!
1227
1228typedef struct {
1229 // server -> client
1230
1231 _supla_int_t count;
1232 _supla_int_t total_left;
1233
1235 items[SUPLA_CHANNELVALUE_PACK_MAXCOUNT]; // Last variable in struct!
1236} TSC_SuplaChannelValuePack; // ver. >= 9
1237
1238typedef struct {
1239 // server -> client
1240
1241 _supla_int_t count;
1242 _supla_int_t total_left;
1243
1245 items[SUPLA_CHANNELVALUE_PACK_MAXCOUNT]; // Last variable in struct!
1246} TSC_SuplaChannelValuePack_B; // ver. >= 15
1247
1248typedef struct {
1249 // server -> client
1250
1251 _supla_int_t count;
1252 _supla_int_t total_left;
1253 unsigned _supla_int_t pack_size;
1254
1255 char pack[SUPLA_CHANNELEXTENDEDVALUE_PACK_MAXDATASIZE]; // Last variable in
1256 // struct!
1257} TSC_SuplaChannelExtendedValuePack; // ver. >= 10
1258
1259typedef struct {
1260 // server -> client
1261 char EOL; // End Of List
1262
1263 _supla_int_t Id;
1264 _supla_int_t LocationID;
1265 _supla_int_t Func;
1266 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1267
1268 TSuplaChannelValue value;
1269
1270 unsigned _supla_int_t
1271 CaptionSize; // including the terminating null byte ('\0')
1272 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1274
1275typedef struct {
1276 // server -> client
1277
1278 _supla_int_t count;
1279 _supla_int_t total_left;
1281 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1283
1284typedef struct {
1285 // server -> client
1286 char EOL; // End Of List
1287
1288 _supla_int_t Id;
1289 _supla_int_t LocationID;
1290 _supla_int_t Func;
1291 _supla_int_t AltIcon;
1292 unsigned _supla_int_t Flags;
1293 unsigned char ProtocolVersion;
1294 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1295
1296 TSuplaChannelValue value;
1297
1298 unsigned _supla_int_t
1299 CaptionSize; // including the terminating null byte ('\0')
1300 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1301} TSC_SuplaChannel_B; // ver. >= 8
1302
1303typedef struct {
1304 // server -> client
1305
1306 _supla_int_t count;
1307 _supla_int_t total_left;
1309 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1310} TSC_SuplaChannelPack_B; // ver. >= 8
1311
1312typedef struct {
1313 // server -> client
1314 char EOL; // End Of List
1315
1316 _supla_int_t Id;
1317 _supla_int_t DeviceID;
1318 _supla_int_t LocationID;
1319 _supla_int_t Type;
1320 _supla_int_t Func;
1321 _supla_int_t AltIcon;
1322 _supla_int_t UserIcon;
1323 _supla_int16_t ManufacturerID;
1324 _supla_int16_t ProductID;
1325
1326 unsigned _supla_int_t Flags;
1327 unsigned char ProtocolVersion;
1328 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1329
1330 TSuplaChannelValue value;
1331
1332 unsigned _supla_int_t
1333 CaptionSize; // including the terminating null byte ('\0')
1334 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1335} TSC_SuplaChannel_C; // ver. >= 10
1336
1337typedef struct {
1338 // server -> client
1339 char EOL; // End Of List
1340
1341 _supla_int_t Id;
1342 _supla_int_t DeviceID;
1343 _supla_int_t LocationID;
1344 _supla_int_t Type;
1345 _supla_int_t Func;
1346 _supla_int_t AltIcon;
1347 _supla_int_t UserIcon;
1348 _supla_int16_t ManufacturerID;
1349 _supla_int16_t ProductID;
1350
1351 unsigned _supla_int_t Flags;
1352 unsigned char ProtocolVersion;
1353 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1354
1356
1357 unsigned _supla_int_t
1358 CaptionSize; // including the terminating null byte ('\0')
1359 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1360} TSC_SuplaChannel_D; // ver. >= 15
1361
1362typedef struct {
1363 // server -> client
1364 char EOL; // End Of List
1365
1366 _supla_int_t Id;
1367 _supla_int_t DeviceID;
1368 _supla_int_t LocationID;
1369 _supla_int_t Type;
1370 _supla_int_t Func;
1371 _supla_int_t AltIcon;
1372 _supla_int_t UserIcon;
1373 _supla_int16_t ManufacturerID;
1374 _supla_int16_t ProductID;
1375 unsigned _supla_int_t DefaultConfigCRC32;
1376
1377 unsigned _supla_int64_t Flags;
1378 unsigned char ProtocolVersion;
1379 char online; // see SUPLA_CHANNEL_ONLINE_FLAG_
1380
1382
1383 unsigned _supla_int_t
1384 CaptionSize; // including the terminating null byte ('\0')
1385 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
1386} TSC_SuplaChannel_E; // ver. >= 23
1387
1388typedef struct {
1389 // server -> client
1390
1391 _supla_int_t count;
1392 _supla_int_t total_left;
1394 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1395} TSC_SuplaChannelPack_C; // ver. >= 10
1396
1397typedef struct {
1398 // server -> client
1399
1400 _supla_int_t count;
1401 _supla_int_t total_left;
1403 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1404} TSC_SuplaChannelPack_D; // ver. >= 15
1405
1406typedef struct {
1407 // server -> client
1408
1409 _supla_int_t count;
1410 _supla_int_t total_left;
1412 items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
1413} TSC_SuplaChannelPack_E; // ver. >= 23
1414
1415typedef struct {
1416 // server -> client
1417 char EOL; // End Of List
1418
1419 _supla_int_t Id;
1420 _supla_int_t LocationID;
1421 _supla_int_t Func;
1422 _supla_int_t AltIcon;
1423 unsigned _supla_int_t Flags;
1424
1425 unsigned _supla_int_t
1426 CaptionSize; // including the terminating null byte ('\0')
1427 char Caption[SUPLA_CHANNELGROUP_CAPTION_MAXSIZE]; // Last variable in struct!
1428} TSC_SuplaChannelGroup; // ver. >= 9
1429
1430typedef struct {
1431 // server -> client
1432 char EOL; // End Of List
1433
1434 _supla_int_t Id;
1435 _supla_int_t LocationID;
1436 _supla_int_t Func;
1437 _supla_int_t AltIcon;
1438 _supla_int_t UserIcon;
1439 unsigned _supla_int_t Flags;
1440
1441 unsigned _supla_int_t
1442 CaptionSize; // including the terminating null byte ('\0')
1443 char Caption[SUPLA_CHANNELGROUP_CAPTION_MAXSIZE]; // Last variable in struct!
1444} TSC_SuplaChannelGroup_B; // ver. >= 10
1445
1446typedef struct {
1447 // server -> client
1448
1449 _supla_int_t count;
1450 _supla_int_t total_left;
1452 items[SUPLA_CHANNELGROUP_PACK_MAXCOUNT]; // Last variable in struct!
1453} TSC_SuplaChannelGroupPack; // ver. >= 9
1454
1455typedef struct {
1456 // server -> client
1457
1458 _supla_int_t count;
1459 _supla_int_t total_left;
1461 items[SUPLA_CHANNELGROUP_PACK_MAXCOUNT]; // Last variable in struct!
1462} TSC_SuplaChannelGroupPack_B; // ver. >= 10
1463
1464typedef struct {
1465 // server -> client
1466 char EOL; // End Of List
1467
1468 _supla_int_t ChannelGroupID;
1469 _supla_int_t ChannelID;
1470} TSC_SuplaChannelGroupRelation; // ver. >= 9
1471
1472typedef struct {
1473 // server -> client
1474
1475 _supla_int_t count;
1476 _supla_int_t total_left;
1478 items[SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT]; // Last variable in
1479 // struct!
1481
1482#define CHANNEL_RELATION_TYPE_DEFAULT 0
1483#define CHANNEL_RELATION_TYPE_OPENING_SENSOR 1
1484#define CHANNEL_RELATION_TYPE_PARTIAL_OPENING_SENSOR 2
1485#define CHANNEL_RELATION_TYPE_METER 3
1486#define CHANNEL_RELATION_TYPE_MAIN_TERMOMETER 4
1487#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_FLOOR 5
1488#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_WATER 6
1489#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_GENERIC_HEATER 7
1490#define CHANNEL_RELATION_TYPE_AUX_THERMOMETER_GENERIC_COOLER 8
1491
1492#define CHANNEL_RELATION_TYPE_MASTER_THERMOSTAT 20
1493#define CHANNEL_RELATION_TYPE_HEAT_OR_COLD_SOURCE_SWITCH 21
1494#define CHANNEL_RELATION_TYPE_PUMP_SWITCH 22
1495
1496typedef struct {
1497 char EOL; // End Of List
1498 _supla_int_t Id;
1499 _supla_int_t ParentId;
1500 _supla_int16_t Type; // CHANNEL_RELATION_TYPE_
1501} TSC_SuplaChannelRelation; // ver. >= 21
1502
1503typedef struct {
1504 _supla_int_t count;
1505 _supla_int_t total_left;
1507 items[SUPLA_CHANNEL_RELATION_PACK_MAXCOUNT]; // Last variable in struct!
1509
1510typedef struct {
1511 // server -> client
1512 char EOL; // End Of List
1513
1514 _supla_int_t Id;
1515 _supla_int_t LocationId;
1516 _supla_int_t AltIcon;
1517 _supla_int_t UserIcon;
1518
1519 unsigned _supla_int16_t
1520 CaptionSize; // including the terminating null byte ('\0')
1521 char Caption[SUPLA_SCENE_CAPTION_MAXSIZE]; // Last variable in struct!
1522} TSC_SuplaScene; // ver. >= 18
1523
1524typedef struct {
1525 // server -> client
1526
1527 _supla_int_t count;
1528 _supla_int_t total_left;
1529 TSC_SuplaScene items[SUPLA_SCENE_PACK_MAXCOUNT]; // Last variable in struct!
1530} TSC_SuplaScenePack; // ver. >= 18
1531
1532typedef struct {
1533 // server -> client
1534 char EOL; // End Of List
1535
1536 _supla_int_t SceneId;
1537 unsigned _supla_int_t MillisecondsFromStart;
1538 unsigned _supla_int_t MillisecondsLeft;
1539
1540 _supla_int_t InitiatorId;
1541 unsigned _supla_int16_t
1542 InitiatorNameSize; // including the terminating null byte ('\0')
1543 char InitiatorName[SUPLA_INITIATOR_NAME_MAXSIZE]; // Last variable in struct!
1544} TSC_SuplaSceneState; // ver. >= 18
1545
1546typedef struct {
1547 // server -> client
1548
1549 _supla_int_t count;
1550 _supla_int_t total_left;
1552 items[SUPLA_SCENE_STATE_PACK_MAXCOUNT]; // Last variable in struct!
1553} TSC_SuplaSceneStatePack; // ver. >= 18
1554
1555#define ACTION_SUBJECT_TYPE_UNKNOWN 0
1556#define ACTION_SUBJECT_TYPE_CHANNEL 1
1557#define ACTION_SUBJECT_TYPE_CHANNEL_GROUP 2
1558#define ACTION_SUBJECT_TYPE_SCENE 3
1559#define ACTION_SUBJECT_TYPE_SCHEDULE 4
1560
1561#define ACTION_OPEN 10
1562#define ACTION_CLOSE 20
1563#define ACTION_SHUT 30
1564#define ACTION_REVEAL 40
1565#define ACTION_REVEAL_PARTIALLY 50
1566#define ACTION_SHUT_PARTIALLY 51
1567#define ACTION_TURN_ON 60
1568#define ACTION_TURN_ON_WITH_DURATION 61
1569#define ACTION_TURN_OFF 70
1570#define ACTION_TURN_OFF_WITH_DURATION 71
1571#define ACTION_SET_RGBW_PARAMETERS 80
1572#define ACTION_OPEN_CLOSE 90
1573#define ACTION_STOP 100
1574#define ACTION_TOGGLE 110
1575#define ACTION_UP_OR_STOP 140
1576#define ACTION_DOWN_OR_STOP 150
1577#define ACTION_STEP_BY_STEP 160
1578#define ACTION_UP 170
1579#define ACTION_DOWN 180
1580#define ACTION_ENABLE 200
1581#define ACTION_DISABLE 210
1582#define ACTION_SEND 220
1583#define ACTION_HVAC_SET_PARAMETERS 230
1584#define ACTION_HVAC_SWITCH_TO_PROGRAM_MODE 231
1585#define ACTION_HVAC_SWITCH_TO_MANUAL_MODE 232
1586#define ACTION_HVAC_SET_TEMPERATURES 233
1587#define ACTION_HVAC_SET_TEMPERATURE 234
1588#define ACTION_READ 1000
1589#define ACTION_SET 2000
1590#define ACTION_EXECUTE 3000
1591#define ACTION_INTERRUPT 3001
1592#define ACTION_INTERRUPT_AND_EXECUTE 3002
1593#define ACTION_COPY 10100
1594#define ACTION_FORWARD_OUTSIDE 10000
1595
1596#define SSP_FLAG_PERCENTAGE_AS_DELTA (1 << 0)
1597#define SSP_FLAG_TILT_AS_DELTA (1 << 1)
1598
1599typedef struct {
1600 char Percentage;
1601 unsigned char Flags; // SSP_FLAG_
1602 signed char Tilt;
1603 char Reserved[13];
1604} TAction_ShadingSystem_Parameters; // ver. >= 19
1605
1606typedef struct {
1607 char Brightness; // -1 == Ignore
1608 char ColorBrightness; // -1 == Ignore
1609 unsigned _supla_int_t Color; // 0 == Ignore
1610 char ColorRandom;
1611 char OnOff;
1612 char Reserved[8];
1613} TAction_RGBW_Parameters; // ver. >= 19
1614
1615typedef struct {
1616 unsigned _supla_int_t DurationSec;
1617 unsigned char Mode; // for HVAC: SUPLA_HVAC_MODE_
1618 _supla_int16_t
1619 SetpointTemperatureHeat; // * 0.01 Celcius degree - used for heating
1620 _supla_int16_t
1621 SetpointTemperatureCool; // * 0.01 - Celcius degree used for coolingx
1622 unsigned _supla_int16_t Flags; // SUPLA_HVAC_VALUE_FLAG_
1624
1625typedef struct {
1626 _supla_int_t ActionId;
1627 _supla_int_t SubjectId;
1628 unsigned char SubjectType;
1629 unsigned _supla_int16_t ParamSize;
1630 char Param[SUPLA_ACTION_PARAM_MAXSIZE];
1631} TCS_Action; // ver. >= 19
1632
1633typedef struct {
1634 _supla_int_t AccessID;
1635 char AccessIDpwd[SUPLA_ACCESSID_PWD_MAXSIZE]; // UTF8
1636 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1637 char AuthKey[SUPLA_AUTHKEY_SIZE];
1638 char GUID[SUPLA_GUID_SIZE];
1639 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1640} TCS_ClientAuthorizationDetails; // ver. >= 19
1641
1642typedef struct {
1644 TCS_Action Action;
1645} TCS_ActionWithAuth; // ver. >= 19
1646
1647typedef struct {
1648 unsigned char ResultCode;
1649 _supla_int_t ActionId;
1650 _supla_int_t SubjectId;
1651 _supla_int_t SubjectType;
1652} TSC_ActionExecutionResult; // ver. >= 19
1653
1654typedef struct {
1655 // server -> client
1656 unsigned char ResultCode;
1657 _supla_int_t ChannelId; // Alias SubjectId
1658 _supla_int_t Function;
1659
1661 TSuplaChannelExtendedValue ExtendedValue; // Last variable in struct!
1662} TSC_GetChannelValueResult; // ver. >= 19;
1663
1664typedef struct {
1666 _supla_int_t ChannelId;
1667} TCS_GetChannelValueWithAuth; // ver. >= 19
1668
1669typedef struct {
1670 // client -> server
1671
1672 _supla_int_t AccessID;
1673 char AccessIDpwd[SUPLA_ACCESSID_PWD_MAXSIZE]; // UTF8
1674
1675 char GUID[SUPLA_GUID_SIZE];
1676 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1677 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1679
1680typedef struct {
1681 // client -> server
1682
1683 _supla_int_t AccessID;
1684 char AccessIDpwd[SUPLA_ACCESSID_PWD_MAXSIZE]; // UTF8
1685
1686 char GUID[SUPLA_GUID_SIZE];
1687 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1688 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1689
1690 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1691} TCS_SuplaRegisterClient_B; // ver. >= 6
1692
1693typedef struct {
1694 // client -> server
1695
1696 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1697 char AuthKey[SUPLA_AUTHKEY_SIZE];
1698
1699 char GUID[SUPLA_GUID_SIZE];
1700 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1701 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1702
1703 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1704} TCS_SuplaRegisterClient_C; // ver. >= 7
1705
1706typedef struct {
1707 // client -> server
1708
1709 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
1710 char Password[SUPLA_PASSWORD_MAXSIZE]; // Optional - UTF8
1711 char AuthKey[SUPLA_AUTHKEY_SIZE];
1712
1713 char GUID[SUPLA_GUID_SIZE];
1714 char Name[SUPLA_CLIENT_NAME_MAXSIZE]; // UTF8
1715 char SoftVer[SUPLA_SOFTVER_MAXSIZE];
1716
1717 char ServerName[SUPLA_SERVER_NAME_MAXSIZE];
1718} TCS_SuplaRegisterClient_D; // ver. >= 12
1719
1720typedef struct {
1721 // server -> client
1722
1723 _supla_int_t result_code;
1724 _supla_int_t ClientID;
1725 _supla_int_t LocationCount;
1726 _supla_int_t ChannelCount;
1727 unsigned char activity_timeout;
1728 unsigned char version;
1729 unsigned char version_min;
1731
1732typedef struct {
1733 // server -> client
1734
1735 _supla_int_t result_code;
1736 _supla_int_t ClientID;
1737 _supla_int_t LocationCount;
1738 _supla_int_t ChannelCount;
1739 _supla_int_t ChannelGroupCount;
1740 _supla_int_t Flags;
1741 unsigned char activity_timeout;
1742 unsigned char version;
1743 unsigned char version_min;
1744} TSC_SuplaRegisterClientResult_B; // ver. >= 9
1745
1746typedef struct {
1747 // server -> client
1748
1749 _supla_int_t result_code;
1750 _supla_int_t ClientID;
1751 _supla_int_t LocationCount;
1752 _supla_int_t ChannelCount;
1753 _supla_int_t ChannelGroupCount;
1754 _supla_int_t Flags;
1755 unsigned char activity_timeout;
1756 unsigned char version;
1757 unsigned char version_min;
1758 unsigned _supla_int_t serverUnixTimestamp; // current server time
1759} TSC_SuplaRegisterClientResult_C; // ver. >= 17
1760
1761typedef struct {
1762 // server -> client
1763
1764 _supla_int_t result_code;
1765 _supla_int_t ClientID;
1766 _supla_int16_t LocationCount;
1767 _supla_int16_t ChannelCount;
1768 _supla_int16_t ChannelGroupCount;
1769 _supla_int16_t SceneCount;
1770 _supla_int_t Flags;
1771 unsigned char activity_timeout;
1772 unsigned char version;
1773 unsigned char version_min;
1774 unsigned _supla_int_t serverUnixTimestamp; // current server time
1775} TSC_SuplaRegisterClientResult_D; // ver. >= 19
1776
1777typedef struct {
1778 // client -> server
1779 unsigned char ChannelId;
1780 char value[SUPLA_CHANNELVALUE_SIZE];
1781} TCS_SuplaChannelNewValue; // Deprecated
1782
1783typedef struct {
1784 // client -> server
1785 _supla_int_t ChannelId;
1786 char value[SUPLA_CHANNELVALUE_SIZE];
1788
1789typedef struct {
1790 // client -> server
1791 _supla_int_t Id;
1792 char Target; // SUPLA_TARGET_
1793 char value[SUPLA_CHANNELVALUE_SIZE];
1794} TCS_SuplaNewValue; // ver. >= 9
1795
1796typedef struct {
1797 // server -> client
1798 _supla_int_t Event;
1799 _supla_int_t ChannelID;
1800 unsigned _supla_int_t DurationMS;
1801
1802 _supla_int_t SenderID;
1803 unsigned _supla_int_t
1804 SenderNameSize; // including the terminating null byte ('\0')
1805 char
1806 SenderName[SUPLA_SENDER_NAME_MAXSIZE]; // Last variable in struct! | UTF8
1808
1809typedef struct {
1810 char Platform;
1811
1812 _supla_int_t Param1;
1813 _supla_int_t Param2;
1814 _supla_int_t Param3;
1815 _supla_int_t Param4;
1817
1818typedef struct {
1819 char available_protocols;
1820 char host[SUPLA_URL_HOST_MAXSIZE];
1821 _supla_int_t port;
1822 char path[SUPLA_URL_PATH_MAXSIZE];
1824
1825typedef struct {
1826 char exists;
1829
1830typedef struct {
1831 unsigned _supla_int_t client_timestamp; // time >= now == enabled
1832 unsigned _supla_int_t iodevice_timestamp; // time >= now == enabled
1834
1835typedef struct {
1836 unsigned _supla_int_t ExpiresIn;
1837 unsigned _supla_int_t
1838 TokenSize; // including the terminating null byte ('\0')
1839 char Token[SUPLA_OAUTH_TOKEN_MAXSIZE]; // Last variable in struct!
1840} TSC_OAuthToken; // ver. >= 10
1841
1842typedef struct {
1843 unsigned char ResultCode;
1844 TSC_OAuthToken Token;
1845} TSC_OAuthTokenRequestResult; // ver. >= 10
1846
1847typedef struct {
1848 // 3 phases
1849 unsigned _supla_int16_t freq; // * 0.01 Hz
1850 unsigned _supla_int16_t voltage[3]; // * 0.01 V
1851 unsigned _supla_int16_t
1852 current[3]; // * 0.001A (0.01A WHEN EM_VAR_CURRENT_OVER_65A)
1853 _supla_int_t
1854 power_active[3]; // * 0.00001W (0.01kW WHEN EM_VAR_POWER_ACTIVE_KW)
1855 _supla_int_t power_reactive[3]; // * 0.00001var (0.01kvar WHEN
1856 // EM_VAR_POWER_REACTIVE_KVAR)
1857 _supla_int_t power_apparent[3]; // * 0.00001VA (0.01kVA WHEN
1858 // EM_VAR_POWER_APPARENT_KVA)
1859 _supla_int16_t power_factor[3]; // * 0.001
1860 _supla_int16_t phase_angle[3]; // * 0.1 degree
1861} TElectricityMeter_Measurement; // v. >= 10
1862
1863#define EM_VAR_FREQ 0x0001
1864#define EM_VAR_VOLTAGE 0x0002
1865#define EM_VAR_CURRENT 0x0004
1866#define EM_VAR_POWER_ACTIVE 0x0008
1867#define EM_VAR_POWER_REACTIVE 0x0010
1868#define EM_VAR_POWER_APPARENT 0x0020
1869#define EM_VAR_POWER_FACTOR 0x0040
1870#define EM_VAR_PHASE_ANGLE 0x0080
1871#define EM_VAR_FORWARD_ACTIVE_ENERGY 0x0100
1872#define EM_VAR_REVERSE_ACTIVE_ENERGY 0x0200
1873#define EM_VAR_FORWARD_REACTIVE_ENERGY 0x0400
1874#define EM_VAR_REVERSE_REACTIVE_ENERGY 0x0800
1875#define EM_VAR_CURRENT_OVER_65A 0x1000
1876#define EM_VAR_FORWARD_ACTIVE_ENERGY_BALANCED 0x2000
1877#define EM_VAR_REVERSE_ACTIVE_ENERGY_BALANCED 0x4000
1878
1879#define EM_VAR_VOLTAGE_PHASE_ANGLE_12 0x10000 // ver. >= 25
1880#define EM_VAR_VOLTAGE_PHASE_ANGLE_13 0x20000 // ver. >= 25
1881#define EM_VAR_VOLTAGE_PHASE_SEQUENCE 0x40000 // ver. >= 25
1882#define EM_VAR_CURRENT_PHASE_SEQUENCE 0x80000 // ver. >= 25
1883
1884#define EM_VAR_POWER_ACTIVE_KW 0x100000
1885#define EM_VAR_POWER_REACTIVE_KVAR 0x200000
1886#define EM_VAR_POWER_APPARENT_KVA 0x400000
1887
1888#define EM_PHASE_SEQUENCE_VOLTAGE 0x01
1889#define EM_PHASE_SEQUENCE_CURRENT 0x02
1890
1891#if defined(__AVR__) || defined(ESP8266) || defined(ESP32) || \
1892 defined(ESP_PLATFORM) || defined(ARDUINO) || defined(SUPLA_DEVICE)
1893#define EM_MEASUREMENT_COUNT 1
1894#else
1895#define EM_MEASUREMENT_COUNT 5
1896#endif
1897
1898#ifdef USE_DEPRECATED_EMEV_V1
1899// [IODevice->Server->Client]
1900typedef struct {
1901 unsigned _supla_int64_t total_forward_active_energy[3]; // * 0.00001 kWh
1902 unsigned _supla_int64_t total_reverse_active_energy[3]; // * 0.00001 kWh
1903 unsigned _supla_int64_t total_forward_reactive_energy[3]; // * 0.00001 kvarh
1904 unsigned _supla_int64_t total_reverse_reactive_energy[3]; // * 0.00001 kvarh
1905
1906 // The price per unit, total cost and currency is overwritten by the server
1907 // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
1908 _supla_int_t total_cost; // * 0.01
1909 _supla_int_t price_per_unit; // * 0.0001
1910 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
1911 char currency[3];
1912
1913 _supla_int_t measured_values;
1914 _supla_int_t period; // Approximate period between measurements in seconds
1915 _supla_int_t m_count;
1916 TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT]; // Last variable in
1917 // struct!
1918} TElectricityMeter_ExtendedValue; // v. >= 10
1919#endif /*USE_DEPRECATED_EMEV_V1*/
1920
1921#ifdef USE_DEPRECATED_EMEV_V2
1922// [IODevice->Server->Client]
1923typedef struct {
1924 unsigned _supla_int64_t total_forward_active_energy[3]; // * 0.00001 kWh
1925 unsigned _supla_int64_t total_reverse_active_energy[3]; // * 0.00001 kWh
1926 unsigned _supla_int64_t total_forward_reactive_energy[3]; // * 0.00001 kvarh
1927 unsigned _supla_int64_t total_reverse_reactive_energy[3]; // * 0.00001 kvarh
1928 unsigned _supla_int64_t
1929 total_forward_active_energy_balanced; // * 0.00001 kWh
1930 // Vector phase-to-phase balancing
1931 unsigned _supla_int64_t
1932 total_reverse_active_energy_balanced; // * 0.00001 kWh
1933 // Vector phase-to-phase balancing
1934
1935 // The price per unit, total cost and currency is overwritten by the server
1936 // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
1937 _supla_int_t total_cost; // * 0.01
1938 _supla_int_t total_cost_balanced; // * 0.01
1939 _supla_int_t price_per_unit; // * 0.0001
1940 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
1941 char currency[3];
1942
1943 _supla_int_t measured_values;
1944 _supla_int_t period; // Approximate period between measurements in seconds
1945 _supla_int_t m_count;
1946 TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT]; // Last variable in
1947 // struct!
1948} TElectricityMeter_ExtendedValue_V2; // v. >= 12
1949#endif /*USE_DEPRECATED_EMEV_V2*/
1950
1951// [IODevice->Server->Client]
1952typedef struct {
1953 unsigned _supla_int64_t total_forward_active_energy[3]; // * 0.00001 kWh
1954 unsigned _supla_int64_t total_reverse_active_energy[3]; // * 0.00001 kWh
1955 unsigned _supla_int64_t total_forward_reactive_energy[3]; // * 0.00001 kvarh
1956 unsigned _supla_int64_t total_reverse_reactive_energy[3]; // * 0.00001 kvarh
1957 unsigned _supla_int64_t
1958 total_forward_active_energy_balanced; // * 0.00001 kWh
1959 // Vector phase-to-phase balancing
1960 unsigned _supla_int64_t
1961 total_reverse_active_energy_balanced; // * 0.00001 kWh
1962 // Vector phase-to-phase balancing
1963
1964 // Voltage phase angle between phase 1 and 2
1965 unsigned _supla_int16_t voltage_phase_angle_12; // * 0.1 degree, 0..360
1966 // Voltage phase angle between phase 1 and 3
1967 unsigned _supla_int16_t voltage_phase_angle_13; // * 0.1 degree, 0..360
1968 unsigned char phase_sequence; // bit 0x1 - voltage, bit 0x2 current
1969 // EM_PHASE_SEQUENCE_*
1970 // bit value: 0 - 123 (clockwise)
1971 // bit value: 1 - 132 (counter-clockwise)
1972
1973 // The price per unit, total cost and currency is overwritten by the server
1974 // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
1975 _supla_int_t total_cost; // * 0.01
1976 _supla_int_t total_cost_balanced; // * 0.01
1977 _supla_int_t price_per_unit; // * 0.0001
1978 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
1979 char currency[3];
1980
1981 _supla_int_t measured_values;
1982 _supla_int_t period; // Approximate period between measurements in seconds
1983 _supla_int_t m_count;
1984 TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT]; // Last variable in
1985 // struct!
1987
1988#define EM_VALUE_FLAG_PHASE1_ON 0x01
1989#define EM_VALUE_FLAG_PHASE2_ON 0x02
1990#define EM_VALUE_FLAG_PHASE3_ON 0x04
1991
1992// [IODevice->Server->Client]
1993typedef struct {
1994 char flags;
1995 unsigned _supla_int_t total_forward_active_energy; // * 0.01 kW
1996} TElectricityMeter_Value; // v. >= 10
1997
1998typedef struct {
1999 // The price per unit, total cost and currency is overwritten by the server
2000 // total_cost = calculated_value * price_per_unit
2001 _supla_int_t total_cost; // * 0.01
2002 _supla_int_t price_per_unit; // * 0.0001
2003 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
2004 char currency[3];
2005 char custom_unit[9]; // UTF8 including the terminating null byte ('\0')
2006
2007 _supla_int_t impulses_per_unit;
2008 unsigned _supla_int64_t counter;
2009 _supla_int64_t calculated_value; // * 0.001
2011
2012typedef struct {
2013 unsigned _supla_int64_t counter;
2015
2016#define RS_VALUE_FLAG_TILT_IS_SET 0x1
2017#define RS_VALUE_FLAG_CALIBRATION_FAILED 0x2
2018#define RS_VALUE_FLAG_CALIBRATION_LOST 0x4
2019#define RS_VALUE_FLAG_MOTOR_PROBLEM 0x8
2020#define RS_VALUE_FLAG_CALIBRATION_IN_PROGRESS 0x10
2021
2022#define SUPLA_TILT_CONTROL_TYPE_UNKNOWN 0
2023#define SUPLA_TILT_CONTROL_TYPE_STANDS_IN_POSITION_WHILE_TILTING 1
2024#define SUPLA_TILT_CONTROL_TYPE_CHANGES_POSITION_WHILE_TILTING 2
2025#define SUPLA_TILT_CONTROL_TYPE_TILTS_ONLY_WHEN_FULLY_CLOSED 3
2026
2027// Roller shutter channel value payload
2028// Device -> Server -> Client
2029typedef struct {
2030 signed char position; // -1 == calibration. -1, 0% (open) - 100% (closed) DSC
2031 char reserved1;
2032 signed char bottom_position; // Percentage points to the windowsill, SC
2033 _supla_int16_t flags; // DSC
2034 char reserved2;
2035 char reserved3;
2036 char reserved4;
2038
2039typedef TDSC_RollerShutterValue TDSC_TerraceAwningValue;
2040typedef TDSC_RollerShutterValue TDSC_ProjectorScreen;
2041typedef TDSC_RollerShutterValue TDSC_CurtainValue;
2042typedef TDSC_RollerShutterValue TDSC_RollerGarageDoor;
2043
2044// Roller shutter channel value payload
2045// Client -> Server -> Device
2046typedef struct {
2047 signed char position; // 0 - STOP
2048 // 1 - DOWN (CLOSE)
2049 // 2 - UP (OPEN)
2050 // 3 - DOWN_OR_STOP (CLOSE_OR_STOP)
2051 // 4 - UP_OR_STOP (OPEN_OR_STOP)
2052 // 5 - STEP_BY_STEP
2053 // 10-110 - target position + 10 (0 open, 100 closed)
2054 char reserved[7];
2056
2057typedef TCSD_RollerShutterValue TCSD_TerraceAwningValue;
2058typedef TCSD_RollerShutterValue TCSD_ProjectorScreen;
2059typedef TCSD_RollerShutterValue TCSD_CurtainValue;
2060typedef TCSD_RollerShutterValue TCSD_RollerGarageDoor;
2061
2062// Facade blind channel value payload
2063// Device -> Server -> Client
2064typedef struct {
2065 signed char position; // -1 == calibration. -1, 0% (open) - 100% (closed) DSC
2066 signed char tilt; // -1 == not used/calibration, -1, 0% - 100%, DSC
2067 char reserved;
2068 _supla_int16_t flags; // DSC
2069 char reserved2[3];
2071
2072typedef TDSC_FacadeBlindValue TDSC_VerticalBlindValue;
2073
2074// Facade blind channel value payload
2075// Client -> Server -> Device
2076typedef struct {
2077 signed char position; // -1 - not set (actual behavior is device specific)
2078 // 0 - STOP
2079 // 1 - DOWN (CLOSE)
2080 // 2 - UP (OPEN)
2081 // 3 - DOWN_OR_STOP (CLOSE_OR_STOP)
2082 // 4 - UP_OR_STOP (OPEN_OR_STOP)
2083 // 5 - STEP_BY_STEP
2084 // 10-110 - target position + 10 (0 open, 100 closed)
2085 signed char tilt; // -1 - not set (actual behavior is device specific)
2086 // 10-110 - target position + 10
2087 char reserved[6];
2089
2090typedef TCSD_FacadeBlindValue TCSD_VerticalBlindValue;
2091
2092typedef struct {
2093 unsigned _supla_int64_t calculated_value; // * 0.001
2094} TSC_ImpulseCounter_Value; // v. >= 10
2095
2096typedef struct {
2097 char Email[SUPLA_EMAIL_MAXSIZE]; // UTF8
2098 char Password[SUPLA_PASSWORD_MAXSIZE]; // UTF8
2100
2101typedef struct {
2102 _supla_int_t Result;
2104
2105#define SUPLA_CALCFG_RESULT_FALSE 0 // ver. >= 12
2106#define SUPLA_CALCFG_RESULT_TRUE 1 // ver. >= 12
2107#define SUPLA_CALCFG_RESULT_DONE 2 // ver. >= 12
2108#define SUPLA_CALCFG_RESULT_IN_PROGRESS 3 // ver. >= 12
2109#define SUPLA_CALCFG_RESULT_NODE_FOUND 4 // ver. >= 12
2110#define SUPLA_CALCFG_RESULT_SENDER_CONFLICT 100 // ver. >= 12
2111#define SUPLA_CALCFG_RESULT_TIMEOUT 101 // ver. >= 12
2112#define SUPLA_CALCFG_RESULT_NOT_SUPPORTED 102 // ver. >= 12
2113#define SUPLA_CALCFG_RESULT_ID_NOT_EXISTS 103 // ver. >= 12
2114#define SUPLA_CALCFG_RESULT_UNAUTHORIZED 104 // ver. >= 12
2115#define SUPLA_CALCFG_RESULT_DEBUG 105 // ver. >= 12
2116#define SUPLA_CALCFG_RESULT_NOT_SUPPORTED_IN_SLAVE_MODE 106 // ver. >= 12
2117
2118#define SUPLA_CALCFG_CMD_GET_CHANNEL_FUNCLIST 1000 // v. >= 11
2119#define SUPLA_CALCFG_CMD_CANCEL_ALL_CLIENT_COMMANDS 1010 // v. >= 12
2120#define SUPLA_CALCFG_CMD_ZWAVE_RESET_AND_CLEAR 2000 // v. >= 12
2121#define SUPLA_CALCFG_CMD_ZWAVE_ADD_NODE 2010 // v. >= 12
2122#define SUPLA_CALCFG_CMD_ZWAVE_REMOVE_NODE 2020 // v. >= 12
2123#define SUPLA_CALCFG_CMD_ZWAVE_GET_NODE_LIST 2030 // v. >= 12
2124#define SUPLA_CALCFG_CMD_ZWAVE_GET_ASSIGNED_NODE_ID 2040 // v. >= 12
2125#define SUPLA_CALCFG_CMD_ZWAVE_ASSIGN_NODE_ID 2050 // v. >= 12
2126#define SUPLA_CALCFG_CMD_ZWAVE_GET_WAKE_UP_SETTINGS 2060 // v. >= 12
2127#define SUPLA_CALCFG_CMD_ZWAVE_SET_WAKE_UP_TIME 2070 // v. >= 12
2128#define SUPLA_CALCFG_CMD_ZWAVE_CONFIG_MODE_ACTIVE 4000 // v. >= 12
2129#define SUPLA_CALCFG_CMD_DEBUG_STRING 5000 // v. >= 12
2130#define SUPLA_CALCFG_CMD_PROGRESS_REPORT 5001 // v. >= 12
2131#define SUPLA_CALCFG_CMD_SET_LIGHTSOURCE_LIFESPAN 6000 // v. >= 12
2132#define SUPLA_CALCFG_CMD_RESET_COUNTERS 7000 // v. >= 15
2133#define SUPLA_CALCFG_CMD_RECALIBRATE 8000 // v. >= 15
2134#define SUPLA_CALCFG_CMD_ENTER_CFG_MODE 9000 // v. >= 17
2135#define SUPLA_CALCFG_CMD_SET_TIME 9100 // v. >= 21
2136#define SUPLA_CALCFG_CMD_START_SUBDEVICE_PAIRING 9200 // v. >= 25
2137#define SUPLA_CALCFG_CMD_IDENTIFY_DEVICE 9300 // v. >= 25
2138#define SUPLA_CALCFG_CMD_IDENTIFY_SUBDEVICE 9310 // v. >= 25
2139#define SUPLA_CALCFG_CMD_RESTART_DEVICE 9400 // v. >= 25
2140#define SUPLA_CALCFG_CMD_RESTART_SUBDEVICE 9410 // v. >= 25
2141#define SUPLA_CALCFG_CMD_TAKE_OCR_PHOTO 9420 // v. >= 25
2142#define SUPLA_CALCFG_CMD_MUTE_ALARM_SOUND 9430 // v. >= 26
2143
2144#define SUPLA_CALCFG_DATATYPE_RS_SETTINGS 1000
2145#define SUPLA_CALCFG_DATATYPE_FB_SETTINGS 1100 // v. >= 17
2146
2147#define CALCFG_ZWAVE_SCREENTYPE_UNKNOWN 0
2148#define CALCFG_ZWAVE_SCREENTYPE_MULTILEVEL 1
2149#define CALCFG_ZWAVE_SCREENTYPE_BINARY 2
2150#define CALCFG_ZWAVE_SCREENTYPE_MULTILEVEL_AUTOSHADE 3
2151#define CALCFG_ZWAVE_SCREENTYPE_MULTILEVEL_COLOR_CONTROL 4
2152#define CALCFG_ZWAVE_SCREENTYPE_BINARY_COLOR_CONTROL 5
2153#define CALCFG_ZWAVE_SCREENTYPE_SENSOR 6
2154
2155#define ZWAVE_NODE_NAME_MAXSIZE 50
2156
2157#define ZWAVE_NODE_FLAG_CHANNEL_ASSIGNED 0x1
2158#define ZWAVE_NODE_FLAG_WAKEUP_TIME_SETTABLE 0x2
2159
2160typedef struct {
2161 unsigned char Id;
2162 unsigned char Flags;
2163 union {
2164 unsigned char ChannelNumber;
2165 _supla_int_t ChannelID;
2166 };
2167 unsigned char ScreenType;
2168 unsigned char NameSize; // including the terminating null byte ('\0')
2169 char Name[ZWAVE_NODE_NAME_MAXSIZE]; // UTF8. Last variable in struct!
2170} TCalCfg_ZWave_Node; // v. >= 12
2171
2172typedef struct {
2173 unsigned _supla_int_t MinimumSec : 24;
2174 unsigned _supla_int_t MaximumSec : 24;
2175 unsigned _supla_int_t ValueSec : 24;
2176 unsigned _supla_int_t IntervalStepSec : 24;
2178
2179typedef struct {
2180 unsigned _supla_int_t TimeSec : 24;
2182
2183typedef struct {
2184 _supla_int_t Command;
2185 unsigned char Progress; // 0 - 100%
2187
2188typedef struct {
2189 unsigned char ResetCounter; // 0 - NO, 1 - YES
2190 unsigned char SetTime; // 0 - NO, 1 - YES
2191 unsigned _supla_int16_t LightSourceLifespan; // 0 - 65535 hours
2193
2194#define SUPLA_CALCFG_SUBDEVICE_NAME_MAXSIZE 120
2195
2196// Subdevice Pairing result is send in TDS_DeviceCalCfgResult. Possible values:
2197// SUPLA_CALCFG_RESULT_TRUE - paring result/status is in Data
2198// SUPLA_CALCFG_RESULT_UNAUTHORIZED - unauthorized
2199// SUPLA_CALCFG_RESULT_NOT_SUPPORTED - not supported
2200// Only in case of TRUE, TCalCfg_SubdevicePairingResult is included in
2201// TDS_DeviceCalCfgResult.
2202#define SUPLA_CALCFG_PAIRINGRESULT_PROCEDURE_STARTED 0
2203#define SUPLA_CALCFG_PAIRINGRESULT_ONGOING 1
2204#define SUPLA_CALCFG_PAIRINGRESULT_NO_NEW_DEVICE_FOUND 2
2205#define SUPLA_CALCFG_PAIRINGRESULT_SUCCESS 3
2206#define SUPLA_CALCFG_PAIRINGRESULT_DEVICE_NOT_SUPPORTED 4
2207#define SUPLA_CALCFG_PAIRINGRESULT_RESOURCES_LIMIT_EXCEEDED 5
2208#define SUPLA_CALCFG_PAIRINGRESULT_NOT_STARTED_NOT_READY 6
2209#define SUPLA_CALCFG_PAIRINGRESULT_NOT_STARTED_BUSY 7
2210
2211typedef struct {
2212 unsigned _supla_int16_t
2213 ElapsedTimeSec; // Time in seconds since procedure was started
2214 unsigned _supla_int16_t MaximumDurationSec; // Time in seconds
2215 unsigned char PairingResult; // SUPLA_CALCFG_PAIRINGRESULT_
2216 unsigned char NameSize; // including the terminating null byte ('\0')
2217 char Name[SUPLA_CALCFG_SUBDEVICE_NAME_MAXSIZE]; // UTF8. Last variable in
2218 // struct!
2219} TCalCfg_SubdevicePairingResult; // v. >= 25
2220
2221// CALCFG == CALIBRATION / CONFIG
2222typedef struct {
2223 _supla_int_t ChannelID;
2224 _supla_int_t Command;
2225 _supla_int_t DataType;
2226 unsigned _supla_int_t DataSize;
2227 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2228} TCS_DeviceCalCfgRequest; // v. >= 10
2229
2230// CALCFG == CALIBRATION / CONFIG
2231typedef struct {
2232 _supla_int_t Id;
2233 char Target; // SUPLA_TARGET_
2234 _supla_int_t Command;
2235 _supla_int_t DataType;
2236 unsigned _supla_int_t DataSize;
2237 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2238} TCS_DeviceCalCfgRequest_B; // v. >= 11
2239
2240typedef struct {
2241 _supla_int_t ChannelID;
2242 _supla_int_t Command;
2243 _supla_int_t Result;
2244 unsigned _supla_int_t DataSize;
2245 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2246} TSC_DeviceCalCfgResult; // v. >= 10
2247
2248typedef struct {
2249 _supla_int_t SenderID;
2250 _supla_int_t ChannelNumber;
2251 _supla_int_t Command;
2252 char SuperUserAuthorized;
2253 _supla_int_t DataType;
2254 unsigned _supla_int_t DataSize;
2255 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2256} TSD_DeviceCalCfgRequest; // v. >= 10
2257
2258typedef struct {
2259 _supla_int_t ReceiverID;
2260 _supla_int_t ChannelNumber;
2261 _supla_int_t Command;
2262 _supla_int_t Result;
2263 unsigned _supla_int_t DataSize;
2264 char Data[SUPLA_CALCFG_DATA_MAXSIZE]; // Last variable in struct!
2265} TDS_DeviceCalCfgResult; // v. >= 10
2266
2267// Used in CALCFG recalibrate command
2268typedef struct {
2269 _supla_int_t FullOpeningTimeMS;
2270 _supla_int_t FullClosingTimeMS;
2272
2273#define RGBW_BRIGHTNESS_ONOFF 0x1
2274#define RGBW_COLOR_ONOFF 0x2
2275
2276// Values from other fields are applied in a standard way
2277#define RGBW_COMMAND_NOT_SET 0
2278// Ignores all other bytes and turns on the dimmer
2279#define RGBW_COMMAND_TURN_ON_DIMMER 1
2280// Ignores all other bytes and turns off the dimmer
2281#define RGBW_COMMAND_TURN_OFF_DIMMER 2
2282// Ignores all other bytes and toggles the dimmer
2283#define RGBW_COMMAND_TOGGLE_DIMMER 3
2284// Ignores all other bytes and turns on the RGB
2285#define RGBW_COMMAND_TURN_ON_RGB 4
2286// Ignores all other bytes and turns off the RGB
2287#define RGBW_COMMAND_TURN_OFF_RGB 5
2288// Ignores all other bytes and toggles the RGB
2289#define RGBW_COMMAND_TOGGLE_RGB 6
2290// Ignores all other bytes and turns on the RGB and Dimmer
2291#define RGBW_COMMAND_TURN_ON_ALL 7
2292// Ignores all other bytes and turns off the RGB and Dimmer
2293#define RGBW_COMMAND_TURN_OFF_ALL 8
2294// Ignores all other bytes and toggles the RGB and Dimmer (with sync, so both
2295// will be off or both will be on)
2296#define RGBW_COMMAND_TOGGLE_ALL 9
2297// Stores brightness value and ignores all other bytes, if dimmer is off, it
2298// stays off
2299#define RGBW_COMMAND_SET_BRIGHTNESS_WITHOUT_TURN_ON 10
2300// Stores colorBrightness value and ignores all other bytes.
2301// If RGB is off, it stays off
2302#define RGBW_COMMAND_SET_COLOR_BRIGHTNESS_WITHOUT_TURN_ON 11
2303// Stores color value (R, G, B) and ignores all other bytes.
2304// If RGB is off, it stays off
2305#define RGBW_COMMAND_SET_RGB_WITHOUT_TURN_ON 12
2306// Start brightness dimmer iteration
2307#define RGBW_COMMAND_START_ITERATE_DIMMER 13
2308// Start color brightness iteration
2309#define RGBW_COMMAND_START_ITERATE_RGB 14
2310// Start dimmer and rgb brightness iteration
2311#define RGBW_COMMAND_START_ITERATE_ALL 15
2312// Stop brightness dimmer iteration
2313#define RGBW_COMMAND_STOP_ITERATE_DIMMER 16
2314// Stop color brightness iteration
2315#define RGBW_COMMAND_STOP_ITERATE_RGB 17
2316// Stop dimmer and rgb brightness iteration
2317#define RGBW_COMMAND_STOP_ITERATE_ALL 18
2318
2319typedef struct {
2320 char brightness;
2321 char colorBrightness;
2322 char B;
2323 char G;
2324 char R;
2325 char onOff;
2326 char command; // RGBW_COMMAND_, requires
2327 // SUPLA_CHANNEL_FLAG_RGBW_COMMANDS_SUPPORTED v. >= 21
2328} TRGBW_Value; // v. >= 10
2329
2330#define SUPLA_RELAY_FLAG_OVERCURRENT_RELAY_OFF 0x1
2331
2332typedef struct {
2333 char hi; // actual state of relay - 0 turned off, >= 1 - turned on
2334 unsigned _supla_int16_t flags; // SUPLA_RELAY_FLAG_*
2335} TRelayChannel_Value; // v. >= 15
2336
2337#define DIGIGLASS_TOO_LONG_OPERATION_WARNING 0x1
2338#define DIGIGLASS_PLANNED_REGENERATION_IN_PROGRESS 0x2
2339#define DIGIGLASS_REGENERATION_AFTER_20H_IN_PROGRESS 0x4
2340
2341typedef struct {
2342 unsigned char flags;
2343 unsigned char sectionCount; // 1 - 16 Filled by server
2344 unsigned _supla_int16_t mask; // bit mask. 0 - opaque, 1 - transparent
2345} TDigiglass_Value; // v. >= 14
2346
2347typedef struct {
2348 unsigned _supla_int16_t mask; // Bit mask. 0 - opaque, 1 - transparent
2349 unsigned _supla_int16_t
2350 active_bits; // Specifies which bits of the mask are not skipped
2351} TCSD_Digiglass_NewValue; // v. >= 14
2352
2353#define CONTAINER_FLAG_WARNING_LEVEL (1 << 0)
2354#define CONTAINER_FLAG_ALARM_LEVEL (1 << 1)
2355#define CONTAINER_FLAG_INVALID_SENSOR_STATE (1 << 2)
2356#define CONTAINER_FLAG_SOUND_ALARM_ON (1 << 3)
2357
2358typedef struct {
2359 unsigned char level; // 0 - unknown; 1-101 - container fill level 0-100%
2360 unsigned _supla_int16_t flags; // CONTAINER_FLAG_*
2361} TContainerChannel_Value; // v. >= 26
2362
2363typedef struct {
2364 unsigned char sec; // 0-59
2365 unsigned char min; // 0-59
2366 unsigned char hour; // 0-24
2367 unsigned char dayOfWeek; // 1 = Sunday, 2 = Monday, …, 7 = Saturday
2368} TThermostat_Time; // v. >= 11
2369
2370#define THERMOSTAT_SCHEDULE_DAY_SUNDAY 0x01
2371#define THERMOSTAT_SCHEDULE_DAY_MONDAY 0x02
2372#define THERMOSTAT_SCHEDULE_DAY_TUESDAY 0x04
2373#define THERMOSTAT_SCHEDULE_DAY_WEDNESDAY 0x08
2374#define THERMOSTAT_SCHEDULE_DAY_THURSDAY 0x10
2375#define THERMOSTAT_SCHEDULE_DAY_FRIDAY 0x20
2376#define THERMOSTAT_SCHEDULE_DAY_SATURDAY 0x40
2377#define THERMOSTAT_SCHEDULE_DAY_ALL 0xFF
2378
2379#define THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_TEMPERATURE 0
2380#define THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_PROGRAM 1
2381
2382typedef struct {
2383 unsigned char ValueType; // THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_
2384 char HourValue[7][24]; // 7 days x 24h
2385 // 0 = Sunday, 1 = Monday, …, 6 = Saturday
2386} TThermostat_Schedule; // v. >= 11
2387
2388typedef struct {
2389 unsigned char ValueType; // THERMOSTAT_SCHEDULE_HOURVALUE_TYPE_
2390 unsigned char WeekDays; // THERMOSTAT_SCHEDULE_DAY_
2391 char HourValue[24];
2392} TThermostatValueGroup; // v. >= 11
2393
2394// Used in Heatpol thermostat
2395typedef struct {
2396 TThermostatValueGroup Group[4];
2397} TThermostat_ScheduleCfg; // v. >= 11
2398
2399// Temperature definitions for Heatpol thermostat
2400// TThermostatTemperatureCfg
2401#define TEMPERATURE_INDEX1 0x0001
2402#define TEMPERATURE_INDEX2 0x0002
2403#define TEMPERATURE_INDEX3 0x0004
2404#define TEMPERATURE_INDEX4 0x0008
2405#define TEMPERATURE_INDEX5 0x0010
2406#define TEMPERATURE_INDEX6 0x0020
2407#define TEMPERATURE_INDEX7 0x0040
2408#define TEMPERATURE_INDEX8 0x0080
2409#define TEMPERATURE_INDEX9 0x0100
2410#define TEMPERATURE_INDEX10 0x0200
2411// TThermostatTemperatureCfg has only 10 fields
2412
2413// Used in Heatpol thermostat
2414typedef struct {
2415 _supla_int16_t Index; // BIT0 Temperature[0], BIT1 Temperature[1] etc...
2416 unsigned _supla_int16_t Temperature[10];
2418
2419// Temperature definitions for HVAC
2420// THVACTemperatureCfg
2421// Below values are settable by user in UI
2422// Temperature below which heating will be enabled as a freeze protection
2423#define TEMPERATURE_FREEZE_PROTECTION (1ULL << 0)
2424// Economic temperaturey
2425#define TEMPERATURE_ECO (1ULL << 1)
2426// Comfort temperature
2427#define TEMPERATURE_COMFORT (1ULL << 2)
2428#define TEMPERATURE_BOOST (1ULL << 3)
2429// Temperature above which cooling will be enabled as an overheating protection.
2430#define TEMPERATURE_HEAT_PROTECTION (1ULL << 4)
2431// Histeresis value - i.e. heating will be enabled when current temperature
2432// is histeresis/2 lower than current setpoint.
2433#define TEMPERATURE_HISTERESIS (1ULL << 5)
2434// AUX histeresis value - used to determine heating based on AUX temperature
2435// If aux histeresis is missing, then TEMPERATURE_HISTERESIS is used
2436#define TEMPERATURE_AUX_HISTERESIS (1ULL << 18)
2437// Turns on "alarm" when temperature is below this value. Can be visual effect
2438// or sound (if device is capable). It can also send AT to server (TBD)
2439#define TEMPERATURE_BELOW_ALARM (1ULL << 6)
2440// As above, but for tempertatures above threshold
2441#define TEMPERATURE_ABOVE_ALARM (1ULL << 7)
2442// Minimum temperature to be kept on heat/cold source (i.e. keeps floor always
2443// at least 19 degrees)
2444#define TEMPERATURE_AUX_MIN_SETPOINT (1ULL << 8)
2445// Maximum temperature to be kept on heat/cold source (i.e. protect floor
2446// from overheating and keep at most 28 degrees)
2447#define TEMPERATURE_AUX_MAX_SETPOINT (1ULL << 9)
2448
2449// Below values are readonly for user
2450// Minimum room (main thermometer) temperature to be set by user
2451#define TEMPERATURE_ROOM_MIN (1ULL << 10)
2452// Maximum room (main thermometer) temperature to be set by user
2453#define TEMPERATURE_ROOM_MAX (1ULL << 11)
2454// Minimum allowed temperature for heat/cold source (used with second
2455// thermomter for floor/water/etc.)
2456#define TEMPERATURE_AUX_MIN (1ULL << 12)
2457// Maximum allowed temperature for heat/cold source
2458#define TEMPERATURE_AUX_MAX (1ULL << 13)
2459// Minimum histereis value
2460#define TEMPERATURE_HISTERESIS_MIN (1ULL << 14)
2461// Maximum histereis value
2462#define TEMPERATURE_HISTERESIS_MAX (1ULL << 15)
2463// Minimum temperature offset in HEAT_COOL mode
2464#define TEMPERATURE_HEAT_COOL_OFFSET_MIN (1ULL << 16)
2465// Maximum temperature offset in HEAT_COOL mode
2466#define TEMPERATURE_HEAT_COOL_OFFSET_MAX (1ULL << 17)
2467// 5 values left for future use (value << 18 is defined earlier)
2468
2469#define SUPLA_TEMPERATURE_INVALID_INT16 -32768
2470
2471// Used in Supla Thermostat
2472typedef struct {
2473 unsigned _supla_int_t Index; // BIT0 Temperature[0], BIT1 Temperature[1]
2474 // etc...
2475 _supla_int16_t Temperature[24];
2477
2478// Heatpol: Thermostat configuration commands - ver. >= 11
2479#define SUPLA_THERMOSTAT_CMD_TURNON 1
2480#define SUPLA_THERMOSTAT_CMD_SET_MODE_AUTO 2
2481#define SUPLA_THERMOSTAT_CMD_SET_MODE_COOL 3
2482#define SUPLA_THERMOSTAT_CMD_SET_MODE_HEAT 4
2483#define SUPLA_THERMOSTAT_CMD_SET_MODE_NORMAL 5
2484#define SUPLA_THERMOSTAT_CMD_SET_MODE_ECO 6
2485#define SUPLA_THERMOSTAT_CMD_SET_MODE_TURBO 7
2486#define SUPLA_THERMOSTAT_CMD_SET_MODE_DRY 8
2487#define SUPLA_THERMOSTAT_CMD_SET_MODE_FANONLY 9
2488#define SUPLA_THERMOSTAT_CMD_SET_MODE_PURIFIER 10
2489#define SUPLA_THERMOSTAT_CMD_SET_SCHEDULE 11
2490#define SUPLA_THERMOSTAT_CMD_SET_TIME 12
2491#define SUPLA_THERMOSTAT_CMD_SET_TEMPERATURE 13
2492
2493// Heatpol: Thermostat value flags - ver. >= 11
2494#define SUPLA_THERMOSTAT_VALUE_FLAG_ON 0x0001
2495#define SUPLA_THERMOSTAT_VALUE_FLAG_AUTO_MODE 0x0002
2496#define SUPLA_THERMOSTAT_VALUE_FLAG_COOL_MODE 0x0004
2497#define SUPLA_THERMOSTAT_VALUE_FLAG_HEAT_MODE 0x0008
2498#define SUPLA_THERMOSTAT_VALUE_FLAG_ECO_MODE 0x0010
2499#define SUPLA_THERMOSTAT_VALUE_FLAG_DRY_MODE 0x0020
2500#define SUPLA_THERMOSTAT_VALUE_FLAG_FANONLY_MODE 0x0040
2501#define SUPLA_THERMOSTAT_VALUE_FLAG_PURIFIER_MODE 0x0080
2502
2503// Heatpol: Thermostat fields - ver. >= 11
2504#define THERMOSTAT_FIELD_MeasuredTemperatures 0x01
2505#define THERMOSTAT_FIELD_PresetTemperatures 0x02
2506#define THERMOSTAT_FIELD_Flags 0x04
2507#define THERMOSTAT_FIELD_Values 0x08
2508#define THERMOSTAT_FIELD_Time 0x10
2509#define THERMOSTAT_FIELD_Schedule 0x20
2510
2511// Used in Heatpol only
2512typedef struct {
2513 unsigned char Fields;
2514 _supla_int16_t MeasuredTemperature[10]; // * 0.01
2515 _supla_int16_t PresetTemperature[10]; // * 0.01
2516 _supla_int16_t Flags[8];
2517 _supla_int16_t Values[8];
2518 TThermostat_Time Time;
2519 TThermostat_Schedule Schedule; // 7 days x 24h (4bit/hour)
2520} TThermostat_ExtendedValue; // v. >= 11
2521
2522// Used in Heatpol only
2523typedef struct {
2524 unsigned char IsOn;
2525 unsigned char Flags;
2526 _supla_int16_t MeasuredTemperature; // * 0.01
2527 _supla_int16_t PresetTemperature; // * 0.01
2528} TThermostat_Value; // v. >= 11
2529
2530typedef struct {
2531 unsigned _supla_int16_t year;
2532 unsigned char month;
2533 unsigned char day;
2534 unsigned char dayOfWeek; // 1 = Sunday, 2 = Monday, …, 7 = Saturday
2535 unsigned char hour;
2536 unsigned char min;
2537 unsigned char sec;
2538 unsigned _supla_int_t
2539 timezoneSize; // including the terminating null byte ('\0')
2540 char timezone[SUPLA_TIMEZONE_MAXSIZE]; // Last variable in struct!
2542
2543typedef struct {
2544 _supla_int_t SenderID;
2545 union {
2546 _supla_int_t ChannelID; // Client -> Server
2547 unsigned char ChannelNumber; // Server -> Device
2548 };
2549} TCSD_ChannelStateRequest; // v. >= 12 Client -> Server -> Device
2550
2551#define SUPLA_CHANNELSTATE_FIELD_IPV4 0x0001
2552#define SUPLA_CHANNELSTATE_FIELD_MAC 0x0002
2553#define SUPLA_CHANNELSTATE_FIELD_BATTERYLEVEL 0x0004
2554#define SUPLA_CHANNELSTATE_FIELD_BATTERYPOWERED 0x0008
2555#define SUPLA_CHANNELSTATE_FIELD_WIFIRSSI 0x0010
2556#define SUPLA_CHANNELSTATE_FIELD_WIFISIGNALSTRENGTH 0x0020
2557#define SUPLA_CHANNELSTATE_FIELD_BRIDGENODESIGNALSTRENGTH 0x0040
2558#define SUPLA_CHANNELSTATE_FIELD_UPTIME 0x0080
2559#define SUPLA_CHANNELSTATE_FIELD_CONNECTIONUPTIME 0x0100
2560#define SUPLA_CHANNELSTATE_FIELD_BATTERYHEALTH 0x0200
2561#define SUPLA_CHANNELSTATE_FIELD_BRIDGENODEONLINE 0x0400
2562#define SUPLA_CHANNELSTATE_FIELD_LASTCONNECTIONRESETCAUSE 0x0800
2563// LIGHTSOURCELIFESPAN, LIGHTSOURCEOPERATINGTIME, and OPERATINGTIME are
2564// mutually exclusive. Use only one of them.
2565#define SUPLA_CHANNELSTATE_FIELD_LIGHTSOURCELIFESPAN 0x1000
2566#define SUPLA_CHANNELSTATE_FIELD_LIGHTSOURCEOPERATINGTIME 0x2000
2567#define SUPLA_CHANNELSTATE_FIELD_OPERATINGTIME 0x4000
2568// SWITCHCYCLECOUNT and defualtIconField are is mutually exclusive. Use only one
2569// of them.
2570#define SUPLA_CHANNELSTATE_FIELD_SWITCHCYCLECOUNT 0x8000
2571
2572#define SUPLA_LASTCONNECTIONRESETCAUSE_UNKNOWN 0
2573#define SUPLA_LASTCONNECTIONRESETCAUSE_ACTIVITY_TIMEOUT 1
2574#define SUPLA_LASTCONNECTIONRESETCAUSE_WIFI_CONNECTION_LOST 2
2575#define SUPLA_LASTCONNECTIONRESETCAUSE_SERVER_CONNECTION_LOST 3
2576
2577typedef struct {
2578 _supla_int_t ReceiverID; // Not used in extended values
2579 union {
2580 // Not used in extended values
2581 _supla_int_t ChannelID; // Server -> Client
2582 unsigned char ChannelNumber; // Device -> Server
2583 };
2584 _supla_int_t Fields; // SUPLA_CHANNELSTATE_FIELD_*
2585 union {
2586 _supla_int_t defaultIconField;
2587 unsigned _supla_int_t SwitchCycleCount;
2588 };
2589 unsigned _supla_int_t IPv4;
2590 unsigned char MAC[6];
2591 unsigned char BatteryLevel; // 0 - 100%
2592 unsigned char BatteryPowered; // true(1)/false(0)
2593 char WiFiRSSI;
2594 unsigned char WiFiSignalStrength; // 0 - 100%
2595 unsigned char BridgeNodeOnline; // 0/1
2596 unsigned char BridgeNodeSignalStrength; // 0 - 100%
2597 unsigned _supla_int_t Uptime; // sec.
2598 unsigned _supla_int_t ConnectionUptime; // sec.
2599 unsigned char BatteryHealth;
2600 unsigned char LastConnectionResetCause; // SUPLA_LASTCONNECTIONRESETCAUSE_*
2601 unsigned _supla_int16_t LightSourceLifespan; // 0 - 65535 hours
2602 union {
2603 _supla_int16_t LightSourceLifespanLeft; // -327,67 - 100.00%
2604 // LightSourceLifespan * 0.01
2605 _supla_int_t LightSourceOperatingTime; // -3932100sec. - 3932100sec.
2606 unsigned _supla_int_t OperatingTime; // time in seconds
2607 };
2608 char EOL; // End Of List // v. >= 26
2609 char EmptySpace[1]; // Empty space for future use
2610} TDSC_ChannelState; // v. >= 12 Device -> Server -> Client
2611
2612#define TChannelState_ExtendedValue TDSC_ChannelState
2613
2614typedef struct {
2615 _supla_int_t ChannelID;
2616} TCS_ChannelBasicCfgRequest; // v. >= 12
2617
2618typedef struct {
2619 union {
2620 // Remaining time to turn off
2621 unsigned _supla_int_t RemainingTimeMs;
2622 unsigned _supla_int_t RemainingTimeS;
2623 unsigned _supla_int_t CountdownEndsAt; // Unix timestamp - Filled by server
2624 };
2625
2626 unsigned char TargetValue[SUPLA_CHANNELVALUE_SIZE];
2627
2628 _supla_int_t SenderID;
2629 unsigned _supla_int_t
2630 SenderNameSize; // including the terminating null byte ('\0')
2631 char SenderName[SUPLA_SENDER_NAME_MAXSIZE]; // Last variable in struct!
2632 // UTF8 | Filled by server
2634
2635typedef struct {
2636 TChannelState_ExtendedValue Channel;
2637 TTimerState_ExtendedValue Timer; // Last variable in struct!
2639
2640typedef struct {
2641 char DeviceName[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8
2642 char DeviceSoftVer[SUPLA_SOFTVER_MAXSIZE];
2643 _supla_int_t DeviceID;
2644 _supla_int_t DeviceFlags;
2645 _supla_int16_t ManufacturerID;
2646 _supla_int16_t ProductID;
2647
2648 _supla_int_t ID;
2649 unsigned char Number;
2650 _supla_int_t Type;
2651 _supla_int_t Func;
2652 _supla_int_t FuncList;
2653
2654 unsigned _supla_int_t ChannelFlags;
2655 unsigned _supla_int_t
2656 CaptionSize; // including the terminating null byte ('\0')
2657 char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
2658} TSC_ChannelBasicCfg; // v. >= 12
2659
2660typedef struct {
2661 _supla_int_t ChannelID;
2662 _supla_int_t Func;
2663} TCS_SetChannelFunction; // v. >= 12
2664
2665typedef struct {
2666 _supla_int_t ChannelID;
2667 _supla_int_t Func;
2668 unsigned char ResultCode;
2669} TSC_SetChannelFunctionResult; // v. >= 12
2670
2671typedef struct {
2672 union {
2673 unsigned char ChannelNumber;
2674 _supla_int_t ID;
2675 };
2676
2677 unsigned _supla_int_t
2678 CaptionSize; // including the terminating null byte ('\0')
2679 char Caption[SUPLA_CAPTION_MAXSIZE]; // Last variable in struct!
2680} TDCS_SetCaption; // v. >= 12
2681
2682typedef struct {
2683 union {
2684 unsigned char ChannelNumber;
2685 _supla_int_t ID;
2686 };
2687
2688 unsigned char ResultCode;
2689 unsigned _supla_int_t
2690 CaptionSize; // including the terminating null byte ('\0')
2691 char Caption[SUPLA_CAPTION_MAXSIZE]; // Last variable in struct!
2692} TSCD_SetCaptionResult; // v. >= 12
2693
2694typedef struct {
2695 unsigned char ResultCode;
2697
2698typedef struct {
2699 // Disabled: 0
2700 // Ignore: <0
2701 _supla_int_t IODeviceRegistrationTimeSec;
2702 _supla_int_t ClientRegistrationTimeSec;
2703} TCS_SetRegistrationEnabled; // v. >= 12
2704
2705typedef struct {
2706 unsigned char ResultCode;
2708
2709typedef struct {
2710 _supla_int_t DeviceID;
2711} TCS_DeviceReconnectRequest; // v. >= 12
2712
2713typedef struct {
2714 _supla_int_t DeviceID;
2715 unsigned char ResultCode;
2717
2718typedef struct {
2719 // server -> device
2720
2721 unsigned char ChannelCount;
2722 _supla_int_t Functions[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
2723 // Functions[ChannelNumber]
2724} TSD_ChannelFunctions; // ver. >= 12
2725
2726typedef struct {
2727 unsigned char ChannelNumber;
2729
2730typedef struct {
2731 unsigned char ChannelNumber;
2732 _supla_int_t Param1;
2733 _supla_int_t Param2;
2734 _supla_int_t Param3;
2736
2737#define SUPLA_CHANNEL_CONFIG_MAXSIZE 512 // v. <= 19 - 128; v. >= 21 - 512
2738#define SUPLA_DEVICE_CONFIG_MAXSIZE 512
2739
2740// Default type is used for standard channel config (user modifiable)
2741#define SUPLA_CONFIG_TYPE_DEFAULT 0
2742// Weekly schedule
2743#define SUPLA_CONFIG_TYPE_WEEKLY_SCHEDULE 2
2744// For SUPLA_CHANNELFNC_HVAC_THERMOSTAT, ALT weekly schedule is used for
2745// cooling subfuction, while standard weelkly schedule is used for heating
2746#define SUPLA_CONFIG_TYPE_ALT_WEEKLY_SCHEDULE 3
2747#define SUPLA_CONFIG_TYPE_OCR 4
2748#define SUPLA_CONFIG_TYPE_EXTENDED 5
2749
2750/********************************************
2751 * DEVICE CONFIG STRUCTURES
2752 ********************************************/
2753
2754// SUPLA_DS_CALL_SET_DEVICE_CONFIG
2755// SUPLA_SD_CALL_SET_DEVICE_CONFIG
2756// Config field should contain fields stored in order as they appear in
2757// Fields parameter. Size of parameter depends on Field type.
2758typedef struct {
2759 unsigned char EndOfDataFlag; // 1 - last message; 0 - more messages will come
2760 unsigned char zero[8]; // for future use
2761 unsigned _supla_int64_t
2762 AvailableFields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2763 unsigned _supla_int64_t Fields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2764 unsigned _supla_int16_t ConfigSize;
2765 char Config[SUPLA_DEVICE_CONFIG_MAXSIZE]; // Last variable in struct!
2766} TSDS_SetDeviceConfig; // v. >= 21
2767
2768// SUPLA_SD_CALL_SET_DEVICE_CONFIG_RESULT
2769// SUPLA_DS_CALL_SET_DEVICE_CONFIG_RESULT
2770typedef struct {
2771 unsigned char Result; // SUPLA_CONFIG_RESULT_*
2772 unsigned char zero[9]; // for future use
2774
2775typedef struct {
2776 _supla_int_t DeviceId;
2777 unsigned char EndOfDataFlag; // 1 - last message; 0 - more messages will come
2778 unsigned char zero[8]; // for future use
2779 unsigned _supla_int64_t
2780 AvailableFields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2781 unsigned _supla_int64_t Fields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2782 unsigned _supla_int16_t ConfigSize;
2783 char Config[SUPLA_DEVICE_CONFIG_MAXSIZE]; // Last variable in struct!
2784} TSCS_DeviceConfig; // v. >= 21
2785
2786// SUPLA_SC_CALL_DEVICE_CONFIG_UPDATE_OR_RESULT
2787typedef struct {
2788 unsigned char Result; // SUPLA_CONFIG_RESULT_*. It matters when it is a
2789 // response to SUPLA_CS_CALL_GET_DEVICE_CONFIG
2790 TSCS_DeviceConfig Config; // Last variable in struct!
2792
2793// SUPLA_CS_CALL_GET_DEVICE_CONFIG
2794typedef struct {
2795 _supla_int_t DeviceId;
2796 unsigned _supla_int64_t Fields; // bit map of SUPLA_DEVICE_CONFIG_FIELD_
2797 unsigned char zero[8]; // for future use
2799
2800#define SUPLA_DEVCFG_STATUS_LED_ON_WHEN_CONNECTED 0
2801#define SUPLA_DEVCFG_STATUS_LED_OFF_WHEN_CONNECTED 1
2802#define SUPLA_DEVCFG_STATUS_LED_ALWAYS_OFF 2
2803
2804typedef struct {
2805 unsigned char StatusLedType; // SUPLA_DEVCFG_STATUS_LED_
2806} TDeviceConfig_StatusLed; // v. >= 21
2807
2808typedef struct {
2809 unsigned char Disabled; // 1 - true; 0 - false
2810} TDeviceConfig_PowerStatusLed; // v. >= 25
2811
2812typedef struct {
2813 unsigned char ScreenBrightness; // 0-100%
2814 unsigned char Automatic; // 0 - false; 1 - true
2815 signed char AdjustmentForAutomatic;
2816} TDeviceConfig_ScreenBrightness; // v. >= 21
2817
2818typedef struct {
2819 unsigned char Volume; // 0-100%
2820} TDeviceConfig_ButtonVolume; // v. >= 21
2821
2822typedef struct {
2823 unsigned char DisableUserInterface; // 0 - false (local UI enabled)
2824 // 1 - true (local UI disabled)
2825 // 2 - partial
2826 // min/max allowed parameters are mandatory for "partial" variant
2827 unsigned _supla_int16_t minAllowedTemperatureSetpointFromLocalUI;
2828 unsigned _supla_int16_t maxAllowedTemperatureSetpointFromLocalUI;
2830
2831typedef struct {
2832 unsigned char AutomaticTimeSync; // 0 - disabled
2833 // 1 - enabled
2835
2836typedef struct {
2837 unsigned _supla_int16_t HomeScreenOffDelayS; // delay in seconds
2838 // 0 - disabled
2840
2841#define SUPLA_DEVCFG_HOME_SCREEN_OFF_DELAY_TYPE_ALWAYS_ENABLED 0
2842#define SUPLA_DEVCFG_HOME_SCREEN_OFF_DELAY_TYPE_ENABLED_WHEN_DARK 1
2843typedef struct {
2844 unsigned char
2845 HomeScreenOffDelayType; // SUPLA_DEVCFG_HOME_SCREEN_OFF_DELAY_TYPE_
2847
2848#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_NONE (1ULL << 0)
2849#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE (1ULL << 1)
2850#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE_AND_HUMIDITY (1ULL << 2)
2851#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TIME (1ULL << 3)
2852#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TIME_DATE (1ULL << 4)
2853#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE_TIME (1ULL << 5)
2854#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_MAIN_AND_AUX_TEMPERATURE (1ULL << 6)
2855#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_MODE_OR_TEMPERATURE (1ULL << 7)
2856
2857typedef struct {
2858 // bit field with all available modes (reported by device, readonly for other
2859 // components)
2860 unsigned _supla_int64_t ContentAvailable;
2861 // configured mode (settable)
2862 unsigned _supla_int64_t
2863 HomeScreenContent; // SUPLA_DEVCFG_HOME_SCREEN_CONTENT_
2865
2866// type: TDeviceConfig_Modbus
2867#define MODBUS_SERIAL_MODE_DISABLED 0
2868#define MODBUS_SERIAL_MODE_RTU 1
2869#define MODBUS_SERIAL_MODE_ASCII 2
2870
2871#define MODBUS_SERIAL_STOP_BITS_ONE 0
2872#define MODBUS_SERIAL_STOP_BITS_ONE_AND_HALF 1
2873#define MODBUS_SERIAL_STOP_BITS_TWO 2
2874
2875typedef struct {
2876 unsigned char Mode; // MODBUS_SERIAL_MODE_*
2877 _supla_int_t Baudrate; // 19200 (default and mandatory by modbus)
2878 unsigned char StopBits; // MODBUS_SERIAL_STOP_BITS_*
2879 unsigned char Reserved[20];
2881
2882#define MODBUS_NETWORK_MODE_DISABLED 0
2883#define MODBUS_NETWORK_MODE_TCP 1
2884#define MODBUS_NETWORK_MODE_UDP 2
2885
2886typedef struct {
2887 unsigned char Mode; // MODBUS_NETWORK_MODE_*
2888 unsigned int Port; // Default: 502
2889 unsigned char Reserved[20];
2891
2892// Readonly Modbus properties, which tells which functions/modes are
2893// available
2894typedef struct {
2895 struct {
2896 unsigned char Master: 1;
2897 unsigned char Slave: 1;
2898 unsigned char Rtu: 1;
2899 unsigned char Ascii: 1;
2900 unsigned char Tcp: 1;
2901 unsigned char Udp: 1;
2902 unsigned char Reserved: 2;
2903 unsigned char Reserved2: 8;
2904 } Protocol;
2905 struct {
2906 unsigned char B4800: 1;
2907 unsigned char B9600: 1; // modbus mandatory
2908 unsigned char B19200: 1; // modbus mandatory
2909 unsigned char B38400: 1;
2910 unsigned char B57600: 1;
2911 unsigned char B115200: 1;
2912 unsigned char Reserved: 2;
2913 unsigned char Reserved2: 8;
2914 } Baudrate;
2915 struct {
2916 unsigned char One: 1;
2917 unsigned char OneAndHalf: 1;
2918 unsigned char Two: 1;
2919 unsigned char Reserved: 5;
2920 } StopBits;
2921 unsigned char Reserved[20];
2923
2924#define MODBUS_ROLE_NOT_SET 0
2925#define MODBUS_ROLE_MASTER 1
2926#define MODBUS_ROLE_SLAVE 2
2927
2928typedef struct {
2929 unsigned char Role; // MODBUS_ROLE_*
2930 unsigned char ModbusAddress; // only for slave
2931 unsigned _supla_int_t SlaveTimeoutMs; // only for master
2932 ModbusSerialConfig SerialConfig;
2933 ModbusNetworkConfig NetworkConfig;
2934 ModbusConfigProperties Properties;
2935 unsigned char Reserved[20];
2937
2938/********************************************
2939 * CHANNEL CONFIG STRUCTURES
2940 ********************************************/
2941
2942#define SUPLA_CONFIG_RESULT_FALSE 0
2943#define SUPLA_CONFIG_RESULT_TRUE 1
2944#define SUPLA_CONFIG_RESULT_DATA_ERROR 2
2945#define SUPLA_CONFIG_RESULT_TYPE_NOT_SUPPORTED 3
2946#define SUPLA_CONFIG_RESULT_FUNCTION_NOT_SUPPORTED 4
2947#define SUPLA_CONFIG_RESULT_LOCAL_CONFIG_DISABLED 5
2948#define SUPLA_CONFIG_RESULT_NOT_ALLOWED 6
2949#define SUPLA_CONFIG_RESULT_DEVICE_NOT_FOUND 7
2950
2951// SUPLA_CS_CALL_GET_CHANNEL_CONFIG
2952typedef struct {
2953 _supla_int_t ChannelId;
2954 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
2955 unsigned _supla_int_t Flags;
2956} TCS_GetChannelConfigRequest; // v. >= 21
2957
2958// SUPLA_CS_CALL_SET_CHANNEL_CONFIG
2959typedef struct {
2960 _supla_int_t ChannelId;
2961 _supla_int_t Func;
2962 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
2963 unsigned _supla_int16_t ConfigSize;
2964 char Config[SUPLA_CHANNEL_CONFIG_MAXSIZE]; // Last variable in struct!
2965 // v. >= 21
2966 // TChannelConfig_*
2968
2969// SUPLA_SC_CALL_CHANNEL_CONFIG_UPDATE
2970typedef struct {
2971 unsigned char Result; // SUPLA_CONFIG_RESULT_*. It matters when it is a
2972 // response to SUPLA_CS_CALL_GET_CHANNEL_CONFIG or
2973 // SUPLA_CS_CALL_SET_CHANNEL_CONFIG
2974 TSCS_ChannelConfig Config; // Last variable in struct!
2976
2977// SUPLA_DS_CALL_GET_CHANNEL_CONFIG
2978typedef struct {
2979 unsigned char ChannelNumber;
2980 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
2981 unsigned _supla_int_t Flags;
2982} TDS_GetChannelConfigRequest; // v. >= 16
2983
2984// SUPLA_SD_CALL_GET_CHANNEL_CONFIG_RESULT
2985// SUPLA_DS_CALL_SET_CHANNEL_CONFIG
2986// SUPLA_SD_CALL_SET_CHANNEL_CONFIG
2987typedef struct {
2988 unsigned char ChannelNumber;
2989 _supla_int_t Func;
2990 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
2991 unsigned _supla_int16_t ConfigSize;
2992 char Config[SUPLA_CHANNEL_CONFIG_MAXSIZE]; // Last variable in struct!
2993 // v. >= 16
2994 // TChannelConfig_*
2996
2997// SUPLA_DS_CALL_SET_CHANNEL_CONFIG
2998// SUPLA_SD_CALL_SET_CHANNEL_CONFIG
2999typedef TSD_ChannelConfig TSDS_SetChannelConfig; // v. >= 21
3000
3001// SUPLA_SD_CALL_SET_CHANNEL_CONFIG_RESULT
3002// SUPLA_DS_CALL_SET_CHANNEL_CONFIG_RESULT
3003typedef struct {
3004 unsigned char Result; // SUPLA_CONFIG_RESULT_*
3005 unsigned char ConfigType; // SUPLA_CONFIG_TYPE_
3006 unsigned char ChannelNumber;
3008
3009// SUPLA_SD_CALL_CHANNEL_CONFIG_FINISHED
3010typedef struct {
3011 unsigned char ChannelNumber;
3013
3014typedef struct {
3015 _supla_int_t TimeMS;
3016} TChannelConfig_StaircaseTimer; // v. >= 16
3017
3018typedef struct {
3019 _supla_int_t ClosingTimeMS;
3020 _supla_int_t OpeningTimeMS;
3021 unsigned char MotorUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3022 unsigned char ButtonsUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3023 signed char TimeMargin; // -1 default (device specific), 0 - not set/not used
3024 // 1 - no margin,
3025 // > 1 - 51% of opening/closing time added on extreme
3026 // positions - value should be decremented by 1.
3027 unsigned char VisualizationType; // 0 - default, other values depends on
3028 // Cloud and App support
3029 unsigned char Reserved[32];
3030} TChannelConfig_RollerShutter; // v. >= 16
3031
3032typedef TChannelConfig_RollerShutter TChannelConfig_TerraceAwning;
3033typedef TChannelConfig_RollerShutter TChannelConfig_ProjectorScreen;
3034typedef TChannelConfig_RollerShutter TChannelConfig_Curtain;
3035typedef TChannelConfig_RollerShutter TChannelConfig_RollerGarageDoor;
3036
3037typedef struct {
3038 _supla_int_t ClosingTimeMS;
3039 _supla_int_t OpeningTimeMS;
3040 _supla_int_t TiltingTimeMS;
3041 unsigned char MotorUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3042 unsigned char ButtonsUpsideDown; // 0 - not set/not used, 1 - false, 2 - true
3043 signed char TimeMargin; // -1 default (device specific), 0 - not set/not used
3044 // 1 - no margin,
3045 // > 1 - 51% of opening/closing time added on extreme
3046 // positions - value should be decremented by 1.
3047 unsigned _supla_int16_t
3048 Tilt0Angle; // 0 - 180 - degree corresponding to tilt 0
3049 unsigned _supla_int16_t
3050 Tilt100Angle; // 0 - 180 - degree corresponding to tilt 100
3051 unsigned char TiltControlType; // SUPLA_TILT_CONTROL_TYPE_
3052 unsigned char VisualizationType; // 0 - default, other values depends on
3053 // Cloud and App support
3054 unsigned char Reserved[32];
3055} TChannelConfig_FacadeBlind; // v. >= 24
3056
3057typedef TChannelConfig_FacadeBlind TChannelConfig_VerticalBlind;
3058
3059typedef struct {
3060 unsigned _supla_int_t ActiveActions;
3061} TChannelConfig_ActionTrigger; // v. >= 16
3062
3063// Weekly schedule definition for HVAC channel
3064typedef struct {
3065 unsigned char Mode; // for HVAC: SUPLA_HVAC_MODE_
3066 union {
3067 _supla_int16_t SetpointTemperatureHeat; // * 0.01 - used for heating
3068 _supla_int16_t Value1;
3069 };
3070 union {
3071 _supla_int16_t SetpointTemperatureCool; // * 0.01 - used for cooling
3072 _supla_int16_t Value2;
3073 };
3075
3076#define SUPLA_WEEKLY_SCHEDULE_PROGRAMS_MAX_SIZE 4
3077#define SUPLA_WEEKLY_SCHEDULE_VALUES_SIZE (7 * 24 * 4)
3078
3079typedef struct {
3080 // 4*5 = 20 B
3081 TWeeklyScheduleProgram Program[SUPLA_WEEKLY_SCHEDULE_PROGRAMS_MAX_SIZE];
3082 // "Quarters" contain Program setting for each 15 min. One 15 min program is
3083 // set on 4 bits, so in one byte we have settings for two 2x 15 min. 0 - off
3084 // 1 - program 1
3085 // 2 - program 2
3086 // 3 - program 3
3087 // 4 - program 4
3088 // (Quarter[0] & 0x0F) is Sunday, 0:00 to 0:14
3089 // (Quarter[0] & 0xF0) >> 4 is Sunday, 0:15 to 0:29
3090 // Days of week are numbered: 0 - Sunday, 1 - Monday, etc.
3091 unsigned char Quarters[SUPLA_WEEKLY_SCHEDULE_VALUES_SIZE / 2]; // 336 B
3092} TChannelConfig_WeeklySchedule; // v. >= 21
3093
3094// Config used for thermometers, humidity sensors, and thermometers with
3095// humidity channels.
3096// Correction is always applied by io device. Parameter
3097// AdjustmentAppliedByDevice is added in order to handle older versions where
3098// correction was applied by server. Devices supporting this setting will
3099// retreive config from server and if AdjustmentAppliedByDevice is set to 0,
3100// then they will store new correction value, set AdjustmentAppliedByDevice to 1
3101// and send it to server, so server will no longer apply correction.
3102typedef struct {
3103 _supla_int16_t TemperatureAdjustment; // * 0.01
3104 _supla_int16_t HumidityAdjustment; // * 0.01
3105 unsigned char AdjustmentAppliedByDevice; // 1/true - by device
3106 // 0/false - by server
3107 // Min/Max allowed adjustment values that channel supports. If set to 0, then
3108 // field is not supported by device and Cloud should use default -10..10 range
3109 // for correction. Otherwise, Cloud should use these values.
3110 _supla_int16_t MinTemperatureAdjustment; // * 0.01
3111 _supla_int16_t MaxTemperatureAdjustment; // * 0.01
3112 _supla_int16_t MinHumidityAdjustment; // * 0.01
3113 _supla_int16_t MaxHumidityAdjustment; // * 0.01
3114 unsigned char Reserved[27 - 4 * sizeof(_supla_int16_t)];
3116
3117// ChannelConfig for all binary sensors (all functions valid for
3118// SUPLA_CHANNELTYPE_BINARYSENSOR)
3119// Device doesn't apply this inverted logic on communication towards server.
3120// It is used only for interanal purposes and for other external interfaces
3121// like MQTT
3122// FilteringTimeMs is used to configure how long device should wait for stable
3123// input signal before changing it's state. If value is set to 0, then field
3124// is not used by device and server should ignore it. Device may impose minimum
3125// and maximum values for this field.
3126typedef struct {
3127 unsigned char InvertedLogic; // 0 - not inverted, 1 - inverted
3128 unsigned _supla_int16_t FilteringTimeMs; // 0 - not used, > 0 - time in ms
3129 unsigned char Reserved[29];
3130} TChannelConfig_BinarySensor; // v. >= 21
3131
3132// Not set is set when there is no thermometer for "AUX" available
3133// at all.
3134// Disabled is set when thermometer is available (i.e. we can read it and show
3135// to user), but it is not used by thermostat for any other purpose
3136// Other values are mainly for UI adjustement (i.e. show temperature as floor,
3137// as water, generic heater or cooler device)
3138#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_NOT_SET 0
3139#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_DISABLED 1
3140#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_FLOOR 2
3141#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_WATER 3
3142#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_GENERIC_HEATER 4
3143#define SUPLA_HVAC_AUX_THERMOMETER_TYPE_GENERIC_COOLER 5
3144
3145#define SUPLA_HVAC_ALGORITHM_NOT_SET 0
3146#define SUPLA_HVAC_ALGORITHM_ON_OFF_SETPOINT_MIDDLE (1ULL << 0)
3147#define SUPLA_HVAC_ALGORITHM_ON_OFF_SETPOINT_AT_MOST (1ULL << 1)
3148#define SUPLA_HVAC_ALGORITHM_PID (1ULL << 2)
3149
3150// HVAC channel validation rules for thermometers:
3151// - MainThermometerChannelNo must be set
3152// - AuxThermometerChannelNo is validated and used only when
3153// AuxThermometerType != SUPLA_HVAC_AUX_THERMOMETER_TYPE_NOT_SET
3154// - AuxThermometerChannelNo != MainThermometerChannelNo
3155// - AuxThermometerChannelNo must be set for
3156// SUPLA_CHANNELFNC_HVAC_THERMOSTAT_DIFFERENTIAL. For other functions it is
3157// optional.
3158// - MainThermometerChannelNo and AuxThermometerChannelNo have to be
3159// SUPLA_CHANNELTYPE_HUMIDITYANDTEMPSENSOR or SUPLA_CHANNELTYPE_THERMOMETER
3160// - When AuxThermometerType == SUPLA_HVAC_AUX_THERMOMETER_TYPE_NOT_SET,
3161// AuxThermometerChannelNo is ignored, it can be set to 0.
3162
3163// HVAC channel validation for AntiFreezeAndOverheatProtectionEnabled:
3164// - function is available for channel functions: HEAT, COOL, HEAT_COOL
3165// - for other channel functions, this parameter is ignored
3166// - AntiFreeze/Overheat protection always use MainThermometerChannelNo as
3167// temperature source
3168
3169// HVAC channel validation for Algorithms:
3170// - AvailableAlgorithms is set only by device
3171// - UsedAlgorithm == 0 may be reported by device for incorrectly configured
3172// thermostat (i.e. there AvailableAlgorithms == 0), this shouldn't happen
3173// for devices with proper SW.
3174// - UsedAlgorithm & AvailableAlgorithms should evaluate to true
3175// - UsedAlgorithm should contain only one bit set
3176
3177// MinOnTimeS and MinOffTimeS:
3178// - function is always available
3179// - time is given in seconds
3180// - allowed range: 0 - 600 sec
3181
3182// OutputValueOnError:
3183// - function is always available
3184// - allowed values: -100 .. 100
3185// - it is recommended to use only -100 (cool), 0 (off), 100 (heat).
3186// - info: this range comes from assumption that cooling and heating may
3187// be enabled with gradients (i.e. for some thermostat with PWM output), but
3188// majority of thermostats are on/off, so only -100 (cool), 0 (off), and 100
3189// (heat) are proposed here.
3190
3191// Temperature validation rules:
3192// - Temperature in "Room Constrain" means:
3193// TEMPERATURE_ROOM_MIN <= t <= TEMPERATURE_ROOM_MAX
3194// - Temperature in "Aux Constrain" means:
3195// TEMPERATURE_AUX_MIN <= t <= TEMPERATURE_AUX_MAX
3196// - Temperatures (t_min, t_max) in "Auto Constrain" means:
3197// TEMPERATURE_ROOM_MIN <= t_min <= TEMPERATURE_ROOM_MAX AND
3198// TEMPERATURE_ROOM_MIN <= t_max <= TEMPERATURE_ROOM_MAX AND
3199// (t_max - t_min >= TEMPERATURE_HEAT_COOL_OFFSET_MIN) AND
3200// (t_max - t_min <= TEMPERATURE_HEAT_COOL_OFFSET_MAX)
3201
3202// TEMPERATURE_FREEZE_PROTECTION - has to be in Room Constrain when
3203// AntiFreezeAndOverheatProtectionEnabled is set
3204// TEMPERATURE_ECO - has to be in Room Constrain
3205// TEMPERATURE_COMFORT - has to be in Room Constrain
3206// TEMPERATURE_BOOST - has to be in Room Constrain
3207// TEMPERATURE_HEAT_PROTECTION - has to be in Room Constrain when function
3208// is COOL or HEAT_COOL
3209// TEMPERATURE_HISTERESIS and TEMPERATURE_AUX_HISTERESIS - has to be
3210// TEMPERATURE_HISTERESIS_MIN <= t <= TEMPERATURE_HISTERESIS_MAX
3211// TEMPERATURE_BELOW_ALARM - has to be in Room Constrain
3212// TEMPERATURE_ABOVE_ALARM - has to be in Room Constrain
3213// TEMPERATURE_AUX_MIN_SETPOINT - has to be in Aux Constrain and has
3214// to be < TEMPERATURE_AUX_MAX_SETPOINT
3215// TEMPERATURE_AUX_MAX_SETPOINT - has to be in Aux Constrain and has
3216// to be > TEMPERATURE_AUX_MIN_SETPOINT
3217
3218// Below values are readonly and defines device capabilities for current
3219// function:
3220// TEMPERATURE_ROOM_MIN < TEMPERATURE_ROOM_MAX
3221// TEMPERATURE_AUX_MIN < TEMPERATURE_AUX_MAX
3222// TEMPERATURE_HISTERESIS_MIN < TEMPERATURE_HISTERESIS_MAX
3223// TEMPERATURE_HEAT_COOL_OFFSET_MIN < TEMPERATURE_HEAT_COOL_OFFSET_MAX
3224
3225// Subfunction for SUPLA_CHANNELFNC_HVAC_THERMOSTAT
3226// Other channel functions dont' use subfunction setting (yet)
3227#define SUPLA_HVAC_SUBFUNCTION_NOT_SET 0
3228#define SUPLA_HVAC_SUBFUNCTION_HEAT 1
3229#define SUPLA_HVAC_SUBFUNCTION_COOL 2
3230
3231#define SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_NOT_SUPPORTED 0
3232#define SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_ROOM_TEMPERATURE 1
3233#define SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_AUX_HEATER_COOLER_TEMPERATURE 2
3234
3235#define LOCAL_UI_LOCK_FULL 0x1
3236#define LOCAL_UI_LOCK_TEMPERATURE 0x2
3237
3238typedef struct {
3239 unsigned _supla_int_t MainThermometerChannelNoReadonly : 1;
3240 unsigned _supla_int_t MainThermometerChannelNoHidden : 1;
3241 unsigned _supla_int_t AuxThermometerChannelNoReadonly : 1;
3242 unsigned _supla_int_t AuxThermometerChannelNoHidden : 1;
3243 unsigned _supla_int_t BinarySensorChannelNoReadonly : 1;
3244 unsigned _supla_int_t BinarySensorChannelNoHidden : 1;
3245 unsigned _supla_int_t AuxThermometerTypeReadonly : 1;
3246 unsigned _supla_int_t AuxThermometerTypeHidden : 1;
3247 unsigned _supla_int_t AntiFreezeAndOverheatProtectionEnabledReadonly : 1;
3248 unsigned _supla_int_t AntiFreezeAndOverheatProtectionEnabledHidden : 1;
3249 unsigned _supla_int_t UsedAlgorithmReadonly : 1;
3250 unsigned _supla_int_t UsedAlgorithmHidden : 1;
3251 unsigned _supla_int_t MinOnTimeSReadonly : 1;
3252 unsigned _supla_int_t MinOnTimeSHidden : 1;
3253 unsigned _supla_int_t MinOffTimeSReadonly : 1;
3254 unsigned _supla_int_t MinOffTimeSHidden : 1;
3255 unsigned _supla_int_t OutputValueOnErrorReadonly : 1;
3256 unsigned _supla_int_t OutputValueOnErrorHidden : 1;
3257 unsigned _supla_int_t SubfunctionReadonly : 1;
3258 unsigned _supla_int_t SubfunctionHidden : 1;
3259 unsigned _supla_int_t
3260 TemperatureSetpointChangeSwitchesToManualModeReadonly : 1;
3261 unsigned _supla_int_t TemperatureSetpointChangeSwitchesToManualModeHidden : 1;
3262 unsigned _supla_int_t AuxMinMaxSetpointEnabledReadonly : 1;
3263 unsigned _supla_int_t AuxMinMaxSetpointEnabledHidden : 1;
3264 unsigned _supla_int_t UseSeparateHeatCoolOutputsReadonly : 1;
3265 unsigned _supla_int_t UseSeparateHeatCoolOutputsHidden : 1;
3266 unsigned _supla_int_t TemperaturesFreezeProtectionReadonly : 1;
3267 unsigned _supla_int_t TemperaturesFreezeProtectionHidden : 1;
3268 unsigned _supla_int_t TemperaturesEcoReadonly : 1;
3269 unsigned _supla_int_t TemperaturesEcoHidden : 1;
3270 unsigned _supla_int_t TemperaturesComfortReadonly : 1;
3271 unsigned _supla_int_t TemperaturesComfortHidden : 1;
3272 unsigned _supla_int_t TemperaturesBoostReadonly : 1;
3273 unsigned _supla_int_t TemperaturesBoostHidden : 1;
3274 unsigned _supla_int_t TemperaturesHeatProtectionReadonly : 1;
3275 unsigned _supla_int_t TemperaturesHeatProtectionHidden : 1;
3276 unsigned _supla_int_t TemperaturesHisteresisReadonly : 1;
3277 unsigned _supla_int_t TemperaturesHisteresisHidden : 1;
3278 unsigned _supla_int_t TemperaturesBelowAlarmReadonly : 1;
3279 unsigned _supla_int_t TemperaturesBelowAlarmHidden : 1;
3280 unsigned _supla_int_t TemperaturesAboveAlarmReadonly : 1;
3281 unsigned _supla_int_t TemperaturesAboveAlarmHidden : 1;
3282 unsigned _supla_int_t TemperaturesAuxMinSetpointReadonly : 1;
3283 unsigned _supla_int_t TemperaturesAuxMinSetpointHidden : 1;
3284 unsigned _supla_int_t TemperaturesAuxMaxSetpointReadonly : 1;
3285 unsigned _supla_int_t TemperaturesAuxMaxSetpointHidden : 1;
3286 unsigned _supla_int_t MasterThermostatChannelNoReadonly : 1;
3287 unsigned _supla_int_t MasterThermostatChannelNoHidden : 1;
3288 unsigned _supla_int_t HeatOrColdSourceSwitchReadonly : 1;
3289 unsigned _supla_int_t HeatOrColdSourceSwitchHidden : 1;
3290 unsigned _supla_int_t PumpSwitchReadonly : 1;
3291 unsigned _supla_int_t PumpSwitchHidden : 1;
3292 unsigned _supla_int_t TemperaturesAuxHisteresisReadonly : 1;
3293 unsigned _supla_int_t TemperaturesAuxHisteresisHidden : 1;
3294 unsigned _supla_int_t Reserved : 10;
3296
3297typedef struct {
3298 union {
3299 _supla_int_t MainThermometerChannelId;
3300 // Channel numbers for thermometer config. Channels have to be local and
3301 // numbering is the same as for registration message
3302 unsigned char MainThermometerChannelNo;
3303 };
3304
3305 union {
3306 _supla_int_t AuxThermometerChannelId;
3307 unsigned char
3308 AuxThermometerChannelNo; // If the channel number points to itself, it
3309 // means that the aux thermometer is not set.
3310 };
3311
3312 union {
3313 _supla_int_t BinarySensorChannelId;
3314 unsigned char
3315 BinarySensorChannelNo; // If the channel number points to itself, it
3316 // means that the binary sensor is not set.
3317 };
3318
3319 // SUPLA_HVAC_AUX_THERMOMETER_TYPE_
3320 unsigned char AuxThermometerType;
3321 unsigned char AntiFreezeAndOverheatProtectionEnabled;
3322 // bit map SUPLA_HVAC_ALGORITHM_ (readonly)
3323 unsigned _supla_int16_t AvailableAlgorithms;
3324 // only one value of SUPLA_HVAC_ALGORITHM_
3325 unsigned _supla_int16_t UsedAlgorithm;
3326 // Below Min TimeS parameters defines minimum time of relay/output to be
3327 // be disabled or enabled in seconds. It is used to prevent to frequent relay
3328 // state change.
3329 // Allowed values are 0-600 (10 minutes)
3330 unsigned _supla_int16_t MinOnTimeS; // minimum allowed time for output to
3331 // be enabled
3332 unsigned _supla_int16_t MinOffTimeS; // minimum allowed time for output to
3333 // be disabled
3334 signed char OutputValueOnError; // -100 cool, 0 off (default), 100 heat
3335 unsigned char Subfunction; // SUPLA_HVAC_SUBFUNCTION_
3336 unsigned char TemperatureSetpointChangeSwitchesToManualMode; // 0 - off,
3337 // 1 - on (def)
3338 unsigned char AuxMinMaxSetpointEnabled; // 0 - off (default), 1 - on
3339 // For HEAT_COOL thermostats we have two outpus. They can either use
3340 // shared output for heating/cooling action and second output for heat vs
3341 // cool mode selection, or they can use separate outputs - one for heating
3342 // and one for cooling
3343 unsigned char UseSeparateHeatCoolOutputs; // 0 - off (default), 1 - on
3344 HvacParameterFlags ParameterFlags;
3345
3346 union {
3347 _supla_int_t MasterThermostatChannelId;
3348 struct {
3349 unsigned char MasterThermostatIsSet; // 0 - no; 1 - yes
3350 unsigned char MasterThermostatChannelNo;
3351 }; // v. >= 25
3352 };
3353
3354 union {
3355 _supla_int_t HeatOrColdSourceSwitchChannelId;
3356 struct {
3357 unsigned char HeatOrColdSourceSwitchIsSet; // 0 - no; 1 - yes
3358 unsigned char HeatOrColdSourceSwitchChannelNo;
3359 }; // v. >= 25
3360 };
3361
3362 union {
3363 _supla_int_t PumpSwitchChannelId;
3364 struct {
3365 unsigned char PumpSwitchIsSet; // 0 - no; 1 - yes
3366 unsigned char PumpSwitchChannelNo;
3367 }; // v. >= 25
3368 };
3369
3370 // TemperatureControlType allows to switch between work based on main
3371 // thermometer (room) and aux thermometer (heater/cooler).
3372 // Option is available only for SUPLA_CHANNELFNC_HVAC_THERMOSTAT
3373 // If set to 0, then it is not supported.
3374 unsigned char TemperatureControlType; // SUPLA_HVAC_TEMPERATURE_CONTROL_TYPE_
3375
3376 unsigned char LocalUILockingCapabilities; // LOCAL_UI_LOCK_*
3377 unsigned char LocalUILock; // LOCAL_UI_LOCK_*
3378
3379 // min/max allowed parameters are used only with LocalUILock &
3380 // LOCAL_UI_LOCK_TEMPERATURE
3381 _supla_int16_t MinAllowedTemperatureSetpointFromLocalUI;
3382 _supla_int16_t MaxAllowedTemperatureSetpointFromLocalUI;
3383 unsigned char Reserved[48 - sizeof(HvacParameterFlags) -
3384 sizeof(_supla_int_t) - sizeof(_supla_int_t) -
3385 sizeof(_supla_int_t) - sizeof(unsigned char) -
3386 sizeof(unsigned char) - sizeof(unsigned char) -
3387 sizeof(_supla_int16_t) - sizeof(_supla_int16_t)];
3388 THVACTemperatureCfg Temperatures;
3389} TChannelConfig_HVAC; // v. >= 21
3390
3391#define SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_LINEAR 0
3392#define SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_BAR 1
3393#define SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_CANDLE 2
3394
3395#define SUPLA_GENERAL_PURPOSE_UNIT_SIZE 15
3396
3397// General Purpose Mesurement channel config:
3398// Calculated value is: (value / ValueDivider) * ValueMultiplier + ValueAdded
3399typedef struct {
3400 // Value divider
3401 _supla_int_t ValueDivider; // 0.001 units; 0 is considered as 1
3402 // Value multiplier
3403 _supla_int_t ValueMultiplier; // 0.001 units; 0 is considered as 1
3404 // Value added
3405 _supla_int64_t ValueAdded; // 0.001 units
3406 // Display precicion
3407 unsigned char ValuePrecision; // 0 - 4 decimal points
3408 // Display unit (before value) - UTF8 including the terminating null byte '\0'
3409 char UnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3410 // Display unit (after value) - UTF8 including the terminating null byte '\0'
3411 char UnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3412 unsigned char
3413 NoSpaceBeforeValue; // 0 - with space (default), 1 - without space
3414 unsigned char
3415 NoSpaceAfterValue; // 0 - with space (default), 1 - without space
3416 // Keep history on server
3417 unsigned char KeepHistory; // 0 - no (default), 1 - yes
3418 // Chart type linear/bar/candle
3419 unsigned char ChartType; // SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_*
3420 // Channel refresh interval [ms], allowed range 1 .. 65535
3421 // Actual channel implementation may enforce minimum value
3422 // 0 - default - implementation dependent
3423 unsigned _supla_int16_t RefreshIntervalMs;
3424
3425 // Readonly and default parameters
3426 // Default value divider
3427 _supla_int_t DefaultValueDivider; // 0.001 units; 0 is considered as 1
3428 // Default value multiplier
3429 _supla_int_t DefaultValueMultiplier; // 0.001 units; 0 is considered as 1
3430 // Default value added
3431 _supla_int64_t DefaultValueAdded; // 0.001 units
3432 // Default display precicion
3433 unsigned char DefaultValuePrecision; // 0 - 4 decimal points
3434 // Default unit (before value) - UTF8 including the terminating null byte '\0'
3435 char DefaultUnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3436 // Default unit (after value) - UTF8 including the terminating null byte '\0'
3437 char DefaultUnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3438
3439 unsigned char Reserved[8];
3441
3442#define SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_INCREMENT_DECREMENT 0
3443#define SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_ALWAYS_INCREMENT 1
3444#define SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_ALWAYS_DECREMENT 2
3445
3446#define SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_BAR 0
3447#define SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_LINEAR 1
3448
3449// General Purpose Meter channel config:
3450// Calculated value is: (value / ValueDivider) * ValueMultiplier + ValueAdded
3451typedef struct {
3452 // Counter type
3453 unsigned char CounterType; // SUPLA_GENERAL_PURPOSE_METER_COUNTER_TYPE_*
3454
3455 // Value divider
3456 _supla_int_t ValueDivider; // 0.001 units; 0 is considered as 1
3457 // Value multiplier
3458 _supla_int_t ValueMultiplier; // 0.001 units; 0 is considered as 1
3459 // Value added
3460 _supla_int64_t ValueAdded; // 0.001 units
3461 // Display precicion
3462 unsigned char ValuePrecision; // 0 - 4 decimal points
3463 // Display unit (before value) - UTF8 including the terminating null byte '\0'
3464 char UnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3465 // Display unit (after value) - UTF8 including the terminating null byte '\0'
3466 char UnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3467 unsigned char
3468 NoSpaceBeforeValue; // 0 - with space (default), 1 - without space
3469 unsigned char
3470 NoSpaceAfterValue; // 0 - with space (default), 1 - without space
3471 // Keep history on server
3472 unsigned char KeepHistory; // 0 - no (default), 1 - yes
3473 // Chart type linear/bar/candle
3474 unsigned char ChartType; // SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_*
3475 // Include value added in history
3476 unsigned char IncludeValueAddedInHistory; // 0 - no (default), 1 - yes
3477 // Fill missing data
3478 unsigned char FillMissingData; // 0 - no (default), 1 - yes
3479 // Channel refresh interval [ms], allowed range 1 .. 65535
3480 // Actual channel implementation may enforce minimum value
3481 // 0 - default - implementation dependent
3482 unsigned _supla_int16_t RefreshIntervalMs;
3483
3484 // Readonly and default parameters
3485 // Default value divider
3486 _supla_int_t DefaultValueDivider; // 0.001 units; 0 is considered as 1
3487 // Default value multiplier
3488 _supla_int_t DefaultValueMultiplier; // 0.001 units; 0 is considered as 1
3489 // Default value added
3490 _supla_int64_t DefaultValueAdded; // 0.001 units
3491 // Default display precicion
3492 unsigned char DefaultValuePrecision; // 0 - 4 decimal points
3493 // Default unit (before value) - UTF8 including the terminating null byte '\0'
3494 char DefaultUnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3495 // Default unit (after value) - UTF8 including the terminating null byte '\0'
3496 char DefaultUnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE];
3497
3498 unsigned char Reserved[8];
3500
3501#define EM_CT_TYPE_100A_33mA (1ULL << 0)
3502#define EM_CT_TYPE_200A_66mA (1ULL << 1)
3503#define EM_CT_TYPE_400A_133mA (1ULL << 2)
3504
3505#define EM_PHASE_LED_TYPE_OFF (1ULL << 0)
3506#define EM_PHASE_LED_TYPE_VOLTAGE_PRESENCE (1ULL << 1)
3507#define EM_PHASE_LED_TYPE_VOLTAGE_PRESENCE_INVERTED (1ULL << 2)
3508// Voltage level:
3509// - PhaseLedParam1 - "low threshold", units 0.01 V.
3510// When voltage < low threshold -> blue LED
3511// - PhaseLedParam2 - "high threshold", units 0.01 V.
3512// When voltage > high threshold -> red LED
3513// - Voltage between low and high threshold -> green LED
3514#define EM_PHASE_LED_TYPE_VOLTAGE_LEVEL (1ULL << 3)
3515// Active power direction:
3516// - PhaseLedParam1 - "low threshold", units 0.01 W.
3517// When power < low threshold -> green LED.
3518// - PhaseLedParam2 - "high threshold", units 0.01 W.
3519// When power > high threshold -> red LED
3520#define EM_PHASE_LED_TYPE_POWER_ACTIVE_DIRECTION (1ULL << 4)
3521
3522// Electricity meter channel config
3523typedef struct {
3524 // Selected CT type
3525 unsigned _supla_int64_t UsedCTType; // EM_CT_TYPE_
3526 // Selected phase LED type
3527 unsigned _supla_int64_t UsedPhaseLedType; // EM_PHASE_LED_TYPE_*
3528
3529 // Phase LED params (actual meaning depends on phase LED type)
3530 _supla_int_t PhaseLedParam1;
3531 _supla_int_t PhaseLedParam2;
3532
3533 // readonly, device capabilities
3534 unsigned _supla_int64_t AvailableCTTypes;
3535 unsigned _supla_int64_t AvailablePhaseLedTypes;
3536
3537 unsigned char Reserved[32];
3539
3540typedef struct {
3541 _supla_int_t PricePerUnit; // * 0.0001
3542 // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
3543 char Currency[3];
3544 char CustomUnit[9]; // UTF8 including the terminating null byte ('\0')
3545
3546 _supla_int_t ImpulsesPerUnit;
3547 _supla_int64_t InitialValue; // 0.001 units
3548 unsigned char AddToHistory; // 0 - False, 1 - True
3549
3550 unsigned char Reserved[32];
3551} TChannelConfig_ImpulseCounter; // v. >= 25
3552
3553typedef struct {
3554 unsigned char FillLevel; // Fill level in 0-100 %
3555 union {
3556 _supla_int_t ChannelId;
3557 struct {
3558 unsigned char IsSet; // 0 - no; 1 - yes
3559 unsigned char ChannelNo;
3560 };
3561 };
3563
3564typedef struct {
3565 unsigned char WarningAboveLevel; // 0 - not set, 1-101 for 0-100%
3566 unsigned char AlarmAboveLevel; // 0 - not set, 1-101 for 0-100%
3567 unsigned char WarningBelowLevel; // 0 - not set, 1-101 for 0-100%
3568 unsigned char AlarmBelowLevel; // 0 - not set, 1-101 for 0-100%
3569
3570 unsigned char MuteAlarmSoundWithoutAdditionalAuth; // 0 - admin login is
3571 // required, 1 - regular
3572 // user is allowed
3573
3574 TContainer_SensorInfo SensorInfo[10];
3575 unsigned char Reserved[32];
3576} TChannelConfig_Container; // v. >= 26
3577
3578typedef struct {
3579 union {
3580 _supla_int_t ChannelId;
3581 struct {
3582 unsigned char IsSet; // 0 - no; 1 - yes
3583 unsigned char ChannelNo;
3584 };
3585 };
3586} TValve_SensorInfo; // v. >= 27
3587
3588
3589#define SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_NONE 0
3590#define SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_ALWAYS 1
3591#define SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_ON_CHANGE 2
3592
3593typedef struct {
3595 SensorInfo[20]; // Flood sensors can be attached only if
3596 // SUPLA_CHANNEL_FLAG_FLOOD_SENSORS_SUPPORTED is set
3597 unsigned char CloseValveOnFloodType; // SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_*
3598 unsigned char Reserved[31];
3599} TChannelConfig_Valve; // v. >= 27
3600
3601#define SUPLA_OCR_AUTHKEY_SIZE 33
3602
3603#define OCR_LIGHTING_MODE_OFF (1ULL << 0)
3604#define OCR_LIGHTING_MODE_ALWAYS_ON (1ULL << 1)
3605#define OCR_LIGHTING_MODE_AUTO (1ULL << 2)
3606
3607typedef struct {
3608 char AuthKey[SUPLA_OCR_AUTHKEY_SIZE]; // Set by the server. Alphanumeric null
3609 // terminated string.
3610 char Host[SUPLA_URL_HOST_MAXSIZE]; // Set by the server. Including the
3611 // terminating null byte ('\0').
3612
3613 unsigned _supla_int_t
3614 PhotoIntervalSec; // 0 - Disabled. The server may discard the
3615 // value if it considers the frequency to be
3616 // too high or too low. The server can set
3617 // the accepted value.
3618 unsigned _supla_int64_t LightingMode; // OCR_LIGHTING_MODE *
3619 unsigned char LightingLevel; // 1-100%
3620 unsigned _supla_int64_t MaximumIncrement; // Maximum impulse increment
3621 // between shots. 0 == Unspecified
3622
3623 // readonly, device capabilities
3624 unsigned _supla_int64_t AvailableLightingModes;
3625 unsigned char Reserved[128];
3626} TChannelConfig_OCR; // v. >= 25
3627
3628typedef struct {
3629 // If OvercurrentMaxAllowed == 0, then overcurrent settings are not available.
3630 // If OvercurrentThreshold == 0, then overcurrent protection is disabled.
3631 unsigned _supla_int_t OvercurrentThreshold; // in 0.01 A
3632 unsigned _supla_int_t OvercurrentMaxAllowed; // in 0.01 A, readonly
3633 unsigned char DefaultRelatedMeterIsSet; // readonly, 1 - true, 0 - false
3634 unsigned char
3635 DefaultRelatedMeterChannelNo; // readonly, provides channel number of
3636 // related meter if RelatedMeterIsSet
3637 unsigned char Reserved[32];
3638} TChannelConfig_PowerSwitch; // v. >= 25
3639
3640typedef TChannelConfig_PowerSwitch TChannelConfig_LightSwitch;
3641
3642// Staircase timer ext use SUPLA_CONFIG_TYPE_EXTENDED
3643typedef TChannelConfig_PowerSwitch TChannelConfig_StaircaseTimer_Ext;
3644
3645typedef struct {
3646 _supla_int_t ChannelID;
3647 union {
3648 unsigned _supla_int_t DurationMS;
3649 unsigned _supla_int_t DurationSec; // ver. >= 21. Applies to HVAC
3650 };
3651 unsigned char On;
3652} TCS_TimerArmRequest; // v. >= 17
3653
3654// Recommended for bistable buttons
3655#define SUPLA_ACTION_CAP_TURN_ON (1 << 0)
3656#define SUPLA_ACTION_CAP_TURN_OFF (1 << 1)
3657#define SUPLA_ACTION_CAP_TOGGLE_x1 (1 << 2)
3658#define SUPLA_ACTION_CAP_TOGGLE_x2 (1 << 3)
3659#define SUPLA_ACTION_CAP_TOGGLE_x3 (1 << 4)
3660#define SUPLA_ACTION_CAP_TOGGLE_x4 (1 << 5)
3661#define SUPLA_ACTION_CAP_TOGGLE_x5 (1 << 6)
3662
3663// Recommended for monostable buttons
3664#define SUPLA_ACTION_CAP_HOLD (1 << 10)
3665#define SUPLA_ACTION_CAP_SHORT_PRESS_x1 (1 << 11)
3666#define SUPLA_ACTION_CAP_SHORT_PRESS_x2 (1 << 12)
3667#define SUPLA_ACTION_CAP_SHORT_PRESS_x3 (1 << 13)
3668#define SUPLA_ACTION_CAP_SHORT_PRESS_x4 (1 << 14)
3669#define SUPLA_ACTION_CAP_SHORT_PRESS_x5 (1 << 15)
3670
3671#define SUPLA_VALVE_FLAG_FLOODING 0x1
3672#define SUPLA_VALVE_FLAG_MANUALLY_CLOSED 0x2
3673#define SUPLA_VALVE_FLAG_MOTOR_PROBLEM 0x4
3674
3675// Valve channel value
3676// Device -> Server -> Client
3677typedef struct {
3678 union {
3679 unsigned char closed; // 0 - open, 1 - closed
3680 unsigned char closed_percent;
3681 };
3682
3683 unsigned char flags; // see SUPLA_VALVE_FLAG_
3684} TValve_Value;
3685
3686// Valve channel value payload
3687// Client -> Server -> Device
3688typedef struct {
3689 unsigned char command; // 0 - close
3690 // 1 - open
3691 char reserved[7];
3692} TCSD_Valve;
3693
3694typedef struct {
3695 unsigned char ChannelNumber;
3696 _supla_int_t ActionTrigger;
3697 unsigned char zero[10]; // Place for future variables
3699
3700#define SUPLA_PN_TITLE_MAXSIZE 101
3701#define SUPLA_PN_BODY_MAXSIZE 256
3702#define SUPLA_PN_PROFILE_NAME_MAXSIZE 51
3703
3704#define PN_SERVER_MANAGED_TITLE (1 << 0)
3705#define PN_SERVER_MANAGED_BODY (1 << 1)
3706#define PN_SERVER_MANAGED_SOUND (1 << 2)
3707
3708typedef struct {
3709 unsigned char
3710 ServerManagedFields; // Specifies the fields that will be managed by the
3711 // server. This value is only considered for the
3712 // first notification within a given context and
3713 // applies to all subsequent notifications.
3714
3715 _supla_int16_t Context; // >= 0 Channel, -1 Device
3716 signed char Reserved[8];
3718
3719typedef struct {
3720 _supla_int16_t Context; // >= 0 Channel, -1 Device
3721 signed char Reserved[32];
3722 _supla_int_t SoundId;
3723 unsigned _supla_int16_t
3724 TitleSize; // Including the terminating null byte ('\0').
3725 unsigned _supla_int16_t
3726 BodySize; // Including the terminating null byte ('\0').
3727 signed char TitleAndBody[SUPLA_PN_TITLE_MAXSIZE +
3728 SUPLA_PN_BODY_MAXSIZE]; // Last variable in struct!
3730
3731#define SUPLA_SUBDEVICE_PRODUCT_CODE_MAXSIZE 51
3732#define SUPLA_SUBDEVICE_SERIAL_NUMBER_MAXSIZE 51
3733
3734typedef struct {
3735 // device -> server
3736 unsigned char SubDeviceId;
3737
3738 char Name[SUPLA_DEVICE_NAME_MAXSIZE]; // UTF8 - 201 B including the
3739 // terminating null byte ('\0').
3740 char SoftVer[SUPLA_SOFTVER_MAXSIZE]; // 21 B including the terminating null
3741 // byte ('\0').
3742 char ProductCode[SUPLA_SUBDEVICE_PRODUCT_CODE_MAXSIZE]; // 51 B including the
3743 // terminating null
3744 // byte ('\0').
3745 char
3746 SerialNumber[SUPLA_SUBDEVICE_SERIAL_NUMBER_MAXSIZE]; // 51 B including
3747 // the terminating
3748 // null byte ('\0').
3750
3751#define SUPLA_PN_CLIENT_TOKEN_MAXSIZE 256
3752#define PLATFORM_UNKNOWN 0
3753#define PLATFORM_IOS 1
3754#define PLATFORM_ANDROID 2
3755#define PLATFORM_HOMEGRAPH 3 // v. >= 23
3756
3757typedef struct {
3758 unsigned char DevelopmentEnv;
3759 _supla_int_t Platform;
3760 _supla_int_t AppId;
3761 signed char
3762 ProfileName[SUPLA_PN_PROFILE_NAME_MAXSIZE]; // Including the terminating
3763 // null byte ('\0').
3764 unsigned _supla_int16_t
3765 RealTokenSize; // It allows you to determine if the maximum size of the
3766 // Token variable is sufficient.
3767 unsigned _supla_int16_t
3768 TokenSize; // Including the terminating null byte ('\0'). Size
3769 // <= 1 removes the token
3770 signed char Token[SUPLA_PN_CLIENT_TOKEN_MAXSIZE]; // Last variable in struct!
3772
3773typedef struct {
3775 TCS_PnClientToken Token; // Last variable in struct!
3777
3778typedef struct {
3779 _supla_int_t ResultCode;
3781
3782typedef struct {
3783 _supla_int_t count;
3784 _supla_int_t total_left;
3786 items[SUPLA_CHANNEL_STATE_PACK_MAXCOUNT]; // Last variable in struct!
3788
3789#pragma pack(pop)
3790
3791void *PROTO_ICACHE_FLASH sproto_init(void);
3792void PROTO_ICACHE_FLASH sproto_free(void *spd_ptr);
3793
3794#ifndef SPROTO_WITHOUT_OUT_BUFFER
3795char PROTO_ICACHE_FLASH sproto_out_buffer_append(void *spd_ptr,
3796 TSuplaDataPacket *sdp);
3797unsigned _supla_int_t sproto_pop_out_data(void *spd_ptr, char *buffer,
3798 unsigned _supla_int_t buffer_size);
3799#endif /*SPROTO_WITHOUT_OUT_BUFFER*/
3800char PROTO_ICACHE_FLASH sproto_out_dataexists(void *spd_ptr);
3801char PROTO_ICACHE_FLASH sproto_in_buffer_append(
3802 void *spd_ptr, char *data, unsigned _supla_int_t data_size);
3803
3804char PROTO_ICACHE_FLASH sproto_pop_in_sdp(void *spd_ptr, TSuplaDataPacket *sdp);
3805char PROTO_ICACHE_FLASH sproto_in_dataexists(void *spd_ptr);
3806
3807unsigned char PROTO_ICACHE_FLASH sproto_get_version(void *spd_ptr);
3808void PROTO_ICACHE_FLASH sproto_set_version(void *spd_ptr,
3809 unsigned char version);
3810void PROTO_ICACHE_FLASH sproto_sdp_init(void *spd_ptr, TSuplaDataPacket *sdp);
3811char PROTO_ICACHE_FLASH sproto_set_data(TSuplaDataPacket *sdp, char *data,
3812 unsigned _supla_int_t data_size,
3813 unsigned _supla_int_t call_id);
3814TSuplaDataPacket *PROTO_ICACHE_FLASH sproto_sdp_malloc(void *spd_ptr);
3815void PROTO_ICACHE_FLASH sproto_sdp_free(TSuplaDataPacket *sdp);
3816
3817void PROTO_ICACHE_FLASH sproto_log_summary(void *spd_ptr);
3818void PROTO_ICACHE_FLASH sproto_buffer_dump(void *spd_ptr, unsigned char in);
3819
3820void PROTO_ICACHE_FLASH sproto_set_null_terminated_string(
3821 const char *src, char *dest, unsigned _supla_int_t *dest_size,
3822 unsigned int max_size);
3823
3824void PROTO_ICACHE_FLASH sproto__set_null_terminated_string(
3825 const char *src, char *dest, unsigned _supla_int16_t *dest_size,
3826 unsigned int max_size);
3827
3828#ifdef __cplusplus
3829}
3830#endif
3831
3832#endif /* supla_proto_H_ */
Definition proto.h:3238
Definition proto.h:2894
Definition proto.h:2886
Definition proto.h:2875
Definition proto.h:808
Definition proto.h:1615
Definition proto.h:1606
Definition proto.h:1599
Definition proto.h:2543
Definition proto.h:2347
Definition proto.h:2076
Definition proto.h:2046
Definition proto.h:3688
Definition proto.h:1642
Definition proto.h:1625
Definition proto.h:2614
Definition proto.h:1633
Definition proto.h:2231
Definition proto.h:2222
Definition proto.h:2709
Definition proto.h:2952
Definition proto.h:1664
Definition proto.h:2794
Definition proto.h:3757
Definition proto.h:3773
Definition proto.h:2660
Definition proto.h:2698
Definition proto.h:2096
Definition proto.h:1783
Definition proto.h:1777
Definition proto.h:1789
Definition proto.h:1680
Definition proto.h:1693
Definition proto.h:1706
Definition proto.h:1669
Definition proto.h:3645
Definition proto.h:2188
Definition proto.h:2183
Definition proto.h:2268
Definition proto.h:2211
Definition proto.h:2160
Definition proto.h:2179
Definition proto.h:2172
Definition proto.h:3059
Definition proto.h:3126
Definition proto.h:3564
Definition proto.h:3523
Definition proto.h:3037
Definition proto.h:3451
Definition proto.h:3297
Definition proto.h:3540
Definition proto.h:3607
Definition proto.h:3628
Definition proto.h:3018
Definition proto.h:3014
Definition proto.h:3593
Definition proto.h:3079
Definition proto.h:2358
Definition proto.h:3553
Definition proto.h:2671
Definition proto.h:695
Definition proto.h:684
Definition proto.h:705
Definition proto.h:2577
Definition proto.h:2064
Definition proto.h:2029
Definition proto.h:3694
Definition proto.h:2258
Definition proto.h:1809
Definition proto.h:2978
Definition proto.h:2726
Definition proto.h:2012
Definition proto.h:3719
Definition proto.h:3708
Definition proto.h:3734
Definition proto.h:1194
Definition proto.h:1144
Definition proto.h:1152
Definition proto.h:1137
Definition proto.h:796
Definition proto.h:872
Definition proto.h:919
Definition proto.h:945
Definition proto.h:774
Definition proto.h:1046
Definition proto.h:973
Definition proto.h:988
Definition proto.h:1006
Definition proto.h:1024
Definition proto.h:1066
Definition proto.h:1088
Definition proto.h:781
Definition proto.h:2831
Definition proto.h:2818
Definition proto.h:2822
Definition proto.h:2857
Definition proto.h:2836
Definition proto.h:2928
Definition proto.h:2808
Definition proto.h:2812
Definition proto.h:2804
Definition proto.h:2341
Definition proto.h:1952
Definition proto.h:1847
Definition proto.h:1993
Definition proto.h:2472
Definition proto.h:862
Definition proto.h:2319
Definition proto.h:2332
Definition proto.h:2682
Definition proto.h:2959
Definition proto.h:2775
Definition proto.h:1647
Definition proto.h:2640
Definition proto.h:2970
Definition proto.h:2694
Definition proto.h:2240
Definition proto.h:2787
Definition proto.h:2713
Definition proto.h:1654
Definition proto.h:1998
Definition proto.h:2092
Definition proto.h:1842
Definition proto.h:1835
Definition proto.h:3778
Definition proto.h:2665
Definition proto.h:2705
Definition proto.h:2101
Definition proto.h:1248
Definition proto.h:1221
Definition proto.h:1455
Definition proto.h:1446
Definition proto.h:1472
Definition proto.h:1464
Definition proto.h:1430
Definition proto.h:1415
Definition proto.h:1303
Definition proto.h:1388
Definition proto.h:1397
Definition proto.h:1406
Definition proto.h:1275
Definition proto.h:1503
Definition proto.h:1496
Definition proto.h:3782
Definition proto.h:1238
Definition proto.h:1228
Definition proto.h:1211
Definition proto.h:1201
Definition proto.h:1284
Definition proto.h:1312
Definition proto.h:1337
Definition proto.h:1362
Definition proto.h:1259
Definition proto.h:1796
Definition proto.h:766
Definition proto.h:757
Definition proto.h:1732
Definition proto.h:1746
Definition proto.h:1761
Definition proto.h:1720
Definition proto.h:1524
Definition proto.h:1546
Definition proto.h:1532
Definition proto.h:1510
Definition proto.h:1830
Definition proto.h:671
Definition proto.h:700
Definition proto.h:678
Definition proto.h:2530
Definition proto.h:3003
Definition proto.h:2770
Definition proto.h:2758
Definition proto.h:3010
Definition proto.h:2987
Definition proto.h:2718
Definition proto.h:2730
Definition proto.h:2248
Definition proto.h:1825
Definition proto.h:1818
Definition proto.h:1181
Definition proto.h:1169
Definition proto.h:1123
Definition proto.h:1110
Definition proto.h:751
Definition proto.h:722
Definition proto.h:717
Definition proto.h:662
Definition proto.h:2414
Definition proto.h:2388
Definition proto.h:2512
Definition proto.h:2395
Definition proto.h:2382
Definition proto.h:2363
Definition proto.h:2523
Definition proto.h:2618
Definition proto.h:3578
Definition proto.h:3677
Definition proto.h:3064
Definition proto.h:690