Merge pull request #59 from anklimov/develop

sync to Develop branch
This commit is contained in:
2021-10-06 01:09:11 +03:00
committed by GitHub
8 changed files with 68 additions and 24 deletions

View File

@@ -10,7 +10,7 @@
-DNO_HOMIE -DNO_HOMIE
-DCSSHDC_DISABLE -DCSSHDC_DISABLE
-DSPILED_DISABLE -DSPILED_DISABLE
-DAC_DISABLE #-DAC_DISABLE
-DSYSLOG_ENABLE -DSYSLOG_ENABLE
-DPID_DISABLE -DPID_DISABLE
-DOTA -DOTA

View File

@@ -31,7 +31,7 @@ int abstractCh::publishTopic(const char* topic, const char * value, const char*
{ {
strncpy(addrstr,topic,sizeof(addrstr)); strncpy(addrstr,topic,sizeof(addrstr));
if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,topic); if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,topic);
strncat(addrstr,subtopic,sizeof(addrstr)); strncat(addrstr,subtopic,sizeof(addrstr)-1);
if (mqttClient.connected() && lanStatus == OPERATION && !ethernetIdleCount) if (mqttClient.connected() && lanStatus == OPERATION && !ethernetIdleCount)
{ {
mqttClient.publish(addrstr, value, true); mqttClient.publish(addrstr, value, true);

View File

@@ -388,6 +388,14 @@ void Item::setVal(long int par) // Only store if VAL is int (autogenerated or c
itemVal->type = aJson_Int; itemVal->type = aJson_Int;
} }
void Item::setFloatVal(float par) // Only store if VAL is int (autogenerated or config-defined)
{
if (!itemVal || (itemVal->type != aJson_Int && itemVal->type != aJson_Float && itemVal->type != aJson_NULL)) return;
//debugSerial<<F(" Store ")<<F(" Val=")<<par<<endl;
itemVal->valuefloat = par;
itemVal->type = aJson_Float;
}
void Item::setSubtype(uint8_t par) // Only store if VAL is int (autogenerated or config-defined) void Item::setSubtype(uint8_t par) // Only store if VAL is int (autogenerated or config-defined)
{ {
if (!itemVal || (itemVal->type != aJson_Int && itemVal->type != aJson_Float && itemVal->type != aJson_NULL)) return; if (!itemVal || (itemVal->type != aJson_Int && itemVal->type != aJson_Float && itemVal->type != aJson_NULL)) return;
@@ -1067,9 +1075,9 @@ switch (itemType) {
pinMode(iaddr, OUTPUT); pinMode(iaddr, OUTPUT);
if (inverse) if (inverse)
digitalWrite(iaddr, k = ((icmd == CMD_ON) ? LOW : HIGH)); digitalWrite(iaddr, k = ((icmd == CMD_ON || icmd == CMD_AUTO) ? LOW : HIGH));
else else
digitalWrite(iaddr, k = ((icmd == CMD_ON) ? HIGH : LOW)); digitalWrite(iaddr, k = ((icmd == CMD_ON || icmd == CMD_AUTO) ? HIGH : LOW));
debugSerial<<F("Pin:")<<iaddr<<F("=")<<k<<endl; debugSerial<<F("Pin:")<<iaddr<<F("=")<<k<<endl;
status2Send |= SEND_COMMAND | SEND_IMMEDIATE; status2Send |= SEND_COMMAND | SEND_IMMEDIATE;
res=1; res=1;

View File

@@ -131,6 +131,7 @@ class Item
void setFlag (short flag); void setFlag (short flag);
void clearFlag (short flag); void clearFlag (short flag);
void setVal(long int par); void setVal(long int par);
void setFloatVal(float par);
void setSubtype(uint8_t par); void setSubtype(uint8_t par);
int Poll(int cause); int Poll(int cause);
int SendStatus(int sendFlags); int SendStatus(int sendFlags);

View File

@@ -362,12 +362,18 @@ itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
break; break;
case ST_VOID: case ST_VOID:
break; break;
case ST_STRING:
cmd.itemArgType=from.cmd.itemArgType;
param.asString=from.param.asString;
break;
default: default:
debugSerial<<F("Wrong Assignment ")<<from.cmd.itemArgType<<F("->")<<cmd.itemArgType<<endl; debugSerial<<F("Wrong Assignment ")<<from.cmd.itemArgType<<F("->")<<cmd.itemArgType<<endl;
} }
break; break;
case ST_VOID: case ST_VOID:
cmd.itemArgType=from.cmd.itemArgType; cmd.itemArgType=from.cmd.itemArgType;
param=from.param;
break;
case ST_INT32: case ST_INT32:
case ST_UINT32: case ST_UINT32:
@@ -379,12 +385,17 @@ itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
param.h=from.param.h; param.h=from.param.h;
param.s=from.param.s; param.s=from.param.s;
cmd.itemArgType=ST_HSV255; cmd.itemArgType=ST_HSV255;
break;
case ST_STRING:
cmd.itemArgType=from.cmd.itemArgType;
param.asString=from.param.asString;
break;
default: default:
param.asInt32=from.param.asInt32; param.asInt32=from.param.asInt32;
cmd.itemArgType=from.cmd.itemArgType; cmd.itemArgType=from.cmd.itemArgType;
} }
break; break;
case ST_HS: case ST_HS: //ToDo - string ?
param.v=from.getPercents255(); param.v=from.getPercents255();
cmd.itemArgType=ST_HSV255; cmd.itemArgType=ST_HSV255;
break; break;
@@ -394,6 +405,11 @@ itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
case ST_FLOAT_CELSIUS: case ST_FLOAT_CELSIUS:
switch (from.cmd.itemArgType) switch (from.cmd.itemArgType)
{ {
case ST_STRING:
cmd.itemArgType=from.cmd.itemArgType;
param.asString=from.param.asString;
break;
case ST_TENS: case ST_TENS:
param.asfloat=from.param.asInt32/10.; param.asfloat=from.param.asInt32/10.;
break; break;
@@ -441,6 +457,10 @@ itemCmd itemCmd::assignFrom(itemCmd from, short chanType)
case ST_RGB: case ST_RGB:
switch (from.cmd.itemArgType) switch (from.cmd.itemArgType)
{ {
case ST_STRING:
cmd.itemArgType=from.cmd.itemArgType;
param.asString=from.param.asString;
break;
case ST_RGBW: case ST_RGBW:
// RGBW_flag=true; // RGBW_flag=true;
case ST_RGB: case ST_RGB:
@@ -950,13 +970,13 @@ bool itemCmd::loadItem(Item * item, uint16_t optionsFlag)
Int((int32_t)item->itemVal->valueint); Int((int32_t)item->itemVal->valueint);
//debugSerial<<F("Loaded Int:"); //debugSerial<<F("Loaded Int:");
debugOut(); //debugOut();
return true; return true;
case aJson_Float: case aJson_Float:
Float(item->itemVal->valueint); Float(item->itemVal->valuefloat);
//debugSerial<<F("Loaded Float:"); //debugSerial<<F("Loaded Float:");
debugOut(); //debugOut();
return true; return true;
} }
@@ -988,7 +1008,20 @@ bool itemCmd::saveItem(Item * item, uint16_t optionsFlag)
{ {
if (optionsFlag & SEND_COMMAND) item->setCmd(cmd.cmdCode); if (optionsFlag & SEND_COMMAND) item->setCmd(cmd.cmdCode);
if (optionsFlag & SEND_PARAMETERS) if (optionsFlag & SEND_PARAMETERS)
switch (cmd.itemArgType)
{ {
case ST_FLOAT:
case ST_FLOAT_CELSIUS:
item->setFloatVal(param.asfloat);
//
break;
case ST_INT32:
case ST_UINT32:
item->setVal(param.asInt32);
break;
default:
item->setSubtype(cmd.itemArgType); item->setSubtype(cmd.itemArgType);
item->setVal(param.asInt32); item->setVal(param.asInt32);
} }

View File

@@ -1494,15 +1494,14 @@ lan_status loadConfigFromHttp(int arg_cnt, char **args)
} else { } else {
errorSerial<<F("ERROR: Server returned "); errorSerial<<F("ERROR: Server returned ");
errorSerial<<responseStatusCode<<endl; errorSerial<<responseStatusCode<<endl;
// timerLanCheckTime = millis();// + 5000; if (configLoaded) return IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
return READ_RE_CONFIG;//-11; else return READ_RE_CONFIG; //Load from NVRAM
} }
} else { } else {
debugSerial<<F("failed to connect\n"); debugSerial<<F("failed to connect\n");
// debugSerial<<F(" try again in 5 seconds\n"); if (configLoaded) return IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
// timerLanCheckTime = millis();// + 5000; else return READ_RE_CONFIG; //Load from NVRAM
return READ_RE_CONFIG;//-11;
} }
#endif #endif
#if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32) || defined (NRF5) //|| defined(ARDUINO_ARCH_ESP32) //|| defined(ARDUINO_ARCH_ESP8266) #if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32) || defined (NRF5) //|| defined(ARDUINO_ARCH_ESP32) //|| defined(ARDUINO_ARCH_ESP8266)
@@ -1550,11 +1549,13 @@ lan_status loadConfigFromHttp(int arg_cnt, char **args)
} }
} else { } else {
errorSerial<<F("Config retrieving failed\n"); errorSerial<<F("Config retrieving failed\n");
return READ_RE_CONFIG;//-11; //Load from NVRAM if (configLoaded) return IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
else return READ_RE_CONFIG; //Load from NVRAM
} }
} else { } else {
errorSerial<<F("Connect failed\n"); errorSerial<<F("Connect failed\n");
return READ_RE_CONFIG;//-11; //Load from NVRAM if (configLoaded) return IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
else return READ_RE_CONFIG; //Load from NVRAM
} }
#endif #endif
@@ -1594,12 +1595,14 @@ lan_status loadConfigFromHttp(int arg_cnt, char **args)
} }
} else { } else {
errorSerial<<F("Config retrieving failed\n"); errorSerial<<F("Config retrieving failed\n");
return READ_RE_CONFIG;//-11; //Load from NVRAM if (configLoaded) return IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
else return READ_RE_CONFIG; //Load from NVRAM
} }
} else { } else {
errorSerial.printf("[HTTP] GET... failed, error: %s\n", httpClient.errorToString(httpResponseCode).c_str()); errorSerial.printf("[HTTP] GET... failed, error: %s\n", httpClient.errorToString(httpResponseCode).c_str());
httpClient.end(); httpClient.end();
return READ_RE_CONFIG; if (configLoaded) return IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;
else return READ_RE_CONFIG; //Load from NVRAM
} }
httpClient.end(); httpClient.end();
#endif #endif

View File

@@ -208,7 +208,6 @@ enum lan_status {
RETAINING_COLLECTING = 5, RETAINING_COLLECTING = 5,
OPERATION = 6, OPERATION = 6,
OPERATION_NO_MQTT = 7, OPERATION_NO_MQTT = 7,
DO_REINIT = -10, DO_REINIT = -10,
REINIT = - 11, REINIT = - 11,
DO_RECONNECT = 12, DO_RECONNECT = 12,

View File

@@ -18,7 +18,7 @@
#define S_LOCK S_ADDITIONAL+1 #define S_LOCK S_ADDITIONAL+1
#define S_QUIET S_ADDITIONAL+2 #define S_QUIET S_ADDITIONAL+2
#define S_SWING S_ADDITIONAL+3 #define S_SWING S_ADDITIONAL+3
#define S_RAW S_ADDITIONAL+4 //#define S_RAW S_ADDITIONAL+4
extern void modbusIdle(void) ; extern void modbusIdle(void) ;
class out_AC : public abstractOut { class out_AC : public abstractOut {