mirror of
https://github.com/anklimov/lighthub
synced 2025-12-06 11:49:51 +03:00
core fixes (int & tens val<1), mbus optimization
This commit is contained in:
@@ -19,7 +19,7 @@ int abstractCh::publishTopic(const char* topic, long value, const char* subtopic
|
|||||||
int abstractCh::publishTopic(const char* topic, float value, const char* subtopic)
|
int abstractCh::publishTopic(const char* topic, float value, const char* subtopic)
|
||||||
{
|
{
|
||||||
char valstr[16];
|
char valstr[16];
|
||||||
printFloatValueToStr(value, valstr);
|
printFloatValueToStr(valstr, value);
|
||||||
return publishTopic(topic, valstr,subtopic);
|
return publishTopic(topic, valstr,subtopic);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ int abstractIn::publish(long value, const char* subtopic)
|
|||||||
int abstractIn::publish(float value, const char* subtopic)
|
int abstractIn::publish(float value, const char* subtopic)
|
||||||
{
|
{
|
||||||
char valstr[16];
|
char valstr[16];
|
||||||
printFloatValueToStr(value, valstr);
|
printFloatValueToStr(valstr, value);
|
||||||
return publish(valstr,subtopic);
|
return publish(valstr,subtopic);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -503,11 +503,11 @@ debugSerial << F("IN:") << pin << F(" DHT22 type. T=") << temp << F("°C H=") <<
|
|||||||
strncpy(addrstr, emit->valuestring, sizeof(addrstr));
|
strncpy(addrstr, emit->valuestring, sizeof(addrstr));
|
||||||
if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestring);
|
if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestring);
|
||||||
strcat(addrstr, "T");
|
strcat(addrstr, "T");
|
||||||
printFloatValueToStr(temp, valstr);
|
printFloatValueToStr(valstr, temp);
|
||||||
if (mqttClient.connected() && !ethernetIdleCount)
|
if (mqttClient.connected() && !ethernetIdleCount)
|
||||||
mqttClient.publish(addrstr, valstr);
|
mqttClient.publish(addrstr, valstr);
|
||||||
addrstr[strlen(addrstr) - 1] = 'H';
|
addrstr[strlen(addrstr) - 1] = 'H';
|
||||||
printFloatValueToStr(humidity, valstr);
|
printFloatValueToStr(valstr, humidity);
|
||||||
if (mqttClient.connected() && !ethernetIdleCount)
|
if (mqttClient.connected() && !ethernetIdleCount)
|
||||||
mqttClient.publish(addrstr, valstr);
|
mqttClient.publish(addrstr, valstr);
|
||||||
|
|
||||||
|
|||||||
@@ -1340,6 +1340,9 @@ char * itemCmd::toString(char * Buffer, int bufLen, int sendFlags, bool scale100
|
|||||||
snprintf(argPtr, bufLen, "%ld", param.asInt32);
|
snprintf(argPtr, bufLen, "%ld", param.asInt32);
|
||||||
break;
|
break;
|
||||||
case ST_TENS:
|
case ST_TENS:
|
||||||
|
if (param.asInt32<0)
|
||||||
|
snprintf(argPtr, bufLen, "-%ld.%0"QUOTE(TENS_FRACT_LEN)"d", abs(param.asInt32)/TENS_BASE, abs(param.asInt32 % TENS_BASE));
|
||||||
|
else
|
||||||
snprintf(argPtr, bufLen, "%ld.%0"QUOTE(TENS_FRACT_LEN)"d", param.asInt32/TENS_BASE, abs(param.asInt32 % TENS_BASE));
|
snprintf(argPtr, bufLen, "%ld.%0"QUOTE(TENS_FRACT_LEN)"d", param.asInt32/TENS_BASE, abs(param.asInt32 % TENS_BASE));
|
||||||
break;
|
break;
|
||||||
case ST_HSV255:
|
case ST_HSV255:
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ void out_counter::getConfig()
|
|||||||
if (!item) return;
|
if (!item) return;
|
||||||
impulse = item->getFloatArg(0);
|
impulse = item->getFloatArg(0);
|
||||||
period = item->getFloatArg(1)*1000.0;
|
period = item->getFloatArg(1)*1000.0;
|
||||||
|
//debugSerial<<"CTR: imp:"<<impulse<<" period:"<<period<<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int out_counter::Setup()
|
int out_counter::Setup()
|
||||||
@@ -38,7 +39,7 @@ return driverStatus;
|
|||||||
|
|
||||||
int out_counter::Poll(short cause)
|
int out_counter::Poll(short cause)
|
||||||
{
|
{
|
||||||
if (cause==POLLING_SLOW) return 0;
|
if (cause==POLLING_SLOW || cause==POLLING_INT) return 0;
|
||||||
if (!item) return 0;
|
if (!item) return 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -47,13 +48,18 @@ uint32_t timer = item->getExt();
|
|||||||
if (timer && period && isTimeOver(timer,millis(),period))
|
if (timer && period && isTimeOver(timer,millis(),period))
|
||||||
{
|
{
|
||||||
item->setExt(millisNZ());
|
item->setExt(millisNZ());
|
||||||
|
|
||||||
itemCmd st;
|
itemCmd st;
|
||||||
st.loadItem(item,SEND_PARAMETERS|SEND_COMMAND);
|
st.loadItem(item,SEND_PARAMETERS|SEND_COMMAND);
|
||||||
float val = st.getFloat();
|
float val = st.getFloat();
|
||||||
//short cmd = st.getCmd();
|
//short cmd = st.getCmd();
|
||||||
|
debugSerial<<"CTR: tick val:"<<val<<endl;
|
||||||
|
|
||||||
val+=impulse;
|
val+=impulse;
|
||||||
st.Float(val);
|
st.Float(val);
|
||||||
st.saveItem(item);
|
st.saveItem(item);
|
||||||
|
debugSerial<<"CTR: tick saved val:"<<val<<endl;
|
||||||
|
item->SendStatus(SEND_PARAMETERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -82,13 +88,11 @@ case S_SET:
|
|||||||
if (!item->getExt())
|
if (!item->getExt())
|
||||||
{
|
{
|
||||||
item->setExt(millisNZ());
|
item->setExt(millisNZ());
|
||||||
//relay(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
item->setExt(0);
|
item->setExt(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@@ -105,13 +109,11 @@ case S_CMD:
|
|||||||
if (!item->getExt())
|
if (!item->getExt())
|
||||||
{
|
{
|
||||||
item->setExt(millisNZ());
|
item->setExt(millisNZ());
|
||||||
//relay(true);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case CMD_OFF:
|
case CMD_OFF:
|
||||||
item->setExt(0);
|
item->setExt(0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ extern aJsonObject *modbusObj;
|
|||||||
extern ModbusMaster node;
|
extern ModbusMaster node;
|
||||||
extern short modbusBusy;
|
extern short modbusBusy;
|
||||||
extern void modbusIdle(void) ;
|
extern void modbusIdle(void) ;
|
||||||
|
static uint32_t mbusSlenceTimer = 0;
|
||||||
|
|
||||||
struct reg_t
|
struct reg_t
|
||||||
{
|
{
|
||||||
@@ -116,13 +117,13 @@ bool out_Modbus::getConfig()
|
|||||||
aJsonObject * templateIdObj = aJson.getArrayItem(item->itemArg, 1);
|
aJsonObject * templateIdObj = aJson.getArrayItem(item->itemArg, 1);
|
||||||
if (templateIdObj->type != aJson_String || !templateIdObj->valuestring)
|
if (templateIdObj->type != aJson_String || !templateIdObj->valuestring)
|
||||||
{
|
{
|
||||||
errorSerial<<F("Invalid template.")<<endl;
|
errorSerial<<F("MBUS: Invalid template.")<<endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
aJsonObject * templateObj = aJson.getObjectItem(modbusObj, templateIdObj->valuestring);
|
aJsonObject * templateObj = aJson.getObjectItem(modbusObj, templateIdObj->valuestring);
|
||||||
if (! templateObj)
|
if (! templateObj)
|
||||||
{
|
{
|
||||||
errorSerial<<F("Modbus template not found: ")<<templateIdObj->valuestring<<endl;
|
errorSerial<<F("MBUS: Modbus template not found: ")<<templateIdObj->valuestring<<endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,12 +174,12 @@ if (!store)
|
|||||||
store->timestamp=millisNZ();
|
store->timestamp=millisNZ();
|
||||||
if (getConfig())
|
if (getConfig())
|
||||||
{
|
{
|
||||||
infoSerial<<F("Modbus config loaded ")<< item->itemArr->name<<endl;
|
infoSerial<<F("MBUS: config loaded ")<< item->itemArr->name<<endl;
|
||||||
store->driverStatus = CST_INITIALIZED;
|
store->driverStatus = CST_INITIALIZED;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ errorSerial<<F("Modbus config error")<<endl;
|
{ errorSerial<<F("MBUS: config error")<<endl;
|
||||||
store->driverStatus = CST_FAILED;
|
store->driverStatus = CST_FAILED;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -187,7 +188,7 @@ else
|
|||||||
|
|
||||||
int out_Modbus::Stop()
|
int out_Modbus::Stop()
|
||||||
{
|
{
|
||||||
debugSerial.println("Modbus De-Init");
|
debugSerial.println("MBUS: De-Init");
|
||||||
|
|
||||||
delete store;
|
delete store;
|
||||||
item->setPersistent(NULL);
|
item->setPersistent(NULL);
|
||||||
@@ -221,8 +222,9 @@ switch (regType) {
|
|||||||
result = node.readInputRegisters(reg, count);
|
result = node.readInputRegisters(reg, count);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
debugSerial<<F("Not supported reg type\n");
|
debugSerial<<F("MBUS: Not supported reg type\n");
|
||||||
}
|
}
|
||||||
|
mbusSlenceTimer = millisNZ();
|
||||||
if (result != node.ku8MBSuccess) errorSerial<<F("MBUS: Polling error ")<<_HEX(result)<<endl;
|
if (result != node.ku8MBSuccess) errorSerial<<F("MBUS: Polling error ")<<_HEX(result)<<endl;
|
||||||
return (result == node.ku8MBSuccess);
|
return (result == node.ku8MBSuccess);
|
||||||
}
|
}
|
||||||
@@ -301,12 +303,12 @@ int out_Modbus::findRegister(int registerNum, int posInBuffer, int regType)
|
|||||||
mappedParam.Float((int32_t) (int16_t) data/100.);
|
mappedParam.Float((int32_t) (int16_t) data/100.);
|
||||||
}
|
}
|
||||||
|
|
||||||
debugSerial << F("MB got ")<<mappedParam.toString(buf,sizeof(buf))<< F(" from ")<<regType<<F(":")<<paramObj->name<<endl;
|
debugSerial << F("MBUSD: got ")<<mappedParam.toString(buf,sizeof(buf))<< F(" from ")<<regType<<F(":")<<paramObj->name<<endl;
|
||||||
|
|
||||||
if (mapObj && (mapObj->type==aJson_Array || mapObj->type==aJson_Object))
|
if (mapObj && (mapObj->type==aJson_Array || mapObj->type==aJson_Object))
|
||||||
{
|
{
|
||||||
mappedParam=mappedParam.doReverseMapping(mapObj);
|
mappedParam=mappedParam.doReverseMapping(mapObj);
|
||||||
debugSerial << F("Mapped:")<<mappedParam.toString(buf,sizeof(buf))<<endl;
|
debugSerial << F("MBUSD: Mapped:")<<mappedParam.toString(buf,sizeof(buf))<<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
||||||
@@ -328,7 +330,7 @@ int out_Modbus::findRegister(int registerNum, int posInBuffer, int regType)
|
|||||||
}
|
}
|
||||||
else //No container to store value yet
|
else //No container to store value yet
|
||||||
{
|
{
|
||||||
debugSerial<<F("Add @S: ")<<paramObj->name<<endl;
|
debugSerial<<F("MBUS: Add @S: ")<<paramObj->name<<endl;
|
||||||
aJson.addNumberToObject(execObj, "@S", (long) param);
|
aJson.addNumberToObject(execObj, "@S", (long) param);
|
||||||
}
|
}
|
||||||
if (submitParam)
|
if (submitParam)
|
||||||
@@ -338,7 +340,7 @@ int out_Modbus::findRegister(int registerNum, int posInBuffer, int regType)
|
|||||||
aJsonObject *settedValue = aJson.getObjectItem(execObj,"@V");
|
aJsonObject *settedValue = aJson.getObjectItem(execObj,"@V");
|
||||||
if (settedValue && settedValue->type==aJson_Int && (settedValue->valueint == param))
|
if (settedValue && settedValue->type==aJson_Int && (settedValue->valueint == param))
|
||||||
{
|
{
|
||||||
debugSerial<<F("Ignored - equal with setted val")<<endl;
|
debugSerial<<F("MBUSD: Ignored - equal with setted val")<<endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -416,7 +418,7 @@ void out_Modbus::initLine()
|
|||||||
#else
|
#else
|
||||||
modbusSerial.begin(store->baud, (store->serialParam));
|
modbusSerial.begin(store->baud, (store->serialParam));
|
||||||
#endif
|
#endif
|
||||||
debugSerial<< store->baud << F("---")<< store->serialParam<<endl;
|
//debugSerial<< store->baud << F("---")<< store->serialParam<<endl;
|
||||||
node.begin(item->getArg(0), modbusSerial);
|
node.begin(item->getArg(0), modbusSerial);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -458,7 +460,8 @@ int out_Modbus::sendModbus(char * paramName, int32_t value, uint8_t regType)
|
|||||||
res = node.writeSingleRegister(regObj->valueint,(value & 0xFFFF)>> 8);
|
res = node.writeSingleRegister(regObj->valueint,(value & 0xFFFF)>> 8);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
debugSerial<<F("MB_SEND Res: ")<<res<<F(" ")<<paramName<<" reg:"<<regObj->valueint<<F(" val:")<<value<<F(" ival:")<<(int32_t) value<<endl;
|
mbusSlenceTimer = millisNZ();
|
||||||
|
debugSerial<<F("Res: ")<<res<<F(" ")<<paramName<<" reg:"<<regObj->valueint<<F(" val:")<<value<<endl;
|
||||||
return ( res == 0);
|
return ( res == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -467,7 +470,7 @@ int out_Modbus::Poll(short cause)
|
|||||||
if (cause==POLLING_SLOW) return 0;
|
if (cause==POLLING_SLOW) return 0;
|
||||||
bool lineInitialized = false;
|
bool lineInitialized = false;
|
||||||
|
|
||||||
if (modbusBusy || (Status() != CST_INITIALIZED)) return 0;
|
if (modbusBusy || (Status() != CST_INITIALIZED) || ( mbusSlenceTimer && !isTimeOver(mbusSlenceTimer,millis(),100))) return 0;
|
||||||
|
|
||||||
aJsonObject * itemParametersObj = aJson.getArrayItem(item->itemArg, 2);
|
aJsonObject * itemParametersObj = aJson.getArrayItem(item->itemArg, 2);
|
||||||
if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
||||||
@@ -486,18 +489,22 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
|||||||
lineInitialized=true;
|
lineInitialized=true;
|
||||||
initLine();
|
initLine();
|
||||||
}
|
}
|
||||||
|
debugSerial<<"MBUS: SEND "<<item->itemArr->name<<" ";
|
||||||
switch (sendModbus(execObj->name,outValue->valueint,outValue->subtype))
|
switch (sendModbus(execObj->name,outValue->valueint,outValue->subtype))
|
||||||
{
|
{
|
||||||
case 1: //success
|
case 1: //success
|
||||||
execObj->subtype&=~ MB_NEED_SEND;
|
execObj->subtype&=~ MB_NEED_SEND;
|
||||||
|
///return 1; //relax
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 0: //fault
|
case 0: //fault
|
||||||
execObj->subtype |= MB_SEND_ERROR;
|
execObj->subtype |= MB_SEND_ERROR;
|
||||||
errorSerial<<F("MBus ")<<execObj->name<<F(" send error")<<endl;
|
errorSerial<<F("MBUS: ")<<execObj->name<<F(" send error. ");
|
||||||
if ((execObj->subtype & 3) != MB_SEND_ATTEMPTS) execObj->subtype++;
|
if ((execObj->subtype & 3) != MB_SEND_ATTEMPTS) execObj->subtype++;
|
||||||
|
errorSerial<<"Attempt: "<< (execObj->subtype & 3) <<endl;
|
||||||
break;
|
break;
|
||||||
default: //param not found
|
default: //param not found
|
||||||
errorSerial<<F("MBus param ")<<execObj->name<<F(" not found")<<endl;
|
errorSerial<<F("MBUS: param ")<<execObj->name<<F(" not found")<<endl;
|
||||||
execObj->subtype&=~ MB_NEED_SEND;
|
execObj->subtype&=~ MB_NEED_SEND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -508,7 +515,7 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (isTimeOver(store->timestamp,millis(),store->pollingInterval))
|
if (isTimeOver(store->timestamp,millis(),store->pollingInterval) && ( !mbusSlenceTimer || isTimeOver(mbusSlenceTimer,millis(),100)))
|
||||||
{
|
{
|
||||||
|
|
||||||
// Clean_up SEND_ERROR flag
|
// Clean_up SEND_ERROR flag
|
||||||
@@ -518,7 +525,14 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
|||||||
while (execObj && execObj->type == aJson_Object)
|
while (execObj && execObj->type == aJson_Object)
|
||||||
{
|
{
|
||||||
if (execObj->subtype & MB_SEND_ERROR) execObj->subtype&=~ MB_SEND_ERROR;
|
if (execObj->subtype & MB_SEND_ERROR) execObj->subtype&=~ MB_SEND_ERROR;
|
||||||
if ((execObj->subtype & 0x3) >= MB_SEND_ATTEMPTS) execObj->subtype&=~ MB_NEED_SEND;
|
if ((execObj->subtype & 0x3) >= MB_SEND_ATTEMPTS)
|
||||||
|
{
|
||||||
|
//execObj->subtype&=~ MB_NEED_SEND;
|
||||||
|
//Clean ERROR, NEED, Attempts
|
||||||
|
errorSerial<<"MBUS: send failed "<<item->itemArr->name<<endl;
|
||||||
|
execObj->subtype = 0;
|
||||||
|
}
|
||||||
|
|
||||||
execObj=execObj->next;
|
execObj=execObj->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -526,7 +540,7 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
|||||||
// if some polling configured
|
// if some polling configured
|
||||||
if (store->pollingRegisters || store->pollingIrs)
|
if (store->pollingRegisters || store->pollingIrs)
|
||||||
{
|
{
|
||||||
debugSerial<<F("Poll ")<< item->itemArr->name << endl;
|
debugSerial<<F("MBUSD: Poll ")<< item->itemArr->name << endl;
|
||||||
modbusBusy=1;
|
modbusBusy=1;
|
||||||
|
|
||||||
if (!lineInitialized)
|
if (!lineInitialized)
|
||||||
@@ -537,7 +551,7 @@ if (store->pollingRegisters || store->pollingIrs)
|
|||||||
|
|
||||||
pollModbus(store->pollingRegisters,MODBUS_HOLDING_REG_TYPE);
|
pollModbus(store->pollingRegisters,MODBUS_HOLDING_REG_TYPE);
|
||||||
pollModbus(store->pollingIrs,MODBUS_INPUT_REG_TYPE);
|
pollModbus(store->pollingIrs,MODBUS_INPUT_REG_TYPE);
|
||||||
debugSerial<<F("endPoll ")<< item->itemArr->name << endl;
|
debugSerial<<F("MBUSD: endPoll ")<< item->itemArr->name << endl;
|
||||||
|
|
||||||
//Non blocking waiting to release line
|
//Non blocking waiting to release line
|
||||||
uint32_t time = millis();
|
uint32_t time = millis();
|
||||||
@@ -599,7 +613,7 @@ aJsonObject * mapObj = aJson.getObjectItem(templateParamObj, "map");
|
|||||||
Value=cmdValue.getTens_raw()*(100/TENS_BASE);
|
Value=cmdValue.getTens_raw()*(100/TENS_BASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
debugSerial<<F("MB suffix:")<<suffixStr<< F(" Val: ")<<Value<<endl;
|
debugSerial<<F("MBUSD: suffix:")<<suffixStr<< F(" Val: ")<<Value<<endl;
|
||||||
aJsonObject * itemParametersObj = aJson.getArrayItem(item->itemArg, 2);
|
aJsonObject * itemParametersObj = aJson.getArrayItem(item->itemArg, 2);
|
||||||
if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
if (itemParametersObj && itemParametersObj->type ==aJson_Object)
|
||||||
{
|
{
|
||||||
@@ -680,7 +694,7 @@ else
|
|||||||
}
|
}
|
||||||
templateParamObj=templateParamObj->next;
|
templateParamObj=templateParamObj->next;
|
||||||
}
|
}
|
||||||
if (!suffixFinded) errorSerial<<F("No template for ")<<subItem<<F(" or suffix ")<<suffixCode<<endl;
|
if (!suffixFinded) errorSerial<<F("MBUS: No template for ")<<subItem<<F(" or suffix ")<<suffixCode<<endl;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,11 +341,13 @@ case S_CMD:
|
|||||||
case CMD_ENABLE:
|
case CMD_ENABLE:
|
||||||
item->setCmd(CMD_ENABLE);
|
item->setCmd(CMD_ENABLE);
|
||||||
item->SendStatus(SEND_COMMAND);
|
item->SendStatus(SEND_COMMAND);
|
||||||
|
//executeCommand(oCmd,-1,value);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case CMD_DISABLE:
|
case CMD_DISABLE:
|
||||||
item->setCmd(CMD_DISABLE);
|
item->setCmd(CMD_DISABLE);
|
||||||
item->SendStatus(SEND_COMMAND);
|
item->SendStatus(SEND_COMMAND);
|
||||||
|
//executeCommand(oCmd,-1,value);
|
||||||
return 1;
|
return 1;
|
||||||
/*
|
/*
|
||||||
case CMD_OFF:
|
case CMD_OFF:
|
||||||
|
|||||||
@@ -124,9 +124,14 @@ itemCmd getNumber(char **chan) {
|
|||||||
long fractnumbers = 0;
|
long fractnumbers = 0;
|
||||||
short fractlen = 0;
|
short fractlen = 0;
|
||||||
short intlen = 0;
|
short intlen = 0;
|
||||||
|
bool negative = false;
|
||||||
|
|
||||||
char * intptr = * chan;
|
char * intptr = * chan;
|
||||||
if (*intptr == '-') intptr ++;
|
if (*intptr == '-')
|
||||||
|
{
|
||||||
|
negative=true;
|
||||||
|
intptr ++;
|
||||||
|
}
|
||||||
while (isDigit(*(intptr+intlen))) intlen++;
|
while (isDigit(*(intptr+intlen))) intlen++;
|
||||||
|
|
||||||
char * fractptr = strchr(*chan,'.');
|
char * fractptr = strchr(*chan,'.');
|
||||||
@@ -146,7 +151,7 @@ itemCmd getNumber(char **chan) {
|
|||||||
else if (fractlen<=TENS_FRACT_LEN && intlen+TENS_FRACT_LEN<=9)
|
else if (fractlen<=TENS_FRACT_LEN && intlen+TENS_FRACT_LEN<=9)
|
||||||
{
|
{
|
||||||
long intpart = atol(*chan);
|
long intpart = atol(*chan);
|
||||||
val.Tens_raw(intpart*TENS_BASE+((intpart>=0)?fractnumbers:-fractnumbers));
|
val.Tens_raw(intpart*TENS_BASE+((negative)?-fractnumbers:fractnumbers));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
val.Float(atof(*chan));
|
val.Float(atof(*chan));
|
||||||
@@ -243,7 +248,7 @@ void parseBytes(const char *str, char separator, byte *bytes, int maxBytes, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void printFloatValueToStr(float value, char *valstr) {
|
void printFloatValueToStr(char *valstr, float value) {
|
||||||
#if defined(ESP8266) || defined(ARDUINO_ARCH_ESP32)
|
#if defined(ESP8266) || defined(ARDUINO_ARCH_ESP32)
|
||||||
sprintf(valstr, "%2.1f", value);
|
sprintf(valstr, "%2.1f", value);
|
||||||
#endif
|
#endif
|
||||||
@@ -499,6 +504,8 @@ return buf;
|
|||||||
|
|
||||||
|
|
||||||
void printUlongValueToStr(char *valstr, unsigned long value) {
|
void printUlongValueToStr(char *valstr, unsigned long value) {
|
||||||
|
ultoa(value,valstr,10);
|
||||||
|
/*
|
||||||
char buf[11];
|
char buf[11];
|
||||||
int i=0;
|
int i=0;
|
||||||
for(;value>0;i++){
|
for(;value>0;i++){
|
||||||
@@ -510,7 +517,7 @@ void printUlongValueToStr(char *valstr, unsigned long value) {
|
|||||||
for(int n=0;n<=i;n++){
|
for(int n=0;n<=i;n++){
|
||||||
valstr[n]=buf[i-n-1];
|
valstr[n]=buf[i-n-1];
|
||||||
}
|
}
|
||||||
valstr[i]='\0';
|
valstr[i]='\0';*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -771,7 +778,7 @@ const serial_st serialModes_P[] PROGMEM =
|
|||||||
#define serialModesNum sizeof(serialModes_P)/sizeof(serial_st)
|
#define serialModesNum sizeof(serialModes_P)/sizeof(serial_st)
|
||||||
|
|
||||||
serialParamType str2SerialParam(char * str)
|
serialParamType str2SerialParam(char * str)
|
||||||
{ debugSerial<<str<<F(" =>");
|
{ //debugSerial<<str<<F(" =>");
|
||||||
for(uint8_t i=0; i<serialModesNum && str;i++)
|
for(uint8_t i=0; i<serialModesNum && str;i++)
|
||||||
if (strcmp_P(str, serialModes_P[i].verb) == 0)
|
if (strcmp_P(str, serialModes_P[i].verb) == 0)
|
||||||
{
|
{
|
||||||
@@ -782,7 +789,7 @@ serialParamType str2SerialParam(char * str)
|
|||||||
else
|
else
|
||||||
return pgm_read_word_near(&serialModes_P[i].mode);
|
return pgm_read_word_near(&serialModes_P[i].mode);
|
||||||
}
|
}
|
||||||
debugSerial<< F("Default serial mode N81 used");
|
debugSerial<< F("Default serial mode N81 used")<<endl;
|
||||||
return static_cast<serialParamType> (SERIAL_8N1);
|
return static_cast<serialParamType> (SERIAL_8N1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ itemCmd getNumber(char ** chan);
|
|||||||
unsigned long freeRam ();
|
unsigned long freeRam ();
|
||||||
void parseBytes(const char* str, char separator, byte* bytes, int maxBytes, int base);
|
void parseBytes(const char* str, char separator, byte* bytes, int maxBytes, int base);
|
||||||
int log(const char *str, ...);
|
int log(const char *str, ...);
|
||||||
void printFloatValueToStr(float value, char *valstr);
|
void printFloatValueToStr(char *valstr, float value);
|
||||||
void ReadUniqueID( uint32_t * pdwUniqueID );
|
void ReadUniqueID( uint32_t * pdwUniqueID );
|
||||||
int _inet_aton(const char* aIPAddrString, IPAddress& aResult);
|
int _inet_aton(const char* aIPAddrString, IPAddress& aResult);
|
||||||
char *_inet_ntoa_r(IPAddress addr, char *buf, int buflen);
|
char *_inet_ntoa_r(IPAddress addr, char *buf, int buflen);
|
||||||
|
|||||||
Reference in New Issue
Block a user