From 9fa301e5bebfbb493c15674cfb162c2a27d701e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sun, 22 Jan 2017 20:19:12 +0100 Subject: [PATCH 01/19] Write back relay bit mask if RELAY_MODE_TOOGLE --- code/espurna/relay.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/espurna/relay.ino b/code/espurna/relay.ino index 433e3610..65fe03d9 100644 --- a/code/espurna/relay.ino +++ b/code/espurna/relay.ino @@ -221,7 +221,8 @@ void relayRetrieve(bool invert) { bit += bit; } if (invert) { - relaySave(); + EEPROM.write(0, mask); + EEPROM.commit(); } recursive = false; } From 4e0e8038b185af92cebba81a78a8b262add0060b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sun, 22 Jan 2017 22:00:18 +0100 Subject: [PATCH 02/19] Reset NTP connection from the JustWifi connection callback --- code/espurna/ntp.ino | 5 +---- code/espurna/wifi.ino | 5 +++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/code/espurna/ntp.ino b/code/espurna/ntp.ino index 0772ef20..99cbdbaa 100644 --- a/code/espurna/ntp.ino +++ b/code/espurna/ntp.ino @@ -14,7 +14,7 @@ Copyright (C) 2016-2017 by Xose Pérez // NTP // ----------------------------------------------------------------------------- -void ntpConnect(WiFiEventStationModeGotIP ipInfo) { +void ntpConnect() { NTP.begin(NTP_SERVER, NTP_TIME_OFFSET, NTP_DAY_LIGHT); NTP.setInterval(NTP_UPDATE_INTERVAL); } @@ -33,9 +33,6 @@ void ntpSetup() { } }); - static WiFiEventHandler e; - e = WiFi.onStationModeGotIP(ntpConnect); - } void ntpLoop() { diff --git a/code/espurna/wifi.ino b/code/espurna/wifi.ino index 70335e32..8826c256 100644 --- a/code/espurna/wifi.ino +++ b/code/espurna/wifi.ino @@ -168,6 +168,11 @@ void wifiSetup() { dnsServer.stop(); } + // NTP connection reset + if (code == MESSAGE_CONNECTED) { + ntpConnect(); + } + // Manage POW #if ENABLE_POW if (code == MESSAGE_CONNECTED) { From 925af81e9b9e73d3f2d4f5854bfc2797376cc967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Mon, 23 Jan 2017 11:50:52 +0100 Subject: [PATCH 03/19] Changed fs build command to use local gulp instance --- code/build-fs | 2 ++ code/pio_hooks.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100755 code/build-fs diff --git a/code/build-fs b/code/build-fs new file mode 100755 index 00000000..d2ca4286 --- /dev/null +++ b/code/build-fs @@ -0,0 +1,2 @@ +#!/bin/bash +node node_modules/gulp/bin/gulp.js diff --git a/code/pio_hooks.py b/code/pio_hooks.py index 5b818421..e6037ad8 100644 --- a/code/pio_hooks.py +++ b/code/pio_hooks.py @@ -6,6 +6,6 @@ from SCons.Script import DefaultEnvironment env = DefaultEnvironment() def before_build_spiffs(source, target, env): - env.Execute("gulp") + env.Execute("node node_modules/gulp/bin/gulp.js") env.AddPreAction(".pioenvs/%s/spiffs.bin" % env['PIOENV'], before_build_spiffs) From 7e6cb255528751f172477d1ef3590f5bdb7127c2 Mon Sep 17 00:00:00 2001 From: denisfrench Date: Sat, 7 Jan 2017 15:53:39 +1100 Subject: [PATCH 04/19] Add support for WiFi MQTT Relay / Thermostat from OpenEnergyMonitor here; https://guide.openenergymonitor.org/integrations/mqtt-relay/ --- README.md | 4 ++ code/espurna/config/hardware.h | 126 ++++++++++++--------------------- code/platformio.ini | 20 ++++++ images/devices/wifi-relay.jpg | Bin 0 -> 7106 bytes 4 files changed, 69 insertions(+), 81 deletions(-) create mode 100644 images/devices/wifi-relay.jpg diff --git a/README.md b/README.md index 4b8b0bb6..77b72e6f 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,11 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo |![IteadStudio Sonoff Dual](images/devices/sonoff-dual.jpg) **IteadStudio Sonoff Dual**|![IteadStudio Sonoff POW](images/devices/sonoff-pow.jpg) **IteadStudio Sonoff POW**|![IteadStudio Sonoff TH10/TH16](images/devices/sonoff-th10-th16.jpg) **IteadStudio Sonoff TH10/TH16**| |![IteadStudio Sonoff RF](images/devices/sonoff-rf.jpg) **IteadStudio Sonoff RF**|![IteadStudio Sonoff SV](images/devices/sonoff-sv.jpg) **IteadStudio Sonoff SV**|![IteadStudio Sonoff Touch](images/devices/sonoff-touch.jpg) **IteadStudio Sonoff Touch**| |![Wemos D1 Mini Relay Shield](images/devices/d1mini.jpg) **Wemos D1 Mini Relay Shield**|![Electrodragon Relay Board](images/devices/electrodragon-relay-board.jpg) **Electrodragon Relay Board**|![WorkChoice EcoPlug](images/devices/workchoice-ecoplug.jpg) **WorkChoice EcoPlug**| +<<<<<<< HEAD |![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png) **JanGoe Wifi Relay (NO/NC)**||| +======= +|![WiFi MQTT Relay / Thermostat](images/devices/wifi-relay.jpg) **WiFi MQTT Relay / Thermostat**| +>>>>>>> Add support for WiFi MQTT Relay / Thermostat from OpenEnergyMonitor here; https://guide.openenergymonitor.org/integrations/mqtt-relay/ ## License diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 2d0dd5f2..771773bf 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -1,3 +1,35 @@ +//-------------------------------------------------------------------------------- +// HARDWARE +// This setting is normally provided by PlatformIO +// Uncomment the appropiate line to build from the Arduino IDE +//-------------------------------------------------------------------------------- + +//#define NODEMCUV2 +//#define SONOFF +//#define SONOFF_TH +//#define SLAMPHER +//#define S20 +//#define SONOFF_SV +//#define SONOFF_POW +//#define SONOFF_DUAL +//#define SONOFF_4CH +//#define ESP_RELAY_BOARD +//#define ECOPLUG +//#define ESPURNA +//#define WIFI_RELAY + +//#define ENABLE_DHT 1 +//#define ENABLE_DS18B20 1 +//#define ENABLE_EMON 1 +//#define ENABLE_HLW8018 1 +//#define ENABLE_RF 1 +//#define ENABLE_FAUXMO 0 +//#define ENABLE_NOFUSS 1 + +#ifndef ENABLE_FAUXMO + #define ENABLE_FAUXMO 1 +#endif + // ----------------------------------------------------------------------------- // Development boards // ----------------------------------------------------------------------------- @@ -7,9 +39,7 @@ #define MANUFACTURER "NODEMCU" #define DEVICE "LOLIN" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 2 #define LED1_PIN_INVERSE 1 @@ -18,7 +48,6 @@ #define MANUFACTURER "WEMOS" #define DEVICE "D1_MINI" #define RELAY1_PIN 5 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 2 #define LED1_PIN_INVERSE 1 @@ -31,9 +60,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -42,9 +69,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_TH" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -53,9 +78,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_SV" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -64,9 +87,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SLAMPHER" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -75,9 +96,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "S20" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -86,9 +105,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_TOUCH" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -97,9 +114,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_POW" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 15 #define LED1_PIN_INVERSE 0 #define ENABLE_POW 1 @@ -119,42 +134,16 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_4CH" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define BUTTON2_PIN 9 - #define BUTTON2_RELAY 2 #define BUTTON3_PIN 10 - #define BUTTON3_RELAY 3 #define BUTTON4_PIN 14 - #define BUTTON4_RELAY 4 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define RELAY2_PIN 5 - #define RELAY2_PIN_INVERSE 0 #define RELAY3_PIN 4 - #define RELAY3_PIN_INVERSE 0 #define RELAY4_PIN 15 - #define RELAY4_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 -#elif defined(ITEAD_1CH_INCHING) - - // Note: definitions for this board are based on third party data - // and have not been fully tested yet. If you have the chance to - // test them, please report back. Thank you. - - #define MANUFACTURER "ITEAD" - #define DEVICE "1CH_INCHING" - #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 - #define BUTTON2_PIN 15 - #define BUTTON2_RELAY 0 - #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 - #define LED1_PIN 13 - #define LED1_PIN_INVERSE 0 - #define LED_PULSE 14 - // ----------------------------------------------------------------------------- // Electrodragon boards // ----------------------------------------------------------------------------- @@ -164,13 +153,9 @@ #define MANUFACTURER "ELECTRODRAGON" #define DEVICE "ESP_RELAY_BOARD" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define BUTTON2_PIN 2 - #define BUTTON2_RELAY 2 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define RELAY2_PIN 13 - #define RELAY2_PIN_INVERSE 0 #define LED1_PIN 16 #define LED1_PIN_INVERSE 0 @@ -183,42 +168,10 @@ #define MANUFACTURER "WORKCHOICE" #define DEVICE "ECOPLUG" #define BUTTON1_PIN 13 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 15 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 2 #define LED1_PIN_INVERSE 0 -// ----------------------------------------------------------------------------- -// JanGoe Wifi Relay (https://github.com/JanGoe/esp8266-wifi-relay) -// ----------------------------------------------------------------------------- - -#elif defined(WIFI_RELAY_NC) - - #define MANUFACTURER "JANGOE" - #define DEVICE "WIFI_RELAY_NC" - #define BUTTON1_PIN 12 - #define BUTTON1_RELAY 1 - #define BUTTON2_PIN 13 - #define BUTTON2_RELAY 2 - #define RELAY1_PIN 2 - #define RELAY1_PIN_INVERSE 1 - #define RELAY2_PIN 14 - #define RELAY2_PIN_INVERSE 1 - -#elif defined(WIFI_RELAY_NO) - - #define MANUFACTURER "JANGOE" - #define DEVICE "WIFI_RELAY_NO" - #define BUTTON1_PIN 12 - #define BUTTON1_RELAY 1 - #define BUTTON2_PIN 13 - #define BUTTON2_RELAY 2 - #define RELAY1_PIN 2 - #define RELAY1_PIN_INVERSE 0 - #define RELAY2_PIN 14 - #define RELAY2_PIN_INVERSE 0 - // ----------------------------------------------------------------------------- // ESPurna board (still beta) // ----------------------------------------------------------------------------- @@ -228,12 +181,23 @@ #define MANUFACTURER "TINKERMAN" #define DEVICE "ESPURNA" #define BUTTON1_PIN 0 - #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 - #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 0 +// ----------------------------------------------------------------------------- +// WiFi MQTT Relay / Thermostat +// ----------------------------------------------------------------------------- + +#elif defined(WIFI_RELAY) + + #define MANUFACTURER "OPENENERGYMONITOR" + #define DEVICE "WIFI_RELAY" + #define BUTTON1_PIN 0 + #define RELAY1_PIN 12 + #define LED1_PIN 16 + #define LED1_PIN_INVERSE 0 + // ----------------------------------------------------------------------------- // Unknown hardware // ----------------------------------------------------------------------------- diff --git a/code/platformio.ini b/code/platformio.ini index cb9ca7eb..6a58662c 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -264,6 +264,7 @@ upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 +<<<<<<< HEAD [env:jangoe-debug] platform = espressif8266 framework = arduino @@ -281,6 +282,25 @@ lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_script = pio_hooks.py build_flags = -g -DDEBUG_PORT=Serial -DWIFI_RELAY_NC +======= +[env:wifi-relay-debug] +platform = espressif8266 +framework = arduino +board = esp_wroom_02 +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +extra_script = pio_hooks.py +build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DWIFI_RELAY -DENABLE_DS18B20=1 + +[env:wifi-relay-debug-ota] +platform = espressif8266 +framework = arduino +board = esp_wroom_02 +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +extra_script = pio_hooks.py +build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DWIFI_RELAY -DENABLE_DS18B20=1 +>>>>>>> Add support for WiFi MQTT Relay / Thermostat from OpenEnergyMonitor here; https://guide.openenergymonitor.org/integrations/mqtt-relay/ upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 diff --git a/images/devices/wifi-relay.jpg b/images/devices/wifi-relay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..942bbc4dda31c24e6cbd20aad69da278171e0d6f GIT binary patch literal 7106 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 Date: Thu, 12 Jan 2017 20:36:56 +1100 Subject: [PATCH 05/19] Add #define RELAY1_PIN_INVERSE 0 to hardware.h --- code/espurna/config/hardware.h | 1 + 1 file changed, 1 insertion(+) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 771773bf..f095bff7 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -195,6 +195,7 @@ #define DEVICE "WIFI_RELAY" #define BUTTON1_PIN 0 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 16 #define LED1_PIN_INVERSE 0 From 20646803f192afb820edc0606e1d8bd33bdd35a7 Mon Sep 17 00:00:00 2001 From: denisfrench Date: Sat, 28 Jan 2017 15:34:29 +1100 Subject: [PATCH 06/19] Rename wifi-relay to mqtt-relay to deconfict with other hardware --- code/espurna/config/hardware.h | 6 +++--- images/devices/{wifi-relay.jpg => mqtt-relay.jpg} | Bin 2 files changed, 3 insertions(+), 3 deletions(-) rename images/devices/{wifi-relay.jpg => mqtt-relay.jpg} (100%) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index f095bff7..896221f7 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -16,7 +16,7 @@ //#define ESP_RELAY_BOARD //#define ECOPLUG //#define ESPURNA -//#define WIFI_RELAY +//#define MQTT_RELAY //#define ENABLE_DHT 1 //#define ENABLE_DS18B20 1 @@ -189,10 +189,10 @@ // WiFi MQTT Relay / Thermostat // ----------------------------------------------------------------------------- -#elif defined(WIFI_RELAY) +#elif defined(MQTT_RELAY) #define MANUFACTURER "OPENENERGYMONITOR" - #define DEVICE "WIFI_RELAY" + #define DEVICE "MQTT_RELAY" #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define RELAY1_PIN_INVERSE 0 diff --git a/images/devices/wifi-relay.jpg b/images/devices/mqtt-relay.jpg similarity index 100% rename from images/devices/wifi-relay.jpg rename to images/devices/mqtt-relay.jpg From 786af765af14dc3a3e86d6ddbc0c2189f829dd81 Mon Sep 17 00:00:00 2001 From: denisfrench Date: Sat, 28 Jan 2017 17:32:11 +1100 Subject: [PATCH 07/19] Resolve messy rebase --- README.md | 6 +----- code/espurna/config/arduino.h | 1 + code/platformio.ini | 15 ++++++++------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 77b72e6f..e617f38c 100644 --- a/README.md +++ b/README.md @@ -51,11 +51,7 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo |![IteadStudio Sonoff Dual](images/devices/sonoff-dual.jpg) **IteadStudio Sonoff Dual**|![IteadStudio Sonoff POW](images/devices/sonoff-pow.jpg) **IteadStudio Sonoff POW**|![IteadStudio Sonoff TH10/TH16](images/devices/sonoff-th10-th16.jpg) **IteadStudio Sonoff TH10/TH16**| |![IteadStudio Sonoff RF](images/devices/sonoff-rf.jpg) **IteadStudio Sonoff RF**|![IteadStudio Sonoff SV](images/devices/sonoff-sv.jpg) **IteadStudio Sonoff SV**|![IteadStudio Sonoff Touch](images/devices/sonoff-touch.jpg) **IteadStudio Sonoff Touch**| |![Wemos D1 Mini Relay Shield](images/devices/d1mini.jpg) **Wemos D1 Mini Relay Shield**|![Electrodragon Relay Board](images/devices/electrodragon-relay-board.jpg) **Electrodragon Relay Board**|![WorkChoice EcoPlug](images/devices/workchoice-ecoplug.jpg) **WorkChoice EcoPlug**| -<<<<<<< HEAD -|![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png) **JanGoe Wifi Relay (NO/NC)**||| -======= -|![WiFi MQTT Relay / Thermostat](images/devices/wifi-relay.jpg) **WiFi MQTT Relay / Thermostat**| ->>>>>>> Add support for WiFi MQTT Relay / Thermostat from OpenEnergyMonitor here; https://guide.openenergymonitor.org/integrations/mqtt-relay/ +|![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png) **JanGoe Wifi Relay (NO/NC)**|![WiFi MQTT Relay / Thermostat](images/devices/mqtt-relay.jpg) **WiFi MQTT Relay / Thermostat**|| ## License diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index 489c42b8..437148c3 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -28,6 +28,7 @@ //#define WIFI_RELAY_NC //#define WIFI_RELAY_NO //#define ESPURNA +//#define MQTT_RELAY //-------------------------------------------------------------------------------- // Features (values below are non-default values) diff --git a/code/platformio.ini b/code/platformio.ini index 6a58662c..a2c135f4 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -264,7 +264,6 @@ upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 -<<<<<<< HEAD [env:jangoe-debug] platform = espressif8266 framework = arduino @@ -282,25 +281,27 @@ lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_script = pio_hooks.py build_flags = -g -DDEBUG_PORT=Serial -DWIFI_RELAY_NC -======= -[env:wifi-relay-debug] +upload_speed = 115200 +upload_port = "192.168.4.1" +upload_flags = --auth=fibonacci --port 8266 + +[env:mqtt-relay-debug] platform = espressif8266 framework = arduino board = esp_wroom_02 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_script = pio_hooks.py -build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DWIFI_RELAY -DENABLE_DS18B20=1 +build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DMQTT_RELAY -DENABLE_DS18B20=1 -[env:wifi-relay-debug-ota] +[env:mqtt-relay-debug-ota] platform = espressif8266 framework = arduino board = esp_wroom_02 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_script = pio_hooks.py -build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DWIFI_RELAY -DENABLE_DS18B20=1 ->>>>>>> Add support for WiFi MQTT Relay / Thermostat from OpenEnergyMonitor here; https://guide.openenergymonitor.org/integrations/mqtt-relay/ +build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DMQTT_RELAY -DENABLE_DS18B20=1 upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 From 191c4e9d3f9cff672553bbee27eb9fc2d832798d Mon Sep 17 00:00:00 2001 From: denisfrench Date: Sat, 28 Jan 2017 17:47:58 +1100 Subject: [PATCH 08/19] Manually copy-in hardware.h changes after rebase --- code/espurna/config/hardware.h | 114 ++++++++++++++++++++++++--------- 1 file changed, 82 insertions(+), 32 deletions(-) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 896221f7..04610f3d 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -1,35 +1,3 @@ -//-------------------------------------------------------------------------------- -// HARDWARE -// This setting is normally provided by PlatformIO -// Uncomment the appropiate line to build from the Arduino IDE -//-------------------------------------------------------------------------------- - -//#define NODEMCUV2 -//#define SONOFF -//#define SONOFF_TH -//#define SLAMPHER -//#define S20 -//#define SONOFF_SV -//#define SONOFF_POW -//#define SONOFF_DUAL -//#define SONOFF_4CH -//#define ESP_RELAY_BOARD -//#define ECOPLUG -//#define ESPURNA -//#define MQTT_RELAY - -//#define ENABLE_DHT 1 -//#define ENABLE_DS18B20 1 -//#define ENABLE_EMON 1 -//#define ENABLE_HLW8018 1 -//#define ENABLE_RF 1 -//#define ENABLE_FAUXMO 0 -//#define ENABLE_NOFUSS 1 - -#ifndef ENABLE_FAUXMO - #define ENABLE_FAUXMO 1 -#endif - // ----------------------------------------------------------------------------- // Development boards // ----------------------------------------------------------------------------- @@ -39,7 +7,9 @@ #define MANUFACTURER "NODEMCU" #define DEVICE "LOLIN" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 2 #define LED1_PIN_INVERSE 1 @@ -48,6 +18,7 @@ #define MANUFACTURER "WEMOS" #define DEVICE "D1_MINI" #define RELAY1_PIN 5 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 2 #define LED1_PIN_INVERSE 1 @@ -60,7 +31,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -69,7 +42,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_TH" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -78,7 +53,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_SV" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -87,7 +64,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SLAMPHER" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -96,7 +75,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "S20" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -105,7 +86,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_TOUCH" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 @@ -114,7 +97,9 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_POW" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 15 #define LED1_PIN_INVERSE 0 #define ENABLE_POW 1 @@ -134,16 +119,42 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_4CH" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define BUTTON2_PIN 9 + #define BUTTON2_RELAY 2 #define BUTTON3_PIN 10 + #define BUTTON3_RELAY 3 #define BUTTON4_PIN 14 + #define BUTTON4_RELAY 4 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define RELAY2_PIN 5 + #define RELAY2_PIN_INVERSE 0 #define RELAY3_PIN 4 + #define RELAY3_PIN_INVERSE 0 #define RELAY4_PIN 15 + #define RELAY4_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 1 +#elif defined(ITEAD_1CH_INCHING) + + // Note: definitions for this board are based on third party data + // and have not been fully tested yet. If you have the chance to + // test them, please report back. Thank you. + + #define MANUFACTURER "ITEAD" + #define DEVICE "1CH_INCHING" + #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 + #define BUTTON2_PIN 15 + #define BUTTON2_RELAY 0 + #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 + #define LED1_PIN 13 + #define LED1_PIN_INVERSE 0 + #define LED_PULSE 14 + // ----------------------------------------------------------------------------- // Electrodragon boards // ----------------------------------------------------------------------------- @@ -153,9 +164,13 @@ #define MANUFACTURER "ELECTRODRAGON" #define DEVICE "ESP_RELAY_BOARD" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define BUTTON2_PIN 2 + #define BUTTON2_RELAY 2 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define RELAY2_PIN 13 + #define RELAY2_PIN_INVERSE 0 #define LED1_PIN 16 #define LED1_PIN_INVERSE 0 @@ -168,10 +183,42 @@ #define MANUFACTURER "WORKCHOICE" #define DEVICE "ECOPLUG" #define BUTTON1_PIN 13 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 15 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 2 #define LED1_PIN_INVERSE 0 +// ----------------------------------------------------------------------------- +// JanGoe Wifi Relay (https://github.com/JanGoe/esp8266-wifi-relay) +// ----------------------------------------------------------------------------- + +#elif defined(WIFI_RELAY_NC) + + #define MANUFACTURER "JANGOE" + #define DEVICE "WIFI_RELAY_NC" + #define BUTTON1_PIN 12 + #define BUTTON1_RELAY 1 + #define BUTTON2_PIN 13 + #define BUTTON2_RELAY 2 + #define RELAY1_PIN 2 + #define RELAY1_PIN_INVERSE 1 + #define RELAY2_PIN 14 + #define RELAY2_PIN_INVERSE 1 + +#elif defined(WIFI_RELAY_NO) + + #define MANUFACTURER "JANGOE" + #define DEVICE "WIFI_RELAY_NO" + #define BUTTON1_PIN 12 + #define BUTTON1_RELAY 1 + #define BUTTON2_PIN 13 + #define BUTTON2_RELAY 2 + #define RELAY1_PIN 2 + #define RELAY1_PIN_INVERSE 0 + #define RELAY2_PIN 14 + #define RELAY2_PIN_INVERSE 0 + // ----------------------------------------------------------------------------- // ESPurna board (still beta) // ----------------------------------------------------------------------------- @@ -181,7 +228,9 @@ #define MANUFACTURER "TINKERMAN" #define DEVICE "ESPURNA" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 + #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 13 #define LED1_PIN_INVERSE 0 @@ -194,6 +243,7 @@ #define MANUFACTURER "OPENENERGYMONITOR" #define DEVICE "MQTT_RELAY" #define BUTTON1_PIN 0 + #define BUTTON1_RELAY 1 #define RELAY1_PIN 12 #define RELAY1_PIN_INVERSE 0 #define LED1_PIN 16 From 61f487c1ea393d2a20737e1fd89e1b8657192a78 Mon Sep 17 00:00:00 2001 From: denisfrench Date: Sat, 28 Jan 2017 19:44:40 +1100 Subject: [PATCH 09/19] Remove FAUXMO build define switch from mqtt-relay environment --- code/platformio.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/platformio.ini b/code/platformio.ini index a2c135f4..843b95d4 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -292,7 +292,7 @@ board = esp_wroom_02 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_script = pio_hooks.py -build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DMQTT_RELAY -DENABLE_DS18B20=1 +build_flags = -g -DDEBUG_PORT=Serial -DMQTT_RELAY -DENABLE_DS18B20=1 [env:mqtt-relay-debug-ota] platform = espressif8266 @@ -301,7 +301,7 @@ board = esp_wroom_02 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_script = pio_hooks.py -build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DMQTT_RELAY -DENABLE_DS18B20=1 +build_flags = -g -DDEBUG_PORT=Serial -DMQTT_RELAY -DENABLE_DS18B20=1 upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 From 12b405a73d72926f001b79e61a780e443a82db57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sat, 28 Jan 2017 18:53:05 +0100 Subject: [PATCH 10/19] Version bump and changelog update --- CHANGELOG.md | 16 ++++++++++++---- README.md | 4 ++-- code/espurna/config/version.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97a9d203..95f8064e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [1.5.1] 2017-01-28 +### Added +- OpenEnergyMonitor WiFi MQTT Relay / Thermostat support (thanks to Denis French) + +### Fixed +- NTP connection refresh upon wifi connection +- Filesystem image build using local gulp installation + ## [1.5.0] 2017-01-21 ### Added - Pulse mode. Allows to define a pulse time after which the relay will switch back @@ -20,8 +28,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - MQTT will topic - Crash with HLW812 interrupts while trying to create a WIFI connection - Issue #20 Better inline documentation for Alexa and Domoticz default settings -- Issue #39 Fixed autoconnect issue with static IP (fixed in JustWifi library) -- Issue #41 Added password requirements to initial password change page +- #39 Fixed autoconnect issue with static IP (fixed in JustWifi library) +- #41 Added password requirements to initial password change page ### Changed - Changed LED pattern for WIFI notifications (shorter pulses) @@ -31,7 +39,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Adding current, voltage, apparent and reactive power reports to Sonoff POW (Web & MQTT) ### Fixed -- Issue #35 Fixed frequent MQTT connection drops after WIFI reconnect +- #35 Fixed frequent MQTT connection drops after WIFI reconnect - Defer wifi disconnection from web interface to allow request to return ### Changed @@ -40,7 +48,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [1.4.3] 2017-01-11 ### Fixed -- Issue #6 Using forked Time library to prevent conflict with Arduino Core for ESP8266 time.h file in windows machines +- #6 Using forked Time library to prevent conflict with Arduino Core for ESP8266 time.h file in windows machines ## [1.4.2] 2017-01-09 ### Added diff --git a/README.md b/README.md index e617f38c..b06259ca 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ESPurna ("spark" in Catalan) is a custom firmware for ESP8266 based smart switch It was originally developed with the **[IteadStudio Sonoff](https://www.itead.cc/sonoff-wifi-wireless-switch.html)** in mind but now it supports a growing number of ESP8266-based boards. It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. -**Current Release Version is 1.5.0**, read the [changelog](CHANGELOG.md). +**Current Release Version is 1.5.1**, read the [changelog](CHANGELOG.md). ## Features @@ -56,7 +56,7 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo ## License -Copyright (C) 2016-2017 by Xose P�rez (@xoseperez) +Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/code/espurna/config/version.h b/code/espurna/config/version.h index fd2a8b39..cfde4f72 100644 --- a/code/espurna/config/version.h +++ b/code/espurna/config/version.h @@ -1,4 +1,4 @@ #define APP_NAME "ESPurna" -#define APP_VERSION "1.5.0" +#define APP_VERSION "1.5.1" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat" From 714d6375067762c3a430858d33c6d16a48ff0a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sat, 28 Jan 2017 18:55:15 +0100 Subject: [PATCH 11/19] Fix mqtt relay image --- images/devices/mqtt-relay.jpg | Bin 7106 -> 13715 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/devices/mqtt-relay.jpg b/images/devices/mqtt-relay.jpg index 942bbc4dda31c24e6cbd20aad69da278171e0d6f..e12231c9795382262da46e3be28f98b1c48d5da4 100644 GIT binary patch literal 13715 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 Date: Sat, 28 Jan 2017 17:57:03 +0000 Subject: [PATCH 12/19] README.md edited online with Bitbucket --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b06259ca..f26dcd94 100644 --- a/README.md +++ b/README.md @@ -51,12 +51,12 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo |![IteadStudio Sonoff Dual](images/devices/sonoff-dual.jpg) **IteadStudio Sonoff Dual**|![IteadStudio Sonoff POW](images/devices/sonoff-pow.jpg) **IteadStudio Sonoff POW**|![IteadStudio Sonoff TH10/TH16](images/devices/sonoff-th10-th16.jpg) **IteadStudio Sonoff TH10/TH16**| |![IteadStudio Sonoff RF](images/devices/sonoff-rf.jpg) **IteadStudio Sonoff RF**|![IteadStudio Sonoff SV](images/devices/sonoff-sv.jpg) **IteadStudio Sonoff SV**|![IteadStudio Sonoff Touch](images/devices/sonoff-touch.jpg) **IteadStudio Sonoff Touch**| |![Wemos D1 Mini Relay Shield](images/devices/d1mini.jpg) **Wemos D1 Mini Relay Shield**|![Electrodragon Relay Board](images/devices/electrodragon-relay-board.jpg) **Electrodragon Relay Board**|![WorkChoice EcoPlug](images/devices/workchoice-ecoplug.jpg) **WorkChoice EcoPlug**| -|![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png) **JanGoe Wifi Relay (NO/NC)**|![WiFi MQTT Relay / Thermostat](images/devices/mqtt-relay.jpg) **WiFi MQTT Relay / Thermostat**|| +|![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png) **JanGoe Wifi Relay (NO/NC)**|![OpenEnergyMonitor WiFi MQTT Relay / Thermostat](images/devices/mqtt-relay.jpg) **OpenEnergyMonitor WiFi MQTT Relay / Thermostat**|| ## License -Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) +Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From bac4f638522d75d4ae70abe2cd21dcd80240a3eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sat, 28 Jan 2017 18:03:53 +0000 Subject: [PATCH 13/19] Format supported hardware images table --- README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f26dcd94..c9b37493 100644 --- a/README.md +++ b/README.md @@ -46,17 +46,23 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo ## Supported hardware -|![IteadStudio S20](images/devices/s20.jpg) **IteadStudio S20**|![IteadStudio Slampher](images/devices/slampher.jpg) **IteadStudio Slampher**|![IteadStudio Sonoff 4CH](images/devices/sonoff-4ch.jpg) **IteadStudio Sonoff 4CH**| -|![IteadStudio Sonoff Basic](images/devices/sonoff-basic.jpg) **IteadStudio Sonoff Basic**|![IteadStudio Motor Switch](images/devices/motor-switch.jpg) **IteadStudio Motor Switch**|![IteadStudio 1CH Inching](images/devices/1ch-inching.jpg) **IteadStudio 1CH Inching**| -|![IteadStudio Sonoff Dual](images/devices/sonoff-dual.jpg) **IteadStudio Sonoff Dual**|![IteadStudio Sonoff POW](images/devices/sonoff-pow.jpg) **IteadStudio Sonoff POW**|![IteadStudio Sonoff TH10/TH16](images/devices/sonoff-th10-th16.jpg) **IteadStudio Sonoff TH10/TH16**| -|![IteadStudio Sonoff RF](images/devices/sonoff-rf.jpg) **IteadStudio Sonoff RF**|![IteadStudio Sonoff SV](images/devices/sonoff-sv.jpg) **IteadStudio Sonoff SV**|![IteadStudio Sonoff Touch](images/devices/sonoff-touch.jpg) **IteadStudio Sonoff Touch**| -|![Wemos D1 Mini Relay Shield](images/devices/d1mini.jpg) **Wemos D1 Mini Relay Shield**|![Electrodragon Relay Board](images/devices/electrodragon-relay-board.jpg) **Electrodragon Relay Board**|![WorkChoice EcoPlug](images/devices/workchoice-ecoplug.jpg) **WorkChoice EcoPlug**| -|![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png) **JanGoe Wifi Relay (NO/NC)**|![OpenEnergyMonitor WiFi MQTT Relay / Thermostat](images/devices/mqtt-relay.jpg) **OpenEnergyMonitor WiFi MQTT Relay / Thermostat**|| +|![IteadStudio S20](images/devices/s20.jpg)|![IteadStudio Slampher](images/devices/slampher.jpg)|![IteadStudio Sonoff 4CH](images/devices/sonoff-4ch.jpg)| +|**IteadStudio S20**|**IteadStudio Slampher**|**IteadStudio Sonoff 4CH**| +|![IteadStudio Sonoff Basic](images/devices/sonoff-basic.jpg)|![IteadStudio Motor Switch](images/devices/motor-switch.jpg)|![IteadStudio 1CH Inching](images/devices/1ch-inching.jpg)| +|**IteadStudio Sonoff Basic**|**IteadStudio Motor Switch**|**IteadStudio 1CH Inching**| +|![IteadStudio Sonoff Dual](images/devices/sonoff-dual.jpg)|![IteadStudio Sonoff POW](images/devices/sonoff-pow.jpg)|![IteadStudio Sonoff TH10/TH16](images/devices/sonoff-th10-th16.jpg)| +|**IteadStudio Sonoff Dual**|**IteadStudio Sonoff POW**|**IteadStudio Sonoff TH10/TH16**| +|![IteadStudio Sonoff RF](images/devices/sonoff-rf.jpg)|![IteadStudio Sonoff SV](images/devices/sonoff-sv.jpg)|![IteadStudio Sonoff Touch](images/devices/sonoff-touch.jpg)| +|**IteadStudio Sonoff RF**|**IteadStudio Sonoff SV**|**IteadStudio Sonoff Touch**| +|![Wemos D1 Mini Relay Shield](images/devices/d1mini.jpg)|![Electrodragon Relay Board](images/devices/electrodragon-relay-board.jpg)|![WorkChoice EcoPlug](images/devices/workchoice-ecoplug.jpg)| +|**Wemos D1 Mini Relay Shield**|**Electrodragon Relay Board**|**WorkChoice EcoPlug**| +|![JanGoe Wifi Relay (NO/NC)](images/devices/jangoe-wifi-relay.png)|![OpenEnergyMonitor WiFi MQTT Relay / Thermostat](images/devices/mqtt-relay.jpg)|| +|**JanGoe Wifi Relay (NO/NC)**|**OpenEnergyMonitor WiFi MQTT Relay / Thermostat**|| ## License -Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) +Copyright (C) 2016-2017 by Xose P�rez (@xoseperez) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 3e283b7f23914e52fc805ce83a2f4310fe3c77be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sat, 28 Jan 2017 18:06:53 +0000 Subject: [PATCH 14/19] README.md edited online with Bitbucket --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c9b37493..a14b0c2c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,8 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo ## Supported hardware +|||| +|-|-|-| |![IteadStudio S20](images/devices/s20.jpg)|![IteadStudio Slampher](images/devices/slampher.jpg)|![IteadStudio Sonoff 4CH](images/devices/sonoff-4ch.jpg)| |**IteadStudio S20**|**IteadStudio Slampher**|**IteadStudio Sonoff 4CH**| |![IteadStudio Sonoff Basic](images/devices/sonoff-basic.jpg)|![IteadStudio Motor Switch](images/devices/motor-switch.jpg)|![IteadStudio 1CH Inching](images/devices/1ch-inching.jpg)| @@ -62,7 +64,7 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo ## License -Copyright (C) 2016-2017 by Xose P�rez (@xoseperez) +Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 6175a31a8a27e58a79209371689d007e8b9e4c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sun, 29 Jan 2017 22:31:48 +0100 Subject: [PATCH 15/19] Fix bug in emon topic payload --- code/espurna/emon.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/espurna/emon.ino b/code/espurna/emon.ino index c9abb550..f216a866 100644 --- a/code/espurna/emon.ino +++ b/code/espurna/emon.ino @@ -112,7 +112,7 @@ void powerMonitorLoop() { measurements = 0; char power[6]; - snprintf(power, "%d", 6, _power); + snprintf(power, 6, "%d", _power); mqttSend(getSetting("emonPowerTopic", EMON_POWER_TOPIC).c_str(), power); #if ENABLE_DOMOTICZ domoticzSend("dczPowIdx", power); From 5aa741593135e8f0dd5d1e2497d73e8a7230555e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sun, 29 Jan 2017 22:33:12 +0100 Subject: [PATCH 16/19] Version bump --- CHANGELOG.md | 4 ++++ README.md | 4 ++-- code/espurna/config/version.h | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95f8064e..dd9ab6b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [1.5.2] 2017-01-29 +### Fixed +- Fix bug in emon topic payload + ## [1.5.1] 2017-01-28 ### Added - OpenEnergyMonitor WiFi MQTT Relay / Thermostat support (thanks to Denis French) diff --git a/README.md b/README.md index a14b0c2c..3a39c176 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ESPurna ("spark" in Catalan) is a custom firmware for ESP8266 based smart switch It was originally developed with the **[IteadStudio Sonoff](https://www.itead.cc/sonoff-wifi-wireless-switch.html)** in mind but now it supports a growing number of ESP8266-based boards. It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. -**Current Release Version is 1.5.1**, read the [changelog](CHANGELOG.md). +**Current Release Version is 1.5.2**, read the [changelog](CHANGELOG.md). ## Features @@ -64,7 +64,7 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo ## License -Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) +Copyright (C) 2016-2017 by Xose P�rez (@xoseperez) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/code/espurna/config/version.h b/code/espurna/config/version.h index cfde4f72..160953cf 100644 --- a/code/espurna/config/version.h +++ b/code/espurna/config/version.h @@ -1,4 +1,4 @@ #define APP_NAME "ESPurna" -#define APP_VERSION "1.5.1" +#define APP_VERSION "1.5.2" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat" From 5cd20644e3f216dc05db5e96e3b9798a065ac125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Mon, 30 Jan 2017 23:10:20 +0100 Subject: [PATCH 17/19] Fix typo in index.html that made hidden fields show up in the web interface even if the module they were associated to was not enabled --- code/html/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/html/index.html b/code/html/index.html index 9e2448f7..3764f358 100644 --- a/code/html/index.html +++ b/code/html/index.html @@ -391,19 +391,19 @@ -
+
Set to 0 to disable notifications.
-
+
Set to 0 to disable notifications.
-
+
Set to 0 to disable notifications.
From 24d0aa0b48785766087e4a3928a8749c4080c7a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Thu, 2 Feb 2017 11:34:46 +0100 Subject: [PATCH 18/19] Issues #50 and #54. Fix domoticz sensor message format. Added energy calculation --- code/espurna/config/general.h | 7 ++++++ code/espurna/config/prototypes.h | 1 + code/espurna/config/sensors.h | 6 ++++++ code/espurna/dht.ino | 18 ++++++++++++++-- code/espurna/domoticz.ino | 10 ++++++--- code/espurna/ds18b20.ino | 2 +- code/espurna/emon.ino | 37 +++++++++++++++++++++++++++++++- code/espurna/pow.ino | 36 ++++++++++++++++++++++++++++++- code/espurna/relay.ino | 6 +++--- 9 files changed, 112 insertions(+), 11 deletions(-) diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index 4d0e3b5a..5e0acb74 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -7,6 +7,13 @@ #define BUFFER_SIZE 1024 #define HEARTBEAT_INTERVAL 300000 +//-------------------------------------------------------------------------------- +// EEPROM +//-------------------------------------------------------------------------------- + +#define EEPROM_RELAY_STATUS 0 +#define EEPROM_POWER_COUNT 1 + //-------------------------------------------------------------------------------- // RELAY //-------------------------------------------------------------------------------- diff --git a/code/espurna/config/prototypes.h b/code/espurna/config/prototypes.h index 2c4fe604..c3a56929 100644 --- a/code/espurna/config/prototypes.h +++ b/code/espurna/config/prototypes.h @@ -12,3 +12,4 @@ void mqttRegister(void (*callback)(unsigned int, const char *, const char *)); template bool setSetting(const String& key, T value); template String getSetting(const String& key, T defaultValue); template void domoticzSend(const char * key, T value); +template void domoticzSend(const char * key, T nvalue, const char * svalue); diff --git a/code/espurna/config/sensors.h b/code/espurna/config/sensors.h index fa69ee5a..a39793e5 100644 --- a/code/espurna/config/sensors.h +++ b/code/espurna/config/sensors.h @@ -20,6 +20,11 @@ #define DHT_TEMPERATURE_TOPIC "/temperature" #define DHT_HUMIDITY_TOPIC "/humidity" +#define HUMIDITY_NORMAL 0 +#define HUMIDITY_COMFORTABLE 1 +#define HUMIDITY_DRY 2 +#define HUMIDITY_WET 3 + //-------------------------------------------------------------------------------- // DS18B20 temperature sensor // Enable support by passing ENABLE_DS18B20=1 build flag @@ -46,6 +51,7 @@ #define EMON_MAINS_VOLTAGE 230 #define EMON_CURRENT_RATIO 180 #define EMON_POWER_TOPIC "/power" +#define EMON_ENERGY_TOPIC "/energy" //-------------------------------------------------------------------------------- // HLW8012 power sensor (Sonoff POW) diff --git a/code/espurna/dht.ino b/code/espurna/dht.ino index 61ba98f5..c1aeb45e 100644 --- a/code/espurna/dht.ino +++ b/code/espurna/dht.ino @@ -73,8 +73,22 @@ void dhtLoop() { // Send to Domoticz #if ENABLE_DOMOTICZ - domoticzSend("dczTmpIdx", temperature); - domoticzSend("dczHumIdx", humidity); + { + domoticzSend("dczTmpIdx", 0, temperature); + int status; + if (h > 70) { + status = HUMIDITY_WET; + } else if (h > 45) { + status = HUMIDITY_COMFORTABLE; + } else if (h > 30) { + status = HUMIDITY_NORMAL; + } else { + status = HUMIDITY_DRY; + } + char buffer[2]; + sprintf(buffer, "%d", status); + domoticzSend("dczHumIdx", humidity, buffer); + } #endif // Update websocket clients diff --git a/code/espurna/domoticz.ino b/code/espurna/domoticz.ino index 607acb8c..6534b91f 100644 --- a/code/espurna/domoticz.ino +++ b/code/espurna/domoticz.ino @@ -8,13 +8,17 @@ Copyright (C) 2016-2017 by Xose Pérez #if ENABLE_DOMOTICZ -template void domoticzSend(const char * key, T value) { +template void domoticzSend(const char * key, T nvalue, const char * svalue) { unsigned int idx = getSetting(key).toInt(); if (idx > 0) { - char payload[45]; - sprintf(payload, "{\"idx\": %d, \"nvalue\": %s, \"svalue\": \"\"}", idx, String(value).c_str()); + char payload[128]; + snprintf(payload, 128, "{\"idx\": %d, \"nvalue\": %s, \"svalue\": \"%s\"}", idx, String(nvalue).c_str(), svalue); mqttSendRaw(getSetting("dczTopicIn", DOMOTICZ_IN_TOPIC).c_str(), payload); } } +template void domoticzSend(const char * key, T nvalue) { + domoticzSend(key, nvalue, ""); +} + #endif diff --git a/code/espurna/ds18b20.ino b/code/espurna/ds18b20.ino index 2011530f..7424241b 100644 --- a/code/espurna/ds18b20.ino +++ b/code/espurna/ds18b20.ino @@ -62,7 +62,7 @@ void dsLoop() { // Send to Domoticz #if ENABLE_DOMOTICZ - domoticzSend("dczTmpIdx", temperature); + domoticzSend("dczTmpIdx", 0, temperature); #endif // Update websocket clients diff --git a/code/espurna/emon.ino b/code/espurna/emon.ino index f216a866..892fc2bf 100644 --- a/code/espurna/emon.ino +++ b/code/espurna/emon.ino @@ -9,10 +9,12 @@ Copyright (C) 2016-2017 by Xose Pérez #if ENABLE_EMON #include +#include EmonLiteESP emon; double _current = 0; unsigned int _power = 0; +double _energy = 0; // ----------------------------------------------------------------------------- // EMON @@ -26,6 +28,10 @@ unsigned int getPower() { return _power; } +double getEnergy() { + return _energy; +} + double getCurrent() { return _current; } @@ -34,6 +40,20 @@ unsigned int currentCallback() { return analogRead(EMON_CURRENT_PIN); } +void retrieveEnergy() { + unsigned long energy = EEPROM.read(EEPROM_POWER_COUNT + 1); + energy = (energy << 8) + EEPROM.read(EEPROM_POWER_COUNT); + if (energy == 0xFFFF) energy = 0; + _energy = energy; +} + +void saveEnergy() { + unsigned int energy = (int) _energy; + EEPROM.write(EEPROM_POWER_COUNT, energy & 0xFF); + EEPROM.write(EEPROM_POWER_COUNT + 1, (energy >> 8) & 0xFF); + EEPROM.commit(); +} + void powerMonitorSetup() { // backwards compatibility @@ -56,6 +76,11 @@ void powerMonitorSetup() { apiRegister("/api/power", "power", [](char * buffer, size_t len) { snprintf(buffer, len, "%d", _power); }); + apiRegister("/api/energy", "energy", [](char * buffer, size_t len) { + snprintf(buffer, len, "%ld", (unsigned long) _energy); + }); + + retrieveEnergy(); } @@ -108,14 +133,24 @@ void powerMonitorLoop() { if (measurements == EMON_MEASUREMENTS) { _power = (int) ((sum - max - min) * mainsVoltage / (measurements - 2)); + double window = (double) EMON_INTERVAL * EMON_MEASUREMENTS / 1000.0 / 3600.0; + _energy += _power * window; + saveEnergy(); sum = 0; measurements = 0; char power[6]; snprintf(power, 6, "%d", _power); + char energy[8]; + snprintf(energy, 6, "%ld", (unsigned long) _energy); mqttSend(getSetting("emonPowerTopic", EMON_POWER_TOPIC).c_str(), power); + mqttSend(getSetting("emonEnergyTopic", EMON_ENERGY_TOPIC).c_str(), energy); #if ENABLE_DOMOTICZ - domoticzSend("dczPowIdx", power); + { + char buffer[20]; + snprintf(buffer, 20, "%s;%s", power, energy); + domoticzSend("dczPowIdx", 0, buffer); + } #endif diff --git a/code/espurna/pow.ino b/code/espurna/pow.ino index ac2e43b9..a575baf7 100644 --- a/code/espurna/pow.ino +++ b/code/espurna/pow.ino @@ -12,9 +12,11 @@ Copyright (C) 2016-2017 by Xose Pérez #include #include #include +#include HLW8012 hlw8012; bool _powEnabled = false; +double _energy = 0; // ----------------------------------------------------------------------------- // POW @@ -117,8 +119,26 @@ unsigned int getPowerFactor() { return (int) (100 * hlw8012.getPowerFactor()); } +double getEnergy() { + return _energy; +} + // ----------------------------------------------------------------------------- +void retrieveEnergy() { + unsigned long energy = EEPROM.read(EEPROM_POWER_COUNT + 1); + energy = (energy << 8) + EEPROM.read(EEPROM_POWER_COUNT); + if (energy == 0xFFFF) energy = 0; + _energy = energy; +} + +void saveEnergy() { + unsigned int energy = (int) _energy; + EEPROM.write(EEPROM_POWER_COUNT, energy & 0xFF); + EEPROM.write(EEPROM_POWER_COUNT + 1, (energy >> 8) & 0xFF); + EEPROM.commit(); +} + void powSetup() { // Initialize HLW8012 @@ -143,10 +163,16 @@ void powSetup() { // Retrieve calibration values powRetrieveCalibration(); + // Recover energy reading + retrieveEnergy(); + // API definitions apiRegister("/api/power", "power", [](char * buffer, size_t len) { snprintf(buffer, len, "%d", getActivePower()); }); + apiRegister("/api/energy", "energy", [](char * buffer, size_t len) { + snprintf(buffer, len, "%ld", (unsigned long) _energy); + }); apiRegister("/api/current", "current", [](char * buffer, size_t len) { dtostrf(getCurrent(), len-1, 2, buffer); }); @@ -216,8 +242,12 @@ void powLoop() { reactive = (apparent > power) ? sqrt(apparent * apparent - power * power) : 0; factor = (apparent > 0) ? 100 * power / apparent : 100; if (factor > 100) factor = 100; + unsigned long window = (double) POW_REPORT_EVERY * POW_UPDATE_INTERVAL / 1000.0 / 3600.0; + _energy += power * window; + saveEnergy(); mqttSend(getSetting("powPowerTopic", POW_POWER_TOPIC).c_str(), String(power).c_str()); + mqttSend(getSetting("powEnergyTopic", POW_ENERGY_TOPIC).c_str(), String(_energy).c_str()); mqttSend(getSetting("powCurrentTopic", POW_CURRENT_TOPIC).c_str(), String(current).c_str()); mqttSend(getSetting("powVoltageTopic", POW_VOLTAGE_TOPIC).c_str(), String(voltage).c_str()); mqttSend(getSetting("powAPowerTopic", POW_APOWER_TOPIC).c_str(), String(apparent).c_str()); @@ -225,7 +255,11 @@ void powLoop() { mqttSend(getSetting("powPFactorTopic", POW_PFACTOR_TOPIC).c_str(), String(factor).c_str()); #if ENABLE_DOMOTICZ - domoticzSend("dczPowIdx", power); + { + char buffer[20]; + snprintf(buffer, 20, "%d;%ld", power, (unsigned long) _energy); + domoticzSend("dczPowIdx", 0, buffer); + } #endif power_sum = current_sum = voltage_sum = 0; diff --git a/code/espurna/relay.ino b/code/espurna/relay.ino index 65fe03d9..0b66e870 100644 --- a/code/espurna/relay.ino +++ b/code/espurna/relay.ino @@ -208,20 +208,20 @@ void relaySave() { if (relayStatus(i)) mask += bit; bit += bit; } - EEPROM.write(0, mask); + EEPROM.write(EEPROM_RELAY_STATUS, mask); EEPROM.commit(); } void relayRetrieve(bool invert) { recursive = true; unsigned char bit = 1; - unsigned char mask = invert ? ~EEPROM.read(0) : EEPROM.read(0); + unsigned char mask = invert ? ~EEPROM.read(EEPROM_RELAY_STATUS) : EEPROM.read(EEPROM_RELAY_STATUS); for (unsigned int i=0; i < _relays.size(); i++) { relayStatus(i, ((mask & bit) == bit)); bit += bit; } if (invert) { - EEPROM.write(0, mask); + EEPROM.write(EEPROM_RELAY_STATUS, mask); EEPROM.commit(); } recursive = false; From 7eeacd15969c664370ae0729fbb453fc8f425701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Thu, 2 Feb 2017 11:38:23 +0100 Subject: [PATCH 19/19] Version bump. Changelog update. --- CHANGELOG.md | 19 +++++++++++++------ README.md | 4 ++-- code/espurna/config/version.h | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9ab6b7..f6ac4e68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [1.5.3] 2017-02-02 +### Fixed +- Issue #50 and #54. Fixed domoticz MQTT message format + +### Added +- Energy calculation and aggregation. API entry points and MQTT messages. + ## [1.5.2] 2017-01-29 ### Fixed - Fix bug in emon topic payload @@ -32,8 +39,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - MQTT will topic - Crash with HLW812 interrupts while trying to create a WIFI connection - Issue #20 Better inline documentation for Alexa and Domoticz default settings -- #39 Fixed autoconnect issue with static IP (fixed in JustWifi library) -- #41 Added password requirements to initial password change page +- Issue #39 Fixed autoconnect issue with static IP (fixed in JustWifi library) +- Issue #41 Added password requirements to initial password change page ### Changed - Changed LED pattern for WIFI notifications (shorter pulses) @@ -43,7 +50,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Adding current, voltage, apparent and reactive power reports to Sonoff POW (Web & MQTT) ### Fixed -- #35 Fixed frequent MQTT connection drops after WIFI reconnect +- Issue #35 Fixed frequent MQTT connection drops after WIFI reconnect - Defer wifi disconnection from web interface to allow request to return ### Changed @@ -52,14 +59,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [1.4.3] 2017-01-11 ### Fixed -- #6 Using forked Time library to prevent conflict with Arduino Core for ESP8266 time.h file in windows machines +- Issue #6 Using forked Time library to prevent conflict with Arduino Core for ESP8266 time.h file in windows machines ## [1.4.2] 2017-01-09 ### Added - Support for inverse logic relays ### Fixed -- Fixed error in relay identification from MQTT messages (issue #31) +- Issue #31. Fixed error in relay identification from MQTT messages ## [1.4.1] 2017-01-05 ### Added @@ -75,7 +82,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Support for static IP connections ### Fixed -- Enforce minimum password strength in web interface (#16) +- Issue #16. Enforce minimum password strength in web interface ### Changed - Using default client_id provided by AsyncMqttClient diff --git a/README.md b/README.md index 3a39c176..44293698 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ESPurna ("spark" in Catalan) is a custom firmware for ESP8266 based smart switch It was originally developed with the **[IteadStudio Sonoff](https://www.itead.cc/sonoff-wifi-wireless-switch.html)** in mind but now it supports a growing number of ESP8266-based boards. It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. -**Current Release Version is 1.5.2**, read the [changelog](CHANGELOG.md). +**Current Release Version is 1.5.3**, read the [changelog](CHANGELOG.md). ## Features @@ -64,7 +64,7 @@ For more information please refer to the [ESPurna Wiki](https://bitbucket.org/xo ## License -Copyright (C) 2016-2017 by Xose P�rez (@xoseperez) +Copyright (C) 2016-2017 by Xose Pérez (@xoseperez) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/code/espurna/config/version.h b/code/espurna/config/version.h index 160953cf..e7c0c185 100644 --- a/code/espurna/config/version.h +++ b/code/espurna/config/version.h @@ -1,4 +1,4 @@ #define APP_NAME "ESPurna" -#define APP_VERSION "1.5.2" +#define APP_VERSION "1.5.3" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat"