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