LightHub
item.h
Go to the documentation of this file.
1 /* Copyright © 2017-2020 Andrey Klimov. All rights reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7  http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 
15 Homepage: http://lazyhome.ru
16 GIT: https://github.com/anklimov/lighthub
17 e-mail anklimov@gmail.com
18 
19 */
20 #pragma once
21 #include "options.h"
22 #include "abstractout.h"
23 #include "itemCmd.h"
24 
25 #define S_NOTFOUND 0
26 //#define S_SETnCMD 0
27 #define S_CMD 1
28 #define S_SET 2
29 #define S_HSV 3
30 #define S_RGB 4
31 #define S_FAN 5
32 #define S_MODE 6
33 #define S_HUE 7
34 #define S_SAT 8
35 #define S_TEMP 9
36 #define S_ADDITIONAL 9
37 
38 #define CH_DIMMER 0 //DMX 1 ch
39 #define CH_RGBW 1 //DMX 4 ch
40 #define CH_RGB 2 //DMX 3 ch
41 #define CH_PWM 3 //PWM output directly to PIN
42 #define CH_MODBUS 4 //Modbus AC Dimmer
43 #define CH_THERMO 5 //Simple ON/OFF thermostat
44 #define CH_RELAY 6 //ON_OFF relay output
45 #define CH_GROUP 7 //Group pseudochannel
46 #define CH_VCTEMP 8 //Vacom PID regulator
47 #define CH_VC 9 //Vacom modbus motor regulator
48 #define CH_AC 10 //AC Haier
49 #define CH_SPILED 11
50 #define CH_MOTOR 12
51 #define CH_MBUS 14
52 //#define CHANNEL_TYPES 13
53 
54 //static uint32_t pollInterval[CHANNEL_TYPES] = {0,0,0,0,MODB};
55 //static uint32_t nextPollTime[CHANNEL_TYPES] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
56 
57 #define CH_WHITE 127//
58 
59 
60 
61 
62 #define POLLING_SLOW 1
63 #define POLLING_FAST 2
64 #define POLLING_INT 3
65 
66 
67 #define I_TYPE 0 //Type of item
68 #define I_ARG 1 //Chanel-type depended argument or array of arguments (pin, address etc)
69 #define I_VAL 2 //Latest preset (int or array of presets)
70 #define I_CMD 3 //Latest CMD received
71 #define I_EXT 4 //Chanell-depended extension - array
72 
73 #define MODBUS_CMD_ARG_ADDR 0
74 #define MODBUS_CMD_ARG_REG 1
75 #define MODBUS_CMD_ARG_MASK 2
76 #define MODBUS_CMD_ARG_MAX_SCALE 3
77 #define MODBUS_CMD_ARG_REG_TYPE 4
78 
79 #define MODBUS_COIL_REG_TYPE 0
80 #define MODBUS_DISCRETE_REG_TYPE 1
81 #define MODBUS_HOLDING_REG_TYPE 2
82 #define MODBUS_INPUT_REG_TYPE 3
83 
84 #include "aJSON.h"
85 
86 extern aJsonObject *items;
87 extern short thermoSetCurTemp(char *name, float t);
88 
89 int txt2cmd (char * payload);
90 
91 class Item
92 {
93  public:
94  aJsonObject *itemArr, *itemArg,*itemVal,*itemExt;
95  uint8_t itemType;
97 
98  Item(char * name);
99  Item(aJsonObject * obj);
100  ~Item();
101 
102  boolean isValid ();
103  boolean Setup();
104  void Stop();
105  //int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL);
106  int Ctrl(itemCmd cmd, char* subItem=NULL);
107  int Ctrl(char * payload, char * subItem=NULL);
108 
109  int getArg(short n=0);
110  short getArgCount();
111  //int getVal(short n); //From VAL array. Negative if no array
112  long int getVal(); //From int val OR array
113  uint8_t getSubtype();
114  uint8_t getCmd();
115  long int getExt(); //From int val OR array
116  void setExt(long int par);
119  void setCmd(uint8_t cmdValue);
120  short getFlag (short flag=FLAG_MASK);
121  void setFlag (short flag);
122  void clearFlag (short flag);
123  void setVal(long int par);
124  void setSubtype(uint8_t par);
125  int Poll(int cause);
126  int SendStatus(int sendFlags);
127  int isActive();
128  int getChanType();
129  inline int On (){return Ctrl(itemCmd(ST_VOID,CMD_ON));};
130  inline int Off(){return Ctrl(itemCmd(ST_VOID,CMD_OFF));};
131  inline int Toggle(){return Ctrl(itemCmd(ST_VOID,CMD_TOGGLE));};
132 
133  protected:
134  //short cmd2changeActivity(int lastActivity, short defaultCmd = CMD_SET);
135  int VacomSetFan (itemCmd st);
136  int VacomSetHeat(itemCmd st);
137  int modbusDimmerSet(itemCmd st);
138 
139  int modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint16_t value);
140  void mb_fail();
141  void Parse();
142  int checkModbusDimmer();
143  int checkModbusDimmer(int data);
144  boolean checkModbusRetry();
145  boolean checkVCRetry();
146  boolean checkHeatRetry();
147  void sendDelayedStatus();
148 
149  int checkFM();
150  char defaultSubItem[10];
152 
153 };
Item::setCmd
void setCmd(uint8_t cmdValue)
Definition: item.cpp:242
Item::checkModbusRetry
boolean checkModbusRetry()
Definition: item.cpp:1294
Item::isValid
boolean isValid()
Definition: item.cpp:410
Item::getSubtype
uint8_t getSubtype()
Definition: item.cpp:324
Item::isActive
int isActive()
Definition: item.cpp:866
Item::Toggle
int Toggle()
Definition: item.h:131
itemCmd.h
itemCmd
Definition: itemCmd.h:174
Item::getArg
int getArg(short n=0)
Definition: item.cpp:283
ST_VOID
#define ST_VOID
Definition: itemCmd.h:98
Item::setPersistent
chPersistent * setPersistent(chPersistent *par)
Definition: item.cpp:393
chPersistent
Definition: abstractout.h:7
Item::~Item
~Item()
Definition: item.cpp:195
Item::setExt
void setExt(long int par)
Definition: item.cpp:371
Item::Parse
void Parse()
Definition: item.cpp:117
Item::getVal
long int getVal()
Definition: item.cpp:313
Item::Off
int Off()
Definition: item.h:130
FLAG_MASK
#define FLAG_MASK
Definition: itemCmd.h:60
options.h
abstractOut
Definition: abstractout.h:8
Item::SendStatus
int SendStatus(int sendFlags)
Definition: item.cpp:1497
items
aJsonObject * items
Definition: main.cpp:140
Item::getChanType
int getChanType()
Definition: item.cpp:1663
Item::clearFlag
void clearFlag(short flag)
Definition: item.cpp:272
Item::defaultSubItem
char defaultSubItem[10]
Definition: item.h:150
CMD_OFF
#define CMD_OFF
Definition: itemCmd.h:35
Item::Setup
boolean Setup()
Definition: item.cpp:174
Item::modbusDimmerSet
int modbusDimmerSet(itemCmd st)
Definition: item.cpp:1015
Item::setSubtype
void setSubtype(uint8_t par)
Definition: item.cpp:353
CMD_TOGGLE
#define CMD_TOGGLE
Definition: itemCmd.h:37
Item::defaultSuffixCode
int defaultSuffixCode
Definition: item.h:151
Item::getCmd
uint8_t getCmd()
Definition: item.cpp:234
Item::Stop
void Stop()
Definition: item.cpp:186
Item::checkModbusDimmer
int checkModbusDimmer()
Definition: item.cpp:1336
Item::itemType
uint8_t itemType
Definition: item.h:95
Item::Ctrl
int Ctrl(itemCmd cmd, char *subItem=NULL)
Definition: item.cpp:542
txt2cmd
int txt2cmd(char *payload)
Definition: itemCmd.cpp:13
Item::getPersistent
chPersistent * getPersistent()
Definition: item.cpp:386
CMD_ON
#define CMD_ON
Definition: itemCmd.h:34
Item::itemVal
aJsonObject * itemVal
Definition: item.h:94
Item::checkFM
int checkFM()
Definition: item.cpp:1188
Item::itemExt
aJsonObject * itemExt
Definition: item.h:94
Item::sendDelayedStatus
void sendDelayedStatus()
Definition: item.cpp:1486
thermoSetCurTemp
short thermoSetCurTemp(char *name, float t)
Definition: main.cpp:2151
Item
Definition: item.h:92
Item::itemArg
aJsonObject * itemArg
Definition: item.h:94
Item::getFlag
short getFlag(short flag=FLAG_MASK)
Definition: item.cpp:251
abstractout.h
Item::On
int On()
Definition: item.h:129
Item::VacomSetHeat
int VacomSetHeat(itemCmd st)
move to float todo
Definition: item.cpp:1100
Item::checkHeatRetry
boolean checkHeatRetry()
Definition: item.cpp:1322
Item::VacomSetFan
int VacomSetFan(itemCmd st)
Definition: item.cpp:1055
data
byte data[37]
Definition: out_ac.cpp:31
Item::setFlag
void setFlag(short flag)
Definition: item.cpp:261
Item::driver
abstractOut * driver
Definition: item.h:96
Item::Poll
int Poll(int cause)
Definition: item.cpp:1442
Item::setVal
void setVal(long int par)
Definition: item.cpp:346
Item::checkVCRetry
boolean checkVCRetry()
Definition: item.cpp:1308
Item::getExt
long int getExt()
Definition: item.cpp:360
Item::Item
Item(char *name)
Definition: item.cpp:204
Item::mb_fail
void mb_fail()
Definition: item.cpp:1045
Item::getArgCount
short getArgCount()
Definition: item.cpp:293
Item::itemArr
aJsonObject * itemArr
Definition: item.h:94