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