domoticz uptime, dht22, contact refactoring

This commit is contained in:
livello
2018-10-23 15:39:20 +03:00
parent 7e6842cd1d
commit 040dcfe746
2 changed files with 50 additions and 28 deletions

View File

@@ -92,17 +92,17 @@ void Input::Parse()
inType = 0; inType = 0;
pin = 0; pin = 0;
if (inputObj && (inputObj->type == aJson_Object)) { if (inputObj && (inputObj->type == aJson_Object)) {
aJsonObject *s; aJsonObject *itemBuffer;
s = aJson.getObjectItem(inputObj, "T"); itemBuffer = aJson.getObjectItem(inputObj, "T");
if (s) inType = static_cast<uint8_t>(s->valueint); if (itemBuffer) inType = static_cast<uint8_t>(itemBuffer->valueint);
pin = static_cast<uint8_t>(atoi(inputObj->name)); pin = static_cast<uint8_t>(atoi(inputObj->name));
s = aJson.getObjectItem(inputObj, "S"); itemBuffer = aJson.getObjectItem(inputObj, "S");
if (!s) { if (!itemBuffer) {
debugSerial<<F("In: ")<<pin<<F("/")<<inType<<endl; debugSerial<<F("In: ")<<pin<<F("/")<<inType<<endl;
aJson.addNumberToObject(inputObj, "S", 0); aJson.addNumberToObject(inputObj, "S", 0);
s = aJson.getObjectItem(inputObj, "S"); itemBuffer = aJson.getObjectItem(inputObj, "S");
} }
if (s) store = (inStore *) &s->valueint; if (itemBuffer) store = (inStore *) &itemBuffer->valueint;
} }
} }
@@ -222,15 +222,8 @@ void Input::dht22Poll() {
if (emit && temp && humidity && temp == temp && humidity == humidity) { if (emit && temp && humidity && temp == temp && humidity == humidity) {
char addrstr[100] = ""; char addrstr[100] = "";
#ifdef WITH_DOMOTICZ #ifdef WITH_DOMOTICZ
aJsonObject *idx = aJson.getObjectItem(inputObj, "idx"); if(getIdxField()){
if (idx && idx->valuestring) {//DOMOTICZ json format support publishDataToDomoticz(DHT_POLL_DELAY_DEFAULT, emit, "{\"idx\":%s,\"svalue\":\"%.1f;%.0f;0\"}", getIdxField(), temp, humidity);
debugSerial << endl << idx->valuestring << F(" Domoticz valstr:");
char valstr[50];
sprintf(valstr, "{\"idx\":%s,\"svalue\":\"%.1f;%.0f;0\"}", idx->valuestring, temp, humidity);
debugSerial << valstr;
mqttClient.publish(emit->valuestring, valstr);
setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT);
debugSerial << F(" NextPollMillis=") << nextPollTime() << endl;
return; return;
} }
#endif #endif
@@ -280,6 +273,13 @@ void Input::uptimePoll() {
return; return;
aJsonObject *emit = aJson.getObjectItem(inputObj, "emit"); aJsonObject *emit = aJson.getObjectItem(inputObj, "emit");
if (emit) { if (emit) {
#ifdef WITH_DOMOTICZ
if(getIdxField()){
publishDataToDomoticz(DHT_POLL_DELAY_DEFAULT, emit, "{\"idx\":%s,\"svalue\":\"%d\"}", getIdxField(), millis());
return;
}
#endif
char valstr[11]; char valstr[11];
// printUlongValueToStr(valstr,millis()); // printUlongValueToStr(valstr,millis());
printUlongValueToStr(valstr, millis()); printUlongValueToStr(valstr, millis());
@@ -370,15 +370,9 @@ void Input::onContactChanged(int newValue) {
aJsonObject *emit = aJson.getObjectItem(inputObj, "emit"); aJsonObject *emit = aJson.getObjectItem(inputObj, "emit");
if (emit) { if (emit) {
#ifdef WITH_DOMOTICZ #ifdef WITH_DOMOTICZ
aJsonObject *idx = aJson.getObjectItem(inputObj, "idx"); if (getIdxField()) {
if (idx->valuestring) { (newValue)? publishDataToDomoticz(0, emit, "{\"command\":\"switchlight\",\"idx\":%s,\"switchcmd\":\"On\"}", getIdxField())
debugSerial << endl << idx->valuestring << F(" Domoticz valstr:"); : publishDataToDomoticz(0,emit,"{\"command\":\"switchlight\",\"idx\":%s,\"switchcmd\":\"Off\"}",getIdxField());
char valstr[80];
char *switchCmd;
(newValue)? sprintf(valstr, "{\"command\":\"switchlight\",\"idx\":%s,\"switchcmd\":\"On\"}", idx->valuestring)
: sprintf(valstr,"{\"command\":\"switchlight\",\"idx\":%s,\"switchcmd\":\"Off\"}",idx->valuestring);
debugSerial << valstr;
mqttClient.publish(emit->valuestring, valstr);
} else } else
#endif #endif
if (newValue) { //send set command if (newValue) { //send set command
@@ -423,3 +417,28 @@ void Input::printUlongValueToStr(char *valstr, unsigned long value) {
} }
valstr[i]='\0'; valstr[i]='\0';
} }
bool Input::publishDataToDomoticz(int pollTimeIncrement, aJsonObject *emit, const char *format, ...)
{
#ifdef WITH_DOMOTICZ
debugSerial << F("\nDomoticz valstr:");
char valstr[50];
va_list args;
va_start(args, format);
vsnprintf(valstr, sizeof(valstr) - 1, format, args);
va_end(args);
debugSerial << valstr;
mqttClient.publish(emit->valuestring, valstr);
if (pollTimeIncrement)
setNextPollTime(millis() + pollTimeIncrement);
debugSerial << F(" NextPollMillis=") << nextPollTime() << endl;
#endif
return true;
}
char* Input::getIdxField() {
aJsonObject *idx = aJson.getObjectItem(inputObj, "idx");
if(idx&&idx->valuestring)
return idx->valuestring;
return nullptr;
}

View File

@@ -124,4 +124,7 @@ protected:
void uptimePoll(); void uptimePoll();
void printUlongValueToStr(char *valstr, unsigned long value); void printUlongValueToStr(char *valstr, unsigned long value);
bool publishDataToDomoticz(int , aJsonObject *, const char *format, ...);
char* getIdxField();
}; };