mirror of
https://github.com/anklimov/lighthub
synced 2025-12-11 22:29:51 +03:00
MASSIVE refactoring. /set scale changed 100 -> 255
This commit is contained in:
23
lighthub/abstractout.cpp
Normal file
23
lighthub/abstractout.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
#include "item.h"
|
||||
#include "abstractout.h"
|
||||
#include "itemCmd.h"
|
||||
int abstractOut::isActive()
|
||||
|
||||
{itemCmd st;
|
||||
switch (item->getCmd())
|
||||
{
|
||||
case CMD_OFF:
|
||||
case CMD_HALT:
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
st.loadItem(item);
|
||||
return st.getPercents255();
|
||||
}
|
||||
};
|
||||
|
||||
int abstractOut::Setup()
|
||||
{
|
||||
if (item) item->setCmd(CMD_OFF);
|
||||
}
|
||||
@@ -9,10 +9,11 @@ class abstractOut : public abstractCh{
|
||||
public:
|
||||
abstractOut(Item * _item):abstractCh(){item=_item;};
|
||||
virtual int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true) =0;
|
||||
virtual int isActive(){return 0;};
|
||||
virtual itemCmd getDefaultOnVal(){return itemCmd(ST_PERCENTS,CMD_VOID).Percents(100);};
|
||||
virtual int isActive();
|
||||
virtual itemCmd getDefaultOnVal(){return itemCmd().Percents255(255);};
|
||||
virtual int getChanType(){return 0;}
|
||||
virtual int getDefaultStorageType(){return ST_PERCENTS;}
|
||||
virtual int getDefaultStorageType(){return ST_PERCENTS255;} /// Remove?? Now getChanType used instead
|
||||
int Setup() override;
|
||||
protected:
|
||||
Item * item;
|
||||
};
|
||||
|
||||
@@ -16,6 +16,23 @@ short colorChannel::getChannelAddr(short n)
|
||||
return item->getArg(n);
|
||||
}
|
||||
|
||||
|
||||
int colorChannel::getDefaultStorageType()
|
||||
{
|
||||
|
||||
if (item)
|
||||
switch (numArgs)
|
||||
{
|
||||
case 3:
|
||||
case 4:
|
||||
return ST_HSV255;
|
||||
case 1:
|
||||
return ST_PERCENTS255;
|
||||
}
|
||||
return ST_VOID;
|
||||
}
|
||||
|
||||
/*
|
||||
int colorChannel::isActive()
|
||||
{
|
||||
itemCmd st;
|
||||
@@ -24,6 +41,7 @@ int val = st.getInt();
|
||||
debugSerial<< F(" val:")<<val<<endl;
|
||||
return val;
|
||||
}
|
||||
*/
|
||||
|
||||
int colorChannel::Ctrl(itemCmd cmd, char* subItem, bool toExecute)
|
||||
{
|
||||
@@ -39,7 +57,7 @@ case S_NOTFOUND:
|
||||
// turn on and set
|
||||
toExecute = true;
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
//case S_ESET:
|
||||
case S_HSV:
|
||||
PixelCtrl(cmd, subItem, toExecute);
|
||||
return 1;
|
||||
|
||||
@@ -15,9 +15,10 @@ public:
|
||||
numArgs = item->getArgCount(); // and how many addresses is configured
|
||||
};
|
||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true) override;
|
||||
int getDefaultStorageType()override;
|
||||
virtual int PixelCtrl(itemCmd cmd, char* subItem=NULL, bool show=true ) =0;
|
||||
short getChannelAddr(short n =0);
|
||||
int isActive() override;
|
||||
// int isActive() override;
|
||||
protected:
|
||||
short iaddr;
|
||||
short numArgs;
|
||||
|
||||
@@ -89,7 +89,7 @@ int txt2subItem(char *payload) {
|
||||
if (!payload || !strlen(payload)) return S_NOTFOUND;
|
||||
// Check for command
|
||||
if (strcmp_P(payload, SET_P) == 0) cmd = S_SET;
|
||||
else if (strcmp_P(payload, ESET_P) == 0) cmd = S_ESET;
|
||||
//else if (strcmp_P(payload, ESET_P) == 0) cmd = S_ESET;
|
||||
else if (strcmp_P(payload, CMD_P) == 0) cmd = S_CMD;
|
||||
else if (strcmp_P(payload, MODE_P) == 0) cmd = S_MODE;
|
||||
else if (strcmp_P(payload, HSV_P) == 0) cmd = S_HSV;
|
||||
@@ -476,12 +476,11 @@ int cmd = txt2cmd(payload);
|
||||
debugSerial<<F("Txt2Cmd:")<<cmd<<endl;
|
||||
|
||||
itemCmd st(ST_VOID,cmd);
|
||||
bool set255flag=false;
|
||||
bool set255flag=true;
|
||||
|
||||
switch (suffixCode) {
|
||||
case S_ESET:
|
||||
set255flag=true;
|
||||
suffixCode=S_SET;
|
||||
case S_NOTFOUND:
|
||||
set255flag=false;
|
||||
break;
|
||||
case S_HSV:
|
||||
cmd=CMD_HSV;
|
||||
@@ -526,10 +525,9 @@ st.setSuffix(suffixCode);
|
||||
default:
|
||||
switch (i) //Number of params
|
||||
{
|
||||
case 1: st=Par0;
|
||||
//if (set255flag)
|
||||
// st.Percents255(Par[0]);
|
||||
//else st.Percents(Par[0]); //ToDo float
|
||||
case 1:
|
||||
if (set255flag) st=Par0;
|
||||
else st.Percents(Par0.getInt());
|
||||
break;
|
||||
case 2: st.HS(Par0.getInt(),Par[0]);
|
||||
break;
|
||||
@@ -581,6 +579,7 @@ st.setSuffix(suffixCode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
{
|
||||
//char stringBuffer[16];
|
||||
@@ -702,15 +701,16 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
case S_NOTFOUND:
|
||||
toExecute=true;
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
// case S_ESET:
|
||||
if (st.incrementPercents(step))
|
||||
{
|
||||
st.saveItem(this);
|
||||
SendStatus(SEND_PARAMETERS | SEND_DEFFERED);
|
||||
}
|
||||
break;
|
||||
|
||||
case S_HUE:
|
||||
if (cmd.isColor()) st.convertTo(ST_HSV);//Extend storage for color channel
|
||||
if (cmd.isColor()) st.convertTo(ST_HSV255);//Extend storage for color channel
|
||||
if (st.incrementH(step))
|
||||
{
|
||||
st.setSuffix(S_SET);
|
||||
@@ -719,12 +719,13 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
}
|
||||
break;
|
||||
case S_SAT:
|
||||
if (cmd.isColor()) st.convertTo(ST_HSV);//Extend storage for color channel
|
||||
if (cmd.isColor()) st.convertTo(ST_HSV255);//Extend storage for color channel
|
||||
if (st.incrementS(step))
|
||||
{
|
||||
st.setSuffix(S_SET);
|
||||
st.saveItem(this);
|
||||
SendStatus(SEND_PARAMETERS | SEND_DEFFERED);
|
||||
|
||||
}
|
||||
} //switch suffix
|
||||
|
||||
@@ -736,7 +737,7 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
//// if ( cType == CH_RGB || cType == CH_RGBW || cType == CH_GROUP )
|
||||
switch (suffixCode)
|
||||
{
|
||||
case S_NOTFOUND: //For empty (universal) suffix - turn ON/OFF automatically
|
||||
case S_NOTFOUND: //For empty (universal) OPENHAB suffix - turn ON/OFF automatically
|
||||
toExecute=true;
|
||||
if (chActive>0 && !cmd.getInt()) st.Cmd(CMD_OFF);
|
||||
if (chActive==0 && cmd.getInt()) st.Cmd(CMD_ON);
|
||||
@@ -745,13 +746,16 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
|
||||
// continue processing as SET
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
// case S_ESET:
|
||||
// if previous color was in RGB notation but new value is HSV - discard previous val and change type;
|
||||
if ((st.getArgType() == ST_RGB || st.getArgType() == ST_RGBW) &&
|
||||
(cmd.getArgType() == ST_HSV ) || (cmd.getArgType() == ST_HSV255))
|
||||
/*(cmd.getArgType() == ST_HSV ) || */(cmd.getArgType() == ST_HSV255))
|
||||
st.setArgType(cmd.getArgType());
|
||||
|
||||
if (itemType == CH_GROUP && cmd.isColor()) st.setArgType(ST_HSV);//Extend storage for group channel
|
||||
st.assignFrom(cmd);
|
||||
if (itemType == CH_GROUP && cmd.isColor()) st.setArgType(ST_HSV255);//Extend storage for group channel
|
||||
|
||||
//Convert value to most approptiate type for channel
|
||||
st.assignFrom(cmd,getChanType());
|
||||
st.saveItem(this);
|
||||
SendStatus(SEND_PARAMETERS | SEND_DEFFERED);
|
||||
|
||||
@@ -761,7 +765,7 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
break;
|
||||
|
||||
case S_SAT:
|
||||
if (cmd.isColor()) st.convertTo(ST_HSV);//Extend storage for color channel
|
||||
//if (cmd.isColor()) st.convertTo(ST_HSV255);//Extend storage for color channel
|
||||
if (st.setS(cmd.getS()))
|
||||
{
|
||||
st.setSuffix(S_SET);
|
||||
@@ -771,7 +775,7 @@ int Item::Ctrl(itemCmd cmd, char* subItem)
|
||||
break;
|
||||
|
||||
case S_HUE:
|
||||
if (cmd.isColor()) st.convertTo(ST_HSV);//Extend storage for color channel
|
||||
//if (cmd.isColor()) st.convertTo(ST_HSV255);//Extend storage for color channel
|
||||
if (st.setH(cmd.getH()))
|
||||
{
|
||||
st.setSuffix(S_SET);
|
||||
@@ -823,7 +827,7 @@ if (driver) //New style modular code
|
||||
SendStatus(SEND_COMMAND);
|
||||
return res;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
debugSerial<<F("Already Inactive\n");
|
||||
return -3;
|
||||
@@ -933,7 +937,7 @@ switch (itemType) {
|
||||
}
|
||||
break;
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
// case S_ESET:
|
||||
st.saveItem(this);
|
||||
break;
|
||||
}
|
||||
@@ -983,7 +987,7 @@ if (active) debugSerial<<F(" active ");
|
||||
}
|
||||
|
||||
int Item::isActive() {
|
||||
itemArgStore st;
|
||||
itemCmd st;
|
||||
int val = 0;
|
||||
|
||||
|
||||
@@ -1020,7 +1024,7 @@ int Item::isActive() {
|
||||
return active;
|
||||
}
|
||||
// No driver - check value
|
||||
st.aslong = getVal();
|
||||
st.loadItem(this);
|
||||
|
||||
switch (itemType) {
|
||||
case CH_GROUP: //make recursive calculation - is it some active in group
|
||||
@@ -1045,19 +1049,20 @@ int Item::isActive() {
|
||||
break;
|
||||
|
||||
|
||||
case CH_RGBW:
|
||||
case CH_RGB:
|
||||
|
||||
|
||||
val = st.v; //Light volume
|
||||
break;
|
||||
|
||||
case CH_DIMMER: //Legacy channels
|
||||
//case CH_RGBW:
|
||||
//case CH_RGB:
|
||||
//case CH_DIMMER: //Legacy channels
|
||||
case CH_MODBUS:
|
||||
case CH_VC:
|
||||
|
||||
|
||||
val = st.getPercents255(); //Light volume
|
||||
break;
|
||||
|
||||
|
||||
case CH_VCTEMP:
|
||||
case CH_PWM:
|
||||
val = st.aslong;
|
||||
val = st.getInt();
|
||||
break;
|
||||
default:
|
||||
debugSerial<<F(" unknown\n");
|
||||
@@ -1159,8 +1164,9 @@ int Item::VacomSetFan(itemCmd st) {
|
||||
int addr = getArg();
|
||||
debugSerial<<F("VC#")<<addr<<F("=")<<val<<endl;
|
||||
if (modbusBusy) {
|
||||
setCmd(cmd);
|
||||
setVal(val);
|
||||
// setCmd(cmd);
|
||||
// setVal(val);
|
||||
st.saveItem(this,true);
|
||||
mb_fail();
|
||||
return 0;
|
||||
}
|
||||
@@ -1203,8 +1209,9 @@ int addr;
|
||||
|
||||
debugSerial<<F("VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<endl;
|
||||
if (modbusBusy) {
|
||||
setCmd(cmd);
|
||||
setVal(val);
|
||||
//setCmd(cmd);
|
||||
//setVal(val);
|
||||
st.saveItem(this,true);
|
||||
mb_fail();
|
||||
return 0;
|
||||
}
|
||||
@@ -1330,7 +1337,7 @@ int Item::checkFM() {
|
||||
Item item(airGateObj->valuestring);
|
||||
if (item.isValid())
|
||||
// item.Ctrl(0, 1, &val);
|
||||
item.Ctrl(itemCmd(ST_PERCENTS,CMD_VOID).Percents(val));
|
||||
item.Ctrl(itemCmd().Percents(val));
|
||||
}
|
||||
}
|
||||
} else
|
||||
@@ -1500,8 +1507,10 @@ return 1;
|
||||
|
||||
int Item::checkModbusDimmer(int data) {
|
||||
short mask = getArg(2);
|
||||
itemCmd st;
|
||||
|
||||
if (mask < 0) return 0;
|
||||
|
||||
st.loadItem(this);
|
||||
short maxVal = getArg(3);
|
||||
if (maxVal<=0) maxVal = 0x3f;
|
||||
|
||||
@@ -1509,15 +1518,17 @@ int Item::checkModbusDimmer(int data) {
|
||||
if (mask == 1) d >>= 8;
|
||||
if (mask == 0 || mask == 1) d &= 0xff;
|
||||
|
||||
if (maxVal) d = map(d, 0, maxVal, 0, 100);
|
||||
if (maxVal) d = map(d, 0, maxVal, 0, 255);
|
||||
|
||||
int cmd = getCmd();
|
||||
//debugSerial<<d);
|
||||
if (getVal() != d || d && cmd == CMD_OFF || d && cmd == CMD_HALT) //volume changed or turned on manualy
|
||||
if (st.getPercents255() != d || d && cmd == CMD_OFF || d && cmd == CMD_HALT) //volume changed or turned on manualy
|
||||
{
|
||||
if (d) { // Actually turned on
|
||||
if (cmd != CMD_XON && cmd != CMD_ON) setCmd(CMD_ON); //store command
|
||||
setVal(d); //store value
|
||||
st.Percents255(d);
|
||||
st.saveItem(this);
|
||||
//setVal(d); //store value
|
||||
if (cmd == CMD_OFF || cmd == CMD_HALT) SendStatus(SEND_COMMAND); //update OH with ON if it was turned off before
|
||||
SendStatus(SEND_PARAMETERS); //update OH with value
|
||||
} else {
|
||||
@@ -1608,21 +1619,6 @@ int Item::SendStatus(int sendFlags) {
|
||||
char valstr[20] = "";
|
||||
char cmdstr[8] = "";
|
||||
|
||||
if (sendFlags & SEND_PARAMETERS)
|
||||
{
|
||||
// Preparing parameters payload //////////
|
||||
switch (st.getArgType()) {
|
||||
case ST_RGB:
|
||||
case ST_RGBW:
|
||||
//valstr[0]='#';
|
||||
st.Cmd(CMD_RGB);
|
||||
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS|SEND_COMMAND);
|
||||
break;
|
||||
default:
|
||||
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS);
|
||||
}
|
||||
}
|
||||
|
||||
if (sendFlags & SEND_COMMAND)
|
||||
{
|
||||
// Preparing Command payload //////////////
|
||||
@@ -1648,32 +1644,43 @@ int Item::SendStatus(int sendFlags) {
|
||||
sendFlags &= ~SEND_COMMAND;
|
||||
}
|
||||
}
|
||||
if (st.getArgType()!=ST_RGB && st.getArgType()!=ST_RGBW) {
|
||||
//publish to MQTT - OpenHab Legacy style to myhome/s_out/item flat values
|
||||
setTopic(addrstr,sizeof(addrstr),T_OUT);
|
||||
strncat(addrstr, itemArr->name, sizeof(addrstr)-1);
|
||||
// publish to MQTT - OpenHab Legacy style to
|
||||
// myhome/s_out/item - mix: value and command
|
||||
// send only for OH bus supported types
|
||||
|
||||
if (mqttClient.connected() && !ethernetIdleCount)
|
||||
{
|
||||
if (sendFlags & SEND_PARAMETERS && st.getCmd() != CMD_OFF && st.getCmd() != CMD_HALT)
|
||||
{
|
||||
mqttClient.publish(addrstr, valstr, true);
|
||||
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<valstr<<endl;
|
||||
switch (st.getArgType())
|
||||
{
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
case ST_FLOAT_CELSIUS:
|
||||
|
||||
}
|
||||
if (mqttClient.connected() && !ethernetIdleCount)
|
||||
{
|
||||
|
||||
setTopic(addrstr,sizeof(addrstr),T_OUT);
|
||||
strncat(addrstr, itemArr->name, sizeof(addrstr)-1);
|
||||
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS,100);
|
||||
|
||||
if (sendFlags & SEND_PARAMETERS && st.getCmd() != CMD_OFF && st.getCmd() != CMD_HALT)
|
||||
{
|
||||
mqttClient.publish(addrstr, valstr, true);
|
||||
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<valstr<<endl;
|
||||
}
|
||||
else if (sendFlags & SEND_COMMAND)
|
||||
{
|
||||
mqttClient.publish(addrstr, cmdstr, true);
|
||||
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<cmdstr<<endl;
|
||||
{
|
||||
mqttClient.publish(addrstr, cmdstr, true);
|
||||
debugSerial<<F("Pub: ")<<addrstr<<F("->")<<cmdstr<<endl;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setFlag(sendFlags);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// publush to MQTT - New style to
|
||||
// myhome/s_out/item/cmd
|
||||
// myhome/s_out/item/set
|
||||
@@ -1683,16 +1690,28 @@ int Item::SendStatus(int sendFlags) {
|
||||
setTopic(addrstr,sizeof(addrstr),T_OUT);
|
||||
strncat(addrstr, itemArr->name, sizeof(addrstr)-1);
|
||||
strncat(addrstr, "/", sizeof(addrstr));
|
||||
|
||||
// Preparing parameters payload //////////
|
||||
switch (st.getArgType()) {
|
||||
case ST_RGB:
|
||||
case ST_RGBW:
|
||||
//valstr[0]='#';
|
||||
st.Cmd(CMD_RGB);
|
||||
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS|SEND_COMMAND);
|
||||
break;
|
||||
default:
|
||||
st.toString(valstr, sizeof(valstr), SEND_PARAMETERS);
|
||||
}
|
||||
|
||||
switch (st.getArgType()) {
|
||||
case ST_RGB:
|
||||
case ST_RGBW:
|
||||
strncat_P(addrstr, SET_P, sizeof(addrstr));
|
||||
break;
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
strncat_P(addrstr, ESET_P, sizeof(addrstr));
|
||||
break;
|
||||
// case ST_PERCENTS255:
|
||||
// case ST_HSV255:
|
||||
// strncat_P(addrstr, ESET_P, sizeof(addrstr));
|
||||
// break;
|
||||
default:
|
||||
strncat_P(addrstr, SET_P, sizeof(addrstr));
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ e-mail anklimov@gmail.com
|
||||
//#define S_SETnCMD 0
|
||||
#define S_CMD 1
|
||||
#define S_SET 2
|
||||
#define S_ESET 4
|
||||
//#define S_ESET 4
|
||||
#define S_HSV 5
|
||||
#define S_RGB 6
|
||||
#define S_FAN 7
|
||||
|
||||
@@ -77,31 +77,39 @@ itemCmd::itemCmd(Item *item)
|
||||
|
||||
|
||||
itemCmd itemCmd::setChanType(short chanType)
|
||||
{
|
||||
cmd.itemArgType=getStoragetypeByChanType(chanType);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
uint8_t itemCmd::getStoragetypeByChanType(short chanType)
|
||||
{
|
||||
switch (chanType)
|
||||
{
|
||||
case CH_RGB:
|
||||
case CH_RGBW:
|
||||
case CH_SPILED:
|
||||
cmd.itemArgType=ST_HSV;
|
||||
return ST_HSV255;
|
||||
break;
|
||||
case CH_AC:
|
||||
case CH_THERMO:
|
||||
case CH_VCTEMP:
|
||||
cmd.itemArgType=ST_FLOAT_CELSIUS;
|
||||
return ST_FLOAT_CELSIUS;
|
||||
break;
|
||||
case CH_DIMMER:
|
||||
case CH_MOTOR:
|
||||
case CH_PWM:
|
||||
case CH_RELAY:
|
||||
cmd.itemArgType=ST_PERCENTS;
|
||||
return ST_PERCENTS255;
|
||||
break;
|
||||
default:
|
||||
cmd.itemArgType=ST_PERCENTS;
|
||||
return ST_VOID;
|
||||
}
|
||||
return *this;
|
||||
|
||||
}
|
||||
|
||||
|
||||
itemCmd itemCmd::setDefault()
|
||||
{
|
||||
switch (cmd.itemArgType){
|
||||
@@ -109,14 +117,10 @@ itemCmd itemCmd::setDefault()
|
||||
break;
|
||||
case ST_FLOAT_FARENHEIT: param.asfloat=75.;
|
||||
break;
|
||||
case ST_HSV:
|
||||
|
||||
case ST_HS:
|
||||
param.h=100; param.s=0; param.v=100;
|
||||
break;
|
||||
case ST_HSV255: param.h=100; param.s=0; param.v=255;
|
||||
break;
|
||||
case ST_PERCENTS: param.v=100;
|
||||
break;
|
||||
case ST_PERCENTS255: param.v=255;
|
||||
break;
|
||||
default:
|
||||
@@ -131,8 +135,7 @@ bool itemCmd::setH(uint16_t h)
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_VOID:
|
||||
cmd.itemArgType=ST_HSV;
|
||||
case ST_HSV:
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
case ST_HSV255:
|
||||
if (par>365) par=365;
|
||||
if (par<0) par=0;
|
||||
@@ -152,18 +155,11 @@ bool itemCmd::setS(uint8_t s)
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_VOID:
|
||||
cmd.itemArgType=ST_HSV;
|
||||
case ST_HSV:
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
case ST_HSV255:
|
||||
if (par>100) par=100;
|
||||
param.s=par;
|
||||
break;
|
||||
/*
|
||||
case ST_HSV255:
|
||||
if (par>255) par=255;
|
||||
if (par<0) par=0;
|
||||
param.s=par;
|
||||
break;*/
|
||||
default:
|
||||
// debugSerial<<F("Can't assign saturation to type ")<<cmd.itemArgType<<endl;
|
||||
return false;
|
||||
@@ -181,10 +177,8 @@ bool itemCmd::setColorTemp(int t)
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_VOID:
|
||||
cmd.itemArgType=ST_HSV;
|
||||
case ST_HSV:
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
case ST_HS:
|
||||
case ST_PERCENTS:
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
if (par>100) par=100;
|
||||
@@ -207,9 +201,7 @@ int itemCmd::getColorTemp()
|
||||
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_HSV:
|
||||
case ST_HS:
|
||||
case ST_PERCENTS:
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
|
||||
@@ -233,13 +225,6 @@ bool itemCmd::incrementPercents(int16_t dif)
|
||||
{ int par=param.v;
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_PERCENTS:
|
||||
case ST_HSV:
|
||||
par+=dif;
|
||||
if (par>100) par=100;
|
||||
if (par<0) par=0;
|
||||
param.v=par;
|
||||
break;
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
par+=dif;
|
||||
@@ -286,7 +271,7 @@ bool itemCmd::incrementH(int16_t dif)
|
||||
{ int par=param.h;
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_HSV:
|
||||
//case ST_HSV:
|
||||
case ST_HSV255:
|
||||
par+=dif;
|
||||
if (par>365) par=0;
|
||||
@@ -303,20 +288,12 @@ bool itemCmd::incrementS(int16_t dif)
|
||||
{int par=param.s;
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
//case ST_PERCENTS:
|
||||
case ST_HSV:
|
||||
case ST_HSV255:
|
||||
par+=dif;
|
||||
if (par>100) par=100;
|
||||
if (par<0) par=0;
|
||||
break;
|
||||
/*
|
||||
//case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
par+=dif;
|
||||
if (par>255) par=255;
|
||||
if (par<0) par=0;
|
||||
break; */
|
||||
|
||||
default: return false;
|
||||
}
|
||||
param.s=par;
|
||||
@@ -325,11 +302,11 @@ bool itemCmd::incrementS(int16_t dif)
|
||||
}
|
||||
|
||||
|
||||
itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
|
||||
{
|
||||
bool RGBW_flag = false;
|
||||
bool HSV255_flag = false;
|
||||
bool toFarenheit = false;
|
||||
short prefferedStorageType = getStoragetypeByChanType(chanType);
|
||||
|
||||
int t=from.getColorTemp();
|
||||
|
||||
@@ -341,58 +318,6 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
|
||||
|
||||
switch (cmd.itemArgType){ //Destination
|
||||
case ST_HSV:
|
||||
case ST_PERCENTS:
|
||||
switch (from.cmd.itemArgType)
|
||||
{
|
||||
case ST_RGBW:
|
||||
param.w=from.param.w;
|
||||
case ST_RGB:
|
||||
param.r=from.param.r;
|
||||
param.g=from.param.g;
|
||||
param.b=from.param.b;
|
||||
cmd.itemArgType=from.cmd.itemArgType; //Changing if type
|
||||
break;
|
||||
case ST_HSV:
|
||||
param.v=from.param.v;
|
||||
case ST_HS:
|
||||
param.h=from.param.h;
|
||||
param.s=from.param.s;
|
||||
|
||||
break;
|
||||
case ST_PERCENTS:
|
||||
param.v=from.param.v;
|
||||
break;
|
||||
case ST_TENS:
|
||||
param.v=from.param.asInt32/10;
|
||||
break;
|
||||
case ST_INT32:
|
||||
case ST_UINT32:
|
||||
param.v=constrain(from.param.aslong,0,100);
|
||||
break;
|
||||
|
||||
case ST_HSV255:
|
||||
param.h=from.param.h;
|
||||
//param.s=map(from.param.s,0,255,0,100);
|
||||
param.s=from.param.s;
|
||||
param.v=map(from.param.v,0,255,0,100);
|
||||
break;
|
||||
case ST_PERCENTS255:
|
||||
param.v=map(from.param.v,0,255,0,100);
|
||||
break;
|
||||
case ST_FLOAT:
|
||||
if (cmd.itemArgType == ST_HSV)
|
||||
param.v = constrain(from.param.asfloat,0,100);
|
||||
else
|
||||
{
|
||||
param=from.param;
|
||||
cmd.itemArgType=from.cmd.itemArgType;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
debugSerial<<F("Wrong Assignment ")<<from.cmd.itemArgType<<F("->")<<cmd.itemArgType<<endl;
|
||||
}
|
||||
break;
|
||||
case ST_HSV255:
|
||||
case ST_PERCENTS255:
|
||||
switch (from.cmd.itemArgType)
|
||||
@@ -405,22 +330,16 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
param.b=from.param.b;
|
||||
cmd.itemArgType=from.cmd.itemArgType;
|
||||
break;
|
||||
case ST_HSV:
|
||||
param.v=map(from.param.v,0,100,0,255);
|
||||
case ST_HS:
|
||||
param.h=from.param.h;
|
||||
param.s=from.param.s;
|
||||
//param.s=map(from.param.s,0,100,0,255);
|
||||
break;
|
||||
case ST_PERCENTS:
|
||||
param.v=map(from.param.v,0,100,0,255);
|
||||
break;
|
||||
case ST_INT32:
|
||||
case ST_UINT32:
|
||||
param.v=map(from.param.asInt32,0,100,0,255); //constr
|
||||
param.v=constrain(from.param.asInt32,0,255);
|
||||
break;
|
||||
case ST_TENS:
|
||||
param.v=map(from.param.asInt32,0,1000,0,255);
|
||||
param.v=map(from.param.asInt32,0,2550,0,255);
|
||||
case ST_HSV255:
|
||||
param.h=from.param.h;
|
||||
param.s=from.param.s;
|
||||
@@ -430,13 +349,7 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
param.v=from.param.v;
|
||||
break;
|
||||
case ST_FLOAT:
|
||||
if (cmd.itemArgType == ST_HSV255)
|
||||
param.v = constrain(map(from.param.asfloat,0,100,0,255),0,255);
|
||||
else
|
||||
{
|
||||
param=from.param;
|
||||
cmd.itemArgType=from.cmd.itemArgType;
|
||||
}
|
||||
param.v=constrain(from.param.asfloat,0.,255.);
|
||||
break;
|
||||
default:
|
||||
debugSerial<<F("Wrong Assignment ")<<from.cmd.itemArgType<<F("->")<<cmd.itemArgType<<endl;
|
||||
@@ -451,18 +364,18 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
switch (from.cmd.itemArgType)
|
||||
{
|
||||
case ST_HS:
|
||||
param.v=getPercents();
|
||||
param.v=getPercents255();
|
||||
param.h=from.param.h;
|
||||
param.s=from.param.s;
|
||||
cmd.itemArgType=ST_HSV;
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
default:
|
||||
param.asInt32=from.param.asInt32;
|
||||
cmd.itemArgType=from.cmd.itemArgType;
|
||||
}
|
||||
break;
|
||||
case ST_HS:
|
||||
param.v=from.getPercents();
|
||||
cmd.itemArgType=ST_HSV;
|
||||
param.v=from.getPercents255();
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
break;
|
||||
case ST_FLOAT_FARENHEIT:
|
||||
toFarenheit = true;
|
||||
@@ -473,8 +386,6 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
case ST_TENS:
|
||||
param.asfloat=from.param.asInt32/10.;
|
||||
break;
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_PERCENTS255:
|
||||
param.asfloat=from.param.v;
|
||||
break;
|
||||
@@ -495,17 +406,16 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
param.asfloat=from.param.asfloat;
|
||||
break;
|
||||
case ST_HSV255:
|
||||
case ST_HSV:
|
||||
case ST_RGB:
|
||||
case ST_RGBW:
|
||||
cmd.itemArgType=from.cmd.itemArgType;
|
||||
param=from.param;
|
||||
break;
|
||||
case ST_HS:
|
||||
param.v=getPercents();
|
||||
param.v=getPercents255();
|
||||
param.h=from.param.h;
|
||||
param.s=from.param.s;
|
||||
cmd.itemArgType=ST_HSV;
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
break;
|
||||
default:
|
||||
debugSerial<<F("Wrong Assignment ")<<from.cmd.itemArgType<<F("->")<<cmd.itemArgType<<endl;
|
||||
@@ -530,7 +440,6 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
case ST_HS:
|
||||
case ST_INT32:
|
||||
case ST_PERCENTS255:
|
||||
case ST_PERCENTS:
|
||||
case ST_TENS:
|
||||
case ST_UINT32:
|
||||
{
|
||||
@@ -551,9 +460,6 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
case ST_PERCENTS255:
|
||||
vol=map(from.param.v,0,255,0,100);
|
||||
break;
|
||||
case ST_PERCENTS:
|
||||
vol=from.param.v;
|
||||
break;
|
||||
case ST_INT32:
|
||||
case ST_UINT32:
|
||||
vol=from.param.asInt32;
|
||||
@@ -568,7 +474,7 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
#ifndef ADAFRUIT_LED
|
||||
vol=hsv.v;
|
||||
#else
|
||||
vol=100;
|
||||
vol=255;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -581,38 +487,19 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
from.param.s=0;
|
||||
#endif
|
||||
|
||||
from.cmd.itemArgType=ST_HSV;
|
||||
from.cmd.itemArgType=ST_HSV255;
|
||||
from.param.v=vol;
|
||||
}
|
||||
// Continue processing with filled from HSV
|
||||
/*
|
||||
//Converting current obj to HSV
|
||||
|
||||
debugSerial<<F("Conv RGB2HSV:"); from.debugOut();
|
||||
|
||||
// Do not convert to RGBx ?
|
||||
param=from.param;
|
||||
cmd=from.cmd;
|
||||
return *this; */
|
||||
|
||||
case ST_HSV255:
|
||||
if (from.cmd.itemArgType==ST_HSV255) HSV255_flag=true;
|
||||
case ST_HSV:
|
||||
{ // HSV_XX to RGB_XX translation code
|
||||
int rgbSaturation;
|
||||
int rgbValue;
|
||||
|
||||
if (HSV255_flag)
|
||||
{
|
||||
//rgbSaturation = from.param.s;
|
||||
rgbSaturation =map(from.param.s, 0, 100, 0, 255);
|
||||
rgbValue = from.param.v;
|
||||
}
|
||||
else
|
||||
{
|
||||
rgbSaturation =map(from.param.s, 0, 100, 0, 255);
|
||||
rgbValue = map(from.param.v, 0, 100, 0, 255);
|
||||
}
|
||||
|
||||
short colorT=from.param.colorTemp-1;
|
||||
|
||||
|
||||
@@ -679,6 +566,9 @@ itemCmd itemCmd::assignFrom(itemCmd from)
|
||||
} //Translation to RGB_XX
|
||||
break;
|
||||
} //Destination
|
||||
|
||||
if (prefferedStorageType) convertTo(prefferedStorageType);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -694,7 +584,9 @@ return (cmd.itemArgType);
|
||||
|
||||
bool itemCmd::isColor()
|
||||
{
|
||||
return (cmd.itemArgType==ST_HS || cmd.itemArgType==ST_HSV || cmd.itemArgType==ST_HSV255 || cmd.itemArgType==ST_RGB || cmd.itemArgType==ST_RGBW);
|
||||
|
||||
return (cmd.itemArgType==ST_HS || cmd.itemArgType==ST_HSV255 || cmd.itemArgType==ST_RGB || cmd.itemArgType==ST_RGBW);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -708,10 +600,7 @@ long int itemCmd::getInt()
|
||||
case ST_RGBW:
|
||||
|
||||
return param.aslong;
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV:
|
||||
case ST_HSV255:
|
||||
return param.v;
|
||||
|
||||
@@ -743,9 +632,7 @@ float itemCmd::getFloat()
|
||||
case ST_TENS:
|
||||
return param.aslong/10;
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV:
|
||||
case ST_HSV255:
|
||||
return param.v;
|
||||
|
||||
@@ -771,10 +658,6 @@ long int itemCmd::getSingleInt()
|
||||
short itemCmd::getPercents(bool inverse)
|
||||
{
|
||||
switch (cmd.itemArgType) {
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_HSV:
|
||||
if (inverse) return 100-param.v; else return param.v;
|
||||
|
||||
case ST_INT32:
|
||||
case ST_UINT32:
|
||||
@@ -804,23 +687,19 @@ bool itemCmd::setPercents(int percents)
|
||||
{
|
||||
switch (cmd.itemArgType) {
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_HSV:
|
||||
param.v=percents;
|
||||
break;
|
||||
case ST_INT32:
|
||||
case ST_UINT32:
|
||||
param.asInt32=percents;
|
||||
param.asInt32=map(percents,0,100,0,255);
|
||||
break;
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
param.v=map(percents,0,100,0,255);
|
||||
break;
|
||||
case ST_FLOAT:
|
||||
param.asfloat=percents;
|
||||
param.asfloat=map(percents,0,100,0,255);;
|
||||
break;
|
||||
case ST_TENS:
|
||||
param.asInt32 = percents*10;
|
||||
param.asInt32 = map(percents,0,100,0,2550);;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -831,29 +710,19 @@ short itemCmd::getPercents255(bool inverse)
|
||||
{
|
||||
switch (cmd.itemArgType) {
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_HSV:
|
||||
if (inverse) return map(param.v,0,100,255,0);
|
||||
else return map(param.v,0,100,0,255);
|
||||
|
||||
case ST_INT32:
|
||||
case ST_UINT32:
|
||||
if (inverse) return map(param.asInt32,0,100,255,0);
|
||||
else return map(param.asInt32,0,100,0,255);
|
||||
if (inverse) return 255-constrain(param.asInt32,0,255); else return constrain(param.asInt32,0,255);
|
||||
|
||||
case ST_PERCENTS255:
|
||||
case ST_HSV255:
|
||||
if (inverse) return 255-param.v; else return param.v;
|
||||
|
||||
case ST_FLOAT:
|
||||
if (inverse) return map(param.asfloat,0,100,255,0);
|
||||
else return map(param.asfloat,0,100,0,255);
|
||||
if (inverse) return 255-constrain(param.asfloat,0,255); else return constrain(param.asfloat,0,255);
|
||||
|
||||
case ST_TENS:
|
||||
if (inverse) return map(param.asInt32,0,1000,255,0);
|
||||
else return map(param.asInt32,0,1000,0,255);
|
||||
|
||||
|
||||
if (inverse) return 255-constrain(param.asInt32/10,0,255); else return constrain(param.asInt32/10,0,255);
|
||||
|
||||
default:
|
||||
return -1;
|
||||
@@ -879,9 +748,12 @@ itemCmd itemCmd::setArgType(uint8_t type)
|
||||
|
||||
itemCmd itemCmd::convertTo(uint8_t type)
|
||||
{
|
||||
if (cmd.itemArgType == type) return *this;
|
||||
debugSerial << F("Converting ") << cmd.itemArgType << F("->") << type << F(" ");
|
||||
itemCmd out(type,cmd.cmdCode);
|
||||
out.assignFrom(*this);
|
||||
return out;
|
||||
*this=out.assignFrom(*this);
|
||||
debugOut();
|
||||
return *this;
|
||||
}
|
||||
|
||||
uint8_t itemCmd::getCmdParam()
|
||||
@@ -897,19 +769,13 @@ itemCmd itemCmd::Percents(int i)
|
||||
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_HSV:
|
||||
case ST_PERCENTS:
|
||||
param.v=i;
|
||||
break;
|
||||
|
||||
case ST_HSV255:
|
||||
case ST_PERCENTS255:
|
||||
param.v=map(i,0,100,0,255);
|
||||
break;
|
||||
default:
|
||||
cmd.itemArgType=ST_PERCENTS;
|
||||
param.v=i;
|
||||
cmd.itemArgType=ST_PERCENTS255;
|
||||
}
|
||||
param.v=map(i,0,100,0,255);
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -920,11 +786,6 @@ itemCmd itemCmd::Percents(int i)
|
||||
|
||||
switch (cmd.itemArgType)
|
||||
{
|
||||
case ST_HSV:
|
||||
case ST_PERCENTS:
|
||||
param.v=map(i,0,255,0,100);
|
||||
break;
|
||||
|
||||
case ST_HSV255:
|
||||
case ST_PERCENTS255:
|
||||
param.v=i;
|
||||
@@ -966,10 +827,10 @@ itemCmd itemCmd::Tens(int32_t i)
|
||||
|
||||
itemCmd itemCmd::HSV(uint16_t h, uint8_t s, uint8_t v)
|
||||
{
|
||||
cmd.itemArgType=ST_HSV;
|
||||
cmd.itemArgType=ST_HSV255;
|
||||
param.h=h;
|
||||
param.s=s;
|
||||
param.v=v;
|
||||
param.v=map(v,0,100,0,255);
|
||||
|
||||
return *this;
|
||||
}
|
||||
@@ -1074,7 +935,7 @@ bool itemCmd::saveItem(Item * item, bool includeCommand)
|
||||
item->setVal(param.asInt32);
|
||||
item->setSubtype(cmd.itemArgType);
|
||||
if (includeCommand) item->setCmd(cmd.cmdCode);
|
||||
debugSerial<<F("Saved :");
|
||||
debugSerial<<F("Saved:");
|
||||
debugOut();
|
||||
return true;
|
||||
}
|
||||
@@ -1104,7 +965,7 @@ int itemCmd::doMappingCmd(aJsonObject *mappingData)
|
||||
|
||||
}
|
||||
|
||||
char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags )
|
||||
char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, int base )
|
||||
{
|
||||
|
||||
if (!Buffer || !bufLen) return NULL;
|
||||
@@ -1124,9 +985,8 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags )
|
||||
switch (cmd.itemArgType)
|
||||
{ short colorTemp;
|
||||
|
||||
case ST_PERCENTS:
|
||||
case ST_PERCENTS255:
|
||||
snprintf(argPtr, bufLen, "%u", param.v);
|
||||
snprintf(argPtr, bufLen, "%u", map (param.v,0,255,0,base));
|
||||
break;
|
||||
case ST_UINT32:
|
||||
snprintf(argPtr, bufLen, "%lu", param.asUint32);
|
||||
@@ -1137,14 +997,13 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags )
|
||||
case ST_TENS:
|
||||
snprintf(argPtr, bufLen, "%ld.%d", param.asInt32/10, abs(param.asInt32 % 10));
|
||||
break;
|
||||
case ST_HSV:
|
||||
case ST_HSV255:
|
||||
colorTemp=getColorTemp();
|
||||
|
||||
if (colorTemp<0)
|
||||
snprintf(argPtr, bufLen, "%d,%d,%d", param.h, param.s, param.v);
|
||||
snprintf(argPtr, bufLen, "%d,%d,%d", param.h, param.s, map (param.v,0,255,0,base));
|
||||
else
|
||||
snprintf(argPtr, bufLen, "%d,%d,%d,%d", param.h, param.s, param.v, colorTemp);
|
||||
snprintf(argPtr, bufLen, "%d,%d,%d,%d", param.h, param.s, map (param.v,0,255,0,base), colorTemp);
|
||||
|
||||
break;
|
||||
case ST_HS:
|
||||
@@ -1155,18 +1014,17 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags )
|
||||
case ST_FLOAT_FARENHEIT:
|
||||
case ST_FLOAT:
|
||||
{
|
||||
//char *tmpSign = (param.asfloat < 0) ? "-" : "";
|
||||
|
||||
float tmpVal = (param.asfloat < 0) ? -param.asfloat : param.asfloat;
|
||||
int tmpInt1 = tmpVal; // Get the integer
|
||||
float tmpFrac = tmpVal - tmpInt1; // Get fraction
|
||||
int tmpInt2 = trunc(tmpFrac * 10000); // Turn into integer
|
||||
int tmpInt2 = trunc(tmpFrac * 100); // Turn into integer
|
||||
// Print as parts, note that you need 0-padding for fractional bit.
|
||||
|
||||
if (param.asfloat < 0)
|
||||
snprintf (argPtr, bufLen, "-%d.%04d", tmpInt1, tmpInt2);
|
||||
else snprintf (argPtr, bufLen, "%d.%04d", tmpInt1, tmpInt2);
|
||||
snprintf (argPtr, bufLen, "-%d.%02d", tmpInt1, tmpInt2);
|
||||
else snprintf (argPtr, bufLen, "%d.%02d", tmpInt1, tmpInt2);
|
||||
}
|
||||
// snprintf(argPtr, bufLen, "%.1f", param.asfloat);
|
||||
break;
|
||||
case ST_RGB:
|
||||
snprintf(argPtr, bufLen, "%d,%d,%d", param.r, param.g, param.b);
|
||||
|
||||
@@ -74,42 +74,26 @@ const cmdstr commands_P[] PROGMEM =
|
||||
|
||||
int txt2cmd (char * payload);
|
||||
|
||||
/*
|
||||
enum itemStoreType {
|
||||
ST_VOID = 0,
|
||||
ST_PERCENTS = 1,
|
||||
ST_TENS = 2,
|
||||
ST_HSV = 3,
|
||||
ST_FLOAT_CELSIUS= 4,
|
||||
ST_FLOAT_FARENHEIT= 5,
|
||||
ST_RGB = 6,
|
||||
ST_RGBW = 7,
|
||||
ST_PERCENTS255 = 8,
|
||||
ST_HSV255 = 9,
|
||||
ST_INT32 = 10,
|
||||
ST_UINT32 = 11,
|
||||
ST_STRING = 12,
|
||||
ST_FLOAT = 13//,
|
||||
//ST_COMMAND = 15
|
||||
};
|
||||
*/
|
||||
|
||||
///Definition of all possible types of argument, contained in class
|
||||
#define ST_VOID 0 /// Not defined
|
||||
#define ST_PERCENTS 1 /// Percent value 0..100
|
||||
#define ST_TENS 2 /// Int representation of Float point value in tens part (ex 12.3 = 123 in "tens")
|
||||
#define ST_HSV 3 /// HUE-SATURATION-VALUE representation of color (0..365, 0..100, 0..100)
|
||||
#define ST_HS 4 /// just hue and saturation
|
||||
#define ST_FLOAT_CELSIUS 5 /// Float value - temperature in Celsium
|
||||
#define ST_FLOAT_FARENHEIT 6 /// Float value - temperature in Farenheit
|
||||
#define ST_RGB 7 /// RGB replesentation of color
|
||||
#define ST_RGBW 8 /// RGB + White channel
|
||||
#define ST_PERCENTS255 9 /// Percent value 0..255
|
||||
#define ST_HSV255 10 /// HUE-SATURATION-VALUE representation of color (0..365, 0..255, 0..255)
|
||||
#define ST_INT32 11 /// 32 bits signed integer
|
||||
#define ST_UINT32 12 /// 32 bits unsigned integer
|
||||
#define ST_STRING 13 /// pointer to string (for further use)
|
||||
#define ST_FLOAT 14 /// generic Float value
|
||||
#define ST_PERCENTS255 1 /// Percent value 0..255
|
||||
|
||||
#define ST_HSV255 2 /// HUE-SATURATION-VALUE representation of color (0..365, 0..100, 0..255)
|
||||
#define ST_HS 3 /// just hue and saturation
|
||||
|
||||
#define ST_RGB 4 /// RGB replesentation of color
|
||||
#define ST_RGBW 5 /// RGB + White channel
|
||||
|
||||
#define ST_TENS 6 /// Int representation of Float point value in tens part (ex 12.3 = 123 in "tens")
|
||||
#define ST_FLOAT 7 /// generic Float value
|
||||
#define ST_FLOAT_CELSIUS 8 /// Float value - temperature in Celsium
|
||||
#define ST_FLOAT_FARENHEIT 9 /// Float value - temperature in Farenheit
|
||||
|
||||
#define ST_INT32 10 /// 32 bits signed integer
|
||||
#define ST_UINT32 11 /// 32 bits unsigned integer
|
||||
#define ST_STRING 12 /// pointer to string (for further use)
|
||||
|
||||
|
||||
#define MAP_SCALE 1
|
||||
#define MAP_VAL_CMD 2
|
||||
@@ -182,7 +166,7 @@ public:
|
||||
itemCmd(float val);
|
||||
itemCmd(Item *item);
|
||||
|
||||
itemCmd assignFrom(itemCmd from);
|
||||
itemCmd assignFrom(itemCmd from, short chanType=-1);
|
||||
|
||||
bool loadItem(Item * item, bool includeCommand=false );
|
||||
bool saveItem(Item * item, bool includeCommand=false);
|
||||
@@ -205,6 +189,8 @@ public:
|
||||
uint16_t getS();
|
||||
itemCmd setArgType(uint8_t);
|
||||
itemCmd convertTo(uint8_t);
|
||||
uint8_t getStoragetypeByChanType(short chanType);
|
||||
|
||||
itemCmd Percents(int i);
|
||||
itemCmd Percents255(int i);
|
||||
|
||||
@@ -224,7 +210,7 @@ public:
|
||||
uint8_t getCmd();
|
||||
uint8_t getArgType();
|
||||
uint8_t getCmdParam();
|
||||
char * toString(char * Buffer, int bufLen, int sendFlags = SEND_COMMAND | SEND_PARAMETERS );
|
||||
char * toString(char * Buffer, int bufLen, int sendFlags = SEND_COMMAND | SEND_PARAMETERS, int base = 255);
|
||||
|
||||
bool isCommand();
|
||||
bool isValue();
|
||||
|
||||
@@ -2177,129 +2177,3 @@ publishStat();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
bool isThermostatWithMinArraySize(aJsonObject *item, int minimalArraySize) {
|
||||
return (item->type == aJson_Array) && (aJson.getArrayItem(item, I_TYPE)->valueint == CH_THERMO) &&
|
||||
(aJson.getArraySize(item) >= minimalArraySize);
|
||||
}
|
||||
|
||||
bool thermoDisabledOrDisconnected(aJsonObject *thermoExtensionArray, int thermoStateCommand) {
|
||||
if (aJson.getArrayItem(thermoExtensionArray, IET_ATTEMPTS)->valueint == 0) return true;
|
||||
switch (thermoStateCommand) {
|
||||
case CMD_ON:
|
||||
case CMD_XON:
|
||||
case CMD_AUTO:
|
||||
case CMD_HEAT:
|
||||
return false;
|
||||
default: return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//TODO: refactoring
|
||||
void thermoLoop(void) {
|
||||
// if (millis() < timerThermostatCheck)
|
||||
if (!isTimeOver(timerThermostatCheck,millis(),THERMOSTAT_CHECK_PERIOD))
|
||||
return;
|
||||
if (!items) return;
|
||||
bool thermostatCheckPrinted = false;
|
||||
configLocked++;
|
||||
for (aJsonObject *thermoItem = items->child; thermoItem; thermoItem = thermoItem->next) {
|
||||
if (isThermostatWithMinArraySize(thermoItem, 5)) {
|
||||
aJsonObject *thermoExtensionArray = aJson.getArrayItem(thermoItem, I_EXT);
|
||||
if (thermoExtensionArray && (aJson.getArraySize(thermoExtensionArray) > 1)) {
|
||||
|
||||
Item thermostat(thermoItem);
|
||||
if (!thermostat.isValid()) continue;
|
||||
|
||||
itemCmd thermostatCmd(&thermostat);
|
||||
|
||||
|
||||
//int thermoPin = aJson.getArrayItem(thermoItem, I_ARG)->valueint;
|
||||
int thermoPin = thermostat.getArg(0);
|
||||
|
||||
//float thermoSetting = aJson.getArrayItem(thermoItem, I_VAL)->valueint; ///
|
||||
float thermoSetting = thermostatCmd.getFloat();
|
||||
|
||||
int thermoStateCommand = aJson.getArrayItem(thermoItem, I_CMD)->valueint;
|
||||
|
||||
float curTemp = aJson.getArrayItem(thermoExtensionArray, IET_TEMP)->valuefloat;
|
||||
|
||||
if (!aJson.getArrayItem(thermoExtensionArray, IET_ATTEMPTS)->valueint) {
|
||||
errorSerial<<thermoItem->name<<F(" Expired\n");
|
||||
|
||||
} else {
|
||||
if (!(--aJson.getArrayItem(thermoExtensionArray, IET_ATTEMPTS)->valueint))
|
||||
mqttClient.publish("/alarm/snsr", thermoItem->name);
|
||||
|
||||
}
|
||||
if (curTemp > THERMO_OVERHEAT_CELSIUS) mqttClient.publish("/alarm/ovrht", thermoItem->name);
|
||||
|
||||
|
||||
debugSerial << endl << thermoItem->name << F(" Set:") << thermoSetting << F(" Cur:") << curTemp
|
||||
<< F(" cmd:") << thermoStateCommand;
|
||||
if (thermoPin<0) pinMode(-thermoPin, OUTPUT); else pinMode(thermoPin, OUTPUT);
|
||||
if (thermoDisabledOrDisconnected(thermoExtensionArray, thermoStateCommand)) {
|
||||
if (thermoPin<0) digitalWrite(-thermoPin, LOW); else digitalWrite(thermoPin, LOW);
|
||||
// Caution - for water heaters (negative pin#) if some comes wrong (or no connection with termometers output is LOW - valve OPEN)
|
||||
// OFF - also VALVE is OPEN (no teat control)
|
||||
debugSerial<<F(" OFF");
|
||||
} else {
|
||||
if (curTemp < thermoSetting - THERMO_GIST_CELSIUS) {
|
||||
if (thermoPin<0) digitalWrite(-thermoPin, LOW); else digitalWrite(thermoPin, HIGH);
|
||||
debugSerial<<F(" ON");
|
||||
} //too cold
|
||||
else if (curTemp >= thermoSetting) {
|
||||
if (thermoPin<0) digitalWrite(-thermoPin, HIGH); else digitalWrite(thermoPin, LOW);
|
||||
debugSerial<<F(" OFF");
|
||||
} //Reached settings
|
||||
else debugSerial<<F(" -target zone-"); // Nothing to do
|
||||
}
|
||||
thermostatCheckPrinted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
configLocked--;
|
||||
timerThermostatCheck = millis();// + THERMOSTAT_CHECK_PERIOD;
|
||||
publishStat();
|
||||
#ifndef DISABLE_FREERAM_PRINT
|
||||
(thermostatCheckPrinted) ? debugSerial<<F("\nRAM=")<<freeRam()<<" " : debugSerial<<F(" ")<<freeRam()<<F(" ");
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
short thermoSetCurTemp(char *name, float t) {
|
||||
if (!name || !strlen(name)) return 0;
|
||||
if (items) {
|
||||
aJsonObject *thermoItem = aJson.getObjectItem(items, name);
|
||||
if (!thermoItem) return 0;
|
||||
if (isThermostatWithMinArraySize(thermoItem, 4)) {
|
||||
aJsonObject *extArray = NULL;
|
||||
|
||||
if (aJson.getArraySize(thermoItem) == 4) //No thermo extension yet
|
||||
{
|
||||
extArray = aJson.createArray(); //Create Ext Array
|
||||
|
||||
aJsonObject *ocurt = aJson.createItem(t); //Create float
|
||||
aJsonObject *oattempts = aJson.createItem((long int) T_ATTEMPTS); //Create int
|
||||
aJson.addItemToArray(extArray, ocurt);
|
||||
aJson.addItemToArray(extArray, oattempts);
|
||||
aJson.addItemToArray(thermoItem, extArray); //Adding to thermoItem
|
||||
}
|
||||
else if (extArray = aJson.getArrayItem(thermoItem, I_EXT)) {
|
||||
aJsonObject *att = aJson.getArrayItem(extArray, IET_ATTEMPTS);
|
||||
aJson.getArrayItem(extArray, IET_TEMP)->valuefloat = t;
|
||||
if (att->valueint == 0) mqttClient.publish("/alarmoff/snsr", thermoItem->name);
|
||||
att->valueint = (int) T_ATTEMPTS;
|
||||
}
|
||||
}
|
||||
return 1;}
|
||||
return 0;}
|
||||
*/
|
||||
@@ -213,6 +213,7 @@ inline unsigned char toHex( char ch ){
|
||||
|
||||
int out_AC::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
Serial.println("AC Init");
|
||||
AC_Serial.begin(9600);
|
||||
driverStatus = CST_INITIALIZED;
|
||||
@@ -280,7 +281,7 @@ int out_AC::Ctrl(itemCmd cmd, char* subItem , bool toExecute)
|
||||
switch(suffixCode)
|
||||
{
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
//case S_ESET:
|
||||
set_tmp = cmd.getInt();
|
||||
if (set_tmp >= 10 && set_tmp <= 30)
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#pragma once
|
||||
#ifndef AC_DISABLE
|
||||
#include <abstractout.h>
|
||||
#include "itemCmd.h"
|
||||
|
||||
#define LEN_B 37
|
||||
#define B_CUR_TMP 13 //Текущая температура
|
||||
@@ -29,7 +30,7 @@ public:
|
||||
int Stop() override;
|
||||
int Status() override;
|
||||
int isActive() override;
|
||||
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
||||
int getDefaultStorageType(){return ST_FLOAT_CELSIUS;};
|
||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true) override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -13,6 +13,7 @@ static int driverStatus = CST_UNKNOWN;
|
||||
|
||||
int out_dmx::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
debugSerial<<F("DMX-Out Init")<<endl;
|
||||
driverStatus = CST_INITIALIZED;
|
||||
return 1;
|
||||
@@ -88,7 +89,7 @@ if (cType==CH_DIMMER) //Single channel
|
||||
storageType=ST_RGBW;
|
||||
break;
|
||||
default:
|
||||
storageType=ST_PERCENTS;
|
||||
storageType=ST_PERCENTS255;
|
||||
}
|
||||
|
||||
itemCmd st(storageType,CMD_VOID);
|
||||
|
||||
@@ -155,6 +155,7 @@ bool out_Modbus::getConfig()
|
||||
|
||||
int out_Modbus::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
if (!store) store= (mbPersistent *)item->setPersistent(new mbPersistent);
|
||||
if (!store)
|
||||
{ errorSerial<<F("MBUS: Out of memory")<<endl;
|
||||
@@ -194,10 +195,6 @@ if (store)
|
||||
return CST_UNKNOWN;
|
||||
}
|
||||
|
||||
int out_Modbus::isActive()
|
||||
{
|
||||
return item->getVal();
|
||||
}
|
||||
|
||||
|
||||
bool readModbus(uint16_t reg, int regType, int count)
|
||||
@@ -464,7 +461,7 @@ case S_NOTFOUND:
|
||||
toExecute = true;
|
||||
debugSerial<<F("Forced execution");
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
//case S_ESET:
|
||||
if (!cmd.isValue()) return 0;
|
||||
|
||||
//TODO
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#ifndef MBUS_DISABLE
|
||||
#include <abstractout.h>
|
||||
#include <item.h>
|
||||
#include "itemCmd.h"
|
||||
|
||||
#if defined(ESP32)
|
||||
#define serialParamType uint32_t
|
||||
@@ -34,9 +35,9 @@ public:
|
||||
int Poll(short cause) override;
|
||||
int Stop() override;
|
||||
int Status() override;
|
||||
int isActive() override;
|
||||
int getChanType() override;
|
||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true) override;
|
||||
int getDefaultStorageType(){return ST_INT32;};
|
||||
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -48,6 +48,7 @@ void out_Motor::getConfig()
|
||||
|
||||
int out_Motor::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
getConfig();
|
||||
Serial.println("Motor Init");
|
||||
pinMode(pinUp,OUTPUT);
|
||||
@@ -82,7 +83,7 @@ int out_Motor::Status()
|
||||
{
|
||||
return driverStatus;
|
||||
}
|
||||
|
||||
/*
|
||||
int out_Motor::isActive()
|
||||
{
|
||||
itemCmd st;
|
||||
@@ -94,10 +95,10 @@ switch (item->getCmd())
|
||||
break;
|
||||
default:
|
||||
st.loadItem(item);
|
||||
return st.getPercents();
|
||||
return st.getPercents255();
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
int out_Motor::Poll(short cause)
|
||||
{
|
||||
int curPos = -1;
|
||||
@@ -118,7 +119,7 @@ if (!item->getFlag(ACTION_IN_PROCESS))
|
||||
uint32_t motorOfftime = item->getExt();
|
||||
itemCmd st;
|
||||
st.loadItem(item);
|
||||
targetPos = st.getPercents();// item->getVal();
|
||||
targetPos = st.getPercents255();// item->getVal();
|
||||
|
||||
switch (item->getCmd())
|
||||
{
|
||||
@@ -137,18 +138,17 @@ int fb=-1;
|
||||
if (pinFeedback && isAnalogPin(pinFeedback))
|
||||
{
|
||||
|
||||
curPos=map((fb=analogRead(pinFeedback)),feedbackClosed,feedbackOpen,0,100);
|
||||
curPos=map((fb=analogRead(pinFeedback)),feedbackClosed,feedbackOpen,0,255);
|
||||
if (curPos<0) curPos=0;
|
||||
if (curPos>100) curPos=100;
|
||||
if (curPos>255) curPos=255;
|
||||
}
|
||||
|
||||
//if (motorOfftime && motorOfftime<millis()) //Time over
|
||||
if (motorOfftime && isTimeOver(motorOfftime,millis(),maxOnTime))
|
||||
{dif = 0; debugSerial<<F("Motor timeout")<<endl;}
|
||||
else if (curPos>=0)
|
||||
dif=targetPos-curPos;
|
||||
else
|
||||
dif=targetPos-50; // Have No feedback
|
||||
dif=targetPos-255/2; // Have No feedback
|
||||
|
||||
debugSerial<<F("In:")<<pinFeedback<<F(" Val:")<<fb<<F("/")<<curPos<<F("->")<<targetPos<<F(" delta:")<<dif<<endl;
|
||||
|
||||
@@ -168,8 +168,8 @@ if (digitalPinHasPWM(pinUp))
|
||||
{
|
||||
//Serial.println("pinUP PWM");
|
||||
int velocity;
|
||||
if (inverted) velocity = map(-dif, 0, 10, 255, 0);
|
||||
else velocity = map(-dif, 0, 10, 0, 255);
|
||||
if (inverted) velocity = map(-dif, 0, 255/10, 255, 0);
|
||||
else velocity = map(-dif, 0, 255/10, 0, 255);
|
||||
|
||||
velocity = constrain (velocity, MIN_PWM, 255);
|
||||
|
||||
@@ -183,8 +183,8 @@ else if (digitalPinHasPWM(pinDown))
|
||||
|
||||
int velocity;
|
||||
if (inverted)
|
||||
velocity = map(-dif, 0, 10, 0, 255);
|
||||
else velocity = map(-dif, 0, 10, 255, 0);
|
||||
velocity = map(-dif, 0, 255/10, 0, 255);
|
||||
else velocity = map(-dif, 0, 255/10, 255, 0);
|
||||
|
||||
velocity = constrain (velocity, MIN_PWM, 255);
|
||||
analogWrite(pinDown,velocity);
|
||||
@@ -209,8 +209,8 @@ if (digitalPinHasPWM(pinDown))
|
||||
{
|
||||
//Serial.println("pinDown PWM");
|
||||
int velocity;
|
||||
if (inverted) velocity = map(dif, 0, 20, 255, 0);
|
||||
else velocity = map(dif, 0, 20, 0, 255);
|
||||
if (inverted) velocity = map(dif, 0, 255/5, 255, 0);
|
||||
else velocity = map(dif, 0, 255/5, 0, 255);
|
||||
|
||||
velocity = constrain (velocity, MIN_PWM, 255);
|
||||
|
||||
@@ -223,8 +223,8 @@ if (digitalPinHasPWM(pinUp))
|
||||
digitalWrite(pinDown,ACTIVE);
|
||||
|
||||
int velocity;
|
||||
if (inverted) velocity = map(dif, 0, 10, 0, 255);
|
||||
else velocity = map(dif, 0, 10, 255, 0);
|
||||
if (inverted) velocity = map(dif, 0, 255/10, 0, 255);
|
||||
else velocity = map(dif, 0, 255/10, 255, 0);
|
||||
|
||||
if (velocity>255) velocity=255;
|
||||
if (velocity<0) velocity=0;
|
||||
@@ -277,7 +277,7 @@ case S_NOTFOUND:
|
||||
toExecute = true;
|
||||
debugSerial<<F("Forced execution");
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
//case S_ESET:
|
||||
if (!cmd.isValue()) return 0;
|
||||
// item->setVal(cmd.getPercents());
|
||||
if (item->getExt()) item->setExt(millisNZ()); //Extend motor time
|
||||
|
||||
@@ -3,9 +3,10 @@
|
||||
#ifndef MOTOR_DISABLE
|
||||
#include <abstractout.h>
|
||||
#include <item.h>
|
||||
#include "itemCmd.h"
|
||||
|
||||
#ifndef POS_ERR
|
||||
#define POS_ERR 5
|
||||
#define POS_ERR 10
|
||||
#endif
|
||||
|
||||
#define MIN_PWM 70
|
||||
@@ -24,8 +25,9 @@ public:
|
||||
int Poll(short cause) override;
|
||||
int Stop() override;
|
||||
int Status() override;
|
||||
int isActive() override;
|
||||
//int isActive() override;
|
||||
int getChanType() override;
|
||||
int getDefaultStorageType(){return ST_PERCENTS255;};
|
||||
//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) override;
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ bool out_pid::getConfig()
|
||||
return false;
|
||||
}
|
||||
double outMin=0.;
|
||||
double outMax=100.;
|
||||
double outMax=255.;
|
||||
aJsonObject * param;
|
||||
switch (aJson.getArraySize(kPIDObj))
|
||||
{ case 5:
|
||||
@@ -89,6 +89,7 @@ bool out_pid::getConfig()
|
||||
|
||||
int out_pid::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
if (!store) store= (pidPersistent *)item->setPersistent(new pidPersistent);
|
||||
if (!store)
|
||||
{ errorSerial<<F("PID: Out of memory")<<endl;
|
||||
@@ -98,6 +99,7 @@ store->pid=NULL;
|
||||
if (getConfig())
|
||||
{
|
||||
infoSerial<<F("PID config loaded ")<< item->itemArr->name<<endl;
|
||||
item->On(); // Turn ON pid by default
|
||||
store->driverStatus = CST_INITIALIZED;
|
||||
return 1;
|
||||
}
|
||||
@@ -141,7 +143,7 @@ if (store && store->pid && (Status() == CST_INITIALIZED) && item && (item->getCm
|
||||
//if (abs(store->output-store-prevOut)>OUTPUT_TRESHOLD)
|
||||
{
|
||||
aJsonObject * oCmd = aJson.getArrayItem(item->itemArg, 1);
|
||||
itemCmd value((float) (store->output * (100./255.)));
|
||||
itemCmd value((float) (store->output));// * (100./255.)));
|
||||
executeCommand(oCmd,-1,value);
|
||||
}
|
||||
|
||||
@@ -183,7 +185,7 @@ return 1;
|
||||
|
||||
case S_NOTFOUND:
|
||||
case S_SET:
|
||||
case S_ESET:
|
||||
//case S_ESET:
|
||||
// Setpoint for PID
|
||||
if (!cmd.isValue()) return 0;
|
||||
store->setpoint=cmd.getFloat();
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <abstractout.h>
|
||||
#include <item.h>
|
||||
#include <PID_v1.h>
|
||||
#include "itemCmd.h"
|
||||
|
||||
#define OUTPUT_TRESHOLD 1
|
||||
|
||||
@@ -29,6 +30,7 @@ public:
|
||||
int Status() override;
|
||||
int isActive() override;
|
||||
int getChanType() override;
|
||||
int getDefaultStorageType(){return ST_FLOAT;};
|
||||
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true) override;
|
||||
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ void analogWrite(int pin, int val)
|
||||
|
||||
int out_pwm::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
debugSerial<<F("PWM-Out Init")<<endl;
|
||||
if (!item || iaddr) return 0;
|
||||
|
||||
@@ -142,7 +143,7 @@ switch (cmd.getCmd()){
|
||||
storageType=ST_RGBW;
|
||||
break;
|
||||
default:
|
||||
storageType=ST_PERCENTS;
|
||||
storageType=ST_PERCENTS255;
|
||||
}
|
||||
|
||||
itemCmd st(storageType,CMD_VOID);
|
||||
|
||||
@@ -43,6 +43,7 @@ void out_SPILed::getConfig()
|
||||
|
||||
int out_SPILed::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
getConfig();
|
||||
Serial.println("SPI-LED Init");
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#define TIMEOUT_REINIT 5000UL
|
||||
#define TIMEOUT_RETAIN 5000UL
|
||||
#define INTERVAL_1W 5000UL
|
||||
#define PERIOD_THERMOSTAT_FAILED (300 * 1000UL)>>8
|
||||
#define PERIOD_THERMOSTAT_FAILED (500 * 1000UL)>>8
|
||||
|
||||
//#define T_ATTEMPTS 200
|
||||
//#define IET_TEMP 0
|
||||
|
||||
Reference in New Issue
Block a user