diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 4c50b0e6..e9034066 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -923,6 +923,40 @@ #define ECH1560_MISO_PIN 5 #define ECH1560_INVERTED 0 +// ----------------------------------------------------------------------------- +// ESPLive +// https://github.com/ManCaveMade/ESP-Live +// ----------------------------------------------------------------------------- + +#elif defined(MANCAVEMADE_ESPLIVE) + + // Info + #define MANUFACTURER "MANCAVEMADE" + #define DEVICE "ESPLIVE" + + // Buttons + #define BUTTON1_PIN 4 + #define BUTTON2_PIN 5 + + #define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + #define BUTTON2_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + + #define BUTTON1_RELAY 1 + #define BUTTON2_RELAY 2 + + // Relays + #define RELAY1_PIN 12 + #define RELAY2_PIN 13 + + #define RELAY1_TYPE RELAY_TYPE_NORMAL + #define RELAY2_TYPE RELAY_TYPE_NORMAL + + // DB18B20 + #define DS18B20_SUPPORT 1 + #define DS18B20_PIN 2 + #define DS18B20_UPDATE_INTERVAL 5000 + #define DS18B20_UPDATE_ON_CHANGE 1.0 + // ----------------------------------------------------------------------------- // Unknown hardware // ----------------------------------------------------------------------------- diff --git a/code/espurna/config/sensors.h b/code/espurna/config/sensors.h index a3498dfc..cae03d44 100644 --- a/code/espurna/config/sensors.h +++ b/code/espurna/config/sensors.h @@ -77,9 +77,21 @@ #define DS18B20_SUPPORT 0 #endif +#ifndef DS18B20_PIN #define DS18B20_PIN 14 +#endif + +#ifndef DS18B20_UPDATE_INTERVAL #define DS18B20_UPDATE_INTERVAL 60000 +#endif + +#ifndef DS18B20_TEMPERATURE_TOPIC #define DS18B20_TEMPERATURE_TOPIC "temperature" +#endif + +#ifndef DS18B20_UPDATE_ON_CHANGE +#define DS18B20_UPDATE_ON_CHANGE 0.0 +#endif //-------------------------------------------------------------------------------- // Internal power montior diff --git a/code/espurna/ds18b20.ino b/code/espurna/ds18b20.ino index ebe98160..a93b5f5c 100644 --- a/code/espurna/ds18b20.ino +++ b/code/espurna/ds18b20.ino @@ -51,6 +51,10 @@ void dsLoop() { // Check if we should read new data static unsigned long last_update = 0; static bool requested = false; + + static double last_temperature = 0.0; + bool send_update = false; + if ((millis() - last_update > DS18B20_UPDATE_INTERVAL) || (last_update == 0)) { if (!requested) { ds18b20.requestTemperatures(); @@ -80,6 +84,12 @@ void dsLoop() { DEBUG_MSG_P(PSTR("[DS18B20] Error reading sensor\n")); } else { + + //If the new temperature is different from the last + if (fabs(t - last_temperature) >= DS18B20_UPDATE_ON_CHANGE) { + last_temperature = t; + send_update = true; + } _dsTemperature = t; @@ -95,17 +105,19 @@ void dsLoop() { getDSTemperatureStr(), (_dsIsConnected ? ((tmpUnits == TMP_CELSIUS) ? "ºC" : "ºF") : "")); - // Send MQTT messages - mqttSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr); + if (send_update) { + // Send MQTT messages + mqttSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr); - // Send to Domoticz - #if DOMOTICZ_SUPPORT - domoticzSend("dczTmpIdx", 0, _dsTemperatureStr); - #endif + // Send to Domoticz + #if DOMOTICZ_SUPPORT + domoticzSend("dczTmpIdx", 0, _dsTemperatureStr); + #endif - #if INFLUXDB_SUPPORT - influxDBSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr); - #endif + #if INFLUXDB_SUPPORT + influxDBSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr); + #endif + } // Update websocket clients #if WEB_SUPPORT @@ -113,7 +125,7 @@ void dsLoop() { snprintf_P(buffer, sizeof(buffer), PSTR("{\"dsVisible\": 1, \"dsTmp\": %s, \"tmpUnits\": %d}"), getDSTemperatureStr(), tmpUnits); wsSend(buffer); #endif - + } } diff --git a/code/espurna/espurna.ino b/code/espurna/espurna.ino index 24d95adc..bc24b2f0 100644 --- a/code/espurna/espurna.ino +++ b/code/espurna/espurna.ino @@ -43,6 +43,11 @@ void hardwareSetup() { SPIFFS.begin(); #endif + #if defined(ESPLIVE) + //The ESPLive has an ADC MUX which needs to be configured. + pinMode(16, OUTPUT); + digitalWrite(16, HIGH); //Defualt CT input (pin B, solder jumper B) + #endif } void hardwareLoop() { diff --git a/code/espurna/hardware.ino b/code/espurna/hardware.ino index 4b0b1095..1fa405d4 100644 --- a/code/espurna/hardware.ino +++ b/code/espurna/hardware.ino @@ -455,6 +455,18 @@ void hwUpwardsCompatibility() { setSetting("cf1GPIO", 13); setSetting("cfGPIO", 14); + #elif defined(MANCAVEMADE_ESPLIVE) + + setSetting("board", 40); + setSetting("btnGPIO", 1, 4); + setSetting("btnGPIO", 2, 5); + setSetting("btnRelay", 1, 1); + setSetting("btnRelay", 2, 2); + setSetting("relayGPIO", 1, 12); + setSetting("relayGPIO", 2, 13); + setSetting("relayType", 1, RELAY_TYPE_NORMAL); + setSetting("relayType", 2, RELAY_TYPE_NORMAL); + #else #error "UNSUPPORTED HARDWARE!" diff --git a/code/espurna/relay.ino b/code/espurna/relay.ino index c1c54a29..ce437387 100644 --- a/code/espurna/relay.ino +++ b/code/espurna/relay.ino @@ -377,9 +377,9 @@ void relaySetupAPI() { if (value == 0) { relayStatus(relayID, false); - } elseif (value == 1) { + } else if (value == 1) { relayStatus(relayID, true); - } elseif (value == 2) { + } else if (value == 2) { relayToggle(relayID); } @@ -470,9 +470,9 @@ void relayMQTTCallback(unsigned int type, const char * topic, const char * paylo // Action to perform if (value == 0) { relayStatus(relayID, false, mqttForward()); - } elseif (value == 1) { + } else if (value == 1) { relayStatus(relayID, true, mqttForward()); - } elseif (value == 2) { + } else if (value == 2) { relayToggle(relayID); } diff --git a/code/espurna/web.ino b/code/espurna/web.ino index 4d3d2ba3..8e603246 100644 --- a/code/espurna/web.ino +++ b/code/espurna/web.ino @@ -148,7 +148,7 @@ void _wsParse(uint32_t client_id, uint8_t * payload, size_t length) { relayWS(); - } elseif (value < 3) { + } else if (value < 3) { unsigned int relayID = 0; if (data.containsKey("id")) { @@ -159,9 +159,9 @@ void _wsParse(uint32_t client_id, uint8_t * payload, size_t length) { // Action to perform if (value == 0) { relayStatus(relayID, false); - } elseif (value == 1) { + } else if (value == 1) { relayStatus(relayID, true); - } elseif (value == 2) { + } else if (value == 2) { relayToggle(relayID); } diff --git a/code/platformio.ini b/code/platformio.ini index 2219350f..d3d1165c 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -908,6 +908,28 @@ upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 monitor_baud = 115200 +[env:mancavemade-esplive] +platform = espressif8266 +framework = arduino +board = d1_mini +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags} -DMANCAVEMADE_ESPLIVE +upload_speed = 460800 +monitor_baud = 115200 + +[env:mancavemade-esplive-ota] +platform = espressif8266 +framework = arduino +board = d1_mini +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags} -DMANCAVEMADE_ESPLIVE +upload_speed = 460800 +upload_port = "192.168.4.1" +upload_flags = --auth=fibonacci --port 8266 +monitor_baud = 115200 + # ------------------------------------------------------------------------------ # GENERIC OTA ENVIRONMENTS # ------------------------------------------------------------------------------