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) diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index a6bbdbc5..649dfa87 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -80,6 +80,8 @@ //#define HELTEC_TOUCHRELAY //#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 487f2729..19255635 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 // ----------------------------------------------------------------------------- @@ -1996,6 +1997,48 @@ #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/ + // https://shop.allnet.de/fileadmin/transfer/products/148814.pdf + // ----------------------------------------------------------------------------- + +#elif defined(ALLNET_4DUINO_IOT_WLAN_RELAIS) + + // Info + #define MANUFACTURER "ALLNET" + #define DEVICE "4DUINO_IOT_WLAN_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 0 + //#define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + + // 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 + + // ----------------------------------------------------------------------------- // Luani HVIO // https://luani.de/projekte/esp8266-hvio/ @@ -2029,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/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 diff --git a/code/espurna/homeassistant.ino b/code/espurna/homeassistant.ino index 6c4852e9..070fc1ea 100644 --- a/code/espurna/homeassistant.ino +++ b/code/espurna/homeassistant.ino @@ -24,9 +24,8 @@ 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("\""); + config["unit_of_measurement"] = magnitudeUnits(type); } diff --git a/code/espurna/light.ino b/code/espurna/light.ino index 1106294b..28a6293d 100644 --- a/code/espurna/light.ino +++ b/code/espurna/light.ino @@ -141,7 +141,7 @@ void _generateBrightness() { } 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; @@ -417,6 +417,7 @@ unsigned int _toPWM(unsigned char id) { } void _shadow() { + // Update transition ticker _light_steps_left--; if (_light_steps_left == 0) _light_transition_ticker.detach(); @@ -424,15 +425,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() { diff --git a/code/espurna/migrate.ino b/code/espurna/migrate.ino index fb986e86..67d97c1f 100644 --- a/code/espurna/migrate.ino +++ b/code/espurna/migrate.ino @@ -930,6 +930,29 @@ void migrate() { setSetting("relayGPIO", 1, 5); setSetting("relayType", 1, RELAY_TYPE_NORMAL); + #elif defined(ALLNET_4DUINO_IOT_WLAN_RELAIS) + + setSetting("board", 73); + setSetting("relayGPIO", 0, 14); + 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/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; }; diff --git a/code/espurna/telnet.ino b/code/espurna/telnet.ino index fc3912c6..006d5d21 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 (sometimes repeating) + if (len >= 2) { + if ((p[0] == 0xFF) && (p[1] == 0xEC)) { + _telnetClients[clientId]->close(true); + return; + } + } + if ((strncmp(p, "close", 5) == 0) || (strncmp(p, "quit", 4) == 0)) { _telnetClients[clientId]->close(); return; 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 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) { diff --git a/code/platformio.ini b/code/platformio.ini index 54150a1b..0926af25 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 @@ -2104,3 +2104,51 @@ upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 extra_scripts = ${common.extra_scripts} + +[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_4DUINO_IOT_WLAN_RELAIS +monitor_baud = 115200 +extra_scripts = ${common.extra_scripts} + +[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_4DUINO_IOT_WLAN_RELAIS +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 00000000..dfed5f3c Binary files /dev/null and b/images/devices/tonbux-mosquito-killer.jpg differ