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