mirror of
https://github.com/anklimov/lighthub
synced 2025-12-06 11:49:51 +03:00
remove old stuff, templates for Emit strings
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
export PORT=cu.usbmodem14101
|
export PORT=cu.usbmodem141101
|
||||||
echo . | stty -f /dev/$PORT speed 1200
|
echo . | stty -f /dev/$PORT speed 1200
|
||||||
../tools/mac/tool-bossac/bossac -U false -p $PORT -i -e -w -v -b firmware.bin -R
|
../tools/mac/tool-bossac/bossac -U false -p $PORT -i -w -v -b firmware.bin -R
|
||||||
@@ -11,7 +11,7 @@ public:
|
|||||||
virtual ~abstractCh(){};
|
virtual ~abstractCh(){};
|
||||||
virtual int Poll(short cause) {return 0;}
|
virtual int Poll(short cause) {return 0;}
|
||||||
virtual int Setup() =0; //Should initialize hardware and reserve resources
|
virtual int Setup() =0; //Should initialize hardware and reserve resources
|
||||||
virtual int Anounce () {return 0;};
|
// virtual int Anounce () {return 0;};
|
||||||
virtual int Stop() {return 0;}; //Should free resources
|
virtual int Stop() {return 0;}; //Should free resources
|
||||||
virtual int Status() {return CST_UNKNOWN;}
|
virtual int Status() {return CST_UNKNOWN;}
|
||||||
virtual void setStatus(uint8_t status) {}
|
virtual void setStatus(uint8_t status) {}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public:
|
|||||||
virtual bool isAllowed(itemCmd cmd){return true;};
|
virtual bool isAllowed(itemCmd cmd){return true;};
|
||||||
virtual itemCmd getDefaultOnVal(){return itemCmd().Percents255(255);};
|
virtual itemCmd getDefaultOnVal(){return itemCmd().Percents255(255);};
|
||||||
virtual int getChanType(){return 0;}
|
virtual int getChanType(){return 0;}
|
||||||
virtual int getDefaultStorageType(){return 0;} /// Remove?? Now getChanType used instead
|
// virtual int getDefaultStorageType(){return 0;} /// Remove?? Now getChanType used instead
|
||||||
virtual int Status() override;
|
virtual int Status() override;
|
||||||
virtual void setStatus(uint8_t status) override;
|
virtual void setStatus(uint8_t status) override;
|
||||||
int Setup() override;
|
int Setup() override;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ short colorChannel::getChannelAddr(short n)
|
|||||||
return item->getArg(n);
|
return item->getArg(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
int colorChannel::getDefaultStorageType()
|
int colorChannel::getDefaultStorageType()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ int colorChannel::getDefaultStorageType()
|
|||||||
return ST_VOID;
|
return ST_VOID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
int colorChannel::isActive()
|
int colorChannel::isActive()
|
||||||
{
|
{
|
||||||
itemCmd st;
|
itemCmd st;
|
||||||
@@ -58,7 +58,6 @@ case S_NOTFOUND:
|
|||||||
// turn on and set
|
// turn on and set
|
||||||
toExecute = true;
|
toExecute = true;
|
||||||
case S_SET:
|
case S_SET:
|
||||||
//case S_ESET:
|
|
||||||
case S_HSV:
|
case S_HSV:
|
||||||
PixelCtrl(cmd, subItem, toExecute, authorized);
|
PixelCtrl(cmd, subItem, toExecute, authorized);
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public:
|
|||||||
numArgs = item->getArgCount(); // and how many addresses is configured
|
numArgs = item->getArgCount(); // and how many addresses is configured
|
||||||
};
|
};
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized=false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized=false) override;
|
||||||
int getDefaultStorageType()override;
|
//int getDefaultStorageType()override;
|
||||||
virtual int PixelCtrl(itemCmd cmd, char* subItem=NULL, bool show=true, bool authorized = false ) =0;
|
virtual int PixelCtrl(itemCmd cmd, char* subItem=NULL, bool show=true, bool authorized = false ) =0;
|
||||||
short getChannelAddr(short n =0);
|
short getChannelAddr(short n =0);
|
||||||
// int isActive() override;
|
// int isActive() override;
|
||||||
|
|||||||
@@ -104,8 +104,15 @@ int subitem2cmd(char *payload) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int txt2subItem(char *payload) {
|
int txt2subItem(char *payload) {
|
||||||
int cmd = S_NOTFOUND;
|
|
||||||
if (!payload || !strlen(payload)) return S_NOTFOUND;
|
if (!payload || !strlen(payload)) return S_NOTFOUND;
|
||||||
|
for(uint8_t i=1; i<suffixNum ;i++)
|
||||||
|
if (strncmp_P(payload, suffix_P[i], strlen_P(suffix_P[i])) == 0)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return S_NOTFOUND;
|
||||||
|
/*
|
||||||
|
int cmd = S_NOTFOUND;
|
||||||
// Check for command
|
// Check for command
|
||||||
if (strcmp_P(payload, SET_P) == 0) cmd = S_SET;
|
if (strcmp_P(payload, SET_P) == 0) cmd = S_SET;
|
||||||
else if (strcmp_P(payload, CTRL_P) == 0) cmd = S_CTRL;
|
else if (strcmp_P(payload, CTRL_P) == 0) cmd = S_CTRL;
|
||||||
@@ -120,7 +127,8 @@ int txt2subItem(char *payload) {
|
|||||||
else if (strcmp_P(payload, VAL_P) == 0) cmd = S_VAL;
|
else if (strcmp_P(payload, VAL_P) == 0) cmd = S_VAL;
|
||||||
else if (strcmp_P(payload, DEL_P) == 0) cmd = S_DELAYED;
|
else if (strcmp_P(payload, DEL_P) == 0) cmd = S_DELAYED;
|
||||||
else if (strcmp_P(payload, _RAW_P) == 0) cmd = S_RAW;
|
else if (strcmp_P(payload, _RAW_P) == 0) cmd = S_RAW;
|
||||||
return cmd;
|
return cmd; */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//const short defval[4] = {0, 0, 0, 0}; //Type,Arg,Val,Cmd
|
//const short defval[4] = {0, 0, 0, 0}; //Type,Arg,Val,Cmd
|
||||||
@@ -1801,9 +1809,14 @@ int Item::SendStatus(int sendFlags) {
|
|||||||
|
|
||||||
strncat(addrstr, "/", sizeof(addrstr)-1);
|
strncat(addrstr, "/", sizeof(addrstr)-1);
|
||||||
|
|
||||||
|
// if (sendFlags & FLAG_SEND_DELAYED)
|
||||||
|
// strncat_P(addrstr, DEL_P, sizeof(addrstr)-1);
|
||||||
|
// else strncat_P(addrstr, SET_P, sizeof(addrstr)-1);
|
||||||
|
|
||||||
if (sendFlags & FLAG_SEND_DELAYED)
|
if (sendFlags & FLAG_SEND_DELAYED)
|
||||||
strncat_P(addrstr, DEL_P, sizeof(addrstr)-1);
|
strncat_P(addrstr, suffix_P[S_DELAYED], sizeof(addrstr)-1);
|
||||||
else strncat_P(addrstr, SET_P, sizeof(addrstr)-1);
|
else strncat_P(addrstr, suffix_P[S_SET], sizeof(addrstr)-1);
|
||||||
|
|
||||||
|
|
||||||
// Preparing parameters payload //////////
|
// Preparing parameters payload //////////
|
||||||
switch (st.getArgType()) {
|
switch (st.getArgType()) {
|
||||||
@@ -1872,7 +1885,8 @@ int Item::SendStatus(int sendFlags) {
|
|||||||
strncat(addrstr, subItem, sizeof(addrstr)-1);
|
strncat(addrstr, subItem, sizeof(addrstr)-1);
|
||||||
}
|
}
|
||||||
strncat(addrstr, "/", sizeof(addrstr)-1);
|
strncat(addrstr, "/", sizeof(addrstr)-1);
|
||||||
strncat_P(addrstr, CMD_P, sizeof(addrstr)-1);
|
// strncat_P(addrstr, CMD_P, sizeof(addrstr)-1);
|
||||||
|
strncat_P(addrstr, suffix_P[S_CMD], sizeof(addrstr)-1);
|
||||||
|
|
||||||
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<cmdstr<<endl;
|
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<cmdstr<<endl;
|
||||||
if (mqttClient.connected() && !ethernetIdleCount)
|
if (mqttClient.connected() && !ethernetIdleCount)
|
||||||
@@ -1909,7 +1923,8 @@ int Item::SendStatus(int sendFlags) {
|
|||||||
strncat(addrstr, subItem, sizeof(addrstr)-1);
|
strncat(addrstr, subItem, sizeof(addrstr)-1);
|
||||||
}
|
}
|
||||||
strncat(addrstr, "/", sizeof(addrstr)-1);
|
strncat(addrstr, "/", sizeof(addrstr)-1);
|
||||||
strncat_P(addrstr, CTRL_P, sizeof(addrstr)-1);
|
//strncat_P(addrstr, CTRL_P, sizeof(addrstr)-1);
|
||||||
|
strncat_P(addrstr, suffix_P[S_CTRL], sizeof(addrstr)-1);
|
||||||
|
|
||||||
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<cmdstr<<endl;
|
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<cmdstr<<endl;
|
||||||
if (mqttClient.connected() && !ethernetIdleCount)
|
if (mqttClient.connected() && !ethernetIdleCount)
|
||||||
@@ -2006,38 +2021,6 @@ int Item::checkRetry() {
|
|||||||
return M_CLEAN;
|
return M_CLEAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
bool Item::resumeModbus()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (modbusBusy) return false;
|
|
||||||
bool success = true;
|
|
||||||
|
|
||||||
//debugSerial<<F("Pushing MB: ");
|
|
||||||
configLocked++;
|
|
||||||
if (items) {
|
|
||||||
aJsonObject * item = items->child;
|
|
||||||
while (items && item)
|
|
||||||
if (item->type == aJson_Array && aJson.getArraySize(item)>1) {
|
|
||||||
Item it(item);
|
|
||||||
if (it.isValid()) {
|
|
||||||
|
|
||||||
short res = it.checkModbusRetry();
|
|
||||||
if (res<=0) success = false;
|
|
||||||
|
|
||||||
} //isValid
|
|
||||||
yield();
|
|
||||||
item = item->next;
|
|
||||||
} //if
|
|
||||||
debugSerial<<endl;
|
|
||||||
}
|
|
||||||
configLocked--;
|
|
||||||
if (success) isPendedModbusWrites=false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
//////////////////// Begin of legacy MODBUS code - to be moved in separate module /////////////////////
|
//////////////////// Begin of legacy MODBUS code - to be moved in separate module /////////////////////
|
||||||
|
|
||||||
|
|
||||||
@@ -2409,14 +2392,6 @@ int Item::checkModbusDimmer() {
|
|||||||
uint16_t reg = getArg(MODBUS_CMD_ARG_REG);
|
uint16_t reg = getArg(MODBUS_CMD_ARG_REG);
|
||||||
int _regType = MODBUS_HOLDING_REG_TYPE;
|
int _regType = MODBUS_HOLDING_REG_TYPE;
|
||||||
if (numpar >= (MODBUS_CMD_ARG_REG_TYPE+1)) _regType = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_REG_TYPE)->valueint;
|
if (numpar >= (MODBUS_CMD_ARG_REG_TYPE+1)) _regType = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_REG_TYPE)->valueint;
|
||||||
// short mask = getArg(2);
|
|
||||||
// debugSerial<<F("Modbus polling "));
|
|
||||||
// debugSerial<<addr);
|
|
||||||
// debugSerial<<F("=>"));
|
|
||||||
// debugSerial<<reg, HEX);
|
|
||||||
// debugSerial<<F("(T:"));
|
|
||||||
// debugSerial<<_regType);
|
|
||||||
// debugSerial<<F(")"));
|
|
||||||
|
|
||||||
int data;
|
int data;
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ e-mail anklimov@gmail.com
|
|||||||
#define S_TEMP 12
|
#define S_TEMP 12
|
||||||
#define S_RAW 13
|
#define S_RAW 13
|
||||||
|
|
||||||
|
typedef char suffixstr[5];
|
||||||
|
const suffixstr suffix_P[] PROGMEM =
|
||||||
|
{"","cmd","set","val","del","HSV","RGB","fan","mode","ctrl","hue","sat","temp","raw"};
|
||||||
|
#define suffixNum sizeof(suffix_P)/sizeof(suffixstr)
|
||||||
|
|
||||||
#define S_ADDITIONAL 13
|
#define S_ADDITIONAL 13
|
||||||
|
|
||||||
#define CH_DIMMER 0 //DMX 1-4 ch
|
#define CH_DIMMER 0 //DMX 1-4 ch
|
||||||
@@ -63,16 +68,6 @@ e-mail anklimov@gmail.com
|
|||||||
#define CH_HUMIDIFIER 21
|
#define CH_HUMIDIFIER 21
|
||||||
#define CH_MERCURY 22
|
#define CH_MERCURY 22
|
||||||
|
|
||||||
//#define CHANNEL_TYPES 13
|
|
||||||
|
|
||||||
//static uint32_t pollInterval[CHANNEL_TYPES] = {0,0,0,0,MODB};
|
|
||||||
//static uint32_t nextPollTime[CHANNEL_TYPES] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
|
|
||||||
|
|
||||||
#define CH_WHITE 127//
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define POLLING_SLOW 1
|
#define POLLING_SLOW 1
|
||||||
#define POLLING_FAST 2
|
#define POLLING_FAST 2
|
||||||
#define POLLING_INT 3
|
#define POLLING_INT 3
|
||||||
@@ -157,24 +152,16 @@ class Item
|
|||||||
int VacomSetFan (itemCmd st);
|
int VacomSetFan (itemCmd st);
|
||||||
int VacomSetHeat(itemCmd st);
|
int VacomSetHeat(itemCmd st);
|
||||||
int modbusDimmerSet(itemCmd st);
|
int modbusDimmerSet(itemCmd st);
|
||||||
|
|
||||||
int modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint16_t value);
|
int modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint16_t value);
|
||||||
void mb_fail(int result=0);
|
void mb_fail(int result=0);
|
||||||
void Parse();
|
void Parse();
|
||||||
int checkModbusDimmer();
|
int checkModbusDimmer();
|
||||||
int checkModbusDimmer(int data);
|
int checkModbusDimmer(int data);
|
||||||
|
|
||||||
int checkRetry();
|
int checkRetry();
|
||||||
//boolean checkVCRetry();
|
|
||||||
//boolean checkHeatRetry();
|
|
||||||
void sendDelayedStatus();
|
void sendDelayedStatus();
|
||||||
//bool resumeModbus();
|
|
||||||
|
|
||||||
|
|
||||||
int checkFM();
|
int checkFM();
|
||||||
char defaultSubItem[16];
|
char defaultSubItem[16];
|
||||||
int defaultSuffixCode;
|
int defaultSuffixCode;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef union
|
typedef union
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ debugSerial<<F("Deleting conf. RAM was:")<<freeRam();
|
|||||||
topics = NULL;
|
topics = NULL;
|
||||||
mqttArr = NULL;
|
mqttArr = NULL;
|
||||||
deviceName = NULL;
|
deviceName = NULL;
|
||||||
topics = NULL;
|
|
||||||
#ifdef _dmxout
|
#ifdef _dmxout
|
||||||
dmxArr = NULL;
|
dmxArr = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
int isActive() override;
|
int isActive() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int getDefaultStorageType(){return ST_FLOAT_CELSIUS;};
|
// int getDefaultStorageType(){return ST_FLOAT_CELSIUS;};
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
void SubmitParameters(const char * name, itemCmd value);
|
void SubmitParameters(const char * name, itemCmd value);
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
int getDefaultStorageType(){return ST_INT32;};
|
//int getDefaultStorageType(){return ST_INT32;};
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
int getDefaultStorageType(){return ST_INT32;};
|
//int getDefaultStorageType(){return ST_INT32;};
|
||||||
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
//int isActive() override;
|
//int isActive() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int getDefaultStorageType(){return ST_PERCENTS255;};
|
//int getDefaultStorageType(){return ST_PERCENTS255;};
|
||||||
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
//int isActive() override;
|
//int isActive() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int getDefaultStorageType(){return ST_PERCENTS255;};
|
//int getDefaultStorageType(){return ST_PERCENTS255;};
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
protected:
|
protected:
|
||||||
void getConfig();
|
void getConfig();
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
int isActive() override;
|
int isActive() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int getDefaultStorageType(){return ST_FLOAT;};
|
//int getDefaultStorageType(){return ST_FLOAT;};
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
void alarm(bool);
|
void alarm(bool);
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public:
|
|||||||
int Stop() override;
|
int Stop() override;
|
||||||
int getChanType() override;
|
int getChanType() override;
|
||||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
|
||||||
int getDefaultStorageType(){return ST_INT32;};
|
//int getDefaultStorageType(){return ST_INT32;};
|
||||||
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
0
lighthub/templateStr.cpp
Normal file
0
lighthub/templateStr.cpp
Normal file
106
lighthub/templateStr.h
Normal file
106
lighthub/templateStr.h
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
#ifndef _TEMPLATE_STREAM_H_
|
||||||
|
#define _TEMPLATE_STREAM_H_
|
||||||
|
|
||||||
|
#include <Stream.h>
|
||||||
|
//#define KEYLEN 8
|
||||||
|
extern aJsonObject * topics;
|
||||||
|
|
||||||
|
class templateStream : public Stream
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
templateStream(char *s, short sfx=0) : str(s), pos(0), val(NULL), valpos(0), bucket(0),suffix(sfx) { }
|
||||||
|
|
||||||
|
// Stream methods
|
||||||
|
virtual int available() { return str[pos]; }
|
||||||
|
virtual int read() {
|
||||||
|
if (bucket)
|
||||||
|
|
||||||
|
{ int ch = bucket;
|
||||||
|
bucket=0;
|
||||||
|
return ch;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (str[pos]=='$')
|
||||||
|
{
|
||||||
|
if (str[pos+1]=='{')
|
||||||
|
{
|
||||||
|
unsigned int i = 0;
|
||||||
|
while (str[pos+2+i] && str[pos+2+i]!='}') i++;
|
||||||
|
if (i && (str[pos+2+i]=='}'))
|
||||||
|
{
|
||||||
|
str[pos+2+i]='\0';
|
||||||
|
val=resolveKey(str+pos+2);
|
||||||
|
str[pos+2+i]='}';
|
||||||
|
pos+=3+i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val)
|
||||||
|
{
|
||||||
|
char ch = val[valpos];
|
||||||
|
if (ch)
|
||||||
|
{
|
||||||
|
valpos++;
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
else val = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str)
|
||||||
|
{
|
||||||
|
char ch = str[pos];
|
||||||
|
if (ch)
|
||||||
|
{
|
||||||
|
pos++;
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str=NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual int peek()
|
||||||
|
{
|
||||||
|
int bucket = read();
|
||||||
|
return bucket;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void flush() { };
|
||||||
|
// Print methods
|
||||||
|
virtual size_t write(uint8_t c) { return 0; };
|
||||||
|
virtual char * resolveKey(char *key)
|
||||||
|
{
|
||||||
|
if (topics && topics->type == aJson_Object)
|
||||||
|
{
|
||||||
|
aJsonObject *valObj = aJson.getObjectItem(topics, key);
|
||||||
|
if (valObj->type == aJson_String) return valObj->valuestring;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (suffix && (suffix<=suffixNum) && !strcmp(key,"sfx"))
|
||||||
|
{
|
||||||
|
buffer[0]='/';
|
||||||
|
strncpy_P(buffer+1,suffix_P[suffix],sizeof(buffer)-2);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
char *str;
|
||||||
|
unsigned int pos;
|
||||||
|
char *val;
|
||||||
|
unsigned int valpos;
|
||||||
|
int bucket;
|
||||||
|
short suffix;
|
||||||
|
char buffer[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _TEMPLATE_STREAM_H_
|
||||||
@@ -82,17 +82,29 @@ const char on_P[] PROGMEM = "on";
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define ON_P commands_P[CMD_ON]
|
||||||
|
#define OFF_P commands_P[CMD_OFF]
|
||||||
|
#define REST_P commands_P[CMD_RESTORE]
|
||||||
|
#define TOGGLE_P commands_P[CMD_TOGGLE]
|
||||||
|
#define HALT_P commands_P[CMD_HALT]
|
||||||
|
#define XON_P commands_P[CMD_XON]
|
||||||
|
#define XOFF_P commands_P[CMD_XOFF]
|
||||||
|
#define HEAT_P commands_P[CMD_HEAT]
|
||||||
|
#define COOL_P commands_P[CMD_COOL]
|
||||||
|
#define AUTO_P commands_P[CMD_AUTO]
|
||||||
|
#define FAN_ONLY_P commands_P[CMD_FAN]
|
||||||
|
#define DRY_P commands_P[CMD_DRY]
|
||||||
|
#define HIGH_P commands_P[CMD_HIGH]
|
||||||
|
#define MED_P commands_P[CMD_MED]
|
||||||
|
#define LOW_P commands_P[CMD_LOW]
|
||||||
|
#define ENABLE_P commands_P[CMD_ENABLE]
|
||||||
|
#define DISABLE_P commands_P[CMD_DISABLE]
|
||||||
|
#define FREEZE_P commands_P[CMD_FREEZE]
|
||||||
|
#define UNFREEZE_P commands_P[CMD_UNFREEZE]
|
||||||
|
|
||||||
|
const char ERROR_P[] PROGMEM = "ERR";
|
||||||
|
|
||||||
//Commands
|
//Commands
|
||||||
|
|
||||||
const char ON_P[] PROGMEM = "ON";
|
|
||||||
const char OFF_P[] PROGMEM = "OFF";
|
|
||||||
const char REST_P[] PROGMEM = "REST";
|
|
||||||
const char TOGGLE_P[] PROGMEM = "TOGGLE";
|
|
||||||
const char HALT_P[] PROGMEM = "HALT";
|
|
||||||
const char XON_P[] PROGMEM = "XON";
|
|
||||||
const char XOFF_P[] PROGMEM = "XOFF";
|
|
||||||
/*
|
/*
|
||||||
const char INCREASE_P[] PROGMEM = "INCREASE";
|
const char INCREASE_P[] PROGMEM = "INCREASE";
|
||||||
const char DECREASE_P[] PROGMEM = "DECREASE";
|
const char DECREASE_P[] PROGMEM = "DECREASE";
|
||||||
@@ -102,6 +114,15 @@ const char FALSE_P[] PROGMEM = "FALSE";
|
|||||||
const char ENABLED_P[] PROGMEM = "ENABLED";
|
const char ENABLED_P[] PROGMEM = "ENABLED";
|
||||||
const char DISABLED_P[] PROGMEM = "DISABLED";
|
const char DISABLED_P[] PROGMEM = "DISABLED";
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
const char ON_P[] PROGMEM = "ON";
|
||||||
|
const char OFF_P[] PROGMEM = "OFF";
|
||||||
|
const char REST_P[] PROGMEM = "REST";
|
||||||
|
const char TOGGLE_P[] PROGMEM = "TOGGLE";
|
||||||
|
const char HALT_P[] PROGMEM = "HALT";
|
||||||
|
const char XON_P[] PROGMEM = "XON";
|
||||||
|
const char XOFF_P[] PROGMEM = "XOFF";
|
||||||
const char HEAT_P[] PROGMEM = "HEAT";
|
const char HEAT_P[] PROGMEM = "HEAT";
|
||||||
const char COOL_P[] PROGMEM = "COOL";
|
const char COOL_P[] PROGMEM = "COOL";
|
||||||
const static char AUTO_P[] PROGMEM = "AUTO";
|
const static char AUTO_P[] PROGMEM = "AUTO";
|
||||||
@@ -112,13 +133,15 @@ const char DRY_P[] PROGMEM = "DRY";
|
|||||||
const char HIGH_P[] PROGMEM = "HIGH";
|
const char HIGH_P[] PROGMEM = "HIGH";
|
||||||
const char MED_P[] PROGMEM = "MEDIUM";
|
const char MED_P[] PROGMEM = "MEDIUM";
|
||||||
const char LOW_P[] PROGMEM = "LOW";
|
const char LOW_P[] PROGMEM = "LOW";
|
||||||
const char ERROR_P[] PROGMEM = "ERR";
|
|
||||||
const char ENABLE_P[] PROGMEM = "ENABLE";
|
const char ENABLE_P[] PROGMEM = "ENABLE";
|
||||||
const char DISABLE_P[] PROGMEM = "DISABLE";
|
const char DISABLE_P[] PROGMEM = "DISABLE";
|
||||||
const char FREEZE_P[] PROGMEM = "FREEZE";
|
const char FREEZE_P[] PROGMEM = "FREEZE";
|
||||||
const char UNFREEZE_P[] PROGMEM = "UNFREEZE";
|
const char UNFREEZE_P[] PROGMEM = "UNFREEZE";
|
||||||
|
*/
|
||||||
|
|
||||||
// SubTopics
|
// SubTopics
|
||||||
|
/*
|
||||||
const char SET_P[] PROGMEM = "set";
|
const char SET_P[] PROGMEM = "set";
|
||||||
const char CMD_P[] PROGMEM = "cmd";
|
const char CMD_P[] PROGMEM = "cmd";
|
||||||
const char MODE_P[] PROGMEM = "mode";
|
const char MODE_P[] PROGMEM = "mode";
|
||||||
@@ -132,7 +155,7 @@ const char VAL_P[] PROGMEM = "val";
|
|||||||
const char DEL_P[] PROGMEM = "del";
|
const char DEL_P[] PROGMEM = "del";
|
||||||
const char _RAW_P[] PROGMEM = "raw";
|
const char _RAW_P[] PROGMEM = "raw";
|
||||||
const char CTRL_P[] PROGMEM = "ctrl";
|
const char CTRL_P[] PROGMEM = "ctrl";
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
const char RPM_P[] PROGMEM = "rpm";
|
const char RPM_P[] PROGMEM = "rpm";
|
||||||
const char STATE_P[] PROGMEM = "state";
|
const char STATE_P[] PROGMEM = "state";
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ e-mail anklimov@gmail.com
|
|||||||
#include "item.h"
|
#include "item.h"
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
#include <HardwareSerial.h>
|
#include <HardwareSerial.h>
|
||||||
|
#include "templateStr.h"
|
||||||
|
|
||||||
#ifdef CRYPT
|
#ifdef CRYPT
|
||||||
#include "SHA256.h"
|
#include "SHA256.h"
|
||||||
@@ -690,8 +691,17 @@ switch (cmdType)
|
|||||||
//else itemCommand = _itemCmd.toString(Buffer,sizeof(Buffer));
|
//else itemCommand = _itemCmd.toString(Buffer,sizeof(Buffer));
|
||||||
|
|
||||||
char * emitCommand;
|
char * emitCommand;
|
||||||
|
short suffix=0;
|
||||||
|
// aJsonObject * dict=NULL;
|
||||||
|
|
||||||
if(ecmd && ecmd->type == aJson_String) emitCommand = ecmd->valuestring;
|
if(ecmd && ecmd->type == aJson_String) emitCommand = ecmd->valuestring;
|
||||||
else emitCommand = _itemCmd.toString(Buffer,sizeof(Buffer));
|
else
|
||||||
|
{
|
||||||
|
emitCommand = _itemCmd.toString(Buffer,sizeof(Buffer));
|
||||||
|
// dict = aJson.createObject();
|
||||||
|
// aJson.addStringToObject(dict, "sfx", )
|
||||||
|
suffix=_itemCmd.getSuffix();
|
||||||
|
}
|
||||||
|
|
||||||
//debugSerial << F("IN:") << (pin) << F(" : ") <<endl;
|
//debugSerial << F("IN:") << (pin) << F(" : ") <<endl;
|
||||||
if (item) {
|
if (item) {
|
||||||
@@ -705,7 +715,12 @@ switch (cmdType)
|
|||||||
|
|
||||||
|
|
||||||
if (emit && emitCommand && emit->type == aJson_String) {
|
if (emit && emitCommand && emit->type == aJson_String) {
|
||||||
debugSerial << F("Emit: ")<<emit->valuestring<< F(" -> ")<<emitCommand<<endl;
|
|
||||||
|
templateStream ts(emit->valuestring,suffix);
|
||||||
|
char addrstr[MQTT_TOPIC_LENGTH];
|
||||||
|
//ts.setTimeout(0);
|
||||||
|
addrstr[ts.readBytesUntil('\0',addrstr,sizeof(addrstr))]='\0';
|
||||||
|
debugSerial << F("Emit: ")<<emit->valuestring<<" "<<addrstr<< F(" -> ")<<emitCommand<<endl;
|
||||||
/*
|
/*
|
||||||
TODO implement
|
TODO implement
|
||||||
#ifdef WITH_DOMOTICZ
|
#ifdef WITH_DOMOTICZ
|
||||||
@@ -720,8 +735,8 @@ switch (cmdType)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
char addrstr[MQTT_TOPIC_LENGTH];
|
|
||||||
strncpy(addrstr,emit->valuestring,sizeof(addrstr));
|
//strncpy(addrstr,emit->valuestring,sizeof(addrstr));
|
||||||
if (mqttClient.connected() && !ethernetIdleCount)
|
if (mqttClient.connected() && !ethernetIdleCount)
|
||||||
{
|
{
|
||||||
if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestring);
|
if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestring);
|
||||||
@@ -916,5 +931,8 @@ if (oneWire && oneWire->checkPresence())
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma message(VAR_NAME_VALUE(debugSerial))
|
#pragma message(VAR_NAME_VALUE(debugSerial))
|
||||||
#pragma message(VAR_NAME_VALUE(SERIAL_BAUD))
|
#pragma message(VAR_NAME_VALUE(SERIAL_BAUD))
|
||||||
|
|||||||
Reference in New Issue
Block a user