From 655ef79b5d4cbc4a321a83a45d8c3a18b598ab47 Mon Sep 17 00:00:00 2001 From: livello Date: Wed, 17 Oct 2018 22:02:52 +0300 Subject: [PATCH] dht_counter_disable with_domoticz printex removed because of compilation errors --- README.md | 6 +- build_flags_template.sh | 2 +- lighthub/inputs.cpp | 225 +++++++++++++++++++++------------------- lighthub/inputs.h | 2 +- lighthub/main.cpp | 25 ++--- lighthub/options.h | 4 +- lighthub/utils.h | 6 +- platformio.ini | 11 +- 8 files changed, 140 insertions(+), 141 deletions(-) diff --git a/README.md b/README.md index 540a153..d40954f 100644 --- a/README.md +++ b/README.md @@ -151,9 +151,8 @@ platformio device monitor -b 115200 * ESP_WIFI_AP=MYAP // esp wifi access point name * ESP_WIFI_PWD=MYPWD // esp wifi access point password * WIFI_MANAGER_DISABLE //Disable wifi manager for esp8266 -* DHT_DISABLE //disable DHT Input support +* DHT_COUNTER_DISABLE //disable DHT, Counter, Uptime input support (for RAM savings on mega2560) * RESTART_LAN_ON_MQTT_ERRORS //reinit LAN if many mqtt errors occured -* WITH_STREAMING_LIB use streaming libriary for serial debug output otherwise use PrintEx library * DEVICE_NAME short handy device name which is used instead of mac for download config http://{MY_CONFIG_SERVER}/{DEVICE_NAME}_config.json * SYSLOG_ENABLE enable UDP SYSLOG support feature(under DEVELOPMENT) that must be configured through config file @@ -176,10 +175,9 @@ platformio device monitor -b 115200 * Defailt MQTT input topic: /myhome/in * Default MQTT topic to publish device status: /myhome/s_out * Default Alarm output topic /alarm -* DHT support enabled +* DHT, Counter, Uptime support enabled * Wifi manager for esp8266 enabled * RESTART_LAN_ON_MQTT_ERRORS disabled -* WITH_STREAMING_LIB disabled * DEVICE_NAME disabled * SYSLOG_ENABLE disabled diff --git a/build_flags_template.sh b/build_flags_template.sh index 86372f0..6032bbf 100644 --- a/build_flags_template.sh +++ b/build_flags_template.sh @@ -20,12 +20,12 @@ # export FLAGS="$FLAGS -DESP_WIFI_AP=MYAP" # export FLAGS="$FLAGS -DESP_WIFI_PWD=MYPWD" # export FLAGS="$FLAGS -DWIFI_MANAGER_DISABLE" -# export FLAGS="$FLAGS -DDHT_DISABLE" # export FLAGS="$FLAGS -DRESET_PIN=5" # export FLAGS="$FLAGS -DDHCP_RETRY_INTERVAL=60000" # export FLAGS="$FLAGS -DRESTART_LAN_ON_MQTT_ERRORS" # export FLAGS="$FLAGS -DW5500_CS_PIN=53" #export FLAGS="$FLAGS -DSYSLOG_ENABLE" #export FLAGS="$FLAGS -DDEVICE_NAME=MYDEVICE" +#export FLAGS="$FLAGS -DDHT_COUNTER_DISABLE" export FLAGS="$FLAGS -DPIO_SRC_REV="$(git log --pretty=format:%h_%ad -1 --date=short) echo $FLAGS diff --git a/lighthub/inputs.cpp b/lighthub/inputs.cpp index 0fa7e04..6b8fd25 100644 --- a/lighthub/inputs.cpp +++ b/lighthub/inputs.cpp @@ -23,7 +23,7 @@ e-mail anklimov@gmail.com #include "utils.h" #include -#ifndef DHT_DISABLE +#ifndef DHT_COUNTER_DISABLE #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) #include @@ -34,9 +34,9 @@ e-mail anklimov@gmail.com extern PubSubClient mqttClient; +#ifndef DHT_COUNTER_DISABLE static volatile unsigned long nextPollMillisValue[5]; static volatile int nextPollMillisPin[5] = {0,0,0,0,0}; - #if defined(__AVR__) static volatile long counter_value[6]; #endif @@ -54,6 +54,9 @@ static short counter_irq_map[54]; static long counter_value[54]; static int counters_count; #endif +#endif + + Input::Input(char * name) //Constructor { if (name) @@ -88,31 +91,24 @@ void Input::Parse() store = NULL; inType = 0; pin = 0; - if (inputObj && (inputObj->type == aJson_Object)) { aJsonObject *s; - s = aJson.getObjectItem(inputObj, "T"); if (s) inType = static_cast(s->valueint); - pin = static_cast(atoi(inputObj->name)); - s = aJson.getObjectItem(inputObj, "S"); if (!s) { - Serial.print(F("In: ")); - Serial.print(pin); - Serial.print(F("/")); - Serial.println(inType); + debugSerial<valueint; } } int Input::poll() { if (!isValid()) return -1; + #ifndef DHT_COUNTER_DISABLE if (inType & IN_DHT22) dht22Poll(); else if (inType & IN_COUNTER) @@ -122,8 +118,11 @@ int Input::poll() { else contactPoll(); return 0; + #endif + contactPoll(); } +#ifndef DHT_COUNTER_DISABLE void Input::counterPoll() { if(nextPollTime()>millis()) return; @@ -166,7 +165,9 @@ void Input::counterPoll() { else debugSerial<millis()) + if (nextPollTime() > millis()) return; #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) DHTesp dhtSensor; dhtSensor.setup(pin, DHTesp::DHT22); TempAndHumidity dhtSensorData = dhtSensor.getTempAndHumidity(); - float temp = roundf(dhtSensorData.temperature*10)/10; + float temp = roundf(dhtSensorData.temperature * 10) / 10; float humidity = roundf(dhtSensorData.humidity); #else DHT dht(pin, DHT22); @@ -217,33 +218,35 @@ void Input::dht22Poll() { float humidity = dht.readHumidity(); #endif aJsonObject *emit = aJson.getObjectItem(inputObj, "emit"); - aJsonObject *idx = aJson.getObjectItem(inputObj, "idx"); - debugSerial<valuestring){//DOMOTICZ json format support - debugSerial<valuestring<valuestring,temp,humidity); - debugSerial<valuestring) {//DOMOTICZ json format support + 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; } - else { - char valstr[10]; - strcat(addrstr, emit->valuestring); - strcat(addrstr, "T"); - printFloatValueToStr(temp, valstr); - mqttClient.publish(addrstr, valstr); - addrstr[strlen(addrstr) - 1] = 'H'; - printFloatValueToStr(humidity, valstr); - mqttClient.publish(addrstr, valstr); - } +#endif + char valstr[10]; + strcat(addrstr, emit->valuestring); + strcat(addrstr, "T"); + printFloatValueToStr(temp, valstr); + mqttClient.publish(addrstr, valstr); + addrstr[strlen(addrstr) - 1] = 'H'; + printFloatValueToStr(humidity, valstr); + mqttClient.publish(addrstr, valstr); setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT); - debugSerial<<" NextPollMillis="<valuestring, valstr); + } + setNextPollTime(millis() +UPTIME_POLL_DELAY_DEFAULT); +} + +void Input::onCounterChanged(int i) { +#if defined(__SAM3X8E__) + counter_value[counter_irq_map[i]]++; +#endif + +#if defined(__AVR__) + counter_value[i]++; +#endif +} + +void Input::onCounterChanged0() { + onCounterChanged(0); +} +void Input::onCounterChanged1() { + onCounterChanged(1); +} +void Input::onCounterChanged2() { + onCounterChanged(2); +} +void Input::onCounterChanged3() { + onCounterChanged(3); +} +void Input::onCounterChanged4() { + onCounterChanged(4); +} +void Input::onCounterChanged5() { + onCounterChanged(5); +} + +#endif + void Input::contactPoll() { @@ -312,85 +360,54 @@ void Input::contactPoll() { store->bounce = SAME_STATE_ATTEMPTS; } -void Input::uptimePoll() { - if(nextPollTime()>millis()) - return; + + +void Input::onContactChanged(int newValue) { + debugSerial << F("IN:") << (pin) << F("=") << newValue << endl; + aJsonObject *item = aJson.getObjectItem(inputObj, "item"); + aJsonObject *scmd = aJson.getObjectItem(inputObj, "scmd"); + aJsonObject *rcmd = aJson.getObjectItem(inputObj, "rcmd"); aJsonObject *emit = aJson.getObjectItem(inputObj, "emit"); if (emit) { - char valstr[11]; -// printUlongValueToStr(valstr,millis()); - printUlongValueToStr(valstr,millis()); - mqttClient.publish(emit->valuestring, valstr); +#ifdef WITH_DOMOTICZ + aJsonObject *idx = aJson.getObjectItem(inputObj, "idx"); + if (idx->valuestring) { + debugSerial << endl << idx->valuestring << F(" Domoticz valstr:"); + 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 +#endif + if (newValue) { //send set command + if (!scmd) mqttClient.publish(emit->valuestring, "ON", true); + else if (strlen(scmd->valuestring)) + mqttClient.publish(emit->valuestring, scmd->valuestring, true); + } else { //send reset command + if (!rcmd) mqttClient.publish(emit->valuestring, "OFF", true); + else if (strlen(rcmd->valuestring))mqttClient.publish(emit->valuestring, rcmd->valuestring, true); + } } - setNextPollTime(millis() +UPTIME_POLL_DELAY_DEFAULT); -} -void Input::onContactChanged(int val) -{ - Serial.print(F("IN:")); Serial.print(pin);Serial.print(F("="));Serial.println(val); - aJsonObject * item = aJson.getObjectItem(inputObj,"item"); - aJsonObject * scmd = aJson.getObjectItem(inputObj,"scmd"); - aJsonObject * rcmd = aJson.getObjectItem(inputObj,"rcmd"); - aJsonObject * emit = aJson.getObjectItem(inputObj,"emit"); - - if (emit) - { - - if (val) - { //send set command - if (!scmd) mqttClient.publish(emit->valuestring,"ON",true); else if (strlen(scmd->valuestring)) mqttClient.publish(emit->valuestring,scmd->valuestring,true); + if (item) { + Item it(item->valuestring); + if (it.isValid()) { + if (newValue) { //send set command + if (!scmd) it.Ctrl(CMD_ON, 0, NULL, true); + else if (strlen(scmd->valuestring)) + it.Ctrl(scmd->valuestring, true); + } else { //send reset command + if (!rcmd) it.Ctrl(CMD_OFF, 0, NULL, true); + else if (strlen(rcmd->valuestring)) + it.Ctrl(rcmd->valuestring, true); } - else - { //send reset command - if (!rcmd) mqttClient.publish(emit->valuestring,"OFF",true); else if (strlen(rcmd->valuestring)) mqttClient.publish(emit->valuestring,rcmd->valuestring,true); - } - } - - if (item) - { - Item it(item->valuestring); - if (it.isValid()) - { - if (val) - { //send set command - if (!scmd) it.Ctrl(CMD_ON,0,NULL,true); else if (strlen(scmd->valuestring)) it.Ctrl(scmd->valuestring,true); - } - else - { //send reset command - if (!rcmd) it.Ctrl(CMD_OFF,0,NULL,true); else if (strlen(rcmd->valuestring)) it.Ctrl(rcmd->valuestring,true); - } - } - } + } + } } -void Input::onCounterChanged(int i) { -#if defined(__SAM3X8E__) - counter_value[counter_irq_map[i]]++; -#endif -#if defined(__AVR__) - counter_value[i]++; -#endif -} - -void Input::onCounterChanged0() { - onCounterChanged(0); -} -void Input::onCounterChanged1() { - onCounterChanged(1); -} -void Input::onCounterChanged2() { - onCounterChanged(2); -} -void Input::onCounterChanged3() { - onCounterChanged(3); -} -void Input::onCounterChanged4() { - onCounterChanged(4); -} -void Input::onCounterChanged5() { - onCounterChanged(5); -} void Input::printUlongValueToStr(char *valstr, unsigned long value) { char buf[11]; diff --git a/lighthub/inputs.h b/lighthub/inputs.h index 3e37ee8..262728f 100644 --- a/lighthub/inputs.h +++ b/lighthub/inputs.h @@ -91,7 +91,7 @@ public: boolean isValid(); - void onContactChanged(int val); + void onContactChanged(int newValue); int poll(); diff --git a/lighthub/main.cpp b/lighthub/main.cpp index bc6a3af..90abec1 100644 --- a/lighthub/main.cpp +++ b/lighthub/main.cpp @@ -204,21 +204,13 @@ void mqttCallback(char *topic, byte *payload, unsigned int length) { void printIPAddress(IPAddress ipAddress) { for (byte i = 0; i < 4; i++) -#ifdef WITH_STREAMING_LIB (i < 3) ? debugSerial << _DEC(ipAddress[i]) << F(".") : debugSerial << _DEC(ipAddress[i]) << F(", "); -#else - (i < 3) ? debugSerial << (ipAddress[i]) << F(".") : debugSerial << (ipAddress[i])< 0) { delay(500); wifi_connection_wait -= 500; - debugSerial<<"."); + debugSerial<<"."; } wifiInitialized = true; } @@ -458,12 +447,10 @@ void onInitialStateInitLAN() { #if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_ESP8266) if (WiFi.status() == WL_CONNECTED) { - debugSerial<