From bcd01868393a06ae15e8fc51c3ff9336356d7cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Wed, 2 May 2018 11:25:45 +0200 Subject: [PATCH 01/15] Fix ESP01 RGBLED definition --- README.md | 6 +++--- code/espurna/config/hardware.h | 1 + code/espurna/config/version.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d903ab2e..d0b72c55 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ ESPurna ("spark" in Catalan) is a custom firmware for ESP8285/ESP8266 based smar It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. [![version](https://img.shields.io/badge/version-1.12.6-brightgreen.svg)](CHANGELOG.md) -[![branch](https://img.shields.io/badge/branch-dev-orange.svg)](https://github.org/xoseperez/espurna/tree/dev/) -[![travis](https://travis-ci.org/xoseperez/espurna.svg?branch=dev)](https://travis-ci.org/xoseperez/espurna) -[![codacy](https://img.shields.io/codacy/grade/c9496e25cf07434cba786b462cb15f49/dev.svg)](https://www.codacy.com/app/xoseperez/espurna/dashboard) +[![branch](https://img.shields.io/badge/branch-master-orange.svg)](https://github.org/xoseperez/espurna/tree/master/) +[![travis](https://travis-ci.org/xoseperez/espurna.svg?branch=master)](https://travis-ci.org/xoseperez/espurna) +[![codacy](https://img.shields.io/codacy/grade/c9496e25cf07434cba786b462cb15f49/master.svg)](https://www.codacy.com/app/xoseperez/espurna/dashboard) [![license](https://img.shields.io/github/license/xoseperez/espurna.svg)](LICENSE)
[![donate](https://img.shields.io/badge/donate-PayPal-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=xose%2eperez%40gmail%2ecom&lc=US&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHostedGuest) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 487f2729..1e289bc1 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -1904,6 +1904,7 @@ // LEDs #define LED1_PIN 2 + #define LED1_PIN_INVERSE 0 // ----------------------------------------------------------------------------- diff --git a/code/espurna/config/version.h b/code/espurna/config/version.h index c6c250c1..92575561 100644 --- a/code/espurna/config/version.h +++ b/code/espurna/config/version.h @@ -1,6 +1,6 @@ #define APP_NAME "ESPURNA" #define APP_VERSION "1.12.6" -#define APP_REVISION "" +#define APP_REVISION "db84006" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat" #define CFG_VERSION 3 From 78a807e247c05ebf007ffa3c1df5df749a4dce09 Mon Sep 17 00:00:00 2001 From: Markus Bajones Date: Wed, 2 May 2018 13:00:18 +0200 Subject: [PATCH 02/15] Add support for Allnet ESP8266_UP_Relay --- code/espurna/config/arduino.h | 1 + code/espurna/config/hardware.h | 33 +++++++++++++++++++++++++++++++++ code/espurna/migrate.ino | 7 +++++++ code/platformio.ini | 24 ++++++++++++++++++++++++ 4 files changed, 65 insertions(+) diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index ea6e9c83..29f61478 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -78,6 +78,7 @@ //#define GENERIC_ESP01S_DS18B20_V10 //#define HELTEC_TOUCHRELAY //#define ZHILDE_EU44_W +//#define ALLNET_ESP8266_UP //-------------------------------------------------------------------------------- // Features (values below are non-default values) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 37f2c596..70b7df33 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -1971,6 +1971,39 @@ #define LED1_PIN 1 #define LED1_PIN_INVERSE 1 + // ----------------------------------------------------------------------------- + // Allnet 4duino ESP8266-UP-Relais + // http://www.allnet.de/de/allnet-brand/produkte/neuheiten/p/allnet-4duino-iot-wlan-relais-unterputz-esp8266-up-relais/ + // ----------------------------------------------------------------------------- + +#elif defined(ALLNET_ESP8266_UP) + + // Info + #define MANUFACTURER "ALLNET" + #define DEVICE "ESP8266_UP_Relais" + + // Relays + #define RELAY1_PIN 14 + #define RELAY1_RESET_PIN 12 + #define RELAY1_TYPE RELAY_TYPE_LATCHED + + // LEDs + #define LED1_PIN 0 + #define LED1_PIN_INVERSE 1 + + // Buttons + #define BUTTON1_PIN 4 + #define BUTTON1_MODE BUTTON_PUSHBUTTON + #define BUTTON1_PRESS BUTTON_MODE_TOGGLE + #define BUTTON1_CLICK BUTTON_MODE_NONE + #define BUTTON1_DBLCLICK BUTTON_MODE_NONE + #define BUTTON1_LNGCLICK BUTTON_MODE_NONE + #define BUTTON1_LNGLNGCLICK BUTTON_MODE_NONE + + #define BUTTON2_PIN 5 + #define BUTTON2_MODE BUTTON_PUSHBUTTON + + // ----------------------------------------------------------------------------- // TEST boards (do not use!!) // ----------------------------------------------------------------------------- diff --git a/code/espurna/migrate.ino b/code/espurna/migrate.ino index 8bf615a0..ae8edd9b 100644 --- a/code/espurna/migrate.ino +++ b/code/espurna/migrate.ino @@ -905,6 +905,13 @@ void migrate() { setSetting("relayType", 3, RELAY_TYPE_NORMAL); setSetting("relayType", 4, RELAY_TYPE_NORMAL); + #elif defined(ALLNET_ESP8266_UP) + + setSetting("board", 71); + setSetting("relayGPIO", 0, 14); + setSetting("relayResetGPIO", 1, 12); + setSetting("relayType", 0, RELAY_TYPE_LATCHED); + #else // Allow users to define new settings without migration config diff --git a/code/platformio.ini b/code/platformio.ini index db86f9e3..43d3234c 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -2054,3 +2054,27 @@ upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 extra_scripts = ${common.extra_scripts} + +[env:allnet-esp8266-up-relay] +platform = ${common.platform} +framework = arduino +board = esp12e +board_flash_mode = dout +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m} -DALLNET_ESP8266_UP +monitor_baud = 115200 +extra_scripts = ${common.extra_scripts} + +[env:allnet-esp8266-up-relay-ota] +platform = ${common.platform} +framework = arduino +board = esp12e +board_flash_mode = dout +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m} -DALLNET_ESP8266_UP +upload_speed = 115200 +upload_port = "${env.ESPURNA_IP}" +upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 +extra_scripts = ${common.extra_scripts} From ed609e622351e0c0bf3bbe6d6d218e3a8c07cafc Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Tue, 1 May 2018 18:45:41 +0300 Subject: [PATCH 03/15] Handle C-d in telnet --- code/espurna/telnet.ino | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/espurna/telnet.ino b/code/espurna/telnet.ino index fc3912c6..996da567 100644 --- a/code/espurna/telnet.ino +++ b/code/espurna/telnet.ino @@ -66,6 +66,15 @@ void _telnetData(unsigned char clientId, void *data, size_t len) { // Capture close connection char * p = (char *) data; + + // C-d is sent as two bytes + if (len == 2) { + if ((p[0] == 0xFF) && (p[1] == 0xEC)) { + _telnetClients[clientId]->close(); + return; + } + } + if ((strncmp(p, "close", 5) == 0) || (strncmp(p, "quit", 4) == 0)) { _telnetClients[clientId]->close(); return; From 99311bbe714c14fab0ea97d9fa0309147b7f2cd0 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Wed, 2 May 2018 15:39:55 +0300 Subject: [PATCH 04/15] Sometimes telnet spams this sequence --- code/espurna/telnet.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/espurna/telnet.ino b/code/espurna/telnet.ino index 996da567..918f228e 100644 --- a/code/espurna/telnet.ino +++ b/code/espurna/telnet.ino @@ -67,8 +67,8 @@ void _telnetData(unsigned char clientId, void *data, size_t len) { // Capture close connection char * p = (char *) data; - // C-d is sent as two bytes - if (len == 2) { + // C-d is sent as two bytes (sometimes repeating) + if (len >= 2) { if ((p[0] == 0xFF) && (p[1] == 0xEC)) { _telnetClients[clientId]->close(); return; From 5708a23d2f5ae6d5f63e7bdaa04fc29294117d77 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Wed, 2 May 2018 15:40:11 +0300 Subject: [PATCH 05/15] Immediatly close connection to avoid watchdog --- code/espurna/telnet.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/espurna/telnet.ino b/code/espurna/telnet.ino index 918f228e..006d5d21 100644 --- a/code/espurna/telnet.ino +++ b/code/espurna/telnet.ino @@ -70,7 +70,7 @@ void _telnetData(unsigned char clientId, void *data, size_t len) { // C-d is sent as two bytes (sometimes repeating) if (len >= 2) { if ((p[0] == 0xFF) && (p[1] == 0xEC)) { - _telnetClients[clientId]->close(); + _telnetClients[clientId]->close(true); return; } } From 0c18c3c1570427b316049ecfb62e9bd1e5d94100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Thu, 3 May 2018 10:56:10 +0200 Subject: [PATCH 06/15] Add missing sensors to boot log messages --- README.md | 6 +++--- code/espurna/utils.ino | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d0b72c55..d903ab2e 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ ESPurna ("spark" in Catalan) is a custom firmware for ESP8285/ESP8266 based smar It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. [![version](https://img.shields.io/badge/version-1.12.6-brightgreen.svg)](CHANGELOG.md) -[![branch](https://img.shields.io/badge/branch-master-orange.svg)](https://github.org/xoseperez/espurna/tree/master/) -[![travis](https://travis-ci.org/xoseperez/espurna.svg?branch=master)](https://travis-ci.org/xoseperez/espurna) -[![codacy](https://img.shields.io/codacy/grade/c9496e25cf07434cba786b462cb15f49/master.svg)](https://www.codacy.com/app/xoseperez/espurna/dashboard) +[![branch](https://img.shields.io/badge/branch-dev-orange.svg)](https://github.org/xoseperez/espurna/tree/dev/) +[![travis](https://travis-ci.org/xoseperez/espurna.svg?branch=dev)](https://travis-ci.org/xoseperez/espurna) +[![codacy](https://img.shields.io/codacy/grade/c9496e25cf07434cba786b462cb15f49/dev.svg)](https://www.codacy.com/app/xoseperez/espurna/dashboard) [![license](https://img.shields.io/github/license/xoseperez/espurna.svg)](LICENSE)
[![donate](https://img.shields.io/badge/donate-PayPal-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=xose%2eperez%40gmail%2ecom&lc=US&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHostedGuest) diff --git a/code/espurna/utils.ino b/code/espurna/utils.ino index 56b9e88d..c3b092a5 100644 --- a/code/espurna/utils.ino +++ b/code/espurna/utils.ino @@ -356,9 +356,15 @@ void info() { #if ANALOG_SUPPORT DEBUG_MSG_P(PSTR(" ANALOG")); #endif + #if BH1750_SUPPORT + DEBUG_MSG_P(PSTR(" BH1750")); + #endif #if BMX280_SUPPORT DEBUG_MSG_P(PSTR(" BMX280")); #endif + #if CSE7766_SUPPORT + DEBUG_MSG_P(PSTR(" CSE7766")); + #endif #if DALLAS_SUPPORT DEBUG_MSG_P(PSTR(" DALLAS")); #endif @@ -401,6 +407,9 @@ void info() { #if PZEM004T_SUPPORT DEBUG_MSG_P(PSTR(" PZEM004T")); #endif + #if SENSEAIR_SUPPORT + DEBUG_MSG_P(PSTR(" SENSEAIR")); + #endif #if SHT3X_I2C_SUPPORT DEBUG_MSG_P(PSTR(" SHT3X_I2C")); #endif From 9a412520b557d5c2b5f4b4e6815f5d229be889a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Thu, 3 May 2018 23:30:37 +0200 Subject: [PATCH 07/15] Changes to the ALLNET 4duino IoT WLAN relay --- code/espurna/config/arduino.h | 2 +- code/espurna/config/hardware.h | 29 +++++++++++++++++++---------- code/espurna/migrate.ino | 4 ++-- code/platformio.ini | 8 ++++---- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index 7c23e218..07e33612 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -80,7 +80,7 @@ //#define HELTEC_TOUCHRELAY //#define ZHILDE_EU44_W //#define LUANI_HVIO -//#define ALLNET_ESP8266_UP +//#define ALLNET_4DUINO_IOT_WLAN_RELAIS //-------------------------------------------------------------------------------- // Features (values below are non-default values) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 6f8518c4..e29d0be4 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -2000,13 +2000,14 @@ // ----------------------------------------------------------------------------- // Allnet 4duino ESP8266-UP-Relais // http://www.allnet.de/de/allnet-brand/produkte/neuheiten/p/allnet-4duino-iot-wlan-relais-unterputz-esp8266-up-relais/ + // https://shop.allnet.de/fileadmin/transfer/products/148814.pdf // ----------------------------------------------------------------------------- -#elif defined(ALLNET_ESP8266_UP) +#elif defined(ALLNET_4DUINO_IOT_WLAN_RELAIS) // Info #define MANUFACTURER "ALLNET" - #define DEVICE "ESP8266_UP_Relais" + #define DEVICE "4DUINO_IOT_WLAN_RELAIS" // Relays #define RELAY1_PIN 14 @@ -2018,16 +2019,24 @@ #define LED1_PIN_INVERSE 1 // Buttons - #define BUTTON1_PIN 4 - #define BUTTON1_MODE BUTTON_PUSHBUTTON - #define BUTTON1_PRESS BUTTON_MODE_TOGGLE - #define BUTTON1_CLICK BUTTON_MODE_NONE - #define BUTTON1_DBLCLICK BUTTON_MODE_NONE - #define BUTTON1_LNGCLICK BUTTON_MODE_NONE - #define BUTTON1_LNGLNGCLICK BUTTON_MODE_NONE + //#define BUTTON1_PIN 0 + //#define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH - #define BUTTON2_PIN 5 + // Using pins labelled as SDA & SCL as buttons + #define BUTTON2_PIN 4 #define BUTTON2_MODE BUTTON_PUSHBUTTON + #define BUTTON2_PRESS BUTTON_MODE_TOGGLE + #define BUTTON2_CLICK BUTTON_MODE_NONE + #define BUTTON2_DBLCLICK BUTTON_MODE_NONE + #define BUTTON2_LNGCLICK BUTTON_MODE_NONE + #define BUTTON2_LNGLNGCLICK BUTTON_MODE_NONE + + #define BUTTON3_PIN 5 + #define BUTTON3_MODE BUTTON_PUSHBUTTON + + // Using pins labelled as SDA & SCL for I2C + //#define I2C_SDA_PIN 4 + //#define I2C_SCL_PIN 5 // ----------------------------------------------------------------------------- diff --git a/code/espurna/migrate.ino b/code/espurna/migrate.ino index 548537d4..ab4ef36b 100644 --- a/code/espurna/migrate.ino +++ b/code/espurna/migrate.ino @@ -930,11 +930,11 @@ void migrate() { setSetting("relayGPIO", 1, 5); setSetting("relayType", 1, RELAY_TYPE_NORMAL); - #elif defined(ALLNET_ESP8266_UP) + #elif defined(ALLNET_4DUINO_IOT_WLAN_RELAIS) setSetting("board", 73); setSetting("relayGPIO", 0, 14); - setSetting("relayResetGPIO", 1, 12); + setSetting("relayResetGPIO", 0, 12); setSetting("relayType", 0, RELAY_TYPE_LATCHED); #else diff --git a/code/platformio.ini b/code/platformio.ini index 737f97fe..a5a58e9e 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -2105,25 +2105,25 @@ upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 extra_scripts = ${common.extra_scripts} -[env:allnet-esp8266-up-relay] +[env:allnet-4duino-iot-wlan-relais] platform = ${common.platform} framework = arduino board = esp12e board_flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DALLNET_ESP8266_UP +build_flags = ${common.build_flags_1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS monitor_baud = 115200 extra_scripts = ${common.extra_scripts} -[env:allnet-esp8266-up-relay-ota] +[env:allnet-4duino-iot-wlan-relais-ota] platform = ${common.platform} framework = arduino board = esp12e board_flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DALLNET_ESP8266_UP +build_flags = ${common.build_flags_1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 From 184da877beddba2e1f21fec8e078d32489363063 Mon Sep 17 00:00:00 2001 From: gn0st1c Date: Tue, 8 May 2018 23:27:19 +0300 Subject: [PATCH 08/15] tonbux mosquito killer support tonbux mosquito killer support --- code/espurna/config/arduino.h | 1 + code/espurna/config/hardware.h | 35 ++++++++++++++++++++++ code/espurna/migrate.ino | 16 ++++++++++ code/platformio.ini | 24 +++++++++++++++ images/devices/tonbux-mosquito-killer.jpg | Bin 0 -> 16679 bytes 5 files changed, 76 insertions(+) create mode 100644 images/devices/tonbux-mosquito-killer.jpg diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index 07e33612..649dfa87 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -81,6 +81,7 @@ //#define ZHILDE_EU44_W //#define LUANI_HVIO //#define ALLNET_4DUINO_IOT_WLAN_RELAIS +//#define TONBUX_MOSQUITO_KILLER //-------------------------------------------------------------------------------- // Features (values below are non-default values) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index e29d0be4..19255635 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -2072,6 +2072,41 @@ #define LED1_PIN 15 #define LED1_PIN_INVERSE 0 +// ----------------------------------------------------------------------------- +// Tonbux 50-100M Smart Mosquito Killer USB +// https://www.aliexpress.com/item/Original-Tonbux-50-100M-Smart-Mosquito-Killer-USB-Plug-No-Noise-Repellent-App-Smart-Module/32859330820.html +// ----------------------------------------------------------------------------- + +#elif defined(TONBUX_MOSQUITO_KILLER) + + // Info + #define MANUFACTURER "TONBUX" + #define DEVICE "MOSQUITO_KILLER" + + // Buttons + #define BUTTON1_PIN 2 + #define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + #define BUTTON1_RELAY 1 + + // Relays + #define RELAY1_PIN 5 // not a relay, fan + #define RELAY1_TYPE RELAY_TYPE_NORMAL + + // LEDs + #define LED1_PIN 15 // blue led + #define LED1_PIN_INVERSE 1 + #define LED1_MODE LED_MODE_WIFI + #define LED2_PIN 14 // red led + #define LED2_PIN_INVERSE 1 + #define LED2_MODE LED_MODE_RELAY + + #define LED3_PIN 12 // UV leds (1-2-3-4-5-6-7-8) + #define LED3_PIN_INVERSE 0 + #define LED3_RELAY 1 + #define LED4_PIN 16 // UV leds (9-10-11) + #define LED4_PIN_INVERSE 0 + #define LED4_RELAY 1 + // ----------------------------------------------------------------------------- // TEST boards (do not use!!) // ----------------------------------------------------------------------------- diff --git a/code/espurna/migrate.ino b/code/espurna/migrate.ino index ab4ef36b..67d97c1f 100644 --- a/code/espurna/migrate.ino +++ b/code/espurna/migrate.ino @@ -937,6 +937,22 @@ void migrate() { setSetting("relayResetGPIO", 0, 12); setSetting("relayType", 0, RELAY_TYPE_LATCHED); + #elif defined(TONBUX_MOSQUITO_KILLER) + + setSetting("board", 74); + setSetting("ledGPIO", 0, 15); + setSetting("ledLogic", 0, 1); + setSetting("ledGPIO", 1, 14); + setSetting("ledLogic", 1, 1); + setSetting("ledGPIO", 2, 12); + setSetting("ledLogic", 2, 0); + setSetting("ledGPIO", 3, 16); + setSetting("ledLogic", 3, 0); + setSetting("btnGPIO", 0, 2); + setSetting("btnRelay", 0, 0); + setSetting("relayGPIO", 0, 5); + setSetting("relayType", 0, RELAY_TYPE_NORMAL); + #else // Allow users to define new settings without migration config diff --git a/code/platformio.ini b/code/platformio.ini index a5a58e9e..b8c6e6d1 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -2128,3 +2128,27 @@ upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 extra_scripts = ${common.extra_scripts} + +[env:tonbux-mosquito-killer] +platform = ${common.platform} +framework = arduino +board = esp01_1m +board_flash_mode = dout +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m} -DTONBUX_MOSQUITO_KILLER +monitor_baud = 115200 +extra_scripts = ${common.extra_scripts} + +[env:tonbux-mosquito-killer-ota] +platform = ${common.platform} +framework = arduino +board = esp01_1m +board_flash_mode = dout +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m} -DTONBUX_MOSQUITO_KILLER +upload_speed = 115200 +upload_port = "${env.ESPURNA_IP}" +upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 +extra_scripts = ${common.extra_scripts} \ No newline at end of file diff --git a/images/devices/tonbux-mosquito-killer.jpg b/images/devices/tonbux-mosquito-killer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfed5f3c518ea0ce0b535f3e5c5665e0c01f1be4 GIT binary patch literal 16679 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 Wp35qPPPIoV|GS=}>fPr1^8Wy-261r! literal 0 HcmV?d00001 From 5ddc4ef58958eebbe8bbf4e5a2240705afd7495e Mon Sep 17 00:00:00 2001 From: gn0st1c Date: Tue, 8 May 2018 23:28:24 +0300 Subject: [PATCH 09/15] tonbux mosquito killer support tonbux mosquito killer support --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d903ab2e..4732fbda 100644 --- a/README.md +++ b/README.md @@ -243,10 +243,15 @@ Here is the list of supported hardware. For more information please refer to the |**Heltec Touch Relay**|**Generic Relay v4.0**|**Generic RGBLed v1.0**| |![Generic DHT11 v1.0](images/devices/generic-dht11-10.jpg)|![Generic DS18B20 v1.0](images/devices/generic-ds18b20-10.jpg)|| |**Generic DHT11 v1.0**|**Generic DS18B20 v1.0**|| +|![Tonbux Mosquito Killer](images/devices/tonbux-mosquito-killer.jpg)||| +|**Tonbux Mosquito Killer**||| **Other supported boards:** IteadStudio Sonoff S31, IteadStudio Sonoff POW R2, Zhilde ZLD-EU55-W, Luani HVIO +**Other supported boards (beta):** +KMC 4 Outlet, Gosund WS1, Smart Dual Plug, MakerFocus Intelligent Module LM33 for Lamps + ## License Copyright (C) 2016-2018 by Xose PĂ©rez (@xoseperez) From edcc6a71521b3ec88c25e728c1a6956f98ee53dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Tue, 8 May 2018 23:09:57 +0200 Subject: [PATCH 10/15] Fix compilation errors in PZEM004TSensor class (#837) --- code/espurna/sensors/PZEM004TSensor.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/code/espurna/sensors/PZEM004TSensor.h b/code/espurna/sensors/PZEM004TSensor.h index 2adc71e9..29635fd6 100644 --- a/code/espurna/sensors/PZEM004TSensor.h +++ b/code/espurna/sensors/PZEM004TSensor.h @@ -20,9 +20,10 @@ class PZEM004TSensor : public BaseSensor { // Public // --------------------------------------------------------------------- - PZEM004TSensor(): BaseSensor(), _data() { + PZEM004TSensor(): BaseSensor() { _count = 4; _sensor_id = SENSOR_PZEM004T_ID; + _ip = IPAddress(192,168,1,1); } ~PZEM004TSensor() { @@ -43,7 +44,7 @@ class PZEM004TSensor : public BaseSensor { _dirty = true; } - void setSerial(Stream & serial) { + void setSerial(HardwareSerial * serial) { _serial = serial; _dirty = true; } @@ -58,10 +59,6 @@ class PZEM004TSensor : public BaseSensor { return _pin_tx; } - Stream & getSerial() { - return _serial; - } - // --------------------------------------------------------------------- // Sensor API // --------------------------------------------------------------------- @@ -72,10 +69,10 @@ class PZEM004TSensor : public BaseSensor { if (!_dirty) return; if (_pzem) delete _pzem; - if (_serial == NULL) { - _pzem = PZEM004T(_pin_rx, _pin_tx); + if (_serial) { + _pzem = new PZEM004T(_serial); } else { - _pzem = PZEM004T(_serial); + _pzem = new PZEM004T(_pin_rx, _pin_tx); } _pzem->setAddress(_ip); @@ -127,8 +124,8 @@ class PZEM004TSensor : public BaseSensor { unsigned int _pin_rx = PZEM004T_RX_PIN; unsigned int _pin_tx = PZEM004T_TX_PIN; - Stream & _serial = NULL; - IPAddress _ip(192,168,1,1); + IPAddress _ip; + HardwareSerial * _serial = NULL; PZEM004T * _pzem = NULL; }; From acf601e8825ad85270430276470641a3969c9ad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Tue, 8 May 2018 23:37:01 +0200 Subject: [PATCH 11/15] Updated to JustWifi 1.1.9 (#843) --- code/platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/platformio.ini b/code/platformio.ini index a5a58e9e..979ddbe3 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -64,7 +64,7 @@ lib_deps = https://bitbucket.org/xoseperez/fauxmoesp.git#2.4.2 https://github.com/xoseperez/hlw8012.git#1.1.0 https://github.com/markszabo/IRremoteESP8266#v2.2.0 - https://bitbucket.org/xoseperez/justwifi.git#1.1.8 + https://bitbucket.org/xoseperez/justwifi.git#1.1.9 https://github.com/madpilot/mDNSResolver#4cfcda1 https://github.com/xoseperez/my92xx#3.0.1 https://bitbucket.org/xoseperez/nofuss.git#0.2.5 From 6a12c0228719a4bade4376394a165ea0990ed311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Wed, 9 May 2018 00:15:04 +0200 Subject: [PATCH 12/15] Add missing reference to DNSServer.h in wifi.ino --- code/espurna/wifi.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/espurna/wifi.ino b/code/espurna/wifi.ino index 554730a7..8fc2e23f 100644 --- a/code/espurna/wifi.ino +++ b/code/espurna/wifi.ino @@ -198,6 +198,8 @@ void _wifiInject() { #if WIFI_AP_CAPTIVE +#include "DNSServer.h" + DNSServer _wifi_dnsServer; void _wifiCaptivePortal(justwifi_messages_t code, char * parameter) { From dfa732749111adf248450372a88f3c66b1681b6f Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Wed, 9 May 2018 13:23:52 -0600 Subject: [PATCH 13/15] Remove quotes from HomeAssistant units Closes #849 --- code/espurna/homeassistant.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/espurna/homeassistant.ino b/code/espurna/homeassistant.ino index 6c4852e9..a2ff95c8 100644 --- a/code/espurna/homeassistant.ino +++ b/code/espurna/homeassistant.ino @@ -26,7 +26,7 @@ void _haSendMagnitude(unsigned char i, JsonObject& config) { config.set("platform", "mqtt"); config.set("device_class", "sensor"); config["state_topic"] = mqttTopic(magnitudeTopicIndex(i).c_str(), false); - config["unit_of_measurement"] = String("\"") + magnitudeUnits(type) + String("\""); + config["unit_of_measurement"] = magnitudeUnits(type); } From 47351744809217e8c7b3e12599525655e2c048b5 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Sat, 12 May 2018 22:55:44 +0300 Subject: [PATCH 14/15] "sensor" is not supported device_class --- code/espurna/homeassistant.ino | 1 - 1 file changed, 1 deletion(-) diff --git a/code/espurna/homeassistant.ino b/code/espurna/homeassistant.ino index 6c4852e9..6944f995 100644 --- a/code/espurna/homeassistant.ino +++ b/code/espurna/homeassistant.ino @@ -24,7 +24,6 @@ void _haSendMagnitude(unsigned char i, JsonObject& config) { unsigned char type = magnitudeType(i); config["name"] = getSetting("hostname") + String(" ") + magnitudeTopic(type); config.set("platform", "mqtt"); - config.set("device_class", "sensor"); config["state_topic"] = mqttTopic(magnitudeTopicIndex(i).c_str(), false); config["unit_of_measurement"] = String("\"") + magnitudeUnits(type) + String("\""); From bc67e93c28801a89f0f3dfbb010fb55ec81ee78a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Sun, 13 May 2018 08:52:02 +0200 Subject: [PATCH 15/15] Fix per channel state on/off for lights (#830) --- code/espurna/light.ino | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/espurna/light.ino b/code/espurna/light.ino index 017ce428..0247c7ef 100644 --- a/code/espurna/light.ino +++ b/code/espurna/light.ino @@ -108,14 +108,14 @@ void _generateBrightness() { // Scale white channel to match brightness _light_channel[3].value = constrain(_light_channel[3].value * LIGHT_WHITE_FACTOR, 0, 255); - // For the rest of channels, don't apply brightness, it is already in the inputValue: + // For the rest of channels, don't apply brightness, it is already in the target: for (unsigned char i=4; i < _light_channel.size(); i++) { _light_channel[i].value = _light_channel[i].inputValue; } } else { - // Don't apply brightness, it is already in the inputValue: + // Don't apply brightness, it is already in the target: for (unsigned char i=0; i < _light_channel.size(); i++) { if (_light_has_color & (i<3)) { _light_channel[i].value = _light_channel[i].inputValue * brightness; @@ -389,6 +389,7 @@ unsigned int _toPWM(unsigned char id) { } void _shadow() { + // Update transition ticker _light_steps_left--; if (_light_steps_left == 0) _light_transition_ticker.detach(); @@ -396,15 +397,20 @@ void _shadow() { // Transitions unsigned char target; for (unsigned int i=0; i < _light_channel.size(); i++) { - target = _light_state ? _light_channel[i].value : 0; + + target = _light_state && _light_channel[i].state ? _light_channel[i].value : 0; + if (_light_steps_left == 0) { _light_channel[i].current = target; } else { double difference = (double) (target - _light_channel[i].current) / (_light_steps_left + 1); _light_channel[i].current = _light_channel[i].current + difference; } + _light_channel[i].shadow = _light_channel[i].current; + } + } void _lightProviderUpdate() {