LightHub 4.6.0
Open-source smart home controller firmware
Loading...
Searching...
No Matches
itemCmd.h
Go to the documentation of this file.
1/* Copyright © 2017-2020 Andrey Klimov. All rights reserved.
2
3Licensed under the Apache License, Version 2.0 (the "License");
4you may not use this file except in compliance with the License.
5You may obtain a copy of the License at
6
7 http://www.apache.org/licenses/LICENSE-2.0
8
9Unless required by applicable law or agreed to in writing, software
10distributed under the License is distributed on an "AS IS" BASIS,
11WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12See the License for the specific language governing permissions and
13limitations under the License.
14
15Homepage: http://lazyhome.ru
16GIT: https://github.com/anklimov/lighthub
17e-mail anklimov@gmail.com
18
19*/
20#pragma once
21#include "Arduino.h"
22#include "aJSON.h"
23
48typedef char cmdstr[10];
49
50const cmdstr commands_P[] PROGMEM =
51{
52"","ON","OFF","REST","TOGGLE","HALT","XON","XOFF","INCREASE","DECREASE",
53"ENABLE","DISABLE","UNFREEZE","FREEZE",
54"AUTO","FAN_ONLY",
55"HIGH","MEDIUM","LOW","HEAT_COOL",
56"HEAT","COOL","DRY","RGB","HSV","RESET"
57};
58
59#define commandsNum sizeof(commands_P)/sizeof(cmdstr)
60
65typedef char ch_type[9];
66const ch_type ch_type_P[] PROGMEM =
67{
68"DMX", // 0 //DMX 1-4 ch
69"DMXRGBW",// 1 //DMX 4 ch
70"DMXRGB", // 2 //DMX 3 ch
71"PWM", // 3 //PWM output directly to PIN 1-4 CH
72"MBUSDIM",// 4 //Modbus AC Dimmer
73"THERMO", // 5 //Simple ON/OFF thermostat
74"RELAY", // 6 //ON_OFF relay output
75"GROUP", // 7 //Group pseudochannel
76"VCTEMP", // 8 //Vacom PID regulator
77"MBUSVC", // 9 //Vacom modbus motor regulator
78"ACHAIER",// 10 //AC Haier
79"SPILED", // 11 //SPI led strip
80"MOTOR", // 12 //Motorized gate with feedback resistor
81"PID", // 13 //PID regulator
82"MBUS", // 14 //Universal Modbus Master channel
83"UARTBRDG", // 15 //Bridge between 2 UARTS with reporting PDUs to Wireshark via UDP
84"RELAYPWM", // 16 //Slow PWM relay to control objects with inertia
85"DMXRGBWW", // 17 //DMX RGBWW channel (warm&cold white)
86"VENTS", // 18 //Multichannel ventilation
87"ELEVATOR", // 19 //Elevator controller
88"COUNTER", // 20 //Generic counter
89"HUM", // 21 //Humidifier
90"MERCURY", // 22 //Mercury energy meter/RS485 interface
91"SPRINKLR" // 23 //Sprinkler controller
92};
93
94#define ch_typeNum sizeof(ch_type_P)/sizeof(ch_type)
95
97
104#define CMD_ON 1
105#define CMD_OFF 2
106#define CMD_RESTORE 3
107#define CMD_TOGGLE 4
108#define CMD_HALT 5
109#define CMD_XON 6
110#define CMD_XOFF 7
111#define CMD_UP 8
112#define CMD_DN 9
113
114#define CMD_ENABLE 0xa
115#define CMD_DISABLE 0xb
116#define CMD_UNFREEZE 0xc
117#define CMD_FREEZE 0xd
118
119#define CMD_AUTO 0xe
120#define CMD_FAN 0xf
121
122#define CMD_HIGH 0x10
123#define CMD_MED 0x11
124#define CMD_LOW 0x12
125
126#define CMD_HEATCOOL 0x13
127#define CMD_HEAT 0x14
128#define CMD_COOL 0x15
129#define CMD_DRY 0x16
130
131#define CMD_RGB 0x17
132#define CMD_HSV 0x18
133#define CMD_RESET 0x19
134
136#define CMD_MASK 0xffUL
138#define FLAG_MASK 0x00ffff00UL
139//#define STATE_MASK 0xff0000
140
141#define CMD_VOID 0
142#define CMD_UNKNOWN -1
143#define CMD_JSON -2
144
145//FLAGS
163
164//#define FLAG_COMMAND 0x100UL
165//#define FLAG_PARAMETERS 0x200UL
166//#define FLAG_FLAGS 0x400UL
167//#define FLAG_SEND_RETRY 0x800UL
168//#define FLAG_SEND_DEFFERED 0x1000UL
169//#define FLAG_SEND_DELAYED 0x2000UL
170//#define FLAG_ACTION_NEEDED 0x4000UL
171//#define FLAG_ACTION_IN_PROCESS 0x8000UL
172//#define FLAG_DISABLED 0x10000UL
173//#define FLAG_FREEZED 0x20000UL
174//#define FLAG_HALTED 0x40000UL
175//#define FLAG_XON 0x80000UL
176
177#define FLAG_DISABLED 0x100UL
178#define FLAG_LOCKED_CMD 0x200UL
179#define FLAG_LOCKED_SET 0x400UL
180#define FLAG_FREEZED 0x600UL
181
182#define FLAG_SEND_DEFFERED 0x800UL
183#define FLAG_COMMAND 0x1000UL
184#define FLAG_PARAMETERS 0x2000UL
185#define FLAG_FLAGS 0x4000UL
186
187#define FLAG_SEND_RETRY 0x8000UL
188
189#define FLAG_ACTION_NEEDED 0x10000UL
190#define FLAG_ACTION_IN_PROCESS 0x20000UL
191#define FLAG_HALTED 0x40000UL
192#define FLAG_XON 0x80000UL
193#define FLAG_SEND_DELAYED 0x100000UL
194
195
196#define FLAG_SEND_IMMEDIATE 0x1UL
197#define FLAG_NOT_SEND_CAN 0x2UL
198
204int txt2cmd (char * payload);
205
206
212#define ST_VOID 0
213#define ST_PERCENTS255 1
214
215#define ST_HSV255 2
216#define ST_HS 3
217
218#define ST_RGB 4
219#define ST_RGBW 5
220
221#define ST_TENS 6
222#define ST_FLOAT 7
223#define ST_FLOAT_CELSIUS 8
224#define ST_FLOAT_FARENHEIT 9
225
226#define ST_INT32 10
227#define ST_UINT32 11
228#define ST_STRING 12
229//#define ST_TIMESTAMP 13 /// Timestamp for delayed cmd execution
230
232#define MAP_SCALE 1
233#define MAP_VAL_CMD 2
234
235#pragma pack(push, 1)
236
244typedef union
245{
246 long int aslong;
247 int32_t asInt32;
248 uint32_t asUint32;
249 struct
250 {
251 uint8_t cmdCode;
252 uint8_t itemArgType:4;
253 uint8_t cmdEffect:4; //Reserve
254 uint8_t suffixCode;
255 uint8_t cmdParam; //Reserve
256 };
258
266typedef union
267{
268 long int aslong;
269 int32_t asInt32;
270 uint32_t asUint32;
271 char* asString;
272 float asfloat;
273
274 struct
275 { uint8_t v;
276 uint8_t s;
277 uint16_t h:9;
278 uint16_t colorTemp:7;
279 };
280 struct
281 { int8_t signed_v;
282 int8_t signed_s;
283 int16_t signed_h:9;
284 int16_t signed_colorTemp:7;
285 };
286 struct //Should be NeoPixel packed Color compatible
287 {
288 uint8_t b;
289 uint8_t g;
290 uint8_t r;
291 uint8_t w;
292 };
294
295class Item;
306{
307public:
312
314 itemCmd(uint8_t _type=ST_VOID, uint8_t _code=CMD_VOID);
316 itemCmd(float val);
318 itemCmd(Item *item);
320 itemCmd(char *cmd);
321
323 itemCmd assignFrom(itemCmd from, short chanType=-1);
324
326 bool loadItem(Item * item, uint16_t optionsFlag=FLAG_PARAMETERS);
328 bool loadItemDef(Item * item, uint16_t optionsFlag=FLAG_PARAMETERS );
330 bool saveItem(Item * item, uint16_t optionsFlag=FLAG_PARAMETERS);
331
333 itemCmd Int(int32_t i);
335 itemCmd uInt(uint32_t i);
337 itemCmd Float(float f);
339 itemCmd Tens(int32_t i);
341 itemCmd Tens_raw(int32_t i);
343 itemCmd Cmd(uint8_t i);
347 itemCmd HSV(uint16_t h, uint8_t s, uint8_t v);
349 itemCmd HSV255(uint16_t h, uint8_t s, uint8_t v);
351 itemCmd HS(uint16_t h, uint8_t s);
353 itemCmd RGB(uint8_t r, uint8_t g, uint8_t b);
355 itemCmd RGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w);
357 itemCmd Str(char * str);
359 bool setH(uint16_t);
361 bool setS(uint8_t);
363 bool setColorTemp(int);
365 int getColorTemp();
367 uint16_t getH();
369 uint16_t getS();
371 itemCmd setArgType(uint8_t);
373 itemCmd convertTo(uint8_t);
375 uint8_t getStoragetypeByChanType(short chanType);
376
378 itemCmd Percents(int i);
380 itemCmd Percents255(int i);
381
383 uint8_t getSuffix();
385 itemCmd setSuffix(uint8_t suffix);
386
388 bool incrementPercents(long int, long int limit);
390 bool incrementH(long int);
392 bool incrementS(long int);
394 bool incrementTemp(long int dif);
395
397 long int getInt();
399 long int getTens();
401 long int getTens_raw();
403 float getFloat();
405 char * getString();
407 long int getSingleInt();
409 short getPercents(bool inverse=false);
411 short getPercents255(bool inverse=false);
413 bool setPercents(int percents);
415 uint8_t getCmd();
417 uint8_t getArgType();
419 uint8_t getCmdParam();
425 char * toString(char * Buffer, int bufLen, int sendFlags = FLAG_COMMAND | FLAG_PARAMETERS, bool scale100 = false);
426
428 bool isCommand();
430 bool isChannelCommand();
432 bool isValue();
434 bool isColor();
435
439 itemCmd setChanType(short chanType);
441 void debugOut();
442
444 itemCmd doMapping(aJsonObject *mappingData);
446 itemCmd doReverseMapping (aJsonObject *mappingData);
448 bool scale100();
449
450 };
451
453int replaceTypeToInt(aJsonObject* verb);
454#pragma pack(pop)
A single LightHub item (virtual channel).
Definition item.h:232
itemCmd RGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
Definition itemCmd.cpp:1119
itemCmd(uint8_t _type=ST_VOID, uint8_t _code=CMD_VOID)
Constructor with definition of type and command.
Definition itemCmd.cpp:61
bool isValue()
Definition itemCmd.cpp:758
bool saveItem(Item *item, uint16_t optionsFlag=FLAG_PARAMETERS)
Definition itemCmd.cpp:1222
void debugOut()
Definition itemCmd.cpp:1622
bool incrementPercents(long int, long int limit)
Definition itemCmd.cpp:338
char * getString()
Definition itemCmd.cpp:850
bool loadItem(Item *item, uint16_t optionsFlag=FLAG_PARAMETERS)
Definition itemCmd.cpp:1161
short getPercents255(bool inverse=false)
Definition itemCmd.cpp:950
uint8_t getCmd()
Definition itemCmd.cpp:975
bool incrementS(long int)
Definition itemCmd.cpp:415
itemCmd uInt(uint32_t i)
Definition itemCmd.cpp:1050
itemCmdStore cmd
Packed command word: code, storage type, suffix.
Definition itemCmd.h:309
bool setColorTemp(int)
Definition itemCmd.cpp:282
itemCmd setArgType(uint8_t)
Definition itemCmd.cpp:985
int getColorTemp()
Definition itemCmd.cpp:311
itemCmd HSV255(uint16_t h, uint8_t s, uint8_t v)
Definition itemCmd.cpp:1088
float getFloat()
Definition itemCmd.cpp:862
itemCmd Percents(int i)
Definition itemCmd.cpp:1008
long int getTens()
Definition itemCmd.cpp:770
itemCmd Tens_raw(int32_t i)
Definition itemCmd.cpp:1071
short getPercents(bool inverse=false)
Definition itemCmd.cpp:898
itemCmd HSV(uint16_t h, uint8_t s, uint8_t v)
Definition itemCmd.cpp:1078
bool setH(uint16_t)
Definition itemCmd.cpp:240
char * toString(char *Buffer, int bufLen, int sendFlags=FLAG_COMMAND|FLAG_PARAMETERS, bool scale100=false)
Definition itemCmd.cpp:1534
itemCmd Cmd(uint8_t i)
Definition itemCmd.cpp:1138
bool loadItemDef(Item *item, uint16_t optionsFlag=FLAG_PARAMETERS)
Definition itemCmd.cpp:1205
itemCmd Tens(int32_t i)
Definition itemCmd.cpp:1064
uint8_t getCmdParam()
Definition itemCmd.cpp:1002
bool isChannelCommand()
Definition itemCmd.cpp:752
itemCmd Percents255(int i)
Definition itemCmd.cpp:1025
itemCmd Int(int32_t i)
Definition itemCmd.cpp:1043
itemCmd RGB(uint8_t r, uint8_t g, uint8_t b)
Definition itemCmd.cpp:1109
bool isColor()
Definition itemCmd.cpp:763
bool scale100()
Definition itemCmd.cpp:1629
itemCmd Float(float f)
Definition itemCmd.cpp:1057
itemCmd setSuffix(uint8_t suffix)
Definition itemCmd.cpp:1155
itemCmd assignFrom(itemCmd from, short chanType=-1)
Definition itemCmd.cpp:450
itemCmd doMapping(aJsonObject *mappingData)
Definition itemCmd.cpp:1326
uint8_t getSuffix()
Definition itemCmd.cpp:1150
itemArgStore param
Packed parameter: number / float / string / color.
Definition itemCmd.h:311
long int getInt()
Definition itemCmd.cpp:822
itemCmd setDefault()
Definition itemCmd.cpp:221
uint16_t getH()
Definition itemCmd.cpp:327
itemCmd convertTo(uint8_t)
Definition itemCmd.cpp:992
itemCmd Str(char *str)
Definition itemCmd.cpp:1130
itemCmd HS(uint16_t h, uint8_t s)
Definition itemCmd.cpp:1099
bool setPercents(int percents)
Definition itemCmd.cpp:927
uint16_t getS()
Definition itemCmd.cpp:332
bool incrementTemp(long int dif)
Definition itemCmd.cpp:432
uint8_t getStoragetypeByChanType(short chanType)
Definition itemCmd.cpp:186
itemCmd doReverseMapping(aJsonObject *mappingData)
Definition itemCmd.cpp:1433
bool incrementH(long int)
Definition itemCmd.cpp:398
bool setS(uint8_t)
Definition itemCmd.cpp:260
bool isCommand()
Definition itemCmd.cpp:747
long int getSingleInt()
Definition itemCmd.cpp:892
itemCmd setChanType(short chanType)
Definition itemCmd.cpp:178
long int getTens_raw()
Definition itemCmd.cpp:795
uint8_t getArgType()
Definition itemCmd.cpp:980
#define b
Definition item.cpp:2411
int txt2cmd(char *payload)
Definition itemCmd.cpp:19
const suffixstr suffix_P[] PROGMEM
Definition item.h:79
int replaceTypeToInt(aJsonObject *verb)
Definition itemCmd.cpp:1301
char cmdstr[10]
Definition itemCmd.h:48
#define ST_VOID
Definition of all possible types of argument, contained in class.
Definition itemCmd.h:212
#define CMD_VOID
Definition itemCmd.h:141
#define FLAG_PARAMETERS
Definition itemCmd.h:184
char ch_type[9]
Definition itemCmd.h:65
#define FLAG_COMMAND
Definition itemCmd.h:183
32-bit parameter storage of itemCmd.
Definition itemCmd.h:267
long int aslong
Definition itemCmd.h:268
char * asString
Definition itemCmd.h:271
uint32_t asUint32
Definition itemCmd.h:270
int32_t asInt32
Definition itemCmd.h:269
float asfloat
Definition itemCmd.h:272
Packed 32-bit command word of itemCmd.
Definition itemCmd.h:245
uint32_t asUint32
Definition itemCmd.h:248
long int aslong
Definition itemCmd.h:246
int32_t asInt32
Definition itemCmd.h:247