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