diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 3b6f2d086..a2fa5648e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,6 +6,6 @@ - [ ] The pull request is done against the latest dev branch - [ ] Only relevant files were touched - [ ] Only one feature/fix was added per PR. - - [ ] The code change is tested and works on core 2.6 + - [ ] The code change is tested and works on core 2.6.1 - [ ] The code change pass travis tests. **Your PR cannot be merged unless tests pass** - [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla). diff --git a/.gitignore b/.gitignore index ebf64d03f..f28d51334 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ tasmota/user_config_override.h build firmware.map firmware.asm +tasmota*.bin +tasmota*.map ## Visual Studio Code specific ###### .vscode diff --git a/API.md b/API.md index 737b1b45b..354382cfc 100644 --- a/API.md +++ b/API.md @@ -2,7 +2,7 @@ # Basic API information -Tasmota can easily be extended by developers using provided function pointers as callback Ids. This document lists the available callback function Ids. See the wiki (https://github.com/arendst/Tasmota/wiki/Sensor-API) for more information. +Tasmota can easily be extended by developers using provided function pointers as callback Ids. This document lists the available callback function Ids. Read [Sensor API](https://tasmota.github.io/docs/#/Sensor-API) for more information. Callback availability can be checked by searching for either XdrvCall, XsnsCall, XdspCall, XnrgCall and XlgtCall. diff --git a/BUILDS.md b/BUILDS.md new file mode 100644 index 000000000..74c0a7a35 --- /dev/null +++ b/BUILDS.md @@ -0,0 +1,147 @@ +## Available Features and Sensors + +| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks +|-----------------------|---------|-------|--------|-----|---------|----|---------|-------- +| MY_LANGUAGE en-GB | x | x | x | x | x | x | x | +| USE_ARDUINO_OTA | - | - | - | - | - | - | - | +| USE_DOMOTICZ | - | - | x | x | x | x | - | +| USE_HOME_ASSISTANT | - | - | x | x | x | x | - | +| USE_MQTT_TLS | - | - | - | - | - | - | - | +| USE_MQTT_TLS_CA_CERT | - | - | - | - | - | - | - | +| USE_MQTT_AWS_IOT | - | - | - | - | - | - | - | +| USE_4K_RSA | - | - | - | - | - | - | - | +| USE_KNX | - | - | - | x | - | - | - | +| USE_WEBSERVER | x | x | x | x | x | x | x | +| USE_JAVASCRIPT_ES6 | - | - | - | - | - | - | - | +| USE_WEBSEND_RESPONSE | - | - | - | - | - | - | - | +| USE_EMULATION_HUE | - | x | x | - | x | - | - | +| USE_EMULATION_WEMO | - | x | x | - | x | - | - | +| USE_DISCOVERY | - | - | x | x | - | - | x | +| WEBSERVER_ADVERTISE | - | - | x | x | - | - | x | +| MQTT_HOST_DISCOVERY | - | - | x | x | - | - | x | +| USE_TIMERS | - | x | x | x | x | x | x | +| USE_TIMERS_WEB | - | x | x | x | x | x | x | +| USE_SUNRISE | - | x | x | x | x | x | x | +| USE_RULES | - | x | x | x | x | x | x | +| USE_SCRIPT | - | - | - | - | - | - | - | +| USE_EXPRESSION | - | - | - | - | - | - | - | +| SUPPORT_IF_STATEMENT | - | - | - | - | - | - | - | +| | | | | | | | | +| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks +| ROTARY_V1 | - | - | - | - | - | - | - | +| USE_SONOFF_RF | - | - | x | x | x | - | - | +| USE_RF_FLASH | - | - | x | x | x | - | - | +| USE_SONOFF_SC | - | - | x | - | x | - | - | +| USE_TUYA_MCU | - | x | x | x | x | - | x | +| USE_ARMTRONIX_DIMMERS | - | - | x | x | - | - | - | +| USE_PS_16_DZ | - | - | x | x | x | - | - | +| USE_SONOFF_IFAN | - | - | x | x | x | - | - | +| USE_BUZZER | - | - | x | x | x | - | - | +| USE_ARILUX_RF | - | - | x | x | x | - | - | +| USE_SHUTTER | - | - | - | - | - | - | - | +| USE_DEEPSLEEP | - | - | x | - | x | - | - | +| USE_EXS_DIMMER | - | - | x | x | - | - | - | +| | | | | | | | | +| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks +| USE_LIGHT | - | x | x | x | x | x | x | +| USE_WS2812 | - | - | x | x | x | - | x | +| USE_WS2812_DMA | - | - | - | - | - | - | - | +| USE_MY92X1 | - | - | x | x | x | - | x | +| USE_SM16716 | - | - | x | x | x | - | x | +| USE_SM2135 | - | - | x | x | x | - | x | +| USE_SONOFF_L1 | - | - | x | x | x | - | x | +| | | | | | | | | +| USE_ENERGY_SENSOR | - | x | x | x | x | - | - | +| USE_PZEM004T | - | - | x | x | x | - | - | +| USE_PZEM_AC | - | - | x | x | x | - | - | +| USE_PZEM_DC | - | - | x | x | x | - | - | +| USE_MCP39F501 | - | x | x | x | x | - | - | +| USE_SDM120 | - | - | - | - | x | - | - | +| USE_SDM630 | - | - | - | - | x | - | - | +| USE_DDS2382 | - | - | - | - | x | - | - | +| USE_DDSU666 | - | - | - | - | x | - | - | +| USE_SOLAX_X1 | - | - | - | - | - | - | - | +| | | | | | | | | +| USE_ADC_VCC | x | x | - | - | - | - | - | +| USE_COUNTER | - | - | x | x | x | x | x | +| USE_DS18x20 | - | - | x | x | x | - | x | +| USE_DHT | - | - | x | x | x | x | x | +| USE_MAX31855 | - | - | - | - | x | - | - | +| USE_MAX31865 | - | - | - | - | - | - | - | +| | | | | | | | | +| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks +| USE_I2C | - | - | x | x | x | - | x | +| USE_SHT | - | - | x | x | x | - | x | +| USE_HTU | - | - | x | x | x | - | x | +| USE_BMP | - | - | x | x | x | - | x | +| USE_BME680 | - | - | - | - | x | - | - | +| USE_BH1750 | - | - | x | x | x | - | x | +| USE_VEML6070 | - | - | - | - | x | - | - | +| USE_ADS1115 | - | - | - | - | x | - | - | +| USE_ADS1115_I2CDEV | - | - | - | - | - | - | - | +| USE_INA219 | - | - | - | - | x | - | - | +| USE_INA226 | - | - | - | - | - | - | - | +| USE_SHT3X | - | - | x | x | x | - | x | +| USE_TSL2561 | - | - | - | - | x | - | - | +| USE_TSL2591 | - | - | - | - | - | - | - | +| USE_MGS | - | - | - | - | x | - | - | +| USE_SGP30 | - | - | x | x | x | - | x | +| USE_SI1145 | - | - | - | - | - | - | - | +| USE_LM75AD | - | - | x | x | x | - | x | +| USE_APDS9960 | - | - | - | - | - | - | - | +| USE_MCP230xx | - | - | - | - | - | - | - | +| USE_PCA9685 | - | - | - | - | - | - | - | +| USE_MPR121 | - | - | - | - | - | - | - | +| USE_CCS811 | - | - | - | - | - | - | - | +| USE_MPU6050 | - | - | - | - | - | - | - | +| USE_DS3231 | - | - | - | - | - | - | - | +| USE_MGC3130 | - | - | - | - | - | - | - | +| USE_MAX44009 | - | - | - | - | - | - | - | +| USE_SCD30 | - | - | - | - | x | - | - | +| USE_SPS30 | - | - | - | - | - | - | - | +| USE_ADE7953 | - | - | x | x | x | - | x | +| USE_VL53L0X | - | - | - | - | - | - | - | +| USE_MLX90614 | - | - | - | - | - | - | - | +| USE_CHIRP | - | - | - | - | - | - | - | +| USE_PAJ7620 | - | - | - | - | - | - | - | +| USE_PCF8574 | - | - | - | - | - | - | - | +| USE_HIH6 | - | - | - | - | x | - | - | +| | | | | | | | | +| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks +| USE_SPI | - | - | - | - | - | - | x | +| USE_MHZ19 | - | - | x | x | x | - | x | +| USE_SENSEAIR | - | - | x | x | x | - | x | +| USE_PMS5003 | - | - | x | x | x | - | x | +| USE_NOVA_SDS | - | - | x | x | x | - | x | +| USE_HPMA | - | - | - | - | x | - | - | +| USE_SERIAL_BRIDGE | - | - | x | x | x | - | x | +| USE_MP3_PLAYER | - | - | - | - | x | - | - | +| USE_AZ7798 | - | - | - | - | - | - | - | +| USE_PN532_HSU | - | - | - | - | x | - | - | +| USE_ZIGBEE | - | - | - | - | - | - | - | +| | | | | | | | | +| USE_IR_REMOTE | - | - | x | x | x | x | x | +| USE_IR_RECEIVE | - | - | x | x | x | x | x | +| | | | | | | | | +| USE_SR04 | - | - | x | x | x | - | x | +| USE_TM1638 | - | - | - | - | x | - | - | +| USE_HX711 | - | - | x | x | x | - | x | +| USE_TX20_WIND_SENSOR | - | - | - | - | x | - | - | +| USE_RC_SWITCH | - | - | - | - | x | - | - | +| USE_RF_SENSOR | - | - | - | - | x | - | - | AlectoV2 only +| USE_HRE | - | - | - | - | x | - | - | +| USE_A4988_STEPPER | - | - | - | - | - | - | - | +| USE_TASMOTA_SLAVE | - | - | - | - | - | - | - | Experimental +| | | | | | | | | +| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks +| USE_DISPLAY | - | - | - | - | - | - | x | +| USE_DISPLAY_LCD | - | - | - | - | - | - | x | +| USE_DISPLAY_SSD1306 | - | - | - | - | - | - | x | +| USE_DISPLAY_MATRIX | - | - | - | - | - | - | x | +| USE_DISPLAY_SH1106 | - | - | - | - | - | - | x | +| USE_DISPLAY_ILI9341 | - | - | - | - | - | - | x | +| USE_DISPLAY_EPAPER_29 | - | - | - | - | - | - | x | +| USE_DISPLAY_EPAPER_42 | - | - | - | - | - | - | x | +| USE_DISPLAY_ILI9488 | - | - | - | - | - | - | - | +| USE_DISPLAY_SSD1351 | - | - | - | - | - | - | - | +| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - | \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1bda5243a..43cead24a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ Everybody is welcome and invited to contribute to Tasmota Project by: * Testing newly released features and reporting issues. * Providing Pull Requests (Features, Proof of Concepts, Language files or Fixes) -* Contributing missing documentation for features and devices on our [Wiki](https://github.com/arendst/Tasmota/wiki/Contributing) +* Contributing missing documentation for features and devices in our [documentation](https://tasmota.github.io/docs/#/Contributing) This document describes rules that are in effect for this repository, meant for handling issues by contributors in the issue tracker and PRs. diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 33e896110..73f4a9c6b 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -1,6 +1,4 @@ -Logo - -# Tasmota I2C devices +# I2C devices Tasmota supports several I2C devices but to use them they mostly need to be enabled at compile time to solve possible address conflicts. diff --git a/README.md b/README.md index 30d8cd851..ed884afea 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases [![Download Dev](https://img.shields.io/badge/download-development-yellow.svg)](http://thehackbox.org/tasmota/) [![Build Status](https://img.shields.io/travis/arendst/Tasmota.svg)](https://travis-ci.org/arendst/Tasmota) -See [tasmota/_changelog.ino](tasmota/_changelog.ino) for detailed change information. +See [tasmota/CHANGELOG.md](tasmota/CHANGELOG.md) for detailed change information. Unless your Tasmota powered device exhibits a problem or you need to make use of a feature that is not available in the Tasmota version currently installed on your device, leave your device alone - it works so don't make unnecessary changes! If the release version (i.e., the master branch) exhibits unexpected behaviour for your device and configuration, you should upgrade to the latest development version instead to see if your problem is resolved as some bugs in previous releases or development builds may already have been resolved. @@ -42,10 +42,10 @@ We don't take any responsibility nor liability for using this software nor for t ## Note -Please do not ask to add new devices unless it requires additional code for new features. If the device is not listed as a module, try using [Templates](https://github.com/arendst/Tasmota/wiki/Templates) first. If it is not listed in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) create your own [Template](https://github.com/arendst/Tasmota/wiki/Templates#creating-your-template-). +Please do not ask to add new devices unless it requires additional code for new features. If the device is not listed as a module, try using [Templates](https://tasmota.github.io/docs/#/Templates) first. If it is not listed in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) create your own [Template](https://tasmota.github.io/docs/#/Templates?id=creating-your-template). ## Quick Install -Download one of the released binaries from https://github.com/arendst/Tasmota/releases and flash it to your hardware as [documented in the wiki](https://github.com/arendst/Tasmota/wiki/Flashing). +Download one of the released binaries from https://github.com/arendst/Tasmota/releases and flash it to your hardware [using our installation guide](https://tasmota.github.io/docs/#/installation/). ## Important User Compilation Information If you want to compile Tasmota yourself keep in mind the following: @@ -56,11 +56,11 @@ If you want to compile Tasmota yourself keep in mind the following: ## Configuration Information -Please refer to the installation and configuration articles in the [wiki](https://github.com/arendst/Tasmota/wiki). +Please refer to the installation and configuration articles in our [documentation](https://tasmota.github.io/docs). ## Migration Information -See [wiki migration path](https://github.com/arendst/Tasmota/wiki/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates: +See [wiki migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates: 1. Migrate to **Sonoff-Tasmota 3.9.x** 2. Migrate to **Sonoff-Tasmota 4.x** @@ -74,8 +74,8 @@ See [wiki migration path](https://github.com/arendst/Tasmota/wiki/Upgrading#migr For a database of supported devices see [Tasmota Device Templates Repository](https://blakadder.github.io/templates) -See [Wiki](https://github.com/arendst/Tasmota/wiki) for use instructions and how-to's.
-See [Community](https://groups.google.com/d/forum/sonoffusers) for forum.
+See [Wiki](https://tasmota.github.io/docs) for use instructions and how-to's. +See [Community](https://groups.google.com/d/forum/sonoffusers) for forum. Visit [Discord Chat](https://discord.gg/Ks2Kzd4) for discussions and troubleshooting. ## Contribute @@ -84,55 +84,12 @@ You can contribute to Tasmota by - providing Pull Requests (Features, Proof of Concepts, Language files or Fixes) - testing new released features and report issues - donating to acquire hardware for testing and implementing or out of gratitude -- contributing missing documentation for features and devices on our [Wiki](https://github.com/arendst/Tasmota/wiki) +- contributing missing [documentation](https://tasmota.github.io/docs) for features and devices [![donate](https://img.shields.io/badge/donate-PayPal-blue.svg)](https://paypal.me/tasmota) ## Credits -### Libraries Used - -Libraries used with Tasmota are: -- [ESP8266 core for Arduino](https://github.com/esp8266/Arduino) -- [Adafruit CCS811](https://github.com/adafruit/Adafruit_CCS811) -- [Adafruit ILI9341](https://github.com/adafruit/Adafruit_ILI9341) -- [Adafruit LED Backpack](https://github.com/adafruit/Adafruit-LED-Backpack-Library) -- [Adafruit MAX31865](https://github.com/adafruit/Adafruit_MAX31865) -- [Adafruit SGP30](https://github.com/adafruit/Adafruit_SGP30) -- Adafruit based SH1106 -- [Adafruit SSD1306](https://github.com/adafruit/Adafruit_SSD1306) -- [Adafruit TSL2591](https://github.com/adafruit/Adafruit_TSL2591_Library) -- Adafruit based SSD1351 -- [Adafruit GFX](https://github.com/adafruit/Adafruit-GFX-Library) -- [ArduinoJson](https://arduinojson.org/) -- AT24C256 I2C eeprom -- [Base64](https://github.com/Densaugeo/base64_arduino) -- [Bear SSL](https://github.com/earlephilhower/bearssl-esp8266.git) -- [Bosch BME680](https://github.com/BoschSensortec/BME680_driver) -- [C2 Programmer](http://app.cear.ufpb.br/~lucas.hartmann/tag/efm8bb1/) -- [esp-epaper-29-ws-20171230-gemu](https://github.com/gemu2015/Sonoff-Tasmota/tree/displays/lib) -- [esp-knx-ip](https://github.com/envy/esp-knx-ip) -- FrogmoreScd30 -- FT6236 -- [I2Cdevlib](https://github.com/jrowberg/i2cdevlib) -- [IRremoteEsp8266](https://github.com/markszabo/IRremoteESP8266) -- [JaretBurkett ILI9488](https://github.com/jaretburkett/ILI9488) -- [JobaTsl2561](https://github.com/joba-1/Joba_Tsl2561) -- [LinkedList](https://github.com/ivanseidel/LinkedList) -- [Liquid Cristal](https://github.com/marcoschwartz/LiquidCrystal_I2C) -- [MultiChannelGasSensor](http://wiki.seeedstudio.com/Grove-Multichannel_Gas_Sensor/) -- [NeoPixelBus](https://github.com/Makuna/NeoPixelBus) -- [NewPing](https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home) -- [OneWire](https://github.com/PaulStoffregen/OneWire) -- [PubSubClient](https://github.com/knolleary/pubsubclient) -- [rc-switch](https://github.com/sui77/rc-switch) -- TasmotaModbus -- TasmotaSerial -- [Vl53l0x](https://github.com/pololu/vl53l0x-arduino) -- Xlatb Ra8876 - -### People inspiring me - People helping to keep the show on the road: - David Lang providing initial issue resolution and code optimizations - Heiko Krupp for his IRSend, HTU21, SI70xx and Wemo/Hue emulation drivers @@ -161,6 +118,7 @@ People helping to keep the show on the road: - Stephan Hadinger for refactoring light driver, enhancing HueEmulation and Zigbee support - tmo for designing the official Tasmota logo - Stefan Bode for his Shutter and Deep sleep drivers +- Jacek Ziółkowski for his [TDM](https://github.com/jziolkowski/tdm) management tool - Many more providing Tips, Wips, Pocs, PRs and Donations ## License diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b011d70d2..a07bd3e5e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -6,7 +6,7 @@ ## Migration Information -See [wiki migration path](https://github.com/arendst/Tasmota/wiki/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates: +See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates: 1. Migrate to **Sonoff-Tasmota 3.9.x** 2. Migrate to **Sonoff-Tasmota 4.x** @@ -22,7 +22,7 @@ Although it might still compile on previous Core versions all support will be re ## Support of TLS -To save resources when TLS is enabled mDNS needs to be disabled. In addition to TLS using fingerprints now also user supplied CA certs and AWS IoT is supported. See full documentation on https://github.com/arendst/Tasmota/wiki/AWS-IoT +To save resources when TLS is enabled mDNS needs to be disabled. In addition to TLS using fingerprints now also user supplied CA certs and AWS IoT is supported. Read [full documentation](https://tasmota.github.io/docs/#/integrations/AWS-IoT) ## Initial configuration tools @@ -122,153 +122,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - **tasmota-display.bin** = The Display version without Energy Monitoring but adds display support. - **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter. This version **should NOT be used for initial installation**. -## Available Features and Sensors - -| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks -|-----------------------|---------|-------|--------|-----|---------|----|---------|-------- -| MY_LANGUAGE en-GB | x | x | x | x | x | x | x | -| USE_ARDUINO_OTA | - | - | - | - | - | - | - | -| USE_DOMOTICZ | - | - | x | x | x | x | - | -| USE_HOME_ASSISTANT | - | - | x | x | x | x | - | -| USE_MQTT_TLS | - | - | - | - | - | - | - | -| USE_MQTT_TLS_CA_CERT | - | - | - | - | - | - | - | -| USE_MQTT_AWS_IOT | - | - | - | - | - | - | - | -| USE_4K_RSA | - | - | - | - | - | - | - | -| USE_KNX | - | - | - | x | - | - | - | -| USE_WEBSERVER | x | x | x | x | x | x | x | -| USE_JAVASCRIPT_ES6 | - | - | - | - | - | - | - | -| USE_WEBSEND_RESPONSE | - | - | - | - | - | - | - | -| USE_EMULATION_HUE | - | x | x | - | x | - | - | -| USE_EMULATION_WEMO | - | x | x | - | x | - | - | -| USE_DISCOVERY | - | - | x | x | - | - | x | -| WEBSERVER_ADVERTISE | - | - | x | x | - | - | x | -| MQTT_HOST_DISCOVERY | - | - | x | x | - | - | x | -| USE_TIMERS | - | x | x | x | x | x | x | -| USE_TIMERS_WEB | - | x | x | x | x | x | x | -| USE_SUNRISE | - | x | x | x | x | x | x | -| USE_RULES | - | x | x | x | x | x | x | -| USE_SCRIPT | - | - | - | - | - | - | - | -| USE_EXPRESSION | - | - | - | - | - | - | - | -| SUPPORT_IF_STATEMENT | - | - | - | - | - | - | - | -| | | | | | | | | -| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks -| ROTARY_V1 | - | - | - | - | - | - | - | -| USE_SONOFF_RF | - | - | x | x | x | - | - | -| USE_RF_FLASH | - | - | x | x | x | - | - | -| USE_SONOFF_SC | - | - | x | - | x | - | - | -| USE_TUYA_MCU | - | x | x | x | x | - | x | -| USE_ARMTRONIX_DIMMERS | - | - | x | x | - | - | - | -| USE_PS_16_DZ | - | - | x | x | x | - | - | -| USE_SONOFF_IFAN | - | - | x | x | x | - | - | -| USE_BUZZER | - | - | x | x | x | - | - | -| USE_ARILUX_RF | - | - | x | x | x | - | - | -| USE_SHUTTER | - | - | - | - | - | - | - | -| USE_DEEPSLEEP | - | - | - | - | - | - | - | -| USE_EXS_DIMMER | - | - | x | x | - | - | - | -| | | | | | | | | -| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks -| USE_LIGHT | - | x | x | x | x | x | x | -| USE_WS2812 | - | - | x | x | x | - | x | -| USE_WS2812_DMA | - | - | - | - | - | - | - | -| USE_MY92X1 | - | - | x | x | x | - | x | -| USE_SM16716 | - | - | x | x | x | - | x | -| USE_SM2135 | - | - | x | x | x | - | x | -| USE_SONOFF_L1 | - | - | x | x | x | - | x | -| | | | | | | | | -| USE_ENERGY_SENSOR | - | x | x | x | x | - | - | -| USE_PZEM004T | - | - | x | x | x | - | - | -| USE_PZEM_AC | - | - | x | x | x | - | - | -| USE_PZEM_DC | - | - | x | x | x | - | - | -| USE_MCP39F501 | - | x | x | x | x | - | - | -| USE_SDM120 | - | - | - | - | x | - | - | -| USE_SDM630 | - | - | - | - | x | - | - | -| USE_DDS2382 | - | - | - | - | x | - | - | -| USE_DDSU666 | - | - | - | - | x | - | - | -| USE_SOLAX_X1 | - | - | - | - | - | - | - | -| | | | | | | | | -| USE_ADC_VCC | x | x | - | - | - | - | - | -| USE_COUNTER | - | - | x | x | x | x | x | -| USE_DS18x20 | - | - | x | x | x | - | x | -| USE_DHT | - | - | x | x | x | x | x | -| USE_MAX31855 | - | - | - | - | x | - | - | -| USE_MAX31865 | - | - | - | - | - | - | - | -| | | | | | | | | -| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks -| USE_I2C | - | - | x | x | x | - | x | -| USE_SHT | - | - | x | x | x | - | x | -| USE_HTU | - | - | x | x | x | - | x | -| USE_BMP | - | - | x | x | x | - | x | -| USE_BME680 | - | - | - | - | x | - | - | -| USE_BH1750 | - | - | x | x | x | - | x | -| USE_VEML6070 | - | - | - | - | x | - | - | -| USE_ADS1115 | - | - | - | - | x | - | - | -| USE_ADS1115_I2CDEV | - | - | - | - | - | - | - | -| USE_INA219 | - | - | - | - | x | - | - | -| USE_INA226 | - | - | - | - | - | - | - | -| USE_SHT3X | - | - | x | x | x | - | x | -| USE_TSL2561 | - | - | - | - | x | - | - | -| USE_TSL2591 | - | - | - | - | - | - | - | -| USE_MGS | - | - | - | - | x | - | - | -| USE_SGP30 | - | - | x | x | x | - | x | -| USE_SI1145 | - | - | - | - | - | - | - | -| USE_LM75AD | - | - | x | x | x | - | x | -| USE_APDS9960 | - | - | - | - | - | - | - | -| USE_MCP230xx | - | - | - | - | - | - | - | -| USE_PCA9685 | - | - | - | - | - | - | - | -| USE_MPR121 | - | - | - | - | - | - | - | -| USE_CCS811 | - | - | - | - | - | - | - | -| USE_MPU6050 | - | - | - | - | - | - | - | -| USE_DS3231 | - | - | - | - | - | - | - | -| USE_MGC3130 | - | - | - | - | - | - | - | -| USE_MAX44009 | - | - | - | - | - | - | - | -| USE_SCD30 | - | - | - | - | x | - | - | -| USE_SPS30 | - | - | - | - | - | - | - | -| USE_ADE7953 | - | - | x | x | x | - | x | -| USE_VL53L0X | - | - | - | - | - | - | - | -| USE_MLX90614 | - | - | - | - | - | - | - | -| USE_CHIRP | - | - | - | - | - | - | - | -| USE_PAJ7620 | - | - | - | - | - | - | - | -| USE_PCF8574 | - | - | - | - | - | - | - | -| USE_HIH6 | - | - | - | - | x | - | - | -| | | | | | | | | -| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks -| USE_SPI | - | - | - | - | - | - | x | -| USE_MHZ19 | - | - | x | x | x | - | x | -| USE_SENSEAIR | - | - | x | x | x | - | x | -| USE_PMS5003 | - | - | x | x | x | - | x | -| USE_NOVA_SDS | - | - | x | x | x | - | x | -| USE_HPMA | - | - | - | - | x | - | - | -| USE_SERIAL_BRIDGE | - | - | x | x | x | - | x | -| USE_MP3_PLAYER | - | - | - | - | x | - | - | -| USE_AZ7798 | - | - | - | - | - | - | - | -| USE_PN532_HSU | - | - | - | - | x | - | - | -| USE_ZIGBEE | - | - | - | - | - | - | - | -| | | | | | | | | -| USE_IR_REMOTE | - | - | x | x | x | x | x | -| USE_IR_RECEIVE | - | - | x | x | x | x | x | -| | | | | | | | | -| USE_SR04 | - | - | x | x | x | - | x | -| USE_TM1638 | - | - | - | - | x | - | - | -| USE_HX711 | - | - | x | x | x | - | x | -| USE_TX20_WIND_SENSOR | - | - | - | - | x | - | - | -| USE_RC_SWITCH | - | - | - | - | x | - | - | -| USE_RF_SENSOR | - | - | - | - | x | - | - | AlectoV2 only -| USE_HRE | - | - | - | - | x | - | - | -| USE_A4988_STEPPER | - | - | - | - | - | - | - | -| USE_TASMOTA_SLAVE | - | - | - | - | - | - | - | Experimental -| | | | | | | | | -| Feature or Sensor | minimal | basic | tasmota | knx | sensors | ir | display | Remarks -| USE_DISPLAY | - | - | - | - | - | - | x | -| USE_DISPLAY_LCD | - | - | - | - | - | - | x | -| USE_DISPLAY_SSD1306 | - | - | - | - | - | - | x | -| USE_DISPLAY_MATRIX | - | - | - | - | - | - | x | -| USE_DISPLAY_SH1106 | - | - | - | - | - | - | x | -| USE_DISPLAY_ILI9341 | - | - | - | - | - | - | x | -| USE_DISPLAY_EPAPER_29 | - | - | - | - | - | - | x | -| USE_DISPLAY_EPAPER_42 | - | - | - | - | - | - | x | -| USE_DISPLAY_ILI9488 | - | - | - | - | - | - | - | -| USE_DISPLAY_SSD1351 | - | - | - | - | - | - | - | -| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - | +[Complete list](BUILDS.md) of available feature and sensors. ## Changelog @@ -276,28 +130,31 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - Remove update support for versions before 6.0 - Remove driver xsns_12_ads1115_i2cdev replaced by xsns_12_ads1115 + - Remove most IR protocols from non dedicated IR firmware except NEC, RC5 and RC6 - Change repository name from Sonoff-Tasmota to Tasmota and all code references from Sonoff to Tasmota - Change default GUI to dark theme - Change ArduinoSlave to TasmotaSlave - Change IRremoteESP8266 library to v2.7.0 - - Change supported IR protocols in non dedicated IR firmware to NEC, RC5 and RC6 only - Change supported PCF8574 I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time - Change supported PCF8574A I2C address range to 0x39 - 0x3F allowing other I2C devices with address 0x38 to be used at the same time - Change supported MCP230xx I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time - Change Reset erase end address from as seen by SDK (getFlashChipSize) to full flash size (getFlashChipRealSize) - Fix better control of RGB/White when ``SetOption37`` >128, added ``Dimmer1`` and ``Dimmer2`` commands (#6714) - Fix random crash caused by UPNP flood + - Fix Wifi instability when light is on, due to sleep=0 (#6961, #6608) - Add support for Tuya battery powered devices (#6735) - Add support for Honeywell I2C HIH series Humidity and Temperetaure sensor (#6808) - Add support for Honeywell HPMA115S0 particle concentration sensor by David Hunt (#6843) - Add support for I2C sensor TLS2591 Light Intensity sensor (#6873) - - Add command ``WebColor19`` to control color of Module and Name (#6811) - Add command ``SetOption73 0/1`` to re-enable HTTP Cross-Origin Resource Sharing (CORS) now default disabled (#6767) - Add command ``SetOption74 0/1`` to enable DS18x20 internal pull-up and remove define DS18B20_INTERNAL_PULLUP (#6795) - Add command ``SetOption75 0/1`` to switch between grouptopic (0) using fulltopic replacing %topic% or (1) is cmnd/\ (#6779) - Add command ``SetOption76 0/1`` to enable incrementing bootcount when deepsleep is enabled (#6930) - Add command ``I2cDriver`` for I2C driver runtime control using document I2CDEVICES.md + - Add command ``TempOffset -12.6 .. 12.6`` to set global temperature sensor offset (#6958) + - Add command ``WebColor19`` to control color of Module and Name (#6811) - Add command ``WifiPower 0 .. 20.5`` to set Wifi Output Power which will be default set to 17dBm - Add frequency to ADE7953 energy monitor as used in Shelly 2.5 by ljakob (#6778) - Add hide Alexa objects with friendlyname starting with '$' (#6722, #6762) - Add Zigbee command support, considered as v1.0 for full Zigbee support + - Add colorpicker to WebUI by Christian Staars (#6984) diff --git a/SUPPORT.md b/SUPPORT.md index ab4bc743a..d26baa615 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,4 +1,4 @@ -Logo + # Support @@ -6,10 +6,9 @@ If you're looking for support on **Tasmota** there are some options available: ## Documentation: -* [Wiki Pages](https://github.com/arendst/Tasmota/wiki): For information on how to Flash Tasmota, configure and use it. -* [FAQ](https://github.com/arendst/Tasmota/wiki/FAQ): For information on common problems and solutions. -* [Troubleshooting Information](https://github.com/arendst/Tasmota/wiki/Troubleshooting): For ways to debug and troubleshoot. -* [Commands Information](https://github.com/arendst/Tasmota/wiki/Commands): For information on all the commands supported by Tasmota. +* [Documentation Site](https://tasmota.github.io/docs): For information on how to flash Tasmota, configure, use and expand it +* [FAQ and Troubleshooting](https://tasmota.github.io/docs/#/help/): For information on common problems and solutions. +* [Commands Information](https://tasmota.github.io/docs/#/Commands): For information on all the commands supported by Tasmota. ## Support's Community: diff --git a/arduino/version 2.6.0/platform.txt b/arduino/version 2.6.0/platform.txt deleted file mode 100644 index 3aeb47444..000000000 --- a/arduino/version 2.6.0/platform.txt +++ /dev/null @@ -1,162 +0,0 @@ - # ESP8266 platform -# ------------------------------ - -# For more info: -# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification - -name=ESP8266 Boards (2.6.0) -version=2.6.0 - -# These will be removed by the packager script when doing a JSON release - - - - -runtime.tools.signing={runtime.platform.path}/tools/signing.py -runtime.tools.elf2bin={runtime.platform.path}/tools/elf2bin.py -runtime.tools.sizes={runtime.platform.path}/tools/sizes.py -runtime.tools.makecorever={runtime.platform.path}/tools/makecorever.py -runtime.tools.eboot={runtime.platform.path}/bootloaders/eboot/eboot.elf - -compiler.warning_flags=-w -compiler.warning_flags.none=-w -compiler.warning_flags.default= -compiler.warning_flags.more=-Wall -compiler.warning_flags.all=-Wall -Wextra - -build.lwip_lib=-llwip_gcc -build.lwip_include=lwip/include -build.lwip_flags=-DLWIP_OPEN_SRC - -build.vtable_flags=-DVTABLES_IN_FLASH - -build.sslflags= - -build.exception_flags=-fno-exceptions -build.stdcpp_lib=-lstdc++ -build.stdcpp_level=-std=gnu++11 - -# build.float=-u _printf_float -u _scanf_float -build.float= -build.led= - -# default SDK for all boards -# (generic board overrides this variable) -#build.sdk=NONOSDK22x_190703 -build.sdk=NONOSDK22x_191024 -#build.sdk=NONOSDK22x_191105 - -compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/ -compiler.sdk.path={runtime.platform.path}/tools/sdk - -compiler.libc.path={runtime.platform.path}/tools/sdk/libc/xtensa-lx106-elf -compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/{build.lwip_include}" "-I{compiler.libc.path}/include" "-I{build.path}/core" - -compiler.c.cmd=xtensa-lx106-elf-gcc -compiler.c.flags=-c {compiler.warning_flags} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -std=gnu99 -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags} - -compiler.S.cmd=xtensa-lx106-elf-gcc -compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls - -compiler.c.elf.flags=-g {compiler.warning_flags} -Os -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/lib/{build.sdk}" "-L{compiler.sdk.path}/ld" "-L{compiler.libc.path}/lib" "-T{build.flash_ld}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read - -compiler.c.elf.cmd=xtensa-lx106-elf-gcc -compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -lbearssl -laxtls -lespnow -lsmartconfig -lairkiss -lwpa2 {build.stdcpp_lib} -lm -lc -lgcc - -compiler.cpp.cmd=xtensa-lx106-elf-g++ -compiler.cpp.flags=-c {compiler.warning_flags} -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 {build.stdcpp_level} -MMD -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags} - -compiler.as.cmd=xtensa-lx106-elf-as - -compiler.ar.cmd=xtensa-lx106-elf-ar -compiler.ar.flags=cru - -compiler.elf2hex.cmd=esptool -compiler.elf2hex.flags= - -compiler.size.cmd=xtensa-lx106-elf-size - -# This can be overriden in boards.txt -build.extra_flags=-DESP8266 - -# These can be overridden in platform.local.txt -compiler.c.extra_flags= -compiler.c.elf.extra_flags= -compiler.S.extra_flags= -compiler.cpp.extra_flags= -compiler.ar.extra_flags= -compiler.objcopy.eep.extra_flags= -compiler.elf2hex.extra_flags= - -## generate file with git version number -## needs git -recipe.hooks.sketch.prebuild.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h" -# This is quite a working hack. This form of prebuild hook, while intuitive, is not explicitly documented. -recipe.hooks.prebuild.10.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.makecorever}" --build_path "{build.path}" --platform_path "{runtime.platform.path}" --version "unix-{version}" - -## Build the app.ld linker file -recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/local.eagle.app.v6.common.ld" - -## Compile c files -recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" - -## Compile c++ files -recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" - -## Compile S files -recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.S.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" - -## Create archives -recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" - -## Combine gc-sections, archives, and objects -recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {build.exception_flags} -Wl,-Map "-Wl,{build.path}/{build.project_name}.map" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{archive_file_path}" {compiler.c.elf.libs} -Wl,--end-group "-L{build.path}" - -## Create eeprom -recipe.objcopy.eep.pattern= - -## Create hex -recipe.objcopy.hex.1.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.elf2bin}" --eboot "{runtime.tools.eboot}" --app "{build.path}/{build.project_name}.elf" --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size {build.flash_size} --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --out "{build.path}/{build.project_name}.bin" -recipe.objcopy.hex.2.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.signing}" --mode sign --privatekey "{build.source.path}/private.key" --bin "{build.path}/{build.project_name}.bin" --out "{build.path}/{build.project_name}.bin.signed" --legacy "{build.path}/{build.project_name}.bin.legacy_sig" -recipe.objcopy.hex.3.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.sizes}" --elf "{build.path}/{build.project_name}.elf" --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" - -## Save hex -recipe.output.tmp_file={build.project_name}.bin -recipe.output.save_file={build.project_name}.{build.variant}.bin - -## Compute size -recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" -recipe.size.regex=^(?:\.irom0\.text|\.text|\.text1|\.data|\.rodata|)\s+([0-9]+).* -recipe.size.regex.data=^(?:\.data|\.rodata|\.bss)\s+([0-9]+).* -#recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).* - -# ------------------------------ - -tools.esptool.path= -# Because the variable expansion doesn't allow one tool to find another, the following lines -# will point to "{runtime.platform.path}/tools/python3/python3" in GIT and -# "{runtime.tools.python3.path}/python3" for JSON board manager releases. -tools.esptool.cmd={runtime.tools.python3.path}/python3 -tools.esptool.network_cmd={runtime.tools.python3.path}/python3 - - - -tools.esptool.upload.protocol=esp -# esptool.py --trace option is a debug option, not a verbose option -tools.esptool.upload.params.verbose= -tools.esptool.upload.params.quiet= - -# First, potentially perform an erase or nothing -# Next, do the binary upload -# Combined in one rule because Arduino doesn't suport upload.1.pattern/upload.3.pattern -tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} --end --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" {upload.resetmethod} "{upload.verbose}" write_flash 0x0 "{build.path}/{build.project_name}.bin" --end - -tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" - -tools.mkspiffs.cmd=mkspiffs -tools.mkspiffs.cmd.windows=mkspiffs.exe -tools.mkspiffs.path={runtime.tools.mkspiffs.path} - -tools.mklittlefs.cmd=mklittlefs -tools.mklittlefs.cmd.windows=mklittlefs.exe -tools.mklittlefs.path={runtime.platform.path}/tools/mklittlefs diff --git a/arduino/version pre-2.6.0/boards.txt b/arduino/version 2.6.1/boards.txt similarity index 89% rename from arduino/version pre-2.6.0/boards.txt rename to arduino/version 2.6.1/boards.txt index 401ff23ea..e0eab55a7 100644 --- a/arduino/version pre-2.6.0/boards.txt +++ b/arduino/version 2.6.1/boards.txt @@ -5,23 +5,23 @@ # menu.BoardModel=Model -menu.baud=Upload Speed +menu.ESPModule=Module menu.UploadTool=Upload Using +menu.led=Builtin Led +menu.baud=Upload Speed menu.xtal=CPU Frequency menu.CrystalFreq=Crystal Frequency menu.eesz=Flash Size menu.FlashMode=Flash Mode menu.FlashFreq=Flash Frequency menu.ResetMethod=Reset Method -menu.ESPModule=Module menu.dbg=Debug port menu.lvl=Debug Level menu.ip=lwIP Variant menu.vt=VTables menu.exception=Exceptions -menu.led=Builtin Led menu.wipe=Erase Flash menu.sdk=Espressif FW menu.ssl=SSL Support @@ -32,7 +32,7 @@ generic.build.board=ESP8266_GENERIC generic.upload.tool=esptool generic.upload.maximum_data_size=81920 generic.upload.wait_for_upload_port=true -generic.upload.erase_cmd=version +generic.upload.erase_cmd= generic.serial.disableDTR=true generic.serial.disableRTS=true generic.build.mcu=esp8266 @@ -71,14 +71,12 @@ generic.menu.ssl.all=All SSL ciphers (most compatible) generic.menu.ssl.all.build.sslflags= generic.menu.ssl.basic=Basic SSL ciphers (lower ROM use) generic.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -generic.menu.ResetMethod.ck=ck -generic.menu.ResetMethod.ck.upload.resetmethod=ck -generic.menu.ResetMethod.nodemcu=nodemcu -generic.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu -generic.menu.ResetMethod.none=none -generic.menu.ResetMethod.none.upload.resetmethod=none -generic.menu.ResetMethod.dtrset=dtrset -generic.menu.ResetMethod.dtrset.upload.resetmethod=dtrset +generic.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +generic.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +generic.menu.ResetMethod.ck=no dtr (aka ck) +generic.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset +generic.menu.ResetMethod.nodtr_nosync=no dtr, no_sync +generic.menu.ResetMethod.nodtr_nosync.upload.resetmethod=--before no_reset_no_sync --after soft_reset generic.menu.CrystalFreq.26=26 MHz generic.menu.CrystalFreq.40=40 MHz generic.menu.CrystalFreq.40.build.extra_flags=-DF_CRYSTAL=40000000 -DESP8266 @@ -384,11 +382,15 @@ generic.menu.led.15=15 generic.menu.led.15.build.led=-DLED_BUILTIN=15 generic.menu.led.16=16 generic.menu.led.16.build.led=-DLED_BUILTIN=16 -generic.menu.sdk.nonosdk222_100=nonos-sdk 2.2.1+100 (testing) -generic.menu.sdk.nonosdk222_100.build.sdk=NONOSDK22y +generic.menu.sdk.nonosdk_191024=nonos-sdk 2.2.1+111 (191024) +generic.menu.sdk.nonosdk_191024.build.sdk=NONOSDK22x_191024 +generic.menu.sdk.nonosdk_191105=nonos-sdk 2.2.1+113 (191105) +generic.menu.sdk.nonosdk_191105.build.sdk=NONOSDK22x_191105 +generic.menu.sdk.nonosdk_190703=nonos-sdk 2.2.1+100 (190703) +generic.menu.sdk.nonosdk_190703.build.sdk=NONOSDK22x_190703 generic.menu.sdk.nonosdk221=nonos-sdk 2.2.1 (legacy) generic.menu.sdk.nonosdk221.build.sdk=NONOSDK221 -generic.menu.sdk.nonosdk3v0=nonos-sdk pre-3 (known issues) +generic.menu.sdk.nonosdk3v0=nonos-sdk pre-3 (180626 known issues) generic.menu.sdk.nonosdk3v0.build.sdk=NONOSDK3V0 generic.menu.ip.lm2f=v2 Lower Memory generic.menu.ip.lm2f.build.lwip_include=lwip2/include @@ -480,7 +482,7 @@ generic.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO generic.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG generic.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG generic.menu.wipe.none=Only Sketch -generic.menu.wipe.none.upload.erase_cmd=version +generic.menu.wipe.none.upload.erase_cmd= generic.menu.wipe.sdk=Sketch + WiFi Settings generic.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 generic.menu.wipe.all=All Flash Contents @@ -511,7 +513,7 @@ esp8285.build.variant=esp8285 esp8285.upload.tool=esptool esp8285.upload.maximum_data_size=81920 esp8285.upload.wait_for_upload_port=true -esp8285.upload.erase_cmd=version +esp8285.upload.erase_cmd= esp8285.serial.disableDTR=true esp8285.serial.disableRTS=true esp8285.build.mcu=esp8266 @@ -542,14 +544,12 @@ esp8285.menu.ssl.all=All SSL ciphers (most compatible) esp8285.menu.ssl.all.build.sslflags= esp8285.menu.ssl.basic=Basic SSL ciphers (lower ROM use) esp8285.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -esp8285.menu.ResetMethod.ck=ck -esp8285.menu.ResetMethod.ck.upload.resetmethod=ck -esp8285.menu.ResetMethod.nodemcu=nodemcu -esp8285.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu -esp8285.menu.ResetMethod.none=none -esp8285.menu.ResetMethod.none.upload.resetmethod=none -esp8285.menu.ResetMethod.dtrset=dtrset -esp8285.menu.ResetMethod.dtrset.upload.resetmethod=dtrset +esp8285.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +esp8285.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +esp8285.menu.ResetMethod.ck=no dtr (aka ck) +esp8285.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset +esp8285.menu.ResetMethod.nodtr_nosync=no dtr, no_sync +esp8285.menu.ResetMethod.nodtr_nosync.upload.resetmethod=--before no_reset_no_sync --after soft_reset esp8285.menu.CrystalFreq.26=26 MHz esp8285.menu.CrystalFreq.40=40 MHz esp8285.menu.CrystalFreq.40.build.extra_flags=-DF_CRYSTAL=40000000 -DESP8266 @@ -757,7 +757,7 @@ esp8285.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO esp8285.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG esp8285.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG esp8285.menu.wipe.none=Only Sketch -esp8285.menu.wipe.none.upload.erase_cmd=version +esp8285.menu.wipe.none.upload.erase_cmd= esp8285.menu.wipe.sdk=Sketch + WiFi Settings esp8285.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 esp8285.menu.wipe.all=All Flash Contents @@ -786,9 +786,9 @@ espduino.name=ESPDuino (ESP-13 Module) espduino.build.board=ESP8266_ESP13 espduino.build.variant=ESPDuino espduino.menu.ResetMethod.v1=ESPduino-V1 -espduino.menu.ResetMethod.v1.upload.resetmethod=ck +espduino.menu.ResetMethod.v1.upload.resetmethod=--before no_reset --after soft_reset espduino.menu.ResetMethod.v2=ESPduino-V2 -espduino.menu.ResetMethod.v2.upload.resetmethod=nodemcu +espduino.menu.ResetMethod.v2.upload.resetmethod=--before default_reset --after hard_reset espduino.menu.UploadTool.espota=OTA espduino.menu.UploadTool.espota.upload.tool=espota espduino.menu.UploadTool.esptool=Serial @@ -797,7 +797,7 @@ espduino.menu.UploadTool.esptool.upload.verbose=--trace espduino.upload.tool=esptool espduino.upload.maximum_data_size=81920 espduino.upload.wait_for_upload_port=true -espduino.upload.erase_cmd=version +espduino.upload.erase_cmd= espduino.serial.disableDTR=true espduino.serial.disableRTS=true espduino.build.mcu=esp8266 @@ -958,7 +958,7 @@ espduino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO espduino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG espduino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG espduino.menu.wipe.none=Only Sketch -espduino.menu.wipe.none.upload.erase_cmd=version +espduino.menu.wipe.none.upload.erase_cmd= espduino.menu.wipe.sdk=Sketch + WiFi Settings espduino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 espduino.menu.wipe.all=All Flash Contents @@ -989,7 +989,7 @@ huzzah.build.variant=adafruit huzzah.upload.tool=esptool huzzah.upload.maximum_data_size=81920 huzzah.upload.wait_for_upload_port=true -huzzah.upload.erase_cmd=version +huzzah.upload.erase_cmd= huzzah.serial.disableDTR=true huzzah.serial.disableRTS=true huzzah.build.mcu=esp8266 @@ -1020,7 +1020,7 @@ huzzah.menu.ssl.all=All SSL ciphers (most compatible) huzzah.menu.ssl.all.build.sslflags= huzzah.menu.ssl.basic=Basic SSL ciphers (lower ROM use) huzzah.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -huzzah.upload.resetmethod=nodemcu +huzzah.upload.resetmethod=--before default_reset --after hard_reset huzzah.build.flash_mode=qio huzzah.build.flash_flags=-DFLASHMODE_QIO huzzah.build.flash_freq=40 @@ -1151,7 +1151,7 @@ huzzah.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM huzzah.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG huzzah.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG huzzah.menu.wipe.none=Only Sketch -huzzah.menu.wipe.none.upload.erase_cmd=version +huzzah.menu.wipe.none.upload.erase_cmd= huzzah.menu.wipe.sdk=Sketch + WiFi Settings huzzah.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 huzzah.menu.wipe.all=All Flash Contents @@ -1182,7 +1182,7 @@ inventone.build.variant=inventone inventone.upload.tool=esptool inventone.upload.maximum_data_size=81920 inventone.upload.wait_for_upload_port=true -inventone.upload.erase_cmd=version +inventone.upload.erase_cmd= inventone.serial.disableDTR=true inventone.serial.disableRTS=true inventone.build.mcu=esp8266 @@ -1213,7 +1213,7 @@ inventone.menu.ssl.all=All SSL ciphers (most compatible) inventone.menu.ssl.all.build.sslflags= inventone.menu.ssl.basic=Basic SSL ciphers (lower ROM use) inventone.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -inventone.upload.resetmethod=nodemcu +inventone.upload.resetmethod=--before default_reset --after hard_reset inventone.build.flash_mode=dio inventone.build.flash_flags=-DFLASHMODE_DIO inventone.build.flash_freq=40 @@ -1344,7 +1344,7 @@ inventone.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA inventone.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG inventone.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG inventone.menu.wipe.none=Only Sketch -inventone.menu.wipe.none.upload.erase_cmd=version +inventone.menu.wipe.none.upload.erase_cmd= inventone.menu.wipe.sdk=Sketch + WiFi Settings inventone.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 inventone.menu.wipe.all=All Flash Contents @@ -1375,7 +1375,7 @@ cw01.build.variant=xinabox cw01.upload.tool=esptool cw01.upload.maximum_data_size=81920 cw01.upload.wait_for_upload_port=true -cw01.upload.erase_cmd=version +cw01.upload.erase_cmd= cw01.serial.disableDTR=true cw01.serial.disableRTS=true cw01.build.mcu=esp8266 @@ -1406,7 +1406,7 @@ cw01.menu.ssl.all=All SSL ciphers (most compatible) cw01.menu.ssl.all.build.sslflags= cw01.menu.ssl.basic=Basic SSL ciphers (lower ROM use) cw01.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -cw01.upload.resetmethod=nodemcu +cw01.upload.resetmethod=--before default_reset --after hard_reset cw01.menu.CrystalFreq.26=26 MHz cw01.menu.CrystalFreq.40=40 MHz cw01.menu.CrystalFreq.40.build.extra_flags=-DF_CRYSTAL=40000000 -DESP8266 @@ -1540,7 +1540,7 @@ cw01.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMD cw01.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG cw01.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG cw01.menu.wipe.none=Only Sketch -cw01.menu.wipe.none.upload.erase_cmd=version +cw01.menu.wipe.none.upload.erase_cmd= cw01.menu.wipe.sdk=Sketch + WiFi Settings cw01.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 cw01.menu.wipe.all=All Flash Contents @@ -1571,7 +1571,7 @@ espresso_lite_v1.build.variant=espresso_lite_v1 espresso_lite_v1.upload.tool=esptool espresso_lite_v1.upload.maximum_data_size=81920 espresso_lite_v1.upload.wait_for_upload_port=true -espresso_lite_v1.upload.erase_cmd=version +espresso_lite_v1.upload.erase_cmd= espresso_lite_v1.serial.disableDTR=true espresso_lite_v1.serial.disableRTS=true espresso_lite_v1.build.mcu=esp8266 @@ -1642,10 +1642,10 @@ espresso_lite_v1.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld espresso_lite_v1.menu.eesz.4M.build.spiffs_pagesize=256 espresso_lite_v1.menu.eesz.4M.upload.maximum_size=1044464 espresso_lite_v1.menu.eesz.4M.build.rfcal_addr=0x3FC000 -espresso_lite_v1.menu.ResetMethod.ck=ck -espresso_lite_v1.menu.ResetMethod.ck.upload.resetmethod=ck -espresso_lite_v1.menu.ResetMethod.nodemcu=nodemcu -espresso_lite_v1.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu +espresso_lite_v1.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +espresso_lite_v1.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +espresso_lite_v1.menu.ResetMethod.ck=no dtr (aka ck) +espresso_lite_v1.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset espresso_lite_v1.menu.ip.lm2f=v2 Lower Memory espresso_lite_v1.menu.ip.lm2f.build.lwip_include=lwip2/include espresso_lite_v1.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat @@ -1736,7 +1736,7 @@ espresso_lite_v1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPD espresso_lite_v1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG espresso_lite_v1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG espresso_lite_v1.menu.wipe.none=Only Sketch -espresso_lite_v1.menu.wipe.none.upload.erase_cmd=version +espresso_lite_v1.menu.wipe.none.upload.erase_cmd= espresso_lite_v1.menu.wipe.sdk=Sketch + WiFi Settings espresso_lite_v1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 espresso_lite_v1.menu.wipe.all=All Flash Contents @@ -1767,7 +1767,7 @@ espresso_lite_v2.build.variant=espresso_lite_v2 espresso_lite_v2.upload.tool=esptool espresso_lite_v2.upload.maximum_data_size=81920 espresso_lite_v2.upload.wait_for_upload_port=true -espresso_lite_v2.upload.erase_cmd=version +espresso_lite_v2.upload.erase_cmd= espresso_lite_v2.serial.disableDTR=true espresso_lite_v2.serial.disableRTS=true espresso_lite_v2.build.mcu=esp8266 @@ -1838,10 +1838,10 @@ espresso_lite_v2.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld espresso_lite_v2.menu.eesz.4M.build.spiffs_pagesize=256 espresso_lite_v2.menu.eesz.4M.upload.maximum_size=1044464 espresso_lite_v2.menu.eesz.4M.build.rfcal_addr=0x3FC000 -espresso_lite_v2.menu.ResetMethod.ck=ck -espresso_lite_v2.menu.ResetMethod.ck.upload.resetmethod=ck -espresso_lite_v2.menu.ResetMethod.nodemcu=nodemcu -espresso_lite_v2.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu +espresso_lite_v2.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +espresso_lite_v2.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +espresso_lite_v2.menu.ResetMethod.ck=no dtr (aka ck) +espresso_lite_v2.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset espresso_lite_v2.menu.ip.lm2f=v2 Lower Memory espresso_lite_v2.menu.ip.lm2f.build.lwip_include=lwip2/include espresso_lite_v2.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat @@ -1932,7 +1932,7 @@ espresso_lite_v2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPD espresso_lite_v2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG espresso_lite_v2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG espresso_lite_v2.menu.wipe.none=Only Sketch -espresso_lite_v2.menu.wipe.none.upload.erase_cmd=version +espresso_lite_v2.menu.wipe.none.upload.erase_cmd= espresso_lite_v2.menu.wipe.sdk=Sketch + WiFi Settings espresso_lite_v2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 espresso_lite_v2.menu.wipe.all=All Flash Contents @@ -1963,7 +1963,7 @@ phoenix_v1.build.variant=phoenix_v1 phoenix_v1.upload.tool=esptool phoenix_v1.upload.maximum_data_size=81920 phoenix_v1.upload.wait_for_upload_port=true -phoenix_v1.upload.erase_cmd=version +phoenix_v1.upload.erase_cmd= phoenix_v1.serial.disableDTR=true phoenix_v1.serial.disableRTS=true phoenix_v1.build.mcu=esp8266 @@ -2034,10 +2034,10 @@ phoenix_v1.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld phoenix_v1.menu.eesz.4M.build.spiffs_pagesize=256 phoenix_v1.menu.eesz.4M.upload.maximum_size=1044464 phoenix_v1.menu.eesz.4M.build.rfcal_addr=0x3FC000 -phoenix_v1.menu.ResetMethod.ck=ck -phoenix_v1.menu.ResetMethod.ck.upload.resetmethod=ck -phoenix_v1.menu.ResetMethod.nodemcu=nodemcu -phoenix_v1.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu +phoenix_v1.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +phoenix_v1.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +phoenix_v1.menu.ResetMethod.ck=no dtr (aka ck) +phoenix_v1.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset phoenix_v1.menu.ip.lm2f=v2 Lower Memory phoenix_v1.menu.ip.lm2f.build.lwip_include=lwip2/include phoenix_v1.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat @@ -2128,7 +2128,7 @@ phoenix_v1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROT phoenix_v1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG phoenix_v1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG phoenix_v1.menu.wipe.none=Only Sketch -phoenix_v1.menu.wipe.none.upload.erase_cmd=version +phoenix_v1.menu.wipe.none.upload.erase_cmd= phoenix_v1.menu.wipe.sdk=Sketch + WiFi Settings phoenix_v1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 phoenix_v1.menu.wipe.all=All Flash Contents @@ -2159,7 +2159,7 @@ phoenix_v2.build.variant=phoenix_v2 phoenix_v2.upload.tool=esptool phoenix_v2.upload.maximum_data_size=81920 phoenix_v2.upload.wait_for_upload_port=true -phoenix_v2.upload.erase_cmd=version +phoenix_v2.upload.erase_cmd= phoenix_v2.serial.disableDTR=true phoenix_v2.serial.disableRTS=true phoenix_v2.build.mcu=esp8266 @@ -2230,10 +2230,10 @@ phoenix_v2.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld phoenix_v2.menu.eesz.4M.build.spiffs_pagesize=256 phoenix_v2.menu.eesz.4M.upload.maximum_size=1044464 phoenix_v2.menu.eesz.4M.build.rfcal_addr=0x3FC000 -phoenix_v2.menu.ResetMethod.ck=ck -phoenix_v2.menu.ResetMethod.ck.upload.resetmethod=ck -phoenix_v2.menu.ResetMethod.nodemcu=nodemcu -phoenix_v2.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu +phoenix_v2.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +phoenix_v2.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +phoenix_v2.menu.ResetMethod.ck=no dtr (aka ck) +phoenix_v2.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset phoenix_v2.menu.ip.lm2f=v2 Lower Memory phoenix_v2.menu.ip.lm2f.build.lwip_include=lwip2/include phoenix_v2.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat @@ -2324,7 +2324,7 @@ phoenix_v2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROT phoenix_v2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG phoenix_v2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG phoenix_v2.menu.wipe.none=Only Sketch -phoenix_v2.menu.wipe.none.upload.erase_cmd=version +phoenix_v2.menu.wipe.none.upload.erase_cmd= phoenix_v2.menu.wipe.sdk=Sketch + WiFi Settings phoenix_v2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 phoenix_v2.menu.wipe.all=All Flash Contents @@ -2355,7 +2355,7 @@ nodemcu.build.variant=nodemcu nodemcu.upload.tool=esptool nodemcu.upload.maximum_data_size=81920 nodemcu.upload.wait_for_upload_port=true -nodemcu.upload.erase_cmd=version +nodemcu.upload.erase_cmd= nodemcu.serial.disableDTR=true nodemcu.serial.disableRTS=true nodemcu.build.mcu=esp8266 @@ -2386,7 +2386,7 @@ nodemcu.menu.ssl.all=All SSL ciphers (most compatible) nodemcu.menu.ssl.all.build.sslflags= nodemcu.menu.ssl.basic=Basic SSL ciphers (lower ROM use) nodemcu.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -nodemcu.upload.resetmethod=nodemcu +nodemcu.upload.resetmethod=--before default_reset --after hard_reset nodemcu.build.flash_mode=qio nodemcu.build.flash_flags=-DFLASHMODE_QIO nodemcu.build.flash_freq=40 @@ -2517,7 +2517,7 @@ nodemcu.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO nodemcu.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG nodemcu.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG nodemcu.menu.wipe.none=Only Sketch -nodemcu.menu.wipe.none.upload.erase_cmd=version +nodemcu.menu.wipe.none.upload.erase_cmd= nodemcu.menu.wipe.sdk=Sketch + WiFi Settings nodemcu.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 nodemcu.menu.wipe.all=All Flash Contents @@ -2548,7 +2548,7 @@ nodemcuv2.build.variant=nodemcu nodemcuv2.upload.tool=esptool nodemcuv2.upload.maximum_data_size=81920 nodemcuv2.upload.wait_for_upload_port=true -nodemcuv2.upload.erase_cmd=version +nodemcuv2.upload.erase_cmd= nodemcuv2.serial.disableDTR=true nodemcuv2.serial.disableRTS=true nodemcuv2.build.mcu=esp8266 @@ -2579,7 +2579,7 @@ nodemcuv2.menu.ssl.all=All SSL ciphers (most compatible) nodemcuv2.menu.ssl.all.build.sslflags= nodemcuv2.menu.ssl.basic=Basic SSL ciphers (lower ROM use) nodemcuv2.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -nodemcuv2.upload.resetmethod=nodemcu +nodemcuv2.upload.resetmethod=--before default_reset --after hard_reset nodemcuv2.build.flash_mode=dio nodemcuv2.build.flash_flags=-DFLASHMODE_DIO nodemcuv2.build.flash_freq=40 @@ -2620,6 +2620,10 @@ nodemcuv2.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld nodemcuv2.menu.eesz.4M.build.spiffs_pagesize=256 nodemcuv2.menu.eesz.4M.upload.maximum_size=1044464 nodemcuv2.menu.eesz.4M.build.rfcal_addr=0x3FC000 +nodemcuv2.menu.led.2=2 +nodemcuv2.menu.led.2.build.led=-DLED_BUILTIN=2 +nodemcuv2.menu.led.16=16 +nodemcuv2.menu.led.16.build.led=-DLED_BUILTIN=16 nodemcuv2.menu.ip.lm2f=v2 Lower Memory nodemcuv2.menu.ip.lm2f.build.lwip_include=lwip2/include nodemcuv2.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat @@ -2710,7 +2714,7 @@ nodemcuv2.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA nodemcuv2.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG nodemcuv2.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG nodemcuv2.menu.wipe.none=Only Sketch -nodemcuv2.menu.wipe.none.upload.erase_cmd=version +nodemcuv2.menu.wipe.none.upload.erase_cmd= nodemcuv2.menu.wipe.sdk=Sketch + WiFi Settings nodemcuv2.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 nodemcuv2.menu.wipe.all=All Flash Contents @@ -2741,7 +2745,7 @@ modwifi.build.variant=modwifi modwifi.upload.tool=esptool modwifi.upload.maximum_data_size=81920 modwifi.upload.wait_for_upload_port=true -modwifi.upload.erase_cmd=version +modwifi.upload.erase_cmd= modwifi.serial.disableDTR=true modwifi.serial.disableRTS=true modwifi.build.mcu=esp8266 @@ -2772,7 +2776,7 @@ modwifi.menu.ssl.all=All SSL ciphers (most compatible) modwifi.menu.ssl.all.build.sslflags= modwifi.menu.ssl.basic=Basic SSL ciphers (lower ROM use) modwifi.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -modwifi.upload.resetmethod=ck +modwifi.upload.resetmethod=--before no_reset --after soft_reset modwifi.build.flash_mode=qio modwifi.build.flash_flags=-DFLASHMODE_QIO modwifi.build.flash_freq=40 @@ -2923,7 +2927,7 @@ modwifi.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO modwifi.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG modwifi.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG modwifi.menu.wipe.none=Only Sketch -modwifi.menu.wipe.none.upload.erase_cmd=version +modwifi.menu.wipe.none.upload.erase_cmd= modwifi.menu.wipe.sdk=Sketch + WiFi Settings modwifi.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 modwifi.menu.wipe.all=All Flash Contents @@ -2954,7 +2958,7 @@ thing.build.variant=thing thing.upload.tool=esptool thing.upload.maximum_data_size=81920 thing.upload.wait_for_upload_port=true -thing.upload.erase_cmd=version +thing.upload.erase_cmd= thing.serial.disableDTR=true thing.serial.disableRTS=true thing.build.mcu=esp8266 @@ -2985,7 +2989,7 @@ thing.menu.ssl.all=All SSL ciphers (most compatible) thing.menu.ssl.all.build.sslflags= thing.menu.ssl.basic=Basic SSL ciphers (lower ROM use) thing.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -thing.upload.resetmethod=ck +thing.upload.resetmethod=--before no_reset --after soft_reset thing.build.flash_mode=qio thing.build.flash_flags=-DFLASHMODE_QIO thing.build.flash_freq=40 @@ -3116,7 +3120,7 @@ thing.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMM thing.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG thing.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG thing.menu.wipe.none=Only Sketch -thing.menu.wipe.none.upload.erase_cmd=version +thing.menu.wipe.none.upload.erase_cmd= thing.menu.wipe.sdk=Sketch + WiFi Settings thing.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 thing.menu.wipe.all=All Flash Contents @@ -3147,7 +3151,7 @@ thingdev.build.variant=thing thingdev.upload.tool=esptool thingdev.upload.maximum_data_size=81920 thingdev.upload.wait_for_upload_port=true -thingdev.upload.erase_cmd=version +thingdev.upload.erase_cmd= thingdev.serial.disableDTR=true thingdev.serial.disableRTS=true thingdev.build.mcu=esp8266 @@ -3178,7 +3182,7 @@ thingdev.menu.ssl.all=All SSL ciphers (most compatible) thingdev.menu.ssl.all.build.sslflags= thingdev.menu.ssl.basic=Basic SSL ciphers (lower ROM use) thingdev.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -thingdev.upload.resetmethod=nodemcu +thingdev.upload.resetmethod=--before default_reset --after hard_reset thingdev.build.flash_mode=dio thingdev.build.flash_flags=-DFLASHMODE_DIO thingdev.build.flash_freq=40 @@ -3309,7 +3313,7 @@ thingdev.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO thingdev.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG thingdev.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG thingdev.menu.wipe.none=Only Sketch -thingdev.menu.wipe.none.upload.erase_cmd=version +thingdev.menu.wipe.none.upload.erase_cmd= thingdev.menu.wipe.sdk=Sketch + WiFi Settings thingdev.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 thingdev.menu.wipe.all=All Flash Contents @@ -3333,13 +3337,206 @@ thingdev.menu.baud.921600.upload.speed=921600 thingdev.menu.baud.3000000=3000000 thingdev.menu.baud.3000000.upload.speed=3000000 +############################################################## +blynk.name=SparkFun Blynk Board +blynk.build.board=ESP8266_THING +blynk.build.variant=thing +blynk.upload.tool=esptool +blynk.upload.maximum_data_size=81920 +blynk.upload.wait_for_upload_port=true +blynk.upload.erase_cmd= +blynk.serial.disableDTR=true +blynk.serial.disableRTS=true +blynk.build.mcu=esp8266 +blynk.build.core=esp8266 +blynk.build.spiffs_pagesize=256 +blynk.build.debug_port= +blynk.build.debug_level= +blynk.menu.xtal.80=80 MHz +blynk.menu.xtal.80.build.f_cpu=80000000L +blynk.menu.xtal.160=160 MHz +blynk.menu.xtal.160.build.f_cpu=160000000L +blynk.menu.vt.flash=Flash +blynk.menu.vt.flash.build.vtable_flags=-DVTABLES_IN_FLASH +blynk.menu.vt.heap=Heap +blynk.menu.vt.heap.build.vtable_flags=-DVTABLES_IN_DRAM +blynk.menu.vt.iram=IRAM +blynk.menu.vt.iram.build.vtable_flags=-DVTABLES_IN_IRAM +blynk.menu.exception.legacy=Legacy (new can return nullptr) +blynk.menu.exception.legacy.build.exception_flags=-fno-exceptions +blynk.menu.exception.legacy.build.stdcpp_lib=-lstdc++ +blynk.menu.exception.disabled=Disabled (new can abort) +blynk.menu.exception.disabled.build.exception_flags=-fno-exceptions -DNEW_OOM_ABORT +blynk.menu.exception.disabled.build.stdcpp_lib=-lstdc++ +blynk.menu.exception.enabled=Enabled +blynk.menu.exception.enabled.build.exception_flags=-fexceptions +blynk.menu.exception.enabled.build.stdcpp_lib=-lstdc++-exc +blynk.menu.ssl.all=All SSL ciphers (most compatible) +blynk.menu.ssl.all.build.sslflags= +blynk.menu.ssl.basic=Basic SSL ciphers (lower ROM use) +blynk.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC +blynk.upload.resetmethod=--before default_reset --after hard_reset +blynk.build.flash_mode=qio +blynk.build.flash_flags=-DFLASHMODE_QIO +blynk.build.flash_freq=40 +blynk.menu.eesz.4M2M=4MB (FS:2MB OTA:~1019KB) +blynk.menu.eesz.4M2M.build.flash_size=4M +blynk.menu.eesz.4M2M.build.flash_size_bytes=0x400000 +blynk.menu.eesz.4M2M.build.flash_ld=eagle.flash.4m2m.ld +blynk.menu.eesz.4M2M.build.spiffs_pagesize=256 +blynk.menu.eesz.4M2M.upload.maximum_size=1044464 +blynk.menu.eesz.4M2M.build.rfcal_addr=0x3FC000 +blynk.menu.eesz.4M2M.build.spiffs_start=0x200000 +blynk.menu.eesz.4M2M.build.spiffs_end=0x3FA000 +blynk.menu.eesz.4M2M.build.spiffs_blocksize=8192 +blynk.menu.eesz.4M3M=4MB (FS:3MB OTA:~512KB) +blynk.menu.eesz.4M3M.build.flash_size=4M +blynk.menu.eesz.4M3M.build.flash_size_bytes=0x400000 +blynk.menu.eesz.4M3M.build.flash_ld=eagle.flash.4m3m.ld +blynk.menu.eesz.4M3M.build.spiffs_pagesize=256 +blynk.menu.eesz.4M3M.upload.maximum_size=1044464 +blynk.menu.eesz.4M3M.build.rfcal_addr=0x3FC000 +blynk.menu.eesz.4M3M.build.spiffs_start=0x100000 +blynk.menu.eesz.4M3M.build.spiffs_end=0x3FA000 +blynk.menu.eesz.4M3M.build.spiffs_blocksize=8192 +blynk.menu.eesz.4M1M=4MB (FS:1MB OTA:~1019KB) +blynk.menu.eesz.4M1M.build.flash_size=4M +blynk.menu.eesz.4M1M.build.flash_size_bytes=0x400000 +blynk.menu.eesz.4M1M.build.flash_ld=eagle.flash.4m1m.ld +blynk.menu.eesz.4M1M.build.spiffs_pagesize=256 +blynk.menu.eesz.4M1M.upload.maximum_size=1044464 +blynk.menu.eesz.4M1M.build.rfcal_addr=0x3FC000 +blynk.menu.eesz.4M1M.build.spiffs_start=0x300000 +blynk.menu.eesz.4M1M.build.spiffs_end=0x3FA000 +blynk.menu.eesz.4M1M.build.spiffs_blocksize=8192 +blynk.menu.eesz.4M=4MB (FS:none OTA:~1019KB) +blynk.menu.eesz.4M.build.flash_size=4M +blynk.menu.eesz.4M.build.flash_size_bytes=0x400000 +blynk.menu.eesz.4M.build.flash_ld=eagle.flash.4m.ld +blynk.menu.eesz.4M.build.spiffs_pagesize=256 +blynk.menu.eesz.4M.upload.maximum_size=1044464 +blynk.menu.eesz.4M.build.rfcal_addr=0x3FC000 +blynk.menu.ip.lm2f=v2 Lower Memory +blynk.menu.ip.lm2f.build.lwip_include=lwip2/include +blynk.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat +blynk.menu.ip.lm2f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 +blynk.menu.ip.hb2f=v2 Higher Bandwidth +blynk.menu.ip.hb2f.build.lwip_include=lwip2/include +blynk.menu.ip.hb2f.build.lwip_lib=-llwip2-1460-feat +blynk.menu.ip.hb2f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 +blynk.menu.ip.lm2n=v2 Lower Memory (no features) +blynk.menu.ip.lm2n.build.lwip_include=lwip2/include +blynk.menu.ip.lm2n.build.lwip_lib=-llwip2-536 +blynk.menu.ip.lm2n.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=0 -DLWIP_IPV6=0 +blynk.menu.ip.hb2n=v2 Higher Bandwidth (no features) +blynk.menu.ip.hb2n.build.lwip_include=lwip2/include +blynk.menu.ip.hb2n.build.lwip_lib=-llwip2-1460 +blynk.menu.ip.hb2n.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=0 -DLWIP_IPV6=0 +blynk.menu.ip.lm6f=v2 IPv6 Lower Memory +blynk.menu.ip.lm6f.build.lwip_include=lwip2/include +blynk.menu.ip.lm6f.build.lwip_lib=-llwip6-536-feat +blynk.menu.ip.lm6f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=1 +blynk.menu.ip.hb6f=v2 IPv6 Higher Bandwidth +blynk.menu.ip.hb6f.build.lwip_include=lwip2/include +blynk.menu.ip.hb6f.build.lwip_lib=-llwip6-1460-feat +blynk.menu.ip.hb6f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=1 -DLWIP_IPV6=1 +blynk.menu.ip.hb1=v1.4 Higher Bandwidth +blynk.menu.ip.hb1.build.lwip_lib=-llwip_gcc +blynk.menu.ip.hb1.build.lwip_flags=-DLWIP_OPEN_SRC +blynk.menu.ip.src=v1.4 Compile from source +blynk.menu.ip.src.build.lwip_lib=-llwip_src +blynk.menu.ip.src.build.lwip_flags=-DLWIP_OPEN_SRC +blynk.menu.ip.src.recipe.hooks.sketch.prebuild.1.pattern=make -C "{runtime.platform.path}/tools/sdk/lwip/src" install TOOLS_PATH="{runtime.tools.xtensa-lx106-elf-gcc.path}/bin/xtensa-lx106-elf-" +blynk.menu.dbg.Disabled=Disabled +blynk.menu.dbg.Disabled.build.debug_port= +blynk.menu.dbg.Serial=Serial +blynk.menu.dbg.Serial.build.debug_port=-DDEBUG_ESP_PORT=Serial +blynk.menu.dbg.Serial1=Serial1 +blynk.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1 +blynk.menu.lvl.None____=None +blynk.menu.lvl.None____.build.debug_level= +blynk.menu.lvl.SSL=SSL +blynk.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL +blynk.menu.lvl.TLS_MEM=TLS_MEM +blynk.menu.lvl.TLS_MEM.build.debug_level= -DDEBUG_ESP_TLS_MEM +blynk.menu.lvl.HTTP_CLIENT=HTTP_CLIENT +blynk.menu.lvl.HTTP_CLIENT.build.debug_level= -DDEBUG_ESP_HTTP_CLIENT +blynk.menu.lvl.HTTP_SERVER=HTTP_SERVER +blynk.menu.lvl.HTTP_SERVER.build.debug_level= -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.SSLTLS_MEM=SSL+TLS_MEM +blynk.menu.lvl.SSLTLS_MEM.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM +blynk.menu.lvl.SSLHTTP_CLIENT=SSL+HTTP_CLIENT +blynk.menu.lvl.SSLHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_CLIENT +blynk.menu.lvl.SSLHTTP_SERVER=SSL+HTTP_SERVER +blynk.menu.lvl.SSLHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.TLS_MEMHTTP_CLIENT=TLS_MEM+HTTP_CLIENT +blynk.menu.lvl.TLS_MEMHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT +blynk.menu.lvl.TLS_MEMHTTP_SERVER=TLS_MEM+HTTP_SERVER +blynk.menu.lvl.TLS_MEMHTTP_SERVER.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.HTTP_CLIENTHTTP_SERVER=HTTP_CLIENT+HTTP_SERVER +blynk.menu.lvl.HTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENT=SSL+TLS_MEM+HTTP_CLIENT +blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT +blynk.menu.lvl.SSLTLS_MEMHTTP_SERVER=SSL+TLS_MEM+HTTP_SERVER +blynk.menu.lvl.SSLTLS_MEMHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.SSLHTTP_CLIENTHTTP_SERVER=SSL+HTTP_CLIENT+HTTP_SERVER +blynk.menu.lvl.SSLHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.TLS_MEMHTTP_CLIENTHTTP_SERVER=TLS_MEM+HTTP_CLIENT+HTTP_SERVER +blynk.menu.lvl.TLS_MEMHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVER=SSL+TLS_MEM+HTTP_CLIENT+HTTP_SERVER +blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +blynk.menu.lvl.CORE=CORE +blynk.menu.lvl.CORE.build.debug_level= -DDEBUG_ESP_CORE +blynk.menu.lvl.WIFI=WIFI +blynk.menu.lvl.WIFI.build.debug_level= -DDEBUG_ESP_WIFI +blynk.menu.lvl.HTTP_UPDATE=HTTP_UPDATE +blynk.menu.lvl.HTTP_UPDATE.build.debug_level= -DDEBUG_ESP_HTTP_UPDATE +blynk.menu.lvl.UPDATER=UPDATER +blynk.menu.lvl.UPDATER.build.debug_level= -DDEBUG_ESP_UPDATER +blynk.menu.lvl.OTA=OTA +blynk.menu.lvl.OTA.build.debug_level= -DDEBUG_ESP_OTA +blynk.menu.lvl.OOM=OOM +blynk.menu.lvl.OOM.build.debug_level= -DDEBUG_ESP_OOM +blynk.menu.lvl.MDNS=MDNS +blynk.menu.lvl.MDNS.build.debug_level= -DDEBUG_ESP_MDNS +blynk.menu.lvl.COREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS=CORE+WIFI+HTTP_UPDATE+UPDATER+OTA+OOM+MDNS +blynk.menu.lvl.COREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS.build.debug_level= -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM -DDEBUG_ESP_MDNS +blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS=SSL+TLS_MEM+HTTP_CLIENT+HTTP_SERVER+CORE+WIFI+HTTP_UPDATE+UPDATER+OTA+OOM+MDNS +blynk.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM -DDEBUG_ESP_MDNS +blynk.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG +blynk.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG +blynk.menu.wipe.none=Only Sketch +blynk.menu.wipe.none.upload.erase_cmd= +blynk.menu.wipe.sdk=Sketch + WiFi Settings +blynk.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 +blynk.menu.wipe.all=All Flash Contents +blynk.menu.wipe.all.upload.erase_cmd=erase_flash +blynk.menu.baud.115200=115200 +blynk.menu.baud.115200.upload.speed=115200 +blynk.menu.baud.57600=57600 +blynk.menu.baud.57600.upload.speed=57600 +blynk.menu.baud.230400.linux=230400 +blynk.menu.baud.230400.macosx=230400 +blynk.menu.baud.230400.upload.speed=230400 +blynk.menu.baud.256000.windows=256000 +blynk.menu.baud.256000.upload.speed=256000 +blynk.menu.baud.460800.linux=460800 +blynk.menu.baud.460800.macosx=460800 +blynk.menu.baud.460800.upload.speed=460800 +blynk.menu.baud.512000.windows=512000 +blynk.menu.baud.512000.upload.speed=512000 +blynk.menu.baud.921600=921600 +blynk.menu.baud.921600.upload.speed=921600 +blynk.menu.baud.3000000=3000000 +blynk.menu.baud.3000000.upload.speed=3000000 + ############################################################## esp210.name=SweetPea ESP-210 esp210.build.board=ESP8266_ESP210 esp210.upload.tool=esptool esp210.upload.maximum_data_size=81920 esp210.upload.wait_for_upload_port=true -esp210.upload.erase_cmd=version +esp210.upload.erase_cmd= esp210.serial.disableDTR=true esp210.serial.disableRTS=true esp210.build.mcu=esp8266 @@ -3371,7 +3568,7 @@ esp210.menu.ssl.all=All SSL ciphers (most compatible) esp210.menu.ssl.all.build.sslflags= esp210.menu.ssl.basic=Basic SSL ciphers (lower ROM use) esp210.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -esp210.upload.resetmethod=ck +esp210.upload.resetmethod=--before no_reset --after soft_reset esp210.build.flash_mode=qio esp210.build.flash_flags=-DFLASHMODE_QIO esp210.build.flash_freq=40 @@ -3502,7 +3699,7 @@ esp210.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM esp210.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG esp210.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG esp210.menu.wipe.none=Only Sketch -esp210.menu.wipe.none.upload.erase_cmd=version +esp210.menu.wipe.none.upload.erase_cmd= esp210.menu.wipe.sdk=Sketch + WiFi Settings esp210.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 esp210.menu.wipe.all=All Flash Contents @@ -3533,7 +3730,7 @@ d1_mini.build.variant=d1_mini d1_mini.upload.tool=esptool d1_mini.upload.maximum_data_size=81920 d1_mini.upload.wait_for_upload_port=true -d1_mini.upload.erase_cmd=version +d1_mini.upload.erase_cmd= d1_mini.serial.disableDTR=true d1_mini.serial.disableRTS=true d1_mini.build.mcu=esp8266 @@ -3564,7 +3761,7 @@ d1_mini.menu.ssl.all=All SSL ciphers (most compatible) d1_mini.menu.ssl.all.build.sslflags= d1_mini.menu.ssl.basic=Basic SSL ciphers (lower ROM use) d1_mini.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -d1_mini.upload.resetmethod=nodemcu +d1_mini.upload.resetmethod=--before default_reset --after hard_reset d1_mini.build.flash_mode=dio d1_mini.build.flash_flags=-DFLASHMODE_DIO d1_mini.build.flash_freq=40 @@ -3695,7 +3892,7 @@ d1_mini.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO d1_mini.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG d1_mini.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG d1_mini.menu.wipe.none=Only Sketch -d1_mini.menu.wipe.none.upload.erase_cmd=version +d1_mini.menu.wipe.none.upload.erase_cmd= d1_mini.menu.wipe.sdk=Sketch + WiFi Settings d1_mini.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 d1_mini.menu.wipe.all=All Flash Contents @@ -3726,7 +3923,7 @@ d1_mini_pro.build.variant=d1_mini d1_mini_pro.upload.tool=esptool d1_mini_pro.upload.maximum_data_size=81920 d1_mini_pro.upload.wait_for_upload_port=true -d1_mini_pro.upload.erase_cmd=version +d1_mini_pro.upload.erase_cmd= d1_mini_pro.serial.disableDTR=true d1_mini_pro.serial.disableRTS=true d1_mini_pro.build.mcu=esp8266 @@ -3757,7 +3954,7 @@ d1_mini_pro.menu.ssl.all=All SSL ciphers (most compatible) d1_mini_pro.menu.ssl.all.build.sslflags= d1_mini_pro.menu.ssl.basic=Basic SSL ciphers (lower ROM use) d1_mini_pro.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -d1_mini_pro.upload.resetmethod=nodemcu +d1_mini_pro.upload.resetmethod=--before default_reset --after hard_reset d1_mini_pro.build.flash_mode=dio d1_mini_pro.build.flash_flags=-DFLASHMODE_DIO d1_mini_pro.build.flash_freq=40 @@ -3871,7 +4068,7 @@ d1_mini_pro.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATERO d1_mini_pro.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG d1_mini_pro.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG d1_mini_pro.menu.wipe.none=Only Sketch -d1_mini_pro.menu.wipe.none.upload.erase_cmd=version +d1_mini_pro.menu.wipe.none.upload.erase_cmd= d1_mini_pro.menu.wipe.sdk=Sketch + WiFi Settings d1_mini_pro.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 d1_mini_pro.menu.wipe.all=All Flash Contents @@ -3902,7 +4099,7 @@ d1_mini_lite.build.variant=d1_mini d1_mini_lite.upload.tool=esptool d1_mini_lite.upload.maximum_data_size=81920 d1_mini_lite.upload.wait_for_upload_port=true -d1_mini_lite.upload.erase_cmd=version +d1_mini_lite.upload.erase_cmd= d1_mini_lite.serial.disableDTR=true d1_mini_lite.serial.disableRTS=true d1_mini_lite.build.mcu=esp8266 @@ -3933,7 +4130,7 @@ d1_mini_lite.menu.ssl.all=All SSL ciphers (most compatible) d1_mini_lite.menu.ssl.all.build.sslflags= d1_mini_lite.menu.ssl.basic=Basic SSL ciphers (lower ROM use) d1_mini_lite.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -d1_mini_lite.upload.resetmethod=nodemcu +d1_mini_lite.upload.resetmethod=--before default_reset --after hard_reset d1_mini_lite.build.flash_mode=dout d1_mini_lite.build.flash_flags=-DFLASHMODE_DOUT d1_mini_lite.build.flash_freq=40 @@ -4104,7 +4301,7 @@ d1_mini_lite.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATER d1_mini_lite.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG d1_mini_lite.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG d1_mini_lite.menu.wipe.none=Only Sketch -d1_mini_lite.menu.wipe.none.upload.erase_cmd=version +d1_mini_lite.menu.wipe.none.upload.erase_cmd= d1_mini_lite.menu.wipe.sdk=Sketch + WiFi Settings d1_mini_lite.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 d1_mini_lite.menu.wipe.all=All Flash Contents @@ -4135,7 +4332,7 @@ d1.build.variant=d1 d1.upload.tool=esptool d1.upload.maximum_data_size=81920 d1.upload.wait_for_upload_port=true -d1.upload.erase_cmd=version +d1.upload.erase_cmd= d1.serial.disableDTR=true d1.serial.disableRTS=true d1.build.mcu=esp8266 @@ -4166,7 +4363,7 @@ d1.menu.ssl.all=All SSL ciphers (most compatible) d1.menu.ssl.all.build.sslflags= d1.menu.ssl.basic=Basic SSL ciphers (lower ROM use) d1.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -d1.upload.resetmethod=nodemcu +d1.upload.resetmethod=--before default_reset --after hard_reset d1.build.flash_mode=dio d1.build.flash_flags=-DFLASHMODE_DIO d1.build.flash_freq=40 @@ -4297,7 +4494,7 @@ d1.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS d1.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG d1.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG d1.menu.wipe.none=Only Sketch -d1.menu.wipe.none.upload.erase_cmd=version +d1.menu.wipe.none.upload.erase_cmd= d1.menu.wipe.sdk=Sketch + WiFi Settings d1.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 d1.menu.wipe.all=All Flash Contents @@ -4328,7 +4525,7 @@ espino.build.variant=espino espino.upload.tool=esptool espino.upload.maximum_data_size=81920 espino.upload.wait_for_upload_port=true -espino.upload.erase_cmd=version +espino.upload.erase_cmd= espino.serial.disableDTR=true espino.serial.disableRTS=true espino.build.mcu=esp8266 @@ -4359,10 +4556,10 @@ espino.menu.ssl.all=All SSL ciphers (most compatible) espino.menu.ssl.all.build.sslflags= espino.menu.ssl.basic=Basic SSL ciphers (lower ROM use) espino.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -espino.menu.ResetMethod.ck=ck -espino.menu.ResetMethod.ck.upload.resetmethod=ck -espino.menu.ResetMethod.nodemcu=nodemcu -espino.menu.ResetMethod.nodemcu.upload.resetmethod=nodemcu +espino.menu.ResetMethod.nodemcu=dtr (aka nodemcu) +espino.menu.ResetMethod.nodemcu.upload.resetmethod=--before default_reset --after hard_reset +espino.menu.ResetMethod.ck=no dtr (aka ck) +espino.menu.ResetMethod.ck.upload.resetmethod=--before no_reset --after soft_reset espino.build.flash_mode=qio espino.build.flash_flags=-DFLASHMODE_QIO espino.build.flash_freq=40 @@ -4493,7 +4690,7 @@ espino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOM espino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG espino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG espino.menu.wipe.none=Only Sketch -espino.menu.wipe.none.upload.erase_cmd=version +espino.menu.wipe.none.upload.erase_cmd= espino.menu.wipe.sdk=Sketch + WiFi Settings espino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 espino.menu.wipe.all=All Flash Contents @@ -4524,7 +4721,7 @@ espinotee.build.variant=espinotee espinotee.upload.tool=esptool espinotee.upload.maximum_data_size=81920 espinotee.upload.wait_for_upload_port=true -espinotee.upload.erase_cmd=version +espinotee.upload.erase_cmd= espinotee.serial.disableDTR=true espinotee.serial.disableRTS=true espinotee.build.mcu=esp8266 @@ -4555,7 +4752,7 @@ espinotee.menu.ssl.all=All SSL ciphers (most compatible) espinotee.menu.ssl.all.build.sslflags= espinotee.menu.ssl.basic=Basic SSL ciphers (lower ROM use) espinotee.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -espinotee.upload.resetmethod=nodemcu +espinotee.upload.resetmethod=--before default_reset --after hard_reset espinotee.build.flash_mode=qio espinotee.build.flash_flags=-DFLASHMODE_QIO espinotee.build.flash_freq=40 @@ -4686,7 +4883,7 @@ espinotee.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA espinotee.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG espinotee.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG espinotee.menu.wipe.none=Only Sketch -espinotee.menu.wipe.none.upload.erase_cmd=version +espinotee.menu.wipe.none.upload.erase_cmd= espinotee.menu.wipe.sdk=Sketch + WiFi Settings espinotee.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 espinotee.menu.wipe.all=All Flash Contents @@ -4734,7 +4931,7 @@ wifinfo.menu.ESPModule.ESP12.upload.maximum_size=1044464 wifinfo.upload.tool=esptool wifinfo.upload.maximum_data_size=81920 wifinfo.upload.wait_for_upload_port=true -wifinfo.upload.erase_cmd=version +wifinfo.upload.erase_cmd= wifinfo.serial.disableDTR=true wifinfo.serial.disableRTS=true wifinfo.build.mcu=esp8266 @@ -4765,7 +4962,7 @@ wifinfo.menu.ssl.all=All SSL ciphers (most compatible) wifinfo.menu.ssl.all.build.sslflags= wifinfo.menu.ssl.basic=Basic SSL ciphers (lower ROM use) wifinfo.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -wifinfo.upload.resetmethod=nodemcu +wifinfo.upload.resetmethod=--before default_reset --after hard_reset wifinfo.build.flash_mode=qio wifinfo.build.flash_flags=-DFLASHMODE_QIO wifinfo.menu.FlashFreq.40=40MHz @@ -4943,7 +5140,7 @@ wifinfo.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO wifinfo.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG wifinfo.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG wifinfo.menu.wipe.none=Only Sketch -wifinfo.menu.wipe.none.upload.erase_cmd=version +wifinfo.menu.wipe.none.upload.erase_cmd= wifinfo.menu.wipe.sdk=Sketch + WiFi Settings wifinfo.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 wifinfo.menu.wipe.all=All Flash Contents @@ -4985,7 +5182,7 @@ arduino-esp8266.menu.BoardModel.unowifideved.build.variant=arduino_uart arduino-esp8266.upload.tool=esptool arduino-esp8266.upload.maximum_data_size=81920 arduino-esp8266.upload.wait_for_upload_port=true -arduino-esp8266.upload.erase_cmd=version +arduino-esp8266.upload.erase_cmd= arduino-esp8266.serial.disableDTR=true arduino-esp8266.serial.disableRTS=true arduino-esp8266.build.mcu=esp8266 @@ -5017,7 +5214,7 @@ arduino-esp8266.menu.ssl.all=All SSL ciphers (most compatible) arduino-esp8266.menu.ssl.all.build.sslflags= arduino-esp8266.menu.ssl.basic=Basic SSL ciphers (lower ROM use) arduino-esp8266.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -arduino-esp8266.upload.resetmethod=ck +arduino-esp8266.upload.resetmethod=--before no_reset --after soft_reset arduino-esp8266.build.flash_mode=qio arduino-esp8266.build.flash_flags=-DFLASHMODE_QIO arduino-esp8266.build.flash_freq=40 @@ -5148,7 +5345,7 @@ arduino-esp8266.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDA arduino-esp8266.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG arduino-esp8266.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG arduino-esp8266.menu.wipe.none=Only Sketch -arduino-esp8266.menu.wipe.none.upload.erase_cmd=version +arduino-esp8266.menu.wipe.none.upload.erase_cmd= arduino-esp8266.menu.wipe.sdk=Sketch + WiFi Settings arduino-esp8266.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 arduino-esp8266.menu.wipe.all=All Flash Contents @@ -5180,7 +5377,7 @@ gen4iod.build.variant=generic gen4iod.upload.tool=esptool gen4iod.upload.maximum_data_size=81920 gen4iod.upload.wait_for_upload_port=true -gen4iod.upload.erase_cmd=version +gen4iod.upload.erase_cmd= gen4iod.serial.disableDTR=true gen4iod.serial.disableRTS=true gen4iod.build.mcu=esp8266 @@ -5211,7 +5408,7 @@ gen4iod.menu.ssl.all=All SSL ciphers (most compatible) gen4iod.menu.ssl.all.build.sslflags= gen4iod.menu.ssl.basic=Basic SSL ciphers (lower ROM use) gen4iod.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -gen4iod.upload.resetmethod=nodemcu +gen4iod.upload.resetmethod=--before default_reset --after hard_reset gen4iod.build.flash_mode=dio gen4iod.build.flash_flags=-DFLASHMODE_DIO gen4iod.build.flash_freq=80 @@ -5342,7 +5539,7 @@ gen4iod.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO gen4iod.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG gen4iod.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG gen4iod.menu.wipe.none=Only Sketch -gen4iod.menu.wipe.none.upload.erase_cmd=version +gen4iod.menu.wipe.none.upload.erase_cmd= gen4iod.menu.wipe.sdk=Sketch + WiFi Settings gen4iod.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 gen4iod.menu.wipe.all=All Flash Contents @@ -5374,7 +5571,7 @@ oak.upload.maximum_size=1040368 oak.upload.tool=esptool oak.upload.maximum_data_size=81920 oak.upload.wait_for_upload_port=true -oak.upload.erase_cmd=version +oak.upload.erase_cmd= oak.serial.disableDTR=true oak.serial.disableRTS=true oak.build.mcu=esp8266 @@ -5405,7 +5602,7 @@ oak.menu.ssl.all=All SSL ciphers (most compatible) oak.menu.ssl.all.build.sslflags= oak.menu.ssl.basic=Basic SSL ciphers (lower ROM use) oak.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -oak.upload.resetmethod=none +oak.upload.resetmethod=--before no_reset --after soft_reset oak.build.flash_mode=dio oak.build.flash_flags=-DFLASHMODE_DIO oak.build.flash_freq=40 @@ -5536,7 +5733,7 @@ oak.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDN oak.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG oak.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG oak.menu.wipe.none=Only Sketch -oak.menu.wipe.none.upload.erase_cmd=version +oak.menu.wipe.none.upload.erase_cmd= oak.menu.wipe.sdk=Sketch + WiFi Settings oak.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 oak.menu.wipe.all=All Flash Contents @@ -5567,7 +5764,7 @@ wifiduino.build.variant=wifiduino wifiduino.upload.tool=esptool wifiduino.upload.maximum_data_size=81920 wifiduino.upload.wait_for_upload_port=true -wifiduino.upload.erase_cmd=version +wifiduino.upload.erase_cmd= wifiduino.serial.disableDTR=true wifiduino.serial.disableRTS=true wifiduino.build.mcu=esp8266 @@ -5598,7 +5795,7 @@ wifiduino.menu.ssl.all=All SSL ciphers (most compatible) wifiduino.menu.ssl.all.build.sslflags= wifiduino.menu.ssl.basic=Basic SSL ciphers (lower ROM use) wifiduino.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -wifiduino.upload.resetmethod=nodemcu +wifiduino.upload.resetmethod=--before default_reset --after hard_reset wifiduino.build.flash_mode=dio wifiduino.build.flash_flags=-DFLASHMODE_DIO wifiduino.build.flash_freq=40 @@ -5729,7 +5926,7 @@ wifiduino.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA wifiduino.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG wifiduino.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG wifiduino.menu.wipe.none=Only Sketch -wifiduino.menu.wipe.none.upload.erase_cmd=version +wifiduino.menu.wipe.none.upload.erase_cmd= wifiduino.menu.wipe.sdk=Sketch + WiFi Settings wifiduino.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 wifiduino.menu.wipe.all=All Flash Contents @@ -5760,7 +5957,7 @@ wifi_slot.build.variant=wifi_slot wifi_slot.upload.tool=esptool wifi_slot.upload.maximum_data_size=81920 wifi_slot.upload.wait_for_upload_port=true -wifi_slot.upload.erase_cmd=version +wifi_slot.upload.erase_cmd= wifi_slot.serial.disableDTR=true wifi_slot.serial.disableRTS=true wifi_slot.build.mcu=esp8266 @@ -5791,7 +5988,7 @@ wifi_slot.menu.ssl.all=All SSL ciphers (most compatible) wifi_slot.menu.ssl.all.build.sslflags= wifi_slot.menu.ssl.basic=Basic SSL ciphers (lower ROM use) wifi_slot.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -wifi_slot.upload.resetmethod=nodemcu +wifi_slot.upload.resetmethod=--before default_reset --after hard_reset wifi_slot.menu.FlashFreq.40=40MHz wifi_slot.menu.FlashFreq.40.build.flash_freq=40 wifi_slot.menu.FlashFreq.80=80MHz @@ -6036,7 +6233,7 @@ wifi_slot.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTA wifi_slot.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG wifi_slot.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG wifi_slot.menu.wipe.none=Only Sketch -wifi_slot.menu.wipe.none.upload.erase_cmd=version +wifi_slot.menu.wipe.none.upload.erase_cmd= wifi_slot.menu.wipe.sdk=Sketch + WiFi Settings wifi_slot.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 wifi_slot.menu.wipe.all=All Flash Contents @@ -6067,7 +6264,7 @@ wiolink.build.variant=wiolink wiolink.upload.tool=esptool wiolink.upload.maximum_data_size=81920 wiolink.upload.wait_for_upload_port=true -wiolink.upload.erase_cmd=version +wiolink.upload.erase_cmd= wiolink.serial.disableDTR=true wiolink.serial.disableRTS=true wiolink.build.mcu=esp8266 @@ -6098,7 +6295,7 @@ wiolink.menu.ssl.all=All SSL ciphers (most compatible) wiolink.menu.ssl.all.build.sslflags= wiolink.menu.ssl.basic=Basic SSL ciphers (lower ROM use) wiolink.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -wiolink.upload.resetmethod=nodemcu +wiolink.upload.resetmethod=--before default_reset --after hard_reset wiolink.build.flash_mode=qio wiolink.build.flash_flags=-DFLASHMODE_QIO wiolink.build.flash_freq=40 @@ -6229,7 +6426,7 @@ wiolink.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOO wiolink.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG wiolink.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG wiolink.menu.wipe.none=Only Sketch -wiolink.menu.wipe.none.upload.erase_cmd=version +wiolink.menu.wipe.none.upload.erase_cmd= wiolink.menu.wipe.sdk=Sketch + WiFi Settings wiolink.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 wiolink.menu.wipe.all=All Flash Contents @@ -6260,7 +6457,7 @@ espectro.build.variant=espectro espectro.upload.tool=esptool espectro.upload.maximum_data_size=81920 espectro.upload.wait_for_upload_port=true -espectro.upload.erase_cmd=version +espectro.upload.erase_cmd= espectro.serial.disableDTR=true espectro.serial.disableRTS=true espectro.build.mcu=esp8266 @@ -6291,7 +6488,7 @@ espectro.menu.ssl.all=All SSL ciphers (most compatible) espectro.menu.ssl.all.build.sslflags= espectro.menu.ssl.basic=Basic SSL ciphers (lower ROM use) espectro.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC -espectro.upload.resetmethod=nodemcu +espectro.upload.resetmethod=--before default_reset --after hard_reset espectro.build.flash_mode=dio espectro.build.flash_flags=-DFLASHMODE_DIO espectro.build.flash_freq=40 @@ -6422,7 +6619,7 @@ espectro.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAO espectro.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG espectro.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG espectro.menu.wipe.none=Only Sketch -espectro.menu.wipe.none.upload.erase_cmd=version +espectro.menu.wipe.none.upload.erase_cmd= espectro.menu.wipe.sdk=Sketch + WiFi Settings espectro.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 espectro.menu.wipe.all=All Flash Contents @@ -6446,3 +6643,480 @@ espectro.menu.baud.921600.upload.speed=921600 espectro.menu.baud.3000000=3000000 espectro.menu.baud.3000000.upload.speed=3000000 +############################################################## +sonoff.name=ITEAD Sonoff +sonoff.build.board=SONOFF_SV +sonoff.build.extra_flags=-DESP8266 +sonoff.build.flash_size=1M +sonoff.build.variant=itead +sonoff.menu.BoardModel.sonoffBasic=ITEAD Sonoff Basic +sonoff.menu.BoardModel.sonoffBasic.build.board=SONOFF_BASIC +sonoff.menu.BoardModel.sonoffS20=ITEAD Sonoff S20 +sonoff.menu.BoardModel.sonoffS20.build.board=SONOFF_S20 +sonoff.menu.BoardModel.sonoffSV=ITEAD Sonoff SV +sonoff.menu.BoardModel.sonoffSV.build.board=SONOFF_SV +sonoff.menu.BoardModel.sonoffTH=ITEAD Sonoff TH +sonoff.menu.BoardModel.sonoffTH.build.board=SONOFF_TH +sonoff.upload.tool=esptool +sonoff.upload.maximum_data_size=81920 +sonoff.upload.wait_for_upload_port=true +sonoff.upload.erase_cmd= +sonoff.serial.disableDTR=true +sonoff.serial.disableRTS=true +sonoff.build.mcu=esp8266 +sonoff.build.core=esp8266 +sonoff.build.spiffs_pagesize=256 +sonoff.build.debug_port= +sonoff.build.debug_level= +sonoff.menu.xtal.80=80 MHz +sonoff.menu.xtal.80.build.f_cpu=80000000L +sonoff.menu.xtal.160=160 MHz +sonoff.menu.xtal.160.build.f_cpu=160000000L +sonoff.menu.vt.flash=Flash +sonoff.menu.vt.flash.build.vtable_flags=-DVTABLES_IN_FLASH +sonoff.menu.vt.heap=Heap +sonoff.menu.vt.heap.build.vtable_flags=-DVTABLES_IN_DRAM +sonoff.menu.vt.iram=IRAM +sonoff.menu.vt.iram.build.vtable_flags=-DVTABLES_IN_IRAM +sonoff.menu.exception.legacy=Legacy (new can return nullptr) +sonoff.menu.exception.legacy.build.exception_flags=-fno-exceptions +sonoff.menu.exception.legacy.build.stdcpp_lib=-lstdc++ +sonoff.menu.exception.disabled=Disabled (new can abort) +sonoff.menu.exception.disabled.build.exception_flags=-fno-exceptions -DNEW_OOM_ABORT +sonoff.menu.exception.disabled.build.stdcpp_lib=-lstdc++ +sonoff.menu.exception.enabled=Enabled +sonoff.menu.exception.enabled.build.exception_flags=-fexceptions +sonoff.menu.exception.enabled.build.stdcpp_lib=-lstdc++-exc +sonoff.menu.ssl.all=All SSL ciphers (most compatible) +sonoff.menu.ssl.all.build.sslflags= +sonoff.menu.ssl.basic=Basic SSL ciphers (lower ROM use) +sonoff.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC +sonoff.upload.resetmethod=--before no_reset --after soft_reset +sonoff.build.flash_mode=dout +sonoff.build.flash_flags=-DFLASHMODE_DOUT +sonoff.build.flash_freq=40 +sonoff.menu.eesz.1M64=1MB (FS:64KB OTA:~470KB) +sonoff.menu.eesz.1M64.build.flash_size=1M +sonoff.menu.eesz.1M64.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M64.build.flash_ld=eagle.flash.1m64.ld +sonoff.menu.eesz.1M64.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M64.upload.maximum_size=958448 +sonoff.menu.eesz.1M64.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M64.build.spiffs_start=0xEB000 +sonoff.menu.eesz.1M64.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M64.build.spiffs_blocksize=4096 +sonoff.menu.eesz.1M128=1MB (FS:128KB OTA:~438KB) +sonoff.menu.eesz.1M128.build.flash_size=1M +sonoff.menu.eesz.1M128.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M128.build.flash_ld=eagle.flash.1m128.ld +sonoff.menu.eesz.1M128.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M128.upload.maximum_size=892912 +sonoff.menu.eesz.1M128.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M128.build.spiffs_start=0xDB000 +sonoff.menu.eesz.1M128.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M128.build.spiffs_blocksize=4096 +sonoff.menu.eesz.1M144=1MB (FS:144KB OTA:~430KB) +sonoff.menu.eesz.1M144.build.flash_size=1M +sonoff.menu.eesz.1M144.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M144.build.flash_ld=eagle.flash.1m144.ld +sonoff.menu.eesz.1M144.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M144.upload.maximum_size=876528 +sonoff.menu.eesz.1M144.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M144.build.spiffs_start=0xD7000 +sonoff.menu.eesz.1M144.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M144.build.spiffs_blocksize=4096 +sonoff.menu.eesz.1M160=1MB (FS:160KB OTA:~422KB) +sonoff.menu.eesz.1M160.build.flash_size=1M +sonoff.menu.eesz.1M160.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M160.build.flash_ld=eagle.flash.1m160.ld +sonoff.menu.eesz.1M160.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M160.upload.maximum_size=860144 +sonoff.menu.eesz.1M160.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M160.build.spiffs_start=0xD3000 +sonoff.menu.eesz.1M160.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M160.build.spiffs_blocksize=4096 +sonoff.menu.eesz.1M192=1MB (FS:192KB OTA:~406KB) +sonoff.menu.eesz.1M192.build.flash_size=1M +sonoff.menu.eesz.1M192.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M192.build.flash_ld=eagle.flash.1m192.ld +sonoff.menu.eesz.1M192.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M192.upload.maximum_size=827376 +sonoff.menu.eesz.1M192.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M192.build.spiffs_start=0xCB000 +sonoff.menu.eesz.1M192.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M192.build.spiffs_blocksize=4096 +sonoff.menu.eesz.1M256=1MB (FS:256KB OTA:~374KB) +sonoff.menu.eesz.1M256.build.flash_size=1M +sonoff.menu.eesz.1M256.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M256.build.flash_ld=eagle.flash.1m256.ld +sonoff.menu.eesz.1M256.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M256.upload.maximum_size=761840 +sonoff.menu.eesz.1M256.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M256.build.spiffs_start=0xBB000 +sonoff.menu.eesz.1M256.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M256.build.spiffs_blocksize=4096 +sonoff.menu.eesz.1M512=1MB (FS:512KB OTA:~246KB) +sonoff.menu.eesz.1M512.build.flash_size=1M +sonoff.menu.eesz.1M512.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M512.build.flash_ld=eagle.flash.1m512.ld +sonoff.menu.eesz.1M512.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M512.upload.maximum_size=499696 +sonoff.menu.eesz.1M512.build.rfcal_addr=0xFC000 +sonoff.menu.eesz.1M512.build.spiffs_start=0x7B000 +sonoff.menu.eesz.1M512.build.spiffs_end=0xFB000 +sonoff.menu.eesz.1M512.build.spiffs_blocksize=8192 +sonoff.menu.eesz.1M=1MB (FS:none OTA:~502KB) +sonoff.menu.eesz.1M.build.flash_size=1M +sonoff.menu.eesz.1M.build.flash_size_bytes=0x100000 +sonoff.menu.eesz.1M.build.flash_ld=eagle.flash.1m.ld +sonoff.menu.eesz.1M.build.spiffs_pagesize=256 +sonoff.menu.eesz.1M.upload.maximum_size=1023984 +sonoff.menu.eesz.1M.build.rfcal_addr=0xFC000 +sonoff.menu.ip.lm2f=v2 Lower Memory +sonoff.menu.ip.lm2f.build.lwip_include=lwip2/include +sonoff.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat +sonoff.menu.ip.lm2f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 +sonoff.menu.ip.hb2f=v2 Higher Bandwidth +sonoff.menu.ip.hb2f.build.lwip_include=lwip2/include +sonoff.menu.ip.hb2f.build.lwip_lib=-llwip2-1460-feat +sonoff.menu.ip.hb2f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 +sonoff.menu.ip.lm2n=v2 Lower Memory (no features) +sonoff.menu.ip.lm2n.build.lwip_include=lwip2/include +sonoff.menu.ip.lm2n.build.lwip_lib=-llwip2-536 +sonoff.menu.ip.lm2n.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=0 -DLWIP_IPV6=0 +sonoff.menu.ip.hb2n=v2 Higher Bandwidth (no features) +sonoff.menu.ip.hb2n.build.lwip_include=lwip2/include +sonoff.menu.ip.hb2n.build.lwip_lib=-llwip2-1460 +sonoff.menu.ip.hb2n.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=0 -DLWIP_IPV6=0 +sonoff.menu.ip.lm6f=v2 IPv6 Lower Memory +sonoff.menu.ip.lm6f.build.lwip_include=lwip2/include +sonoff.menu.ip.lm6f.build.lwip_lib=-llwip6-536-feat +sonoff.menu.ip.lm6f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=1 +sonoff.menu.ip.hb6f=v2 IPv6 Higher Bandwidth +sonoff.menu.ip.hb6f.build.lwip_include=lwip2/include +sonoff.menu.ip.hb6f.build.lwip_lib=-llwip6-1460-feat +sonoff.menu.ip.hb6f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=1 -DLWIP_IPV6=1 +sonoff.menu.ip.hb1=v1.4 Higher Bandwidth +sonoff.menu.ip.hb1.build.lwip_lib=-llwip_gcc +sonoff.menu.ip.hb1.build.lwip_flags=-DLWIP_OPEN_SRC +sonoff.menu.ip.src=v1.4 Compile from source +sonoff.menu.ip.src.build.lwip_lib=-llwip_src +sonoff.menu.ip.src.build.lwip_flags=-DLWIP_OPEN_SRC +sonoff.menu.ip.src.recipe.hooks.sketch.prebuild.1.pattern=make -C "{runtime.platform.path}/tools/sdk/lwip/src" install TOOLS_PATH="{runtime.tools.xtensa-lx106-elf-gcc.path}/bin/xtensa-lx106-elf-" +sonoff.menu.dbg.Disabled=Disabled +sonoff.menu.dbg.Disabled.build.debug_port= +sonoff.menu.dbg.Serial=Serial +sonoff.menu.dbg.Serial.build.debug_port=-DDEBUG_ESP_PORT=Serial +sonoff.menu.dbg.Serial1=Serial1 +sonoff.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1 +sonoff.menu.lvl.None____=None +sonoff.menu.lvl.None____.build.debug_level= +sonoff.menu.lvl.SSL=SSL +sonoff.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL +sonoff.menu.lvl.TLS_MEM=TLS_MEM +sonoff.menu.lvl.TLS_MEM.build.debug_level= -DDEBUG_ESP_TLS_MEM +sonoff.menu.lvl.HTTP_CLIENT=HTTP_CLIENT +sonoff.menu.lvl.HTTP_CLIENT.build.debug_level= -DDEBUG_ESP_HTTP_CLIENT +sonoff.menu.lvl.HTTP_SERVER=HTTP_SERVER +sonoff.menu.lvl.HTTP_SERVER.build.debug_level= -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.SSLTLS_MEM=SSL+TLS_MEM +sonoff.menu.lvl.SSLTLS_MEM.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM +sonoff.menu.lvl.SSLHTTP_CLIENT=SSL+HTTP_CLIENT +sonoff.menu.lvl.SSLHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_CLIENT +sonoff.menu.lvl.SSLHTTP_SERVER=SSL+HTTP_SERVER +sonoff.menu.lvl.SSLHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.TLS_MEMHTTP_CLIENT=TLS_MEM+HTTP_CLIENT +sonoff.menu.lvl.TLS_MEMHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT +sonoff.menu.lvl.TLS_MEMHTTP_SERVER=TLS_MEM+HTTP_SERVER +sonoff.menu.lvl.TLS_MEMHTTP_SERVER.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.HTTP_CLIENTHTTP_SERVER=HTTP_CLIENT+HTTP_SERVER +sonoff.menu.lvl.HTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.SSLTLS_MEMHTTP_CLIENT=SSL+TLS_MEM+HTTP_CLIENT +sonoff.menu.lvl.SSLTLS_MEMHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT +sonoff.menu.lvl.SSLTLS_MEMHTTP_SERVER=SSL+TLS_MEM+HTTP_SERVER +sonoff.menu.lvl.SSLTLS_MEMHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.SSLHTTP_CLIENTHTTP_SERVER=SSL+HTTP_CLIENT+HTTP_SERVER +sonoff.menu.lvl.SSLHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.TLS_MEMHTTP_CLIENTHTTP_SERVER=TLS_MEM+HTTP_CLIENT+HTTP_SERVER +sonoff.menu.lvl.TLS_MEMHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVER=SSL+TLS_MEM+HTTP_CLIENT+HTTP_SERVER +sonoff.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +sonoff.menu.lvl.CORE=CORE +sonoff.menu.lvl.CORE.build.debug_level= -DDEBUG_ESP_CORE +sonoff.menu.lvl.WIFI=WIFI +sonoff.menu.lvl.WIFI.build.debug_level= -DDEBUG_ESP_WIFI +sonoff.menu.lvl.HTTP_UPDATE=HTTP_UPDATE +sonoff.menu.lvl.HTTP_UPDATE.build.debug_level= -DDEBUG_ESP_HTTP_UPDATE +sonoff.menu.lvl.UPDATER=UPDATER +sonoff.menu.lvl.UPDATER.build.debug_level= -DDEBUG_ESP_UPDATER +sonoff.menu.lvl.OTA=OTA +sonoff.menu.lvl.OTA.build.debug_level= -DDEBUG_ESP_OTA +sonoff.menu.lvl.OOM=OOM +sonoff.menu.lvl.OOM.build.debug_level= -DDEBUG_ESP_OOM +sonoff.menu.lvl.MDNS=MDNS +sonoff.menu.lvl.MDNS.build.debug_level= -DDEBUG_ESP_MDNS +sonoff.menu.lvl.COREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS=CORE+WIFI+HTTP_UPDATE+UPDATER+OTA+OOM+MDNS +sonoff.menu.lvl.COREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS.build.debug_level= -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM -DDEBUG_ESP_MDNS +sonoff.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS=SSL+TLS_MEM+HTTP_CLIENT+HTTP_SERVER+CORE+WIFI+HTTP_UPDATE+UPDATER+OTA+OOM+MDNS +sonoff.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM -DDEBUG_ESP_MDNS +sonoff.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG +sonoff.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG +sonoff.menu.wipe.none=Only Sketch +sonoff.menu.wipe.none.upload.erase_cmd= +sonoff.menu.wipe.sdk=Sketch + WiFi Settings +sonoff.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 +sonoff.menu.wipe.all=All Flash Contents +sonoff.menu.wipe.all.upload.erase_cmd=erase_flash +sonoff.menu.baud.115200=115200 +sonoff.menu.baud.115200.upload.speed=115200 +sonoff.menu.baud.57600=57600 +sonoff.menu.baud.57600.upload.speed=57600 +sonoff.menu.baud.230400.linux=230400 +sonoff.menu.baud.230400.macosx=230400 +sonoff.menu.baud.230400.upload.speed=230400 +sonoff.menu.baud.256000.windows=256000 +sonoff.menu.baud.256000.upload.speed=256000 +sonoff.menu.baud.460800.linux=460800 +sonoff.menu.baud.460800.macosx=460800 +sonoff.menu.baud.460800.upload.speed=460800 +sonoff.menu.baud.512000.windows=512000 +sonoff.menu.baud.512000.upload.speed=512000 +sonoff.menu.baud.921600=921600 +sonoff.menu.baud.921600.upload.speed=921600 +sonoff.menu.baud.3000000=3000000 +sonoff.menu.baud.3000000.upload.speed=3000000 + +############################################################## +espmxdevkit.name=DOIT ESP-Mx DevKit (ESP8285) +espmxdevkit.build.board=ESP8266_ESP01 +espmxdevkit.build.led=-DLED_BUILTIN=16 +espmxdevkit.build.variant=esp8285 +espmxdevkit.upload.tool=esptool +espmxdevkit.upload.maximum_data_size=81920 +espmxdevkit.upload.wait_for_upload_port=true +espmxdevkit.upload.erase_cmd= +espmxdevkit.serial.disableDTR=true +espmxdevkit.serial.disableRTS=true +espmxdevkit.build.mcu=esp8266 +espmxdevkit.build.core=esp8266 +espmxdevkit.build.spiffs_pagesize=256 +espmxdevkit.build.debug_port= +espmxdevkit.build.debug_level= +espmxdevkit.menu.xtal.80=80 MHz +espmxdevkit.menu.xtal.80.build.f_cpu=80000000L +espmxdevkit.menu.xtal.160=160 MHz +espmxdevkit.menu.xtal.160.build.f_cpu=160000000L +espmxdevkit.menu.vt.flash=Flash +espmxdevkit.menu.vt.flash.build.vtable_flags=-DVTABLES_IN_FLASH +espmxdevkit.menu.vt.heap=Heap +espmxdevkit.menu.vt.heap.build.vtable_flags=-DVTABLES_IN_DRAM +espmxdevkit.menu.vt.iram=IRAM +espmxdevkit.menu.vt.iram.build.vtable_flags=-DVTABLES_IN_IRAM +espmxdevkit.menu.exception.legacy=Legacy (new can return nullptr) +espmxdevkit.menu.exception.legacy.build.exception_flags=-fno-exceptions +espmxdevkit.menu.exception.legacy.build.stdcpp_lib=-lstdc++ +espmxdevkit.menu.exception.disabled=Disabled (new can abort) +espmxdevkit.menu.exception.disabled.build.exception_flags=-fno-exceptions -DNEW_OOM_ABORT +espmxdevkit.menu.exception.disabled.build.stdcpp_lib=-lstdc++ +espmxdevkit.menu.exception.enabled=Enabled +espmxdevkit.menu.exception.enabled.build.exception_flags=-fexceptions +espmxdevkit.menu.exception.enabled.build.stdcpp_lib=-lstdc++-exc +espmxdevkit.menu.ssl.all=All SSL ciphers (most compatible) +espmxdevkit.menu.ssl.all.build.sslflags= +espmxdevkit.menu.ssl.basic=Basic SSL ciphers (lower ROM use) +espmxdevkit.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC +espmxdevkit.upload.resetmethod=--before default_reset --after hard_reset +espmxdevkit.build.flash_mode=dout +espmxdevkit.build.flash_flags=-DFLASHMODE_DOUT +espmxdevkit.build.flash_freq=40 +espmxdevkit.menu.eesz.1M64=1MB (FS:64KB OTA:~470KB) +espmxdevkit.menu.eesz.1M64.build.flash_size=1M +espmxdevkit.menu.eesz.1M64.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M64.build.flash_ld=eagle.flash.1m64.ld +espmxdevkit.menu.eesz.1M64.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M64.upload.maximum_size=958448 +espmxdevkit.menu.eesz.1M64.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M64.build.spiffs_start=0xEB000 +espmxdevkit.menu.eesz.1M64.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M64.build.spiffs_blocksize=4096 +espmxdevkit.menu.eesz.1M128=1MB (FS:128KB OTA:~438KB) +espmxdevkit.menu.eesz.1M128.build.flash_size=1M +espmxdevkit.menu.eesz.1M128.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M128.build.flash_ld=eagle.flash.1m128.ld +espmxdevkit.menu.eesz.1M128.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M128.upload.maximum_size=892912 +espmxdevkit.menu.eesz.1M128.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M128.build.spiffs_start=0xDB000 +espmxdevkit.menu.eesz.1M128.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M128.build.spiffs_blocksize=4096 +espmxdevkit.menu.eesz.1M144=1MB (FS:144KB OTA:~430KB) +espmxdevkit.menu.eesz.1M144.build.flash_size=1M +espmxdevkit.menu.eesz.1M144.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M144.build.flash_ld=eagle.flash.1m144.ld +espmxdevkit.menu.eesz.1M144.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M144.upload.maximum_size=876528 +espmxdevkit.menu.eesz.1M144.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M144.build.spiffs_start=0xD7000 +espmxdevkit.menu.eesz.1M144.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M144.build.spiffs_blocksize=4096 +espmxdevkit.menu.eesz.1M160=1MB (FS:160KB OTA:~422KB) +espmxdevkit.menu.eesz.1M160.build.flash_size=1M +espmxdevkit.menu.eesz.1M160.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M160.build.flash_ld=eagle.flash.1m160.ld +espmxdevkit.menu.eesz.1M160.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M160.upload.maximum_size=860144 +espmxdevkit.menu.eesz.1M160.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M160.build.spiffs_start=0xD3000 +espmxdevkit.menu.eesz.1M160.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M160.build.spiffs_blocksize=4096 +espmxdevkit.menu.eesz.1M192=1MB (FS:192KB OTA:~406KB) +espmxdevkit.menu.eesz.1M192.build.flash_size=1M +espmxdevkit.menu.eesz.1M192.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M192.build.flash_ld=eagle.flash.1m192.ld +espmxdevkit.menu.eesz.1M192.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M192.upload.maximum_size=827376 +espmxdevkit.menu.eesz.1M192.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M192.build.spiffs_start=0xCB000 +espmxdevkit.menu.eesz.1M192.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M192.build.spiffs_blocksize=4096 +espmxdevkit.menu.eesz.1M256=1MB (FS:256KB OTA:~374KB) +espmxdevkit.menu.eesz.1M256.build.flash_size=1M +espmxdevkit.menu.eesz.1M256.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M256.build.flash_ld=eagle.flash.1m256.ld +espmxdevkit.menu.eesz.1M256.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M256.upload.maximum_size=761840 +espmxdevkit.menu.eesz.1M256.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M256.build.spiffs_start=0xBB000 +espmxdevkit.menu.eesz.1M256.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M256.build.spiffs_blocksize=4096 +espmxdevkit.menu.eesz.1M512=1MB (FS:512KB OTA:~246KB) +espmxdevkit.menu.eesz.1M512.build.flash_size=1M +espmxdevkit.menu.eesz.1M512.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M512.build.flash_ld=eagle.flash.1m512.ld +espmxdevkit.menu.eesz.1M512.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M512.upload.maximum_size=499696 +espmxdevkit.menu.eesz.1M512.build.rfcal_addr=0xFC000 +espmxdevkit.menu.eesz.1M512.build.spiffs_start=0x7B000 +espmxdevkit.menu.eesz.1M512.build.spiffs_end=0xFB000 +espmxdevkit.menu.eesz.1M512.build.spiffs_blocksize=8192 +espmxdevkit.menu.eesz.1M=1MB (FS:none OTA:~502KB) +espmxdevkit.menu.eesz.1M.build.flash_size=1M +espmxdevkit.menu.eesz.1M.build.flash_size_bytes=0x100000 +espmxdevkit.menu.eesz.1M.build.flash_ld=eagle.flash.1m.ld +espmxdevkit.menu.eesz.1M.build.spiffs_pagesize=256 +espmxdevkit.menu.eesz.1M.upload.maximum_size=1023984 +espmxdevkit.menu.eesz.1M.build.rfcal_addr=0xFC000 +espmxdevkit.menu.ip.lm2f=v2 Lower Memory +espmxdevkit.menu.ip.lm2f.build.lwip_include=lwip2/include +espmxdevkit.menu.ip.lm2f.build.lwip_lib=-llwip2-536-feat +espmxdevkit.menu.ip.lm2f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 +espmxdevkit.menu.ip.hb2f=v2 Higher Bandwidth +espmxdevkit.menu.ip.hb2f.build.lwip_include=lwip2/include +espmxdevkit.menu.ip.hb2f.build.lwip_lib=-llwip2-1460-feat +espmxdevkit.menu.ip.hb2f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 +espmxdevkit.menu.ip.lm2n=v2 Lower Memory (no features) +espmxdevkit.menu.ip.lm2n.build.lwip_include=lwip2/include +espmxdevkit.menu.ip.lm2n.build.lwip_lib=-llwip2-536 +espmxdevkit.menu.ip.lm2n.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=0 -DLWIP_IPV6=0 +espmxdevkit.menu.ip.hb2n=v2 Higher Bandwidth (no features) +espmxdevkit.menu.ip.hb2n.build.lwip_include=lwip2/include +espmxdevkit.menu.ip.hb2n.build.lwip_lib=-llwip2-1460 +espmxdevkit.menu.ip.hb2n.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=0 -DLWIP_IPV6=0 +espmxdevkit.menu.ip.lm6f=v2 IPv6 Lower Memory +espmxdevkit.menu.ip.lm6f.build.lwip_include=lwip2/include +espmxdevkit.menu.ip.lm6f.build.lwip_lib=-llwip6-536-feat +espmxdevkit.menu.ip.lm6f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=1 +espmxdevkit.menu.ip.hb6f=v2 IPv6 Higher Bandwidth +espmxdevkit.menu.ip.hb6f.build.lwip_include=lwip2/include +espmxdevkit.menu.ip.hb6f.build.lwip_lib=-llwip6-1460-feat +espmxdevkit.menu.ip.hb6f.build.lwip_flags=-DLWIP_OPEN_SRC -DTCP_MSS=1460 -DLWIP_FEATURES=1 -DLWIP_IPV6=1 +espmxdevkit.menu.ip.hb1=v1.4 Higher Bandwidth +espmxdevkit.menu.ip.hb1.build.lwip_lib=-llwip_gcc +espmxdevkit.menu.ip.hb1.build.lwip_flags=-DLWIP_OPEN_SRC +espmxdevkit.menu.ip.src=v1.4 Compile from source +espmxdevkit.menu.ip.src.build.lwip_lib=-llwip_src +espmxdevkit.menu.ip.src.build.lwip_flags=-DLWIP_OPEN_SRC +espmxdevkit.menu.ip.src.recipe.hooks.sketch.prebuild.1.pattern=make -C "{runtime.platform.path}/tools/sdk/lwip/src" install TOOLS_PATH="{runtime.tools.xtensa-lx106-elf-gcc.path}/bin/xtensa-lx106-elf-" +espmxdevkit.menu.dbg.Disabled=Disabled +espmxdevkit.menu.dbg.Disabled.build.debug_port= +espmxdevkit.menu.dbg.Serial=Serial +espmxdevkit.menu.dbg.Serial.build.debug_port=-DDEBUG_ESP_PORT=Serial +espmxdevkit.menu.dbg.Serial1=Serial1 +espmxdevkit.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1 +espmxdevkit.menu.lvl.None____=None +espmxdevkit.menu.lvl.None____.build.debug_level= +espmxdevkit.menu.lvl.SSL=SSL +espmxdevkit.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL +espmxdevkit.menu.lvl.TLS_MEM=TLS_MEM +espmxdevkit.menu.lvl.TLS_MEM.build.debug_level= -DDEBUG_ESP_TLS_MEM +espmxdevkit.menu.lvl.HTTP_CLIENT=HTTP_CLIENT +espmxdevkit.menu.lvl.HTTP_CLIENT.build.debug_level= -DDEBUG_ESP_HTTP_CLIENT +espmxdevkit.menu.lvl.HTTP_SERVER=HTTP_SERVER +espmxdevkit.menu.lvl.HTTP_SERVER.build.debug_level= -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.SSLTLS_MEM=SSL+TLS_MEM +espmxdevkit.menu.lvl.SSLTLS_MEM.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM +espmxdevkit.menu.lvl.SSLHTTP_CLIENT=SSL+HTTP_CLIENT +espmxdevkit.menu.lvl.SSLHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_CLIENT +espmxdevkit.menu.lvl.SSLHTTP_SERVER=SSL+HTTP_SERVER +espmxdevkit.menu.lvl.SSLHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.TLS_MEMHTTP_CLIENT=TLS_MEM+HTTP_CLIENT +espmxdevkit.menu.lvl.TLS_MEMHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT +espmxdevkit.menu.lvl.TLS_MEMHTTP_SERVER=TLS_MEM+HTTP_SERVER +espmxdevkit.menu.lvl.TLS_MEMHTTP_SERVER.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.HTTP_CLIENTHTTP_SERVER=HTTP_CLIENT+HTTP_SERVER +espmxdevkit.menu.lvl.HTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_CLIENT=SSL+TLS_MEM+HTTP_CLIENT +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_CLIENT.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_SERVER=SSL+TLS_MEM+HTTP_SERVER +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.SSLHTTP_CLIENTHTTP_SERVER=SSL+HTTP_CLIENT+HTTP_SERVER +espmxdevkit.menu.lvl.SSLHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.TLS_MEMHTTP_CLIENTHTTP_SERVER=TLS_MEM+HTTP_CLIENT+HTTP_SERVER +espmxdevkit.menu.lvl.TLS_MEMHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVER=SSL+TLS_MEM+HTTP_CLIENT+HTTP_SERVER +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVER.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER +espmxdevkit.menu.lvl.CORE=CORE +espmxdevkit.menu.lvl.CORE.build.debug_level= -DDEBUG_ESP_CORE +espmxdevkit.menu.lvl.WIFI=WIFI +espmxdevkit.menu.lvl.WIFI.build.debug_level= -DDEBUG_ESP_WIFI +espmxdevkit.menu.lvl.HTTP_UPDATE=HTTP_UPDATE +espmxdevkit.menu.lvl.HTTP_UPDATE.build.debug_level= -DDEBUG_ESP_HTTP_UPDATE +espmxdevkit.menu.lvl.UPDATER=UPDATER +espmxdevkit.menu.lvl.UPDATER.build.debug_level= -DDEBUG_ESP_UPDATER +espmxdevkit.menu.lvl.OTA=OTA +espmxdevkit.menu.lvl.OTA.build.debug_level= -DDEBUG_ESP_OTA +espmxdevkit.menu.lvl.OOM=OOM +espmxdevkit.menu.lvl.OOM.build.debug_level= -DDEBUG_ESP_OOM +espmxdevkit.menu.lvl.MDNS=MDNS +espmxdevkit.menu.lvl.MDNS.build.debug_level= -DDEBUG_ESP_MDNS +espmxdevkit.menu.lvl.COREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS=CORE+WIFI+HTTP_UPDATE+UPDATER+OTA+OOM+MDNS +espmxdevkit.menu.lvl.COREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS.build.debug_level= -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM -DDEBUG_ESP_MDNS +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS=SSL+TLS_MEM+HTTP_CLIENT+HTTP_SERVER+CORE+WIFI+HTTP_UPDATE+UPDATER+OTA+OOM+MDNS +espmxdevkit.menu.lvl.SSLTLS_MEMHTTP_CLIENTHTTP_SERVERCOREWIFIHTTP_UPDATEUPDATEROTAOOMMDNS.build.debug_level= -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM -DDEBUG_ESP_MDNS +espmxdevkit.menu.lvl.NoAssert-NDEBUG=NoAssert-NDEBUG +espmxdevkit.menu.lvl.NoAssert-NDEBUG.build.debug_level= -DNDEBUG +espmxdevkit.menu.wipe.none=Only Sketch +espmxdevkit.menu.wipe.none.upload.erase_cmd= +espmxdevkit.menu.wipe.sdk=Sketch + WiFi Settings +espmxdevkit.menu.wipe.sdk.upload.erase_cmd=erase_region "{build.rfcal_addr}" 0x4000 +espmxdevkit.menu.wipe.all=All Flash Contents +espmxdevkit.menu.wipe.all.upload.erase_cmd=erase_flash +espmxdevkit.menu.baud.115200=115200 +espmxdevkit.menu.baud.115200.upload.speed=115200 +espmxdevkit.menu.baud.57600=57600 +espmxdevkit.menu.baud.57600.upload.speed=57600 +espmxdevkit.menu.baud.230400.linux=230400 +espmxdevkit.menu.baud.230400.macosx=230400 +espmxdevkit.menu.baud.230400.upload.speed=230400 +espmxdevkit.menu.baud.256000.windows=256000 +espmxdevkit.menu.baud.256000.upload.speed=256000 +espmxdevkit.menu.baud.460800.linux=460800 +espmxdevkit.menu.baud.460800.macosx=460800 +espmxdevkit.menu.baud.460800.upload.speed=460800 +espmxdevkit.menu.baud.512000.windows=512000 +espmxdevkit.menu.baud.512000.upload.speed=512000 +espmxdevkit.menu.baud.921600=921600 +espmxdevkit.menu.baud.921600.upload.speed=921600 +espmxdevkit.menu.baud.3000000=3000000 +espmxdevkit.menu.baud.3000000.upload.speed=3000000 + diff --git a/arduino/version pre-2.6.0/platform.txt b/arduino/version 2.6.1/platform.txt similarity index 94% rename from arduino/version pre-2.6.0/platform.txt rename to arduino/version 2.6.1/platform.txt index aed8672f9..76c8aba60 100644 --- a/arduino/version pre-2.6.0/platform.txt +++ b/arduino/version 2.6.1/platform.txt @@ -5,8 +5,8 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification -name=ESP8266 Boards (2.5.2-196-g45d71ae4) -version=2.5.2-196-g45d71ae4 +name=ESP8266 Boards (2.6.1) +version=2.6.1 # These will be removed by the packager script when doing a JSON release @@ -37,10 +37,15 @@ build.exception_flags=-fno-exceptions build.stdcpp_lib=-lstdc++ build.stdcpp_level=-std=gnu++11 -# build.float=-u _printf_float -u _scanf_float +#build.float=-u _printf_float -u _scanf_float build.float= build.led= -build.sdk=NONOSDK22y + +# default SDK for all boards +# (generic board overrides this variable) +build.sdk=NONOSDK22x_190703 +#build.sdk=NONOSDK22x_191024 +#build.sdk=NONOSDK22x_191105 compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/ compiler.sdk.path={runtime.platform.path}/tools/sdk @@ -88,7 +93,7 @@ compiler.elf2hex.extra_flags= ## needs git recipe.hooks.sketch.prebuild.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h" # This is quite a working hack. This form of prebuild hook, while intuitive, is not explicitly documented. -recipe.hooks.prebuild.10.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.makecorever}" --build_path "{build.path}" --platform_path "{runtime.platform.path}" --version "unix-{version}" + ## Build the app.ld linker file recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/local.eagle.app.v6.common.ld" @@ -145,7 +150,7 @@ tools.esptool.upload.params.quiet= # First, potentially perform an erase or nothing # Next, do the binary upload # Combined in one rule because Arduino doesn't suport upload.1.pattern/upload.3.pattern -tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} --end --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" write_flash 0x0 "{build.path}/{build.project_name}.bin" --end +tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} {upload.resetmethod} "{build.path}/{build.project_name}.bin" tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" diff --git a/lib/IRremoteESP8266-2.7.0/src/IRtext.cpp b/lib/IRremoteESP8266-2.7.0/src/IRtext.cpp deleted file mode 100644 index 7f9c57e1e..000000000 --- a/lib/IRremoteESP8266-2.7.0/src/IRtext.cpp +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2019 - David Conran (@crankyoldgit) - -#ifndef UNIT_TEST -#include -#endif // UNIT_TEST -#include "IRremoteESP8266.h" -#include "i18n.h" - -// Common - -#ifdef USE_IR_REMOTE_FULL // full IR protocols - -String kUnknownStr = D_STR_UNKNOWN; -String kProtocolStr = D_STR_PROTOCOL; -String kPowerStr = D_STR_POWER; -String kOnStr = D_STR_ON; -String kOffStr = D_STR_OFF; -String kModeStr = D_STR_MODE; -String kToggleStr = D_STR_TOGGLE; -String kTurboStr = D_STR_TURBO; -String kSuperStr = D_STR_SUPER; -String kSleepStr = D_STR_SLEEP; -String kLightStr = D_STR_LIGHT; -String kPowerfulStr = D_STR_POWERFUL; -String kQuietStr = D_STR_QUIET; -String kEconoStr = D_STR_ECONO; -String kSwingStr = D_STR_SWING; -String kSwingHStr = D_STR_SWINGH; -String kSwingVStr = D_STR_SWINGV; -String kBeepStr = D_STR_BEEP; -String kZoneFollowStr = D_STR_ZONEFOLLOW; -String kFixedStr = D_STR_FIXED; -String kMouldStr = D_STR_MOULD; -String kCleanStr = D_STR_CLEAN; -String kPurifyStr = D_STR_PURIFY; -String kTimerStr = D_STR_TIMER; -String kOnTimerStr = D_STR_ONTIMER; -String kOffTimerStr = D_STR_OFFTIMER; -String kClockStr = D_STR_CLOCK; -String kCommandStr = D_STR_COMMAND; -String kXFanStr = D_STR_XFAN; -String kHealthStr = D_STR_HEALTH; -String kModelStr = D_STR_MODEL; -String kTempStr = D_STR_TEMP; -String kIFeelStr = D_STR_IFEEL; -String kHumidStr = D_STR_HUMID; -String kSaveStr = D_STR_SAVE; -String kEyeStr = D_STR_EYE; -String kFollowStr = D_STR_FOLLOW; -String kIonStr = D_STR_ION; -String kFreshStr = D_STR_FRESH; -String kHoldStr = D_STR_HOLD; -String kButtonStr = D_STR_BUTTON; -String k8CHeatStr = D_STR_8C_HEAT; -String kNightStr = D_STR_NIGHT; -String kSilentStr = D_STR_SILENT; -String kFilterStr = D_STR_FILTER; -String k3DStr = D_STR_3D; -String kCelsiusStr = D_STR_CELSIUS; -String kTempUpStr = D_STR_TEMPUP; -String kTempDownStr = D_STR_TEMPDOWN; -String kStartStr = D_STR_START; -String kStopStr = D_STR_STOP; -String kMoveStr = D_STR_MOVE; -String kSetStr = D_STR_SET; -String kCancelStr = D_STR_CANCEL; -String kUpStr = D_STR_UP; -String kDownStr = D_STR_DOWN; -String kChangeStr = D_STR_CHANGE; -String kComfortStr = D_STR_COMFORT; -String kSensorStr = D_STR_SENSOR; -String kWeeklyTimerStr = D_STR_WEEKLYTIMER; -String kWifiStr = D_STR_WIFI; -String kLastStr = D_STR_LAST; -String kFastStr = D_STR_FAST; -String kSlowStr = D_STR_SLOW; -String kAirFlowStr = D_STR_AIRFLOW; -String kStepStr = D_STR_STEP; -String kNAStr = D_STR_NA; -String kOutsideStr = D_STR_OUTSIDE; -String kLoudStr = D_STR_LOUD; -String kLowerStr = D_STR_LOWER; -String kUpperStr = D_STR_UPPER; -String kBreezeStr = D_STR_BREEZE; -String kCirculateStr = D_STR_CIRCULATE; -String kCeilingStr = D_STR_CEILING; -String kWallStr = D_STR_WALL; -String kRoomStr = D_STR_ROOM; -String k6thSenseStr = D_STR_6THSENSE; - -String kAutoStr = D_STR_AUTO; -String kAutomaticStr = D_STR_AUTOMATIC; -String kManualStr = D_STR_MANUAL; -String kCoolStr = D_STR_COOL; -String kHeatStr = D_STR_HEAT; -String kFanStr = D_STR_FAN; -String kDryStr = D_STR_DRY; -String kFanOnlyStr = D_STR_FANONLY; - -String kMaxStr = D_STR_MAX; -String kMaximumStr = D_STR_MAXIMUM; -String kMinStr = D_STR_MIN; -String kMinimumStr = D_STR_MINIMUM; -String kMedStr = D_STR_MED; -String kMediumStr = D_STR_MEDIUM; - -String kHighestStr = D_STR_HIGHEST; -String kHighStr = D_STR_HIGH; -String kHiStr = D_STR_HI; -String kMidStr = D_STR_MID; -String kMiddleStr = D_STR_MIDDLE; -String kLowStr = D_STR_LOW; -String kLoStr = D_STR_LO; -String kLowestStr = D_STR_LOWEST; -String kMaxRightStr = D_STR_MAXRIGHT; -String kRightMaxStr = D_STR_RIGHTMAX_NOSPACE; -String kRightStr = D_STR_RIGHT; -String kLeftStr = D_STR_LEFT; -String kMaxLeftStr = D_STR_MAXLEFT; -String kLeftMaxStr = D_STR_LEFTMAX_NOSPACE; -String kWideStr = D_STR_WIDE; -String kCentreStr = D_STR_CENTRE; -String kTopStr = D_STR_TOP; -String kBottomStr = D_STR_BOTTOM; - -String kSpaceLBraceStr = D_STR_SPACELBRACE; -String kCommaSpaceStr = D_STR_COMMASPACE; -String kColonSpaceStr = D_STR_COLONSPACE; - -// IRutils -// - Time -char kTimeSep = D_CHR_TIME_SEP; -String kDayStr = D_STR_DAY; -String kDaysStr = D_STR_DAYS; -String kHourStr = D_STR_HOUR; -String kHoursStr = D_STR_HOURS; -String kMinuteStr = D_STR_MINUTE; -String kMinutesStr = D_STR_MINUTES; -String kSecondStr = D_STR_SECOND; -String kSecondsStr = D_STR_SECONDS; -String kNowStr = D_STR_NOW; -String kThreeLetterDayOfWeekStr = D_STR_THREELETTERDAYS; - -String kYesStr = D_STR_YES; -String kNoStr = D_STR_NO; -String kTrueStr = D_STR_TRUE; -String kFalseStr = D_STR_FALSE; - -String kRepeatStr = D_STR_REPEAT; -String kCodeStr = D_STR_CODE; -String kBitsStr = D_STR_BITS; - -#endif // USE_IR_REMOTE_FULL // full IR protocols \ No newline at end of file diff --git a/lib/IRremoteESP8266-2.7.0/src/IRtext.h b/lib/IRremoteESP8266-2.7.0/src/IRtext.h deleted file mode 100644 index 526290c1c..000000000 --- a/lib/IRremoteESP8266-2.7.0/src/IRtext.h +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2019 - David Conran (@crankyoldgit) -// This header file is to be included in files **other than** 'IRtext.cpp'. -// -// WARNING: Do not edit this file! This file is automatically generated by -// 'tools/generate_irtext_h.sh'. - -#ifndef IRTEXT_H_ -#define IRTEXT_H_ - -#include "i18n.h" - -// Constant text to be shared across all object files. -// This means there is only one copy of the character/string/text etc. - -extern const char kTimeSep; -extern const String k3DStr; -extern const String k6thSenseStr; -extern const String k8CHeatStr; -extern const String kAirFlowStr; -extern const String kAutomaticStr; -extern const String kAutoStr; -extern const String kBeepStr; -extern const String kBitsStr; -extern const String kBottomStr; -extern const String kBreezeStr; -extern const String kButtonStr; -extern const String kCancelStr; -extern const String kCeilingStr; -extern const String kCelsiusStr; -extern const String kCentreStr; -extern const String kChangeStr; -extern const String kCirculateStr; -extern const String kCleanStr; -extern const String kClockStr; -extern const String kCodeStr; -extern const String kColonSpaceStr; -extern const String kComfortStr; -extern const String kCommandStr; -extern const String kCommaSpaceStr; -extern const String kCoolStr; -extern const String kDaysStr; -extern const String kDayStr; -extern const String kDownStr; -extern const String kDryStr; -extern const String kEconoStr; -extern const String kEyeStr; -extern const String kFalseStr; -extern const String kFanOnlyStr; -extern const String kFanStr; -extern const String kFastStr; -extern const String kFilterStr; -extern const String kFixedStr; -extern const String kFollowStr; -extern const String kFreshStr; -extern const String kHealthStr; -extern const String kHeatStr; -extern const String kHighestStr; -extern const String kHighStr; -extern const String kHiStr; -extern const String kHoldStr; -extern const String kHoursStr; -extern const String kHourStr; -extern const String kHumidStr; -extern const String kIFeelStr; -extern const String kIonStr; -extern const String kLastStr; -extern const String kLeftMaxStr; -extern const String kLeftStr; -extern const String kLightStr; -extern const String kLoStr; -extern const String kLoudStr; -extern const String kLowerStr; -extern const String kLowestStr; -extern const String kLowStr; -extern const String kManualStr; -extern const String kMaximumStr; -extern const String kMaxLeftStr; -extern const String kMaxRightStr; -extern const String kMaxStr; -extern const String kMediumStr; -extern const String kMedStr; -extern const String kMiddleStr; -extern const String kMidStr; -extern const String kMinimumStr; -extern const String kMinStr; -extern const String kMinutesStr; -extern const String kMinuteStr; -extern const String kModelStr; -extern const String kModeStr; -extern const String kMouldStr; -extern const String kMoveStr; -extern const String kNAStr; -extern const String kNightStr; -extern const String kNoStr; -extern const String kNowStr; -extern const String kOffStr; -extern const String kOffTimerStr; -extern const String kOnStr; -extern const String kOnTimerStr; -extern const String kOutsideStr; -extern const String kPowerfulStr; -extern const String kPowerStr; -extern const String kProtocolStr; -extern const String kPurifyStr; -extern const String kQuietStr; -extern const String kRepeatStr; -extern const String kRightMaxStr; -extern const String kRightStr; -extern const String kRoomStr; -extern const String kSaveStr; -extern const String kSecondsStr; -extern const String kSecondStr; -extern const String kSensorStr; -extern const String kSetStr; -extern const String kSilentStr; -extern const String kSleepStr; -extern const String kSlowStr; -extern const String kSpaceLBraceStr; -extern const String kStartStr; -extern const String kStepStr; -extern const String kStopStr; -extern const String kSuperStr; -extern const String kSwingHStr; -extern const String kSwingStr; -extern const String kSwingVStr; -extern const String kTempDownStr; -extern const String kTempStr; -extern const String kTempUpStr; -extern const String kThreeLetterDayOfWeekStr; -extern const String kTimerStr; -extern const String kToggleStr; -extern const String kTopStr; -extern const String kTrueStr; -extern const String kTurboStr; -extern const String kUnknownStr; -extern const String kUpperStr; -extern const String kUpStr; -extern const String kWallStr; -extern const String kWeeklyTimerStr; -extern const String kWideStr; -extern const String kWifiStr; -extern const String kXFanStr; -extern const String kYesStr; -extern const String kZoneFollowStr; - -#endif // IRTEXT_H_ diff --git a/lib/IRremoteESP8266-2.7.0/CPPLINT.cfg b/lib/IRremoteESP8266-2.7.1/CPPLINT.cfg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/CPPLINT.cfg rename to lib/IRremoteESP8266-2.7.1/CPPLINT.cfg diff --git a/lib/IRremoteESP8266-2.7.0/LICENSE.txt b/lib/IRremoteESP8266-2.7.1/LICENSE.txt similarity index 100% rename from lib/IRremoteESP8266-2.7.0/LICENSE.txt rename to lib/IRremoteESP8266-2.7.1/LICENSE.txt diff --git a/lib/IRremoteESP8266-2.7.0/README.md b/lib/IRremoteESP8266-2.7.1/README.md similarity index 98% rename from lib/IRremoteESP8266-2.7.0/README.md rename to lib/IRremoteESP8266-2.7.1/README.md index c609eb632..e06c8fb79 100644 --- a/lib/IRremoteESP8266-2.7.0/README.md +++ b/lib/IRremoteESP8266-2.7.1/README.md @@ -9,8 +9,8 @@ This library enables you to **send _and_ receive** infra-red signals on an [ESP8266](https://github.com/esp8266/Arduino) or an [ESP32](https://github.com/espressif/arduino-esp32) using the [Arduino framework](https://www.arduino.cc/) using common 940nm IR LEDs and common IR receiver modules. e.g. TSOP{17,22,24,36,38,44,48}* demodulators etc. -## v2.7.0 Now Available -Version 2.7.0 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. +## v2.7.1 Now Available +Version 2.7.1 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. #### Upgrading from pre-v2.0 Usage of the library has been slightly changed in v2.0. You will need to change your usage to work with v2.0 and beyond. You can read more about the changes required on our [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. diff --git a/lib/IRremoteESP8266-2.7.0/README_fr.md b/lib/IRremoteESP8266-2.7.1/README_fr.md similarity index 98% rename from lib/IRremoteESP8266-2.7.0/README_fr.md rename to lib/IRremoteESP8266-2.7.1/README_fr.md index 38581eeb0..b24d935c5 100644 --- a/lib/IRremoteESP8266-2.7.0/README_fr.md +++ b/lib/IRremoteESP8266-2.7.1/README_fr.md @@ -9,8 +9,8 @@ Cette librairie vous permetra de **recevoir et d'envoyer des signaux** infrarouge sur le protocole [ESP8266](https://github.com/esp8266/Arduino) ou sur le protocole [ESP32](https://github.com/espressif/arduino-esp32) en utilisant le [Arduino framework](https://www.arduino.cc/) qui utilise la norme 940nm IR LEDs et le module basique de reception d'onde IR. Exemple : TSOP{17,22,24,36,38,44,48}* modules etc. -## v2.7.0 disponible -Version 2.7.0 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. +## v2.7.1 disponible +Version 2.7.1 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. #### mise à jour depuis pre-v2.0 L'utilisation de la librairie à un peu changer depuis la version in v2.0. Si vous voulez l'utiliser vous devrez changer votre utilisation aussi. Vous pouvez vous renseigner sur les précondition d'utilisation ici : [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. diff --git a/lib/IRremoteESP8266-2.7.0/ReleaseNotes.md b/lib/IRremoteESP8266-2.7.1/ReleaseNotes.md similarity index 98% rename from lib/IRremoteESP8266-2.7.0/ReleaseNotes.md rename to lib/IRremoteESP8266-2.7.1/ReleaseNotes.md index cdc5ad4a2..537960ac9 100644 --- a/lib/IRremoteESP8266-2.7.0/ReleaseNotes.md +++ b/lib/IRremoteESP8266-2.7.1/ReleaseNotes.md @@ -1,5 +1,20 @@ # Release Notes +## _v2.7.1 (20191125)_ + +**[Bug Fixes]** +- Hitachi424Ac: Fix Incorrect Power Byte Values (#987) +- Coolix: Fix setPower(false) issue. (#990) + +**[Features]** +- Use `char*` instead of `String` for common text. Saves ~1-3k. (#992, #989) +- Hitachi424Ac: Add Vertical Swing ability (#986) + +**[Misc]** +- IRMQTTServer: Update HA example/discovery message. (#995) +- Move newly added common text to a better location. (#993) + + ## _v2.7.0 (20191030)_ **[Bug Fixes]** diff --git a/lib/IRremoteESP8266-2.7.0/SupportedProtocols.md b/lib/IRremoteESP8266-2.7.1/SupportedProtocols.md similarity index 99% rename from lib/IRremoteESP8266-2.7.0/SupportedProtocols.md rename to lib/IRremoteESP8266-2.7.1/SupportedProtocols.md index afd31587e..02d51093a 100644 --- a/lib/IRremoteESP8266-2.7.0/SupportedProtocols.md +++ b/lib/IRremoteESP8266-2.7.1/SupportedProtocols.md @@ -1,6 +1,6 @@ + Last generated: Mon Nov 25 11:12:06 2019 ---> # IR Protocols supported by this library | Protocol | Brand | Model | A/C Model | Detailed A/C Support | diff --git a/lib/IRremoteESP8266-2.7.0/examples/CommonAcControl/CommonAcControl.ino b/lib/IRremoteESP8266-2.7.1/examples/CommonAcControl/CommonAcControl.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/CommonAcControl/CommonAcControl.ino rename to lib/IRremoteESP8266-2.7.1/examples/CommonAcControl/CommonAcControl.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/CommonAcControl/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/CommonAcControl/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/CommonAcControl/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/CommonAcControl/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/ControlSamsungAC/ControlSamsungAC.ino b/lib/IRremoteESP8266-2.7.1/examples/ControlSamsungAC/ControlSamsungAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/ControlSamsungAC/ControlSamsungAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/ControlSamsungAC/ControlSamsungAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/ControlSamsungAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/ControlSamsungAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/ControlSamsungAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/ControlSamsungAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/DumbIRRepeater/DumbIRRepeater.ino b/lib/IRremoteESP8266-2.7.1/examples/DumbIRRepeater/DumbIRRepeater.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/DumbIRRepeater/DumbIRRepeater.ino rename to lib/IRremoteESP8266-2.7.1/examples/DumbIRRepeater/DumbIRRepeater.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/DumbIRRepeater/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/DumbIRRepeater/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/DumbIRRepeater/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/DumbIRRepeater/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRGCSendDemo/IRGCSendDemo.ino b/lib/IRremoteESP8266-2.7.1/examples/IRGCSendDemo/IRGCSendDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRGCSendDemo/IRGCSendDemo.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRGCSendDemo/IRGCSendDemo.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRGCSendDemo/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRGCSendDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRGCSendDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRGCSendDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRGCTCPServer/IRGCTCPServer.ino b/lib/IRremoteESP8266-2.7.1/examples/IRGCTCPServer/IRGCTCPServer.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRGCTCPServer/IRGCTCPServer.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRGCTCPServer/IRGCTCPServer.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRGCTCPServer/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRGCTCPServer/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRGCTCPServer/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRGCTCPServer/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/IRMQTTServer.h b/lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/IRMQTTServer.h similarity index 99% rename from lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/IRMQTTServer.h rename to lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/IRMQTTServer.h index eb5a4e37f..c9d4898b9 100644 --- a/lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/IRMQTTServer.h +++ b/lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/IRMQTTServer.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -237,7 +238,7 @@ const uint16_t kJsonAcStateMaxSize = 1024; // Bytes // ----------------- End of User Configuration Section ------------------------- // Constants -#define _MY_VERSION_ "v1.4.4" +#define _MY_VERSION_ "v1.4.5" const uint8_t kRebootTime = 15; // Seconds const uint8_t kQuickDisplayTime = 2; // Seconds diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/IRMQTTServer.ino b/lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/IRMQTTServer.ino similarity index 97% rename from lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/IRMQTTServer.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/IRMQTTServer.ino index 6373181a0..dfb1aa044 100644 --- a/lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/IRMQTTServer.ino +++ b/lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/IRMQTTServer.ino @@ -12,7 +12,7 @@ * A compatible IR RX modules SHOULD be connected to ESP * if you want to capture & decode IR nessages. e.g. GPIO14 (D5) * See 'IR_RX' in IRMQTTServer.h. - * GPIOs are configurable from the http:///gpio + * GPIOs are configurable from the http:///gpio * page. * * WARN: This is *very* advanced & complicated example code. Not for beginners. @@ -56,25 +56,25 @@ * https://github.com/tzapu/WiFiManager#how-it-works * * If you need to reset the WiFi and saved settings to go back to "First Boot", - * visit: http:///reset + * visit: http:///reset * * ## Normal Use (After initial setup) - * Enter 'http:///gpio page to configure the GPIOs + * Visit the http:///gpio page to configure the GPIOs * for the IR LED(s) and/or IR RX demodulator. * * You can send URLs like the following, with similar data type limitations as * the MQTT formating in the next section. e.g: - * http:///ir?type=7&code=E0E09966 - * http:///ir?type=4&code=0xf50&bits=12 - * http:///ir?code=C1A2E21D&repeats=8&type=19 - * http:///ir?type=31&code=40000,1,1,96,24,24,24,48,24,24,24,24,24,48,24,24,24,24,24,48,24,24,24,24,24,24,24,24,1058 - * http:///ir?type=18&code=190B8050000000E0190B8070000010f0 - * http:///ir?repeats=1&type=25&code=0000,006E,0022,0002,0155,00AA,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,0040,0015,0015,0015,0040,0015,0015,0015,0015,0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,0040,0015,0040,0015,0040,0015,0640,0155,0055,0015,0E40 + * http:///ir?type=7&code=E0E09966 + * http:///ir?type=4&code=0xf50&bits=12 + * http:///ir?code=C1A2E21D&repeats=8&type=19 + * http:///ir?type=31&code=40000,1,1,96,24,24,24,48,24,24,24,24,24,48,24,24,24,24,24,48,24,24,24,24,24,24,24,24,1058 + * http:///ir?type=18&code=190B8050000000E0190B8070000010f0 + * http:///ir?repeats=1&type=25&code=0000,006E,0022,0002,0155,00AA,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,0040,0015,0015,0015,0040,0015,0015,0015,0015,0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,0040,0015,0040,0015,0040,0015,0640,0155,0055,0015,0E40 * If you have enabled more than 1 TX GPIO, you can use the "channel" argument: - * http:///ir?channel=0&type=7&code=E0E09966 - * http:///ir?channel=1&type=7&code=E0E09966 + * http:///ir?channel=0&type=7&code=E0E09966 + * http:///ir?channel=1&type=7&code=E0E09966 * * or * @@ -241,20 +241,20 @@ * - "dry" * - "fan_only" * fan_modes: - * - "auto" - * - "min" - * - "low" - * - "medium" - * - "high" - * - "max" + * - "Auto" + * - "Min" + * - "Low" + * - "Medium" + * - "High" + * - "Max" * swing_modes: - * - "off" - * - "auto" - * - "highest" - * - "high" - * - "middle" - * - "low" - * - "lowest" + * - "Off" + * - "Auto" + * - "Highest" + * - "High" + * - "Middle" + * - "Low" + * - "Lowest" * power_command_topic: "ir_server/ac/cmnd/power" * mode_command_topic: "ir_server/ac/cmnd/mode" * mode_state_topic: "ir_server/ac/stat/mode" @@ -284,13 +284,13 @@ * first TX GPIO climate. You will need to manually configure the others. * * ### via HTTP: - * Use the "http:///aircon/set" URL and pass on + * Use the "http:///aircon/set" URL and pass on * the arguments as needed to control your device. See the `KEY_*` #defines * in the code for all the parameters. * i.e. protocol, model, power, mode, temp, fanspeed, swingv, swingh, quiet, * turbo, light, beep, econo, sleep, filter, clean, use_celsius, channel * Example: - * http:///aircon/set?channel=0&protocol=PANASONIC_AC&model=LKE&power=on&mode=auto&fanspeed=min&temp=23 + * http:///aircon/set?channel=0&protocol=PANASONIC_AC&model=LKE&power=on&mode=auto&fanspeed=min&temp=23 * * NOTE: If you don't set the channel, the first GPIO (Channel 0) is used. * @@ -353,6 +353,7 @@ #include #include #include +#include #include #include #include @@ -1181,7 +1182,7 @@ void handleAdmin(void) { #endif // MQTT_ENABLE html += htmlButton( kUrlReboot, F("Reboot"), - F("A simple reboot of the ESP8266. ie. No changes
" + F("A simple reboot of the ESP. ie. No changes
" "
")); html += htmlButton( kUrlWipe, F("Wipe Settings"), @@ -2514,6 +2515,8 @@ void sendMQTTDiscovery(const char *topic) { "\"pow_cmd_t\":\"~/" MQTT_CLIMATE_CMND "/" KEY_POWER "\"," "\"mode_cmd_t\":\"~/" MQTT_CLIMATE_CMND "/" KEY_MODE "\"," "\"mode_stat_t\":\"~/" MQTT_CLIMATE_STAT "/" KEY_MODE "\"," + // I don't know why, but the modes need to be lower case to work with + // Home Assistant & Google Home. "\"modes\":[\"off\",\"auto\",\"cool\",\"heat\",\"dry\",\"fan_only\"]," "\"temp_cmd_t\":\"~/" MQTT_CLIMATE_CMND "/" KEY_TEMP "\"," "\"temp_stat_t\":\"~/" MQTT_CLIMATE_STAT "/" KEY_TEMP "\"," @@ -2522,11 +2525,13 @@ void sendMQTTDiscovery(const char *topic) { "\"temp_step\":\"1\"," "\"fan_mode_cmd_t\":\"~/" MQTT_CLIMATE_CMND "/" KEY_FANSPEED "\"," "\"fan_mode_stat_t\":\"~/" MQTT_CLIMATE_STAT "/" KEY_FANSPEED "\"," - "\"fan_modes\":[\"auto\",\"min\",\"low\",\"medium\",\"high\",\"max\"]," + "\"fan_modes\":[\"" D_STR_AUTO "\",\"" D_STR_MIN "\",\"" D_STR_LOW "\",\"" + D_STR_MEDIUM "\",\"" D_STR_HIGH "\",\"" D_STR_MAX "\"]," "\"swing_mode_cmd_t\":\"~/" MQTT_CLIMATE_CMND "/" KEY_SWINGV "\"," "\"swing_mode_stat_t\":\"~/" MQTT_CLIMATE_STAT "/" KEY_SWINGV "\"," - "\"swing_modes\":[" - "\"off\",\"auto\",\"highest\",\"high\",\"middle\",\"low\",\"lowest\"]" + "\"swing_modes\":[\"" D_STR_OFF "\",\"" D_STR_AUTO "\",\"" D_STR_HIGHEST + "\",\"" D_STR_HIGH "\",\"" D_STR_MIDDLE "\",\"" + D_STR_LOW "\",\"" D_STR_LOWEST "\"]" "}").c_str(), true)) { mqttLog("MQTT climate discovery successful sent."); hasDiscoveryBeenSent = true; @@ -2961,16 +2966,15 @@ bool sendClimate(const String topic_prefix, const bool retain, diff = true; success &= sendInt(topic_prefix + KEY_MODEL, next.model, retain); } + String mode_str = IRac::opmodeToString(next.mode); + // I don't know why, but the modes need to be lower case to work with + // Home Assistant & Google Home. + mode_str.toLowerCase(); #if MQTT_CLIMATE_HA_MODE // Home Assistant want's these two bound together. if (prev.power != next.power || prev.mode != next.mode || forceMQTT) { - diff = true; success &= sendBool(topic_prefix + KEY_POWER, next.power, retain); - success &= sendString(topic_prefix + KEY_MODE, - (next.power ? IRac::opmodeToString(next.mode) - : F("off")), - retain); - } + if (!next.power) mode_str = F("off"); #else // MQTT_CLIMATE_HA_MODE // In non-Home Assistant mode, power and mode are not bound together. if (prev.power != next.power || forceMQTT) { @@ -2978,11 +2982,10 @@ bool sendClimate(const String topic_prefix, const bool retain, success &= sendBool(topic_prefix + KEY_POWER, next.power, retain); } if (prev.mode != next.mode || forceMQTT) { - diff = true; - success &= sendString(topic_prefix + KEY_MODE, - IRac::opmodeToString(next.mode), retain); - } #endif // MQTT_CLIMATE_HA_MODE + success &= sendString(topic_prefix + KEY_MODE, mode_str, retain); + diff = true; + } if (prev.degrees != next.degrees || forceMQTT) { diff = true; success &= sendFloat(topic_prefix + KEY_TEMP, next.degrees, retain); diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRMQTTServer/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRMQTTServer/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRServer/IRServer.ino b/lib/IRremoteESP8266-2.7.1/examples/IRServer/IRServer.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRServer/IRServer.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRServer/IRServer.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRServer/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRServer/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRServer/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRServer/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRrecvDemo/IRrecvDemo.ino b/lib/IRremoteESP8266-2.7.1/examples/IRrecvDemo/IRrecvDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRrecvDemo/IRrecvDemo.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRrecvDemo/IRrecvDemo.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRrecvDemo/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRrecvDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRrecvDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRrecvDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRrecvDump/IRrecvDump.ino b/lib/IRremoteESP8266-2.7.1/examples/IRrecvDump/IRrecvDump.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRrecvDump/IRrecvDump.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRrecvDump/IRrecvDump.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRrecvDump/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRrecvDump/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRrecvDump/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRrecvDump/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRrecvDumpV2/IRrecvDumpV2.ino b/lib/IRremoteESP8266-2.7.1/examples/IRrecvDumpV2/IRrecvDumpV2.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRrecvDumpV2/IRrecvDumpV2.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRrecvDumpV2/IRrecvDumpV2.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRrecvDumpV2/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRrecvDumpV2/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRrecvDumpV2/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRrecvDumpV2/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRsendDemo/IRsendDemo.ino b/lib/IRremoteESP8266-2.7.1/examples/IRsendDemo/IRsendDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRsendDemo/IRsendDemo.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRsendDemo/IRsendDemo.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRsendDemo/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRsendDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRsendDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRsendDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRsendProntoDemo/IRsendProntoDemo.ino b/lib/IRremoteESP8266-2.7.1/examples/IRsendProntoDemo/IRsendProntoDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRsendProntoDemo/IRsendProntoDemo.ino rename to lib/IRremoteESP8266-2.7.1/examples/IRsendProntoDemo/IRsendProntoDemo.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/IRsendProntoDemo/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/IRsendProntoDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/IRsendProntoDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/IRsendProntoDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino b/lib/IRremoteESP8266-2.7.1/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino rename to lib/IRremoteESP8266-2.7.1/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/JVCPanasonicSendDemo/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/JVCPanasonicSendDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/JVCPanasonicSendDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/JVCPanasonicSendDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/LGACSend/LGACSend.ino b/lib/IRremoteESP8266-2.7.1/examples/LGACSend/LGACSend.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/LGACSend/LGACSend.ino rename to lib/IRremoteESP8266-2.7.1/examples/LGACSend/LGACSend.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/LGACSend/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/LGACSend/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/LGACSend/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/LGACSend/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/SmartIRRepeater/SmartIRRepeater.ino b/lib/IRremoteESP8266-2.7.1/examples/SmartIRRepeater/SmartIRRepeater.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/SmartIRRepeater/SmartIRRepeater.ino rename to lib/IRremoteESP8266-2.7.1/examples/SmartIRRepeater/SmartIRRepeater.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/SmartIRRepeater/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/SmartIRRepeater/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/SmartIRRepeater/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/SmartIRRepeater/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnArgoAC/TurnOnArgoAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnArgoAC/TurnOnArgoAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnArgoAC/TurnOnArgoAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnArgoAC/TurnOnArgoAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnArgoAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnArgoAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnArgoAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnArgoAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnDaikinAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnDaikinAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnDaikinAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnDaikinAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnFujitsuAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnFujitsuAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnFujitsuAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnFujitsuAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnKelvinatorAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnKelvinatorAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnKelvinatorAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnKelvinatorAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiHeavyAc/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiHeavyAc/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnMitsubishiHeavyAc/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnMitsubishiHeavyAc/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnPanasonicAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnPanasonicAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnPanasonicAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnPanasonicAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnToshibaAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnToshibaAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnToshibaAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnToshibaAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino b/lib/IRremoteESP8266-2.7.1/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/TurnOnTrotecAC/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/TurnOnTrotecAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/TurnOnTrotecAC/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/TurnOnTrotecAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/README.md b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/README.md similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/README.md rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/README.md diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/Web-AC-control.ino b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/Web-AC-control.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/Web-AC-control.ino rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/Web-AC-control.ino diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/platformio.ini b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/platformio.ini rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/printscreen.png b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/printscreen.png similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/printscreen.png rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/printscreen.png diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/favicon.ico b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/favicon.ico similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/favicon.ico rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/favicon.ico diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_1_off.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_1_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_1_off.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_1_off.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_1_on.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_1_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_1_on.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_1_on.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_2_off.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_2_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_2_off.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_2_off.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_2_on.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_2_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_2_on.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_2_on.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_3_off.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_3_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_3_off.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_3_off.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_3_on.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_3_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_3_on.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_3_on.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_4_off.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_4_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_4_off.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_4_off.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_4_on.svg b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_4_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/level_4_on.svg rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/level_4_on.svg diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/ui.html b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/ui.html similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/ui.html rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/ui.html diff --git a/lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/ui.js b/lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/ui.js similarity index 100% rename from lib/IRremoteESP8266-2.7.0/examples/Web-AC-control/upload/ui.js rename to lib/IRremoteESP8266-2.7.1/examples/Web-AC-control/upload/ui.js diff --git a/lib/IRremoteESP8266-2.7.0/keywords.txt b/lib/IRremoteESP8266-2.7.1/keywords.txt similarity index 96% rename from lib/IRremoteESP8266-2.7.0/keywords.txt rename to lib/IRremoteESP8266-2.7.1/keywords.txt index 33a48f5f2..f027e808b 100644 --- a/lib/IRremoteESP8266-2.7.0/keywords.txt +++ b/lib/IRremoteESP8266-2.7.1/keywords.txt @@ -920,6 +920,7 @@ PANASONIC LITERAL1 PANASONIC_AC LITERAL1 PANASONIC_BITS LITERAL1 PIONEER LITERAL1 +PROGMEM LITERAL1 PRONTO LITERAL1 RAW LITERAL1 RAWTICK LITERAL1 @@ -1052,6 +1053,10 @@ WHYNTER LITERAL1 WHYNTER_BITS LITERAL1 YAW1F LITERAL1 YBOFB LITERAL1 +k3DStr LITERAL1 +k6thSenseStr LITERAL1 +k8CHeatStr LITERAL1 +kAirFlowStr LITERAL1 kAiwaRcT501Bits LITERAL1 kAiwaRcT501MinRepeats LITERAL1 kAiwaRcT501PostBits LITERAL1 @@ -1152,6 +1157,14 @@ kArgoTempLowOffset LITERAL1 kArgoTempLowSize LITERAL1 kArgoZeroSpace LITERAL1 kAuto LITERAL1 +kAutoStr LITERAL1 +kAutomaticStr LITERAL1 +kBeepStr LITERAL1 +kBitsStr LITERAL1 +kBottomStr LITERAL1 +kBreezeStr LITERAL1 +kButtonStr LITERAL1 +kCancelStr LITERAL1 kCarrierAcBitMark LITERAL1 kCarrierAcBits LITERAL1 kCarrierAcGap LITERAL1 @@ -1160,7 +1173,20 @@ kCarrierAcHdrSpace LITERAL1 kCarrierAcMinRepeat LITERAL1 kCarrierAcOneSpace LITERAL1 kCarrierAcZeroSpace LITERAL1 +kCeilingStr LITERAL1 +kCelsiusStr LITERAL1 +kCentreStr LITERAL1 +kChangeStr LITERAL1 +kCirculateStr LITERAL1 +kCleanStr LITERAL1 +kClockStr LITERAL1 +kCodeStr LITERAL1 +kColonSpaceStr LITERAL1 +kComfortStr LITERAL1 +kCommaSpaceStr LITERAL1 +kCommandStr LITERAL1 kCool LITERAL1 +kCoolStr LITERAL1 kCoolixAuto LITERAL1 kCoolixBitMark LITERAL1 kCoolixBitMarkTicks LITERAL1 @@ -1537,6 +1563,8 @@ kDaikinTempSize LITERAL1 kDaikinTolerance LITERAL1 kDaikinUnusedTime LITERAL1 kDaikinZeroSpace LITERAL1 +kDayStr LITERAL1 +kDaysStr LITERAL1 kDefaultESP32Timer LITERAL1 kDefaultMessageGap LITERAL1 kDenon48Bits LITERAL1 @@ -1572,9 +1600,12 @@ kDishRptSpaceTicks LITERAL1 kDishTick LITERAL1 kDishZeroSpace LITERAL1 kDishZeroSpaceTicks LITERAL1 +kDownStr LITERAL1 kDry LITERAL1 +kDryStr LITERAL1 kDutyDefault LITERAL1 kDutyMax LITERAL1 +kEconoStr LITERAL1 kElectraAcAuto LITERAL1 kElectraAcBitMark LITERAL1 kElectraAcBits LITERAL1 @@ -1607,10 +1638,20 @@ kElectraAcTempDelta LITERAL1 kElectraAcTempOffset LITERAL1 kElectraAcTempSize LITERAL1 kElectraAcZeroSpace LITERAL1 +kEyeAutoStr LITERAL1 +kEyeStr LITERAL1 +kFalseStr LITERAL1 kFan LITERAL1 +kFanOnlyStr LITERAL1 +kFanStr LITERAL1 +kFastStr LITERAL1 +kFilterStr LITERAL1 +kFixedStr LITERAL1 kFnvBasis32 LITERAL1 kFnvPrime32 LITERAL1 +kFollowStr LITERAL1 kFooter LITERAL1 +kFreshStr LITERAL1 kFujitsuAcBitMark LITERAL1 kFujitsuAcBits LITERAL1 kFujitsuAcCleanOffset LITERAL1 @@ -1863,10 +1904,15 @@ kHaierAcYrw02TurboOffset LITERAL1 kHaierAcYrw02TurboSize LITERAL1 kHaierAcZeroSpace LITERAL1 kHeader LITERAL1 +kHealthStr LITERAL1 kHeat LITERAL1 +kHeatStr LITERAL1 +kHiStr LITERAL1 kHigh LITERAL1 kHighNibble LITERAL1 +kHighStr LITERAL1 kHighest LITERAL1 +kHighestStr LITERAL1 kHitachiAc1Bits LITERAL1 kHitachiAc1HdrMark LITERAL1 kHitachiAc1HdrSpace LITERAL1 @@ -1875,6 +1921,12 @@ kHitachiAc2Bits LITERAL1 kHitachiAc2StateLength LITERAL1 kHitachiAc424BitMark LITERAL1 kHitachiAc424Bits LITERAL1 +kHitachiAc424ButtonByte LITERAL1 +kHitachiAc424ButtonFan LITERAL1 +kHitachiAc424ButtonPowerMode LITERAL1 +kHitachiAc424ButtonSwingV LITERAL1 +kHitachiAc424ButtonTempDown LITERAL1 +kHitachiAc424ButtonTempUp LITERAL1 kHitachiAc424Cool LITERAL1 kHitachiAc424Dry LITERAL1 kHitachiAc424Fan LITERAL1 @@ -1897,7 +1949,8 @@ kHitachiAc424MinTemp LITERAL1 kHitachiAc424ModeByte LITERAL1 kHitachiAc424OneSpace LITERAL1 kHitachiAc424PowerByte LITERAL1 -kHitachiAc424PowerOffset LITERAL1 +kHitachiAc424PowerOff LITERAL1 +kHitachiAc424PowerOn LITERAL1 kHitachiAc424StateLength LITERAL1 kHitachiAc424TempByte LITERAL1 kHitachiAc424TempOffset LITERAL1 @@ -1927,6 +1980,11 @@ kHitachiAcPowerOffset LITERAL1 kHitachiAcStateLength LITERAL1 kHitachiAcSwingOffset LITERAL1 kHitachiAcZeroSpace LITERAL1 +kHoldStr LITERAL1 +kHourStr LITERAL1 +kHoursStr LITERAL1 +kHumidStr LITERAL1 +kIFeelStr LITERAL1 kIdleState LITERAL1 kInaxBitMark LITERAL1 kInaxBits LITERAL1 @@ -1937,6 +1995,7 @@ kInaxMinRepeat LITERAL1 kInaxOneSpace LITERAL1 kInaxTick LITERAL1 kInaxZeroSpace LITERAL1 +kIonStr LITERAL1 kJvcBitMark LITERAL1 kJvcBitMarkTicks LITERAL1 kJvcBits LITERAL1 @@ -2008,10 +2067,13 @@ kLasertagTolerance LITERAL1 kLastDecodeType LITERAL1 kLastFanspeedEnum LITERAL1 kLastOpmodeEnum LITERAL1 +kLastStr LITERAL1 kLastSwinghEnum LITERAL1 kLastSwingvEnum LITERAL1 kLeft LITERAL1 kLeftMax LITERAL1 +kLeftMaxStr LITERAL1 +kLeftStr LITERAL1 kLegoPfBitMark LITERAL1 kLegoPfBits LITERAL1 kLegoPfHdrSpace LITERAL1 @@ -2050,9 +2112,16 @@ kLgRptSpaceTicks LITERAL1 kLgTick LITERAL1 kLgZeroSpace LITERAL1 kLgZeroSpaceTicks LITERAL1 +kLightStr LITERAL1 +kLightToggleStr LITERAL1 +kLoStr LITERAL1 +kLoudStr LITERAL1 kLow LITERAL1 kLowNibble LITERAL1 +kLowStr LITERAL1 +kLowerStr LITERAL1 kLowest LITERAL1 +kLowestStr LITERAL1 kLutronBits LITERAL1 kLutronDelta LITERAL1 kLutronGap LITERAL1 @@ -2073,14 +2142,23 @@ kMagiQuestSpaceZero LITERAL1 kMagiQuestTotalUsec LITERAL1 kMagiQuestZeroRatio LITERAL1 kMagiquestBits LITERAL1 +kManualStr LITERAL1 kMark LITERAL1 kMarkExcess LITERAL1 kMarkState LITERAL1 kMax LITERAL1 kMaxAccurateUsecDelay LITERAL1 +kMaxLeftStr LITERAL1 +kMaxRightStr LITERAL1 +kMaxStr LITERAL1 kMaxTimeoutMs LITERAL1 +kMaximumStr LITERAL1 +kMedStr LITERAL1 kMedium LITERAL1 +kMediumStr LITERAL1 +kMidStr LITERAL1 kMiddle LITERAL1 +kMiddleStr LITERAL1 kMideaACAuto LITERAL1 kMideaACCelsiusOffset LITERAL1 kMideaACCool LITERAL1 @@ -2120,6 +2198,10 @@ kMideaTolerance LITERAL1 kMideaZeroSpace LITERAL1 kMideaZeroSpaceTicks LITERAL1 kMin LITERAL1 +kMinStr LITERAL1 +kMinimumStr LITERAL1 +kMinuteStr LITERAL1 +kMinutesStr LITERAL1 kMitsubishi112Auto LITERAL1 kMitsubishi112BitMark LITERAL1 kMitsubishi112Bits LITERAL1 @@ -2350,6 +2432,11 @@ kMitsubishiTick LITERAL1 kMitsubishiZeroSpace LITERAL1 kMitsubishiZeroSpaceTicks LITERAL1 kModeBitsSize LITERAL1 +kModeStr LITERAL1 +kModelStr LITERAL1 +kMouldStr LITERAL1 +kMoveStr LITERAL1 +kNAStr LITERAL1 kNECBits LITERAL1 kNecBitMark LITERAL1 kNecBitMarkTicks LITERAL1 @@ -2428,6 +2515,7 @@ kNeoclimaTempSize LITERAL1 kNeoclimaTurboOffset LITERAL1 kNeoclimaZeroSpace LITERAL1 kNibbleSize LITERAL1 +kNightStr LITERAL1 kNikaiBitMark LITERAL1 kNikaiBitMarkTicks LITERAL1 kNikaiBits LITERAL1 @@ -2443,7 +2531,15 @@ kNikaiTick LITERAL1 kNikaiZeroSpace LITERAL1 kNikaiZeroSpaceTicks LITERAL1 kNoRepeat LITERAL1 +kNoStr LITERAL1 +kNowStr LITERAL1 kOff LITERAL1 +kOffStr LITERAL1 +kOffTimerStr LITERAL1 +kOnStr LITERAL1 +kOnTimerStr LITERAL1 +kOutsideQuietStr LITERAL1 +kOutsideStr LITERAL1 kPanasonicAcAuto LITERAL1 kPanasonicAcBits LITERAL1 kPanasonicAcChecksumInit LITERAL1 @@ -2537,6 +2633,9 @@ kPioneerOneSpaceTicks LITERAL1 kPioneerTick LITERAL1 kPioneerZeroSpace LITERAL1 kPioneerZeroSpaceTicks LITERAL1 +kPowerStr LITERAL1 +kPowerToggleStr LITERAL1 +kPowerfulStr LITERAL1 kProntoDataOffset LITERAL1 kProntoFreqFactor LITERAL1 kProntoFreqOffset LITERAL1 @@ -2544,6 +2643,9 @@ kProntoMinLength LITERAL1 kProntoSeq1LenOffset LITERAL1 kProntoSeq2LenOffset LITERAL1 kProntoTypeOffset LITERAL1 +kProtocolStr LITERAL1 +kPurifyStr LITERAL1 +kQuietStr LITERAL1 kRC5Bits LITERAL1 kRC5RawBits LITERAL1 kRC5XBits LITERAL1 @@ -2588,8 +2690,12 @@ kRcmmRptLengthTicks LITERAL1 kRcmmTick LITERAL1 kRcmmTolerance LITERAL1 kRepeat LITERAL1 +kRepeatStr LITERAL1 kRight LITERAL1 kRightMax LITERAL1 +kRightMaxStr LITERAL1 +kRightStr LITERAL1 +kRoomStr LITERAL1 kSamsung36Bits LITERAL1 kSamsungACSectionLength LITERAL1 kSamsungAcAuto LITERAL1 @@ -2676,6 +2782,12 @@ kSanyoSa8650bHdrSpace LITERAL1 kSanyoSa8650bOneMark LITERAL1 kSanyoSa8650bRptLength LITERAL1 kSanyoSa8650bZeroMark LITERAL1 +kSaveStr LITERAL1 +kSecondStr LITERAL1 +kSecondsStr LITERAL1 +kSensorStr LITERAL1 +kSensorTempStr LITERAL1 +kSetStr LITERAL1 kSharpAcAuto LITERAL1 kSharpAcBitFanManualOffset LITERAL1 kSharpAcBitMark LITERAL1 @@ -2725,7 +2837,11 @@ kSharpZeroSpace LITERAL1 kSharpZeroSpaceTicks LITERAL1 kSherwoodBits LITERAL1 kSherwoodMinRepeat LITERAL1 +kSilentStr LITERAL1 kSingleRepeat LITERAL1 +kSleepStr LITERAL1 +kSleepTimerStr LITERAL1 +kSlowStr LITERAL1 kSony12Bits LITERAL1 kSony15Bits LITERAL1 kSony20Bits LITERAL1 @@ -2745,10 +2861,20 @@ kSonyTick LITERAL1 kSonyZeroMark LITERAL1 kSonyZeroMarkTicks LITERAL1 kSpace LITERAL1 +kSpaceLBraceStr LITERAL1 kSpaceState LITERAL1 kStartOffset LITERAL1 +kStartStr LITERAL1 kStateSizeMax LITERAL1 +kStepStr LITERAL1 kStopState LITERAL1 +kStopStr LITERAL1 +kSuperStr LITERAL1 +kSwingHStr LITERAL1 +kSwingStr LITERAL1 +kSwingVModeStr LITERAL1 +kSwingVStr LITERAL1 +kSwingVToggleStr LITERAL1 kTcl112AcAuto LITERAL1 kTcl112AcBitEconoOffset LITERAL1 kTcl112AcBitHealthOffset LITERAL1 @@ -2821,8 +2947,15 @@ kTecoTimerTensHoursSize LITERAL1 kTecoTimerUnitHoursOffset LITERAL1 kTecoTimerUnitHoursSize LITERAL1 kTecoZeroSpace LITERAL1 +kTempDownStr LITERAL1 +kTempStr LITERAL1 +kTempUpStr LITERAL1 +kThreeLetterDayOfWeekStr LITERAL1 kTimeoutMs LITERAL1 +kTimerStr LITERAL1 +kToggleStr LITERAL1 kTolerance LITERAL1 +kTopStr LITERAL1 kToshibaACBits LITERAL1 kToshibaACMinRepeat LITERAL1 kToshibaACStateLength LITERAL1 @@ -2881,7 +3014,12 @@ kTrotecTempOffset LITERAL1 kTrotecTempSize LITERAL1 kTrotecTimerBitOffset LITERAL1 kTrotecZeroSpace LITERAL1 +kTrueStr LITERAL1 +kTurboStr LITERAL1 +kUnknownStr LITERAL1 kUnknownThreshold LITERAL1 +kUpStr LITERAL1 +kUpperStr LITERAL1 kUseDefTol LITERAL1 kVestelAcAuto LITERAL1 kVestelAcBitMark LITERAL1 @@ -2934,6 +3072,8 @@ kVestelAcTolerance LITERAL1 kVestelAcTurbo LITERAL1 kVestelAcTurboSleepOffset LITERAL1 kVestelAcZeroSpace LITERAL1 +kWallStr LITERAL1 +kWeeklyTimerStr LITERAL1 kWhirlpoolAcAltTempOffset LITERAL1 kWhirlpoolAcAltTempPos LITERAL1 kWhirlpoolAcAuto LITERAL1 @@ -3014,3 +3154,8 @@ kWhynterTick LITERAL1 kWhynterZeroSpace LITERAL1 kWhynterZeroSpaceTicks LITERAL1 kWide LITERAL1 +kWideStr LITERAL1 +kWifiStr LITERAL1 +kXFanStr LITERAL1 +kYesStr LITERAL1 +kZoneFollowStr LITERAL1 diff --git a/lib/IRremoteESP8266-2.7.0/library.json b/lib/IRremoteESP8266-2.7.1/library.json similarity index 97% rename from lib/IRremoteESP8266-2.7.0/library.json rename to lib/IRremoteESP8266-2.7.1/library.json index 361bbb0af..50464bed1 100644 --- a/lib/IRremoteESP8266-2.7.0/library.json +++ b/lib/IRremoteESP8266-2.7.1/library.json @@ -1,6 +1,6 @@ { "name": "IRremoteESP8266", - "version": "2.7.0", + "version": "2.7.1", "keywords": "infrared, ir, remote, esp8266, esp32", "description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)", "repository": diff --git a/lib/IRremoteESP8266-2.7.0/library.properties b/lib/IRremoteESP8266-2.7.1/library.properties similarity index 97% rename from lib/IRremoteESP8266-2.7.0/library.properties rename to lib/IRremoteESP8266-2.7.1/library.properties index 1f2c0770f..6e7215626 100644 --- a/lib/IRremoteESP8266-2.7.0/library.properties +++ b/lib/IRremoteESP8266-2.7.1/library.properties @@ -1,5 +1,5 @@ name=IRremoteESP8266 -version=2.7.0 +version=2.7.1 author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff maintainer=Mark Szabo, David Conran, Sebastien Warin, Roi Dayan, Massimiliano Pinto sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32) diff --git a/lib/IRremoteESP8266-2.7.0/pylintrc b/lib/IRremoteESP8266-2.7.1/pylintrc similarity index 100% rename from lib/IRremoteESP8266-2.7.0/pylintrc rename to lib/IRremoteESP8266-2.7.1/pylintrc diff --git a/lib/IRremoteESP8266-2.7.0/src/CPPLINT.cfg b/lib/IRremoteESP8266-2.7.1/src/CPPLINT.cfg similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/CPPLINT.cfg rename to lib/IRremoteESP8266-2.7.1/src/CPPLINT.cfg diff --git a/lib/IRremoteESP8266-2.7.0/src/IRac.cpp b/lib/IRremoteESP8266-2.7.1/src/IRac.cpp similarity index 95% rename from lib/IRremoteESP8266-2.7.0/src/IRac.cpp rename to lib/IRremoteESP8266-2.7.1/src/IRac.cpp index bec5eb554..f8e5ca759 100644 --- a/lib/IRremoteESP8266-2.7.0/src/IRac.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/IRac.cpp @@ -670,13 +670,15 @@ void IRac::hitachi(IRHitachiAc *ac, #if SEND_HITACHI_AC424 void IRac::hitachi424(IRHitachiAc424 *ac, const bool on, const stdAc::opmode_t mode, - const float degrees, const stdAc::fanspeed_t fan) { + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv) { ac->begin(); - ac->setPower(on); ac->setMode(ac->convertMode(mode)); ac->setTemp(degrees); ac->setFan(ac->convertFan(fan)); - // TODO(jamsinclair): Add Swing(V) support. + ac->setPower(on); + // SwingVToggle is special. Needs to be last method called. + ac->setSwingVToggle(swingv != stdAc::swingv_t::kOff); // No Swing(H) setting available. // No Quiet setting available. // No Turbo setting available. @@ -1174,6 +1176,7 @@ stdAc::state_t IRac::handleToggles(const stdAc::state_t desired, result.light = desired.light ^ prev->light; break; case decode_type_t::MIDEA: + case decode_type_t::HITACHI_AC424: if ((desired.swingv == stdAc::swingv_t::kOff) ^ (prev->swingv == stdAc::swingv_t::kOff)) // It changed, so toggle. result.swingv = stdAc::swingv_t::kAuto; @@ -1413,7 +1416,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { case HITACHI_AC424: { IRHitachiAc424 ac(_pin, _inverted, _modulation); - hitachi424(&ac, on, send.mode, degC, send.fanspeed); + hitachi424(&ac, on, send.mode, degC, send.fanspeed, send.swingv); break; } #endif // SEND_HITACHI_AC424 @@ -1601,25 +1604,25 @@ bool IRac::hasStateChanged(void) { return cmpStates(next, _prev); } stdAc::opmode_t IRac::strToOpmode(const char *str, const stdAc::opmode_t def) { - if (!strcasecmp(str, kAutoStr.c_str()) || - !strcasecmp(str, kAutomaticStr.c_str())) + if (!strcasecmp(str, kAutoStr) || + !strcasecmp(str, kAutomaticStr)) return stdAc::opmode_t::kAuto; - else if (!strcasecmp(str, kOffStr.c_str()) || - !strcasecmp(str, kStopStr.c_str())) + else if (!strcasecmp(str, kOffStr) || + !strcasecmp(str, kStopStr)) return stdAc::opmode_t::kOff; - else if (!strcasecmp(str, kCoolStr.c_str()) || + else if (!strcasecmp(str, kCoolStr) || !strcasecmp(str, "COOLING")) return stdAc::opmode_t::kCool; - else if (!strcasecmp(str, kHeatStr.c_str()) || + else if (!strcasecmp(str, kHeatStr) || !strcasecmp(str, "HEATING")) return stdAc::opmode_t::kHeat; - else if (!strcasecmp(str, kDryStr.c_str()) || + else if (!strcasecmp(str, kDryStr) || !strcasecmp(str, "DRYING") || !strcasecmp(str, "DEHUMIDIFY")) return stdAc::opmode_t::kDry; - else if (!strcasecmp(str, kFanStr.c_str()) || + else if (!strcasecmp(str, kFanStr) || !strcasecmp(str, "FANONLY") || - !strcasecmp(str, kFanOnlyStr.c_str())) + !strcasecmp(str, kFanOnlyStr)) return stdAc::opmode_t::kFan; else return def; @@ -1627,26 +1630,26 @@ stdAc::opmode_t IRac::strToOpmode(const char *str, stdAc::fanspeed_t IRac::strToFanspeed(const char *str, const stdAc::fanspeed_t def) { - if (!strcasecmp(str, kAutoStr.c_str()) || - !strcasecmp(str, kAutomaticStr.c_str())) + if (!strcasecmp(str, kAutoStr) || + !strcasecmp(str, kAutomaticStr)) return stdAc::fanspeed_t::kAuto; - else if (!strcasecmp(str, kMinStr.c_str()) || - !strcasecmp(str, kMinimumStr.c_str()) || - !strcasecmp(str, kLowestStr.c_str())) + else if (!strcasecmp(str, kMinStr) || + !strcasecmp(str, kMinimumStr) || + !strcasecmp(str, kLowestStr)) return stdAc::fanspeed_t::kMin; - else if (!strcasecmp(str, kLowStr.c_str()) || - !strcasecmp(str, kLoStr.c_str())) + else if (!strcasecmp(str, kLowStr) || + !strcasecmp(str, kLoStr)) return stdAc::fanspeed_t::kLow; - else if (!strcasecmp(str, kMedStr.c_str()) || - !strcasecmp(str, kMediumStr.c_str()) || - !strcasecmp(str, kMidStr.c_str())) + else if (!strcasecmp(str, kMedStr) || + !strcasecmp(str, kMediumStr) || + !strcasecmp(str, kMidStr)) return stdAc::fanspeed_t::kMedium; - else if (!strcasecmp(str, kHighStr.c_str()) || - !strcasecmp(str, kHiStr.c_str())) + else if (!strcasecmp(str, kHighStr) || + !strcasecmp(str, kHiStr)) return stdAc::fanspeed_t::kHigh; - else if (!strcasecmp(str, kMaxStr.c_str()) || - !strcasecmp(str, kMaximumStr.c_str()) || - !strcasecmp(str, kHighestStr.c_str())) + else if (!strcasecmp(str, kMaxStr) || + !strcasecmp(str, kMaximumStr) || + !strcasecmp(str, kHighestStr)) return stdAc::fanspeed_t::kMax; else return def; @@ -1654,36 +1657,36 @@ stdAc::fanspeed_t IRac::strToFanspeed(const char *str, stdAc::swingv_t IRac::strToSwingV(const char *str, const stdAc::swingv_t def) { - if (!strcasecmp(str, kAutoStr.c_str()) || - !strcasecmp(str, kAutomaticStr.c_str()) || - !strcasecmp(str, kOnStr.c_str()) || - !strcasecmp(str, kSwingStr.c_str())) + if (!strcasecmp(str, kAutoStr) || + !strcasecmp(str, kAutomaticStr) || + !strcasecmp(str, kOnStr) || + !strcasecmp(str, kSwingStr)) return stdAc::swingv_t::kAuto; - else if (!strcasecmp(str, kOffStr.c_str()) || - !strcasecmp(str, kStopStr.c_str())) + else if (!strcasecmp(str, kOffStr) || + !strcasecmp(str, kStopStr)) return stdAc::swingv_t::kOff; - else if (!strcasecmp(str, kMinStr.c_str()) || - !strcasecmp(str, kMinimumStr.c_str()) || - !strcasecmp(str, kLowestStr.c_str()) || - !strcasecmp(str, kBottomStr.c_str()) || - !strcasecmp(str, kDownStr.c_str())) + else if (!strcasecmp(str, kMinStr) || + !strcasecmp(str, kMinimumStr) || + !strcasecmp(str, kLowestStr) || + !strcasecmp(str, kBottomStr) || + !strcasecmp(str, kDownStr)) return stdAc::swingv_t::kLowest; - else if (!strcasecmp(str, kLowStr.c_str())) + else if (!strcasecmp(str, kLowStr)) return stdAc::swingv_t::kLow; - else if (!strcasecmp(str, kMidStr.c_str()) || - !strcasecmp(str, kMiddleStr.c_str()) || - !strcasecmp(str, kMedStr.c_str()) || - !strcasecmp(str, kMediumStr.c_str()) || - !strcasecmp(str, kCentreStr.c_str())) + else if (!strcasecmp(str, kMidStr) || + !strcasecmp(str, kMiddleStr) || + !strcasecmp(str, kMedStr) || + !strcasecmp(str, kMediumStr) || + !strcasecmp(str, kCentreStr)) return stdAc::swingv_t::kMiddle; - else if (!strcasecmp(str, kHighStr.c_str()) || - !strcasecmp(str, kHiStr.c_str())) + else if (!strcasecmp(str, kHighStr) || + !strcasecmp(str, kHiStr)) return stdAc::swingv_t::kHigh; - else if (!strcasecmp(str, kHighestStr.c_str()) || - !strcasecmp(str, kMaxStr.c_str()) || - !strcasecmp(str, kMaximumStr.c_str()) || - !strcasecmp(str, kTopStr.c_str()) || - !strcasecmp(str, kUpStr.c_str())) + else if (!strcasecmp(str, kHighestStr) || + !strcasecmp(str, kMaxStr) || + !strcasecmp(str, kMaximumStr) || + !strcasecmp(str, kTopStr) || + !strcasecmp(str, kUpStr)) return stdAc::swingv_t::kHighest; else return def; @@ -1691,34 +1694,34 @@ stdAc::swingv_t IRac::strToSwingV(const char *str, stdAc::swingh_t IRac::strToSwingH(const char *str, const stdAc::swingh_t def) { - if (!strcasecmp(str, kAutoStr.c_str()) || - !strcasecmp(str, kAutomaticStr.c_str()) || - !strcasecmp(str, kOnStr.c_str()) || !strcasecmp(str, kSwingStr.c_str())) + if (!strcasecmp(str, kAutoStr) || + !strcasecmp(str, kAutomaticStr) || + !strcasecmp(str, kOnStr) || !strcasecmp(str, kSwingStr)) return stdAc::swingh_t::kAuto; - else if (!strcasecmp(str, kOffStr.c_str()) || - !strcasecmp(str, kStopStr.c_str())) + else if (!strcasecmp(str, kOffStr) || + !strcasecmp(str, kStopStr)) return stdAc::swingh_t::kOff; - else if (!strcasecmp(str, kLeftMaxStr.c_str()) || + else if (!strcasecmp(str, kLeftMaxStr) || !strcasecmp(str, D_STR_LEFT " " D_STR_MAX) || !strcasecmp(str, D_STR_MAX D_STR_LEFT) || - !strcasecmp(str, kMaxLeftStr.c_str())) + !strcasecmp(str, kMaxLeftStr)) return stdAc::swingh_t::kLeftMax; - else if (!strcasecmp(str, kLeftStr.c_str())) + else if (!strcasecmp(str, kLeftStr)) return stdAc::swingh_t::kLeft; - else if (!strcasecmp(str, kMidStr.c_str()) || - !strcasecmp(str, kMiddleStr.c_str()) || - !strcasecmp(str, kMedStr.c_str()) || - !strcasecmp(str, kMediumStr.c_str()) || - !strcasecmp(str, kCentreStr.c_str())) + else if (!strcasecmp(str, kMidStr) || + !strcasecmp(str, kMiddleStr) || + !strcasecmp(str, kMedStr) || + !strcasecmp(str, kMediumStr) || + !strcasecmp(str, kCentreStr)) return stdAc::swingh_t::kMiddle; - else if (!strcasecmp(str, kRightStr.c_str())) + else if (!strcasecmp(str, kRightStr)) return stdAc::swingh_t::kRight; - else if (!strcasecmp(str, kRightMaxStr.c_str()) || + else if (!strcasecmp(str, kRightMaxStr) || !strcasecmp(str, D_STR_MAX " " D_STR_RIGHT) || !strcasecmp(str, D_STR_MAX D_STR_RIGHT) || - !strcasecmp(str, kMaxRightStr.c_str())) + !strcasecmp(str, kMaxRightStr)) return stdAc::swingh_t::kRightMax; - else if (!strcasecmp(str, kWideStr.c_str())) + else if (!strcasecmp(str, kWideStr)) return stdAc::swingh_t::kWide; else return def; @@ -1771,15 +1774,15 @@ int16_t IRac::strToModel(const char *str, const int16_t def) { } bool IRac::strToBool(const char *str, const bool def) { - if (!strcasecmp(str, kOnStr.c_str()) || + if (!strcasecmp(str, kOnStr) || !strcasecmp(str, "1") || - !strcasecmp(str, kYesStr.c_str()) || - !strcasecmp(str, kTrueStr.c_str())) + !strcasecmp(str, kYesStr) || + !strcasecmp(str, kTrueStr)) return true; - else if (!strcasecmp(str, kOffStr.c_str()) || + else if (!strcasecmp(str, kOffStr) || !strcasecmp(str, "0") || - !strcasecmp(str, kNoStr.c_str()) || - !strcasecmp(str, kFalseStr.c_str())) + !strcasecmp(str, kNoStr) || + !strcasecmp(str, kFalseStr)) return false; else return def; diff --git a/lib/IRremoteESP8266-2.7.0/src/IRac.h b/lib/IRremoteESP8266-2.7.1/src/IRac.h similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/IRac.h rename to lib/IRremoteESP8266-2.7.1/src/IRac.h index 2fae0084a..4e1237d8d 100644 --- a/lib/IRremoteESP8266-2.7.0/src/IRac.h +++ b/lib/IRremoteESP8266-2.7.1/src/IRac.h @@ -219,7 +219,8 @@ void electra(IRElectraAc *ac, #if SEND_HITACHI_AC424 void hitachi424(IRHitachiAc424 *ac, const bool on, const stdAc::opmode_t mode, - const float degrees, const stdAc::fanspeed_t fan); + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv); #endif // SEND_HITACHI_AC424 #if SEND_KELVINATOR void kelvinator(IRKelvinatorAC *ac, diff --git a/lib/IRremoteESP8266-2.7.0/src/IRrecv.cpp b/lib/IRremoteESP8266-2.7.1/src/IRrecv.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRrecv.cpp rename to lib/IRremoteESP8266-2.7.1/src/IRrecv.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/IRrecv.h b/lib/IRremoteESP8266-2.7.1/src/IRrecv.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRrecv.h rename to lib/IRremoteESP8266-2.7.1/src/IRrecv.h diff --git a/lib/IRremoteESP8266-2.7.0/src/IRremoteESP8266.h b/lib/IRremoteESP8266-2.7.1/src/IRremoteESP8266.h similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/IRremoteESP8266.h rename to lib/IRremoteESP8266-2.7.1/src/IRremoteESP8266.h index 0bdd0a2dd..9e4cdbaab 100644 --- a/lib/IRremoteESP8266-2.7.0/src/IRremoteESP8266.h +++ b/lib/IRremoteESP8266-2.7.1/src/IRremoteESP8266.h @@ -1,4 +1,4 @@ - /*************************************************** +/*************************************************** * IRremote for ESP8266 * * Based on the IRremote library for Arduino by Ken Shirriff @@ -52,7 +52,7 @@ #endif // UNIT_TEST // Library Version -#define _IRREMOTEESP8266_VERSION_ "2.7.0" +#define _IRREMOTEESP8266_VERSION_ "2.7.1" // Set the language & locale for the library. See the `locale` dir for options. #ifndef _IR_LOCALE_ diff --git a/lib/IRremoteESP8266-2.7.0/src/IRsend.cpp b/lib/IRremoteESP8266-2.7.1/src/IRsend.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRsend.cpp rename to lib/IRremoteESP8266-2.7.1/src/IRsend.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/IRsend.h b/lib/IRremoteESP8266-2.7.1/src/IRsend.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRsend.h rename to lib/IRremoteESP8266-2.7.1/src/IRsend.h diff --git a/lib/IRremoteESP8266-2.7.1/src/IRtext.cpp b/lib/IRremoteESP8266-2.7.1/src/IRtext.cpp new file mode 100644 index 000000000..82f728191 --- /dev/null +++ b/lib/IRremoteESP8266-2.7.1/src/IRtext.cpp @@ -0,0 +1,164 @@ +// Copyright 2019 - David Conran (@crankyoldgit) + +#ifndef UNIT_TEST +#include +#endif // UNIT_TEST +#include "IRremoteESP8266.h" +#include "i18n.h" + +#ifndef PROGMEM +#define PROGMEM // Pretend we have the PROGMEM macro even if we really don't. +#endif + +// Common + +const PROGMEM char* kUnknownStr = D_STR_UNKNOWN; +const PROGMEM char* kProtocolStr = D_STR_PROTOCOL; +const PROGMEM char* kPowerStr = D_STR_POWER; +const PROGMEM char* kOnStr = D_STR_ON; +const PROGMEM char* kOffStr = D_STR_OFF; +const PROGMEM char* kModeStr = D_STR_MODE; +const PROGMEM char* kToggleStr = D_STR_TOGGLE; +const PROGMEM char* kTurboStr = D_STR_TURBO; +const PROGMEM char* kSuperStr = D_STR_SUPER; +const PROGMEM char* kSleepStr = D_STR_SLEEP; +const PROGMEM char* kLightStr = D_STR_LIGHT; +const PROGMEM char* kPowerfulStr = D_STR_POWERFUL; +const PROGMEM char* kQuietStr = D_STR_QUIET; +const PROGMEM char* kEconoStr = D_STR_ECONO; +const PROGMEM char* kSwingStr = D_STR_SWING; +const PROGMEM char* kSwingHStr = D_STR_SWINGH; +const PROGMEM char* kSwingVStr = D_STR_SWINGV; +const PROGMEM char* kBeepStr = D_STR_BEEP; +const PROGMEM char* kZoneFollowStr = D_STR_ZONEFOLLOW; +const PROGMEM char* kFixedStr = D_STR_FIXED; +const PROGMEM char* kMouldStr = D_STR_MOULD; +const PROGMEM char* kCleanStr = D_STR_CLEAN; +const PROGMEM char* kPurifyStr = D_STR_PURIFY; +const PROGMEM char* kTimerStr = D_STR_TIMER; +const PROGMEM char* kOnTimerStr = D_STR_ONTIMER; +const PROGMEM char* kOffTimerStr = D_STR_OFFTIMER; +const PROGMEM char* kClockStr = D_STR_CLOCK; +const PROGMEM char* kCommandStr = D_STR_COMMAND; +const PROGMEM char* kXFanStr = D_STR_XFAN; +const PROGMEM char* kHealthStr = D_STR_HEALTH; +const PROGMEM char* kModelStr = D_STR_MODEL; +const PROGMEM char* kTempStr = D_STR_TEMP; +const PROGMEM char* kIFeelStr = D_STR_IFEEL; +const PROGMEM char* kHumidStr = D_STR_HUMID; +const PROGMEM char* kSaveStr = D_STR_SAVE; +const PROGMEM char* kEyeStr = D_STR_EYE; +const PROGMEM char* kFollowStr = D_STR_FOLLOW; +const PROGMEM char* kIonStr = D_STR_ION; +const PROGMEM char* kFreshStr = D_STR_FRESH; +const PROGMEM char* kHoldStr = D_STR_HOLD; +const PROGMEM char* kButtonStr = D_STR_BUTTON; +const PROGMEM char* k8CHeatStr = D_STR_8C_HEAT; +const PROGMEM char* kNightStr = D_STR_NIGHT; +const PROGMEM char* kSilentStr = D_STR_SILENT; +const PROGMEM char* kFilterStr = D_STR_FILTER; +const PROGMEM char* k3DStr = D_STR_3D; +const PROGMEM char* kCelsiusStr = D_STR_CELSIUS; +const PROGMEM char* kTempUpStr = D_STR_TEMPUP; +const PROGMEM char* kTempDownStr = D_STR_TEMPDOWN; +const PROGMEM char* kStartStr = D_STR_START; +const PROGMEM char* kStopStr = D_STR_STOP; +const PROGMEM char* kMoveStr = D_STR_MOVE; +const PROGMEM char* kSetStr = D_STR_SET; +const PROGMEM char* kCancelStr = D_STR_CANCEL; +const PROGMEM char* kUpStr = D_STR_UP; +const PROGMEM char* kDownStr = D_STR_DOWN; +const PROGMEM char* kChangeStr = D_STR_CHANGE; +const PROGMEM char* kComfortStr = D_STR_COMFORT; +const PROGMEM char* kSensorStr = D_STR_SENSOR; +const PROGMEM char* kWeeklyTimerStr = D_STR_WEEKLYTIMER; +const PROGMEM char* kWifiStr = D_STR_WIFI; +const PROGMEM char* kLastStr = D_STR_LAST; +const PROGMEM char* kFastStr = D_STR_FAST; +const PROGMEM char* kSlowStr = D_STR_SLOW; +const PROGMEM char* kAirFlowStr = D_STR_AIRFLOW; +const PROGMEM char* kStepStr = D_STR_STEP; +const PROGMEM char* kNAStr = D_STR_NA; +const PROGMEM char* kOutsideStr = D_STR_OUTSIDE; +const PROGMEM char* kLoudStr = D_STR_LOUD; +const PROGMEM char* kLowerStr = D_STR_LOWER; +const PROGMEM char* kUpperStr = D_STR_UPPER; +const PROGMEM char* kBreezeStr = D_STR_BREEZE; +const PROGMEM char* kCirculateStr = D_STR_CIRCULATE; +const PROGMEM char* kCeilingStr = D_STR_CEILING; +const PROGMEM char* kWallStr = D_STR_WALL; +const PROGMEM char* kRoomStr = D_STR_ROOM; +const PROGMEM char* k6thSenseStr = D_STR_6THSENSE; + +const PROGMEM char* kAutoStr = D_STR_AUTO; +const PROGMEM char* kAutomaticStr = D_STR_AUTOMATIC; +const PROGMEM char* kManualStr = D_STR_MANUAL; +const PROGMEM char* kCoolStr = D_STR_COOL; +const PROGMEM char* kHeatStr = D_STR_HEAT; +const PROGMEM char* kFanStr = D_STR_FAN; +const PROGMEM char* kDryStr = D_STR_DRY; +const PROGMEM char* kFanOnlyStr = D_STR_FANONLY; + +const PROGMEM char* kMaxStr = D_STR_MAX; +const PROGMEM char* kMaximumStr = D_STR_MAXIMUM; +const PROGMEM char* kMinStr = D_STR_MIN; +const PROGMEM char* kMinimumStr = D_STR_MINIMUM; +const PROGMEM char* kMedStr = D_STR_MED; +const PROGMEM char* kMediumStr = D_STR_MEDIUM; + +const PROGMEM char* kHighestStr = D_STR_HIGHEST; +const PROGMEM char* kHighStr = D_STR_HIGH; +const PROGMEM char* kHiStr = D_STR_HI; +const PROGMEM char* kMidStr = D_STR_MID; +const PROGMEM char* kMiddleStr = D_STR_MIDDLE; +const PROGMEM char* kLowStr = D_STR_LOW; +const PROGMEM char* kLoStr = D_STR_LO; +const PROGMEM char* kLowestStr = D_STR_LOWEST; +const PROGMEM char* kMaxRightStr = D_STR_MAXRIGHT; +const PROGMEM char* kRightMaxStr = D_STR_RIGHTMAX_NOSPACE; +const PROGMEM char* kRightStr = D_STR_RIGHT; +const PROGMEM char* kLeftStr = D_STR_LEFT; +const PROGMEM char* kMaxLeftStr = D_STR_MAXLEFT; +const PROGMEM char* kLeftMaxStr = D_STR_LEFTMAX_NOSPACE; +const PROGMEM char* kWideStr = D_STR_WIDE; +const PROGMEM char* kCentreStr = D_STR_CENTRE; +const PROGMEM char* kTopStr = D_STR_TOP; +const PROGMEM char* kBottomStr = D_STR_BOTTOM; + +// Compound words/phrases/descriptions from pre-defined words. +const PROGMEM char* kEyeAutoStr = D_STR_EYEAUTO; +const PROGMEM char* kLightToggleStr = D_STR_LIGHTTOGGLE; +const PROGMEM char* kOutsideQuietStr = D_STR_OUTSIDEQUIET; +const PROGMEM char* kPowerToggleStr = D_STR_POWERTOGGLE; +const PROGMEM char* kSensorTempStr = D_STR_SENSORTEMP; +const PROGMEM char* kSleepTimerStr = D_STR_SLEEP_TIMER; +const PROGMEM char* kSwingVModeStr = D_STR_SWINGVMODE; +const PROGMEM char* kSwingVToggleStr = D_STR_SWINGVTOGGLE; + +// Separators +char kTimeSep = D_CHR_TIME_SEP; +const PROGMEM char* kSpaceLBraceStr = D_STR_SPACELBRACE; +const PROGMEM char* kCommaSpaceStr = D_STR_COMMASPACE; +const PROGMEM char* kColonSpaceStr = D_STR_COLONSPACE; + +// IRutils +// - Time +const PROGMEM char* kDayStr = D_STR_DAY; +const PROGMEM char* kDaysStr = D_STR_DAYS; +const PROGMEM char* kHourStr = D_STR_HOUR; +const PROGMEM char* kHoursStr = D_STR_HOURS; +const PROGMEM char* kMinuteStr = D_STR_MINUTE; +const PROGMEM char* kMinutesStr = D_STR_MINUTES; +const PROGMEM char* kSecondStr = D_STR_SECOND; +const PROGMEM char* kSecondsStr = D_STR_SECONDS; +const PROGMEM char* kNowStr = D_STR_NOW; +const PROGMEM char* kThreeLetterDayOfWeekStr = D_STR_THREELETTERDAYS; + +const PROGMEM char* kYesStr = D_STR_YES; +const PROGMEM char* kNoStr = D_STR_NO; +const PROGMEM char* kTrueStr = D_STR_TRUE; +const PROGMEM char* kFalseStr = D_STR_FALSE; + +const PROGMEM char* kRepeatStr = D_STR_REPEAT; +const PROGMEM char* kCodeStr = D_STR_CODE; +const PROGMEM char* kBitsStr = D_STR_BITS; diff --git a/lib/IRremoteESP8266-2.7.1/src/IRtext.h b/lib/IRremoteESP8266-2.7.1/src/IRtext.h new file mode 100644 index 000000000..522b528bc --- /dev/null +++ b/lib/IRremoteESP8266-2.7.1/src/IRtext.h @@ -0,0 +1,154 @@ +// Copyright 2019 - David Conran (@crankyoldgit) +// This header file is to be included in files **other than** 'IRtext.cpp'. +// +// WARNING: Do not edit this file! This file is automatically generated by +// 'tools/generate_irtext_h.sh'. + +#ifndef IRTEXT_H_ +#define IRTEXT_H_ + +#include "i18n.h" + +// Constant text to be shared across all object files. +// This means there is only one copy of the character/string/text etc. + +extern char kTimeSep; +extern const char* k3DStr; +extern const char* k6thSenseStr; +extern const char* k8CHeatStr; +extern const char* kAirFlowStr; +extern const char* kAutomaticStr; +extern const char* kAutoStr; +extern const char* kBeepStr; +extern const char* kBitsStr; +extern const char* kBottomStr; +extern const char* kBreezeStr; +extern const char* kButtonStr; +extern const char* kCancelStr; +extern const char* kCeilingStr; +extern const char* kCelsiusStr; +extern const char* kCentreStr; +extern const char* kChangeStr; +extern const char* kCirculateStr; +extern const char* kCleanStr; +extern const char* kClockStr; +extern const char* kCodeStr; +extern const char* kColonSpaceStr; +extern const char* kComfortStr; +extern const char* kCommandStr; +extern const char* kCommaSpaceStr; +extern const char* kCoolStr; +extern const char* kDaysStr; +extern const char* kDayStr; +extern const char* kDownStr; +extern const char* kDryStr; +extern const char* kEconoStr; +extern const char* kEyeAutoStr; +extern const char* kEyeStr; +extern const char* kFalseStr; +extern const char* kFanOnlyStr; +extern const char* kFanStr; +extern const char* kFastStr; +extern const char* kFilterStr; +extern const char* kFixedStr; +extern const char* kFollowStr; +extern const char* kFreshStr; +extern const char* kHealthStr; +extern const char* kHeatStr; +extern const char* kHighestStr; +extern const char* kHighStr; +extern const char* kHiStr; +extern const char* kHoldStr; +extern const char* kHoursStr; +extern const char* kHourStr; +extern const char* kHumidStr; +extern const char* kIFeelStr; +extern const char* kIonStr; +extern const char* kLastStr; +extern const char* kLeftMaxStr; +extern const char* kLeftStr; +extern const char* kLightStr; +extern const char* kLightToggleStr; +extern const char* kLoStr; +extern const char* kLoudStr; +extern const char* kLowerStr; +extern const char* kLowestStr; +extern const char* kLowStr; +extern const char* kManualStr; +extern const char* kMaximumStr; +extern const char* kMaxLeftStr; +extern const char* kMaxRightStr; +extern const char* kMaxStr; +extern const char* kMediumStr; +extern const char* kMedStr; +extern const char* kMiddleStr; +extern const char* kMidStr; +extern const char* kMinimumStr; +extern const char* kMinStr; +extern const char* kMinutesStr; +extern const char* kMinuteStr; +extern const char* kModelStr; +extern const char* kModeStr; +extern const char* kMouldStr; +extern const char* kMoveStr; +extern const char* kNAStr; +extern const char* kNightStr; +extern const char* kNoStr; +extern const char* kNowStr; +extern const char* kOffStr; +extern const char* kOffTimerStr; +extern const char* kOnStr; +extern const char* kOnTimerStr; +extern const char* kOutsideQuietStr; +extern const char* kOutsideStr; +extern const char* kPowerfulStr; +extern const char* kPowerStr; +extern const char* kPowerToggleStr; +extern const char* kProtocolStr; +extern const char* kPurifyStr; +extern const char* kQuietStr; +extern const char* kRepeatStr; +extern const char* kRightMaxStr; +extern const char* kRightStr; +extern const char* kRoomStr; +extern const char* kSaveStr; +extern const char* kSecondsStr; +extern const char* kSecondStr; +extern const char* kSensorStr; +extern const char* kSensorTempStr; +extern const char* kSetStr; +extern const char* kSilentStr; +extern const char* kSleepStr; +extern const char* kSleepTimerStr; +extern const char* kSlowStr; +extern const char* kSpaceLBraceStr; +extern const char* kStartStr; +extern const char* kStepStr; +extern const char* kStopStr; +extern const char* kSuperStr; +extern const char* kSwingHStr; +extern const char* kSwingStr; +extern const char* kSwingVModeStr; +extern const char* kSwingVStr; +extern const char* kSwingVToggleStr; +extern const char* kTempDownStr; +extern const char* kTempStr; +extern const char* kTempUpStr; +extern const char* kThreeLetterDayOfWeekStr; +extern const char* kTimerStr; +extern const char* kToggleStr; +extern const char* kTopStr; +extern const char* kTrueStr; +extern const char* kTurboStr; +extern const char* kUnknownStr; +extern const char* kUpperStr; +extern const char* kUpStr; +extern const char* kWallStr; +extern const char* kWeeklyTimerStr; +extern const char* kWideStr; +extern const char* kWifiStr; +extern const char* kXFanStr; +extern const char* kYesStr; +extern const char* kZoneFollowStr; + +#endif // IRTEXT_H_ diff --git a/lib/IRremoteESP8266-2.7.0/src/IRtimer.cpp b/lib/IRremoteESP8266-2.7.1/src/IRtimer.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRtimer.cpp rename to lib/IRremoteESP8266-2.7.1/src/IRtimer.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/IRtimer.h b/lib/IRremoteESP8266-2.7.1/src/IRtimer.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRtimer.h rename to lib/IRremoteESP8266-2.7.1/src/IRtimer.h diff --git a/lib/IRremoteESP8266-2.7.0/src/IRutils.cpp b/lib/IRremoteESP8266-2.7.1/src/IRutils.cpp similarity index 97% rename from lib/IRremoteESP8266-2.7.0/src/IRutils.cpp rename to lib/IRremoteESP8266-2.7.1/src/IRutils.cpp index 76a3db307..0aa19e821 100644 --- a/lib/IRremoteESP8266-2.7.0/src/IRutils.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/IRutils.cpp @@ -91,7 +91,7 @@ void serialPrintUint64(uint64_t input, uint8_t base) { // Returns: // A decode_type_t enum. decode_type_t strToDecodeType(const char * const str) { - if (!strcasecmp(str, kUnknownStr.c_str())) + if (!strcasecmp(str, kUnknownStr)) return decode_type_t::UNKNOWN; else if (!strcasecmp(str, "UNUSED")) return decode_type_t::UNUSED; @@ -487,7 +487,11 @@ String typeToString(const decode_type_t protocol, const bool isRepeat) { result = kUnknownStr; break; } - if (isRepeat) result += kSpaceLBraceStr + kRepeatStr + ')'; + if (isRepeat) { + result += kSpaceLBraceStr; + result += kRepeatStr; + result += ')'; + } return result; } @@ -683,16 +687,20 @@ String resultToHumanReadableBasic(const decode_results * const results) { // Reserve some space for the string to reduce heap fragmentation. output.reserve(2 * kStateSizeMax + 50); // Should cover most cases. // Show Encoding standard - output += kProtocolStr + F(" : "); + output += kProtocolStr; + output += F(" : "); output += typeToString(results->decode_type, results->repeat); output += '\n'; // Show Code & length - output += kCodeStr + F(" : "); + output += kCodeStr; + output += F(" : "); output += resultToHexidecimal(results); output += kSpaceLBraceStr; output += uint64ToString(results->bits); - output += ' ' + kBitsStr + F(")\n"); + output += ' '; + output += kBitsStr; + output += F(")\n"); return output; } @@ -891,10 +899,10 @@ namespace irutils { result += kSpaceLBraceStr; if ((uint8_t)(day_of_week + offset) < 7) #if UNIT_TEST - result += kThreeLetterDayOfWeekStr.substr( + result += String(kThreeLetterDayOfWeekStr).substr( (day_of_week + offset) * 3, 3); #else // UNIT_TEST - result += kThreeLetterDayOfWeekStr.substring( + result += String(kThreeLetterDayOfWeekStr).substring( (day_of_week + offset) * 3, (day_of_week + offset) * 3 + 3); #endif // UNIT_TEST else @@ -991,21 +999,22 @@ namespace irutils { String result = ""; if (days) - result += uint64ToString(days) + ' ' + ((days > 1) ? kDaysStr : kDayStr); + result += uint64ToString(days) + ' ' + String((days > 1) ? kDaysStr + : kDayStr); if (hours) { if (result.length()) result += ' '; - result += uint64ToString(hours) + ' ' + ((hours > 1) ? kHoursStr - : kHourStr); + result += uint64ToString(hours) + ' ' + String((hours > 1) ? kHoursStr + : kHourStr); } if (minutes) { if (result.length()) result += ' '; - result += uint64ToString(minutes) + ' ' + ((minutes > 1) ? kMinutesStr - : kMinuteStr); + result += uint64ToString(minutes) + ' ' + String( + (minutes > 1) ? kMinutesStr : kMinuteStr); } if (seconds) { if (result.length()) result += ' '; - result += uint64ToString(seconds) + ' ' + ((seconds > 1) ? kSecondsStr - : kSecondStr); + result += uint64ToString(seconds) + ' ' + String( + (seconds > 1) ? kSecondsStr : kSecondStr); } return result; } diff --git a/lib/IRremoteESP8266-2.7.0/src/IRutils.h b/lib/IRremoteESP8266-2.7.1/src/IRutils.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/IRutils.h rename to lib/IRremoteESP8266-2.7.1/src/IRutils.h diff --git a/lib/IRremoteESP8266-2.7.0/src/i18n.h b/lib/IRremoteESP8266-2.7.1/src/i18n.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/i18n.h rename to lib/IRremoteESP8266-2.7.1/src/i18n.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Aiwa.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Aiwa.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Aiwa.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Aiwa.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Amcor.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Amcor.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Amcor.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Amcor.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Amcor.h b/lib/IRremoteESP8266-2.7.1/src/ir_Amcor.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Amcor.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Amcor.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Argo.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Argo.cpp similarity index 98% rename from lib/IRremoteESP8266-2.7.0/src/ir_Argo.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Argo.cpp index 2721d3dc5..f1806ebcd 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Argo.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Argo.cpp @@ -332,7 +332,9 @@ String IRArgoAC::toString(void) { result += kDryStr; break; case kArgoHeatAuto: - result += kHeatStr + ' ' + kAutoStr; + result += kHeatStr; + result += ' '; + result += kAutoStr; break; case kArgoOff: result += kOffStr; @@ -361,7 +363,9 @@ String IRArgoAC::toString(void) { } result += ')'; result += addTempToString(getTemp()); - result += kCommaSpaceStr + kRoomStr + ' '; + result += kCommaSpaceStr; + result += kRoomStr; + result += ' '; result += addTempToString(getRoomTemp(), true, false); result += addBoolToString(getMax(), kMaxStr); result += addBoolToString(getiFeel(), kIFeelStr); diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Argo.h b/lib/IRremoteESP8266-2.7.1/src/ir_Argo.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Argo.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Argo.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Carrier.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Carrier.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Carrier.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Carrier.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Coolix.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Coolix.cpp similarity index 94% rename from lib/IRremoteESP8266-2.7.0/src/ir_Coolix.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Coolix.cpp index 2c840fe47..0dbd68d63 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Coolix.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Coolix.cpp @@ -132,15 +132,15 @@ uint32_t IRCoolixAC::getRaw() { return remote_state; } void IRCoolixAC::setRaw(const uint32_t new_code) { if (!handleSpecialState(new_code)) { - // it isn`t special so might afect Temp|mode|Fan + // it isn`t special so might affect Temp|mode|Fan if (new_code == kCoolixCmdFan) { setMode(kCoolixFan); - } else { - // must be a command changing Temp|Mode|Fan - // it is safe to just copy to remote var - remote_state = new_code; + return; } } + // must be a command changing Temp|Mode|Fan + // it is safe to just copy to remote var + remote_state = new_code; } // Return true if the current state is a special state. @@ -243,17 +243,13 @@ bool IRCoolixAC::getPower() { } void IRCoolixAC::setPower(const bool on) { - if (powerFlag) { - if (!on) { - updateSavedState(); - remote_state = kCoolixOff; - } - } else { - if (on) { - // at this point remote_state must be ready - // to be transmitted - recoverSavedState(); - } + if (!on) { + updateSavedState(); + remote_state = kCoolixOff; + } else if (!powerFlag) { + // at this point remote_state must be ready + // to be transmitted + recoverSavedState(); } powerFlag = on; } @@ -500,23 +496,38 @@ String IRCoolixAC::toString(void) { if (!getPower()) return result; // If it's off, there is no other info. // Special modes. if (getSwing()) { - result += kCommaSpaceStr + kSwingStr + kColonSpaceStr + kToggleStr; + result += kCommaSpaceStr; + result += kSwingStr; + result += kColonSpaceStr; + result += kToggleStr; return result; } if (getSleep()) { - result += kCommaSpaceStr + kSleepStr + kColonSpaceStr + kToggleStr; + result += kCommaSpaceStr; + result += kSleepStr; + result += kColonSpaceStr; + result += kToggleStr; return result; } if (getTurbo()) { - result += kCommaSpaceStr + kTurboStr + kColonSpaceStr + kToggleStr; + result += kCommaSpaceStr; + result += kTurboStr; + result += kColonSpaceStr; + result += kToggleStr; return result; } if (getLed()) { - result += kCommaSpaceStr + kLightStr + kColonSpaceStr + kToggleStr; + result += kCommaSpaceStr; + result += kLightStr; + result += kColonSpaceStr; + result += kToggleStr; return result; } if (getClean()) { - result += kCommaSpaceStr + kCleanStr + kColonSpaceStr + kToggleStr; + result += kCommaSpaceStr; + result += kCleanStr; + result += kColonSpaceStr; + result += kToggleStr; return result; } result += addModeToString(getMode(), kCoolixAuto, kCoolixCool, kCoolixHeat, @@ -528,7 +539,8 @@ String IRCoolixAC::toString(void) { result += kAutoStr; break; case kCoolixFanAuto0: - result += kAutoStr + '0'; + result += kAutoStr; + result += '0'; break; case kCoolixFanMax: result += kMaxStr; @@ -554,8 +566,7 @@ String IRCoolixAC::toString(void) { result += addBoolToString(getZoneFollow(), kZoneFollowStr); result += addLabeledString( (getSensorTemp() > kCoolixSensorTempMax) - ? kOffStr : uint64ToString(getSensorTemp()) + F("C"), - kSensorStr + ' ' + kTempStr); + ? kOffStr : uint64ToString(getSensorTemp()) + 'C', kSensorTempStr); return result; } diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Coolix.h b/lib/IRremoteESP8266-2.7.1/src/ir_Coolix.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Coolix.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Coolix.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Daikin.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Daikin.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_Daikin.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Daikin.cpp index b90dd682b..678e43f88 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Daikin.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Daikin.cpp @@ -1102,10 +1102,19 @@ String IRDaikin2::toString(void) { case kDaikin2SwingVHigh: result += kHighestStr; break; - case 2: result += kHighStr; break; - case 3: result += kUpperStr + kMiddleStr; break; - case 4: result += kLowerStr + kMiddleStr; break; - case 5: result += kLowStr; break; + case 2: + result += kHighStr; + break; + case 3: + result += kUpperStr; + result += kMiddleStr; + break; + case 4: + result += kLowerStr; + result += kMiddleStr; + break; + case 5: + result += kLowStr; break; case kDaikin2SwingVLow: result += kLowestStr; @@ -1146,7 +1155,7 @@ String IRDaikin2::toString(void) { kOffTimerStr); result += addLabeledString( getSleepTimerEnabled() ? minsToString(getSleepTime()) : kOffStr, - kSleepStr + ' ' + kTimerStr); + kSleepTimerStr); result += addIntToString(getBeep(), kBeepStr); result += kSpaceLBraceStr; switch (getBeep()) { @@ -1185,7 +1194,7 @@ String IRDaikin2::toString(void) { getFreshAir() ? (getFreshAirHigh() ? kHighStr : kOnStr) : kOffStr, kFreshStr); result += addBoolToString(getEye(), kEyeStr); - result += addBoolToString(getEyeAuto(), kEyeStr + ' ' + kAutoStr); + result += addBoolToString(getEyeAuto(), kEyeAutoStr); result += addBoolToString(getQuiet(), kQuietStr); result += addBoolToString(getPowerful(), kPowerfulStr); result += addBoolToString(getPurify(), kPurifyStr); @@ -2693,8 +2702,7 @@ uint8_t IRDaikin128::getLightToggle(void) { String IRDaikin128::toString(void) { String result = ""; result.reserve(240); // Reserve some heap for the string to reduce fragging. - result += addBoolToString(getPowerToggle(), kPowerStr + ' ' + kToggleStr, - false); + result += addBoolToString(getPowerToggle(), kPowerToggleStr, false); result += addModeToString(getMode(), kDaikin128Auto, kDaikin128Cool, kDaikin128Heat, kDaikin128Dry, kDaikin128Fan); result += addTempToString(getTemp()); @@ -2711,7 +2719,7 @@ String IRDaikin128::toString(void) { result += addLabeledString(minsToString(getOnTimer()), kOnTimerStr); result += addBoolToString(getOffTimerEnabled(), kOffTimerStr); result += addLabeledString(minsToString(getOffTimer()), kOffTimerStr); - result += addIntToString(getLightToggle(), kLightStr + ' ' + kToggleStr); + result += addIntToString(getLightToggle(), kLightToggleStr); result += kSpaceLBraceStr; switch (getLightToggle()) { case kDaikin128BitCeiling: result += kCeilingStr; break; diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Daikin.h b/lib/IRremoteESP8266-2.7.1/src/ir_Daikin.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Daikin.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Daikin.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Denon.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Denon.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Denon.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Denon.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Dish.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Dish.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Dish.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Dish.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Electra.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Electra.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Electra.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Electra.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Electra.h b/lib/IRremoteESP8266-2.7.1/src/ir_Electra.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Electra.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Electra.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Fujitsu.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Fujitsu.cpp similarity index 98% rename from lib/IRremoteESP8266-2.7.0/src/ir_Fujitsu.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Fujitsu.cpp index fe8c2bfed..4b0095b1e 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Fujitsu.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Fujitsu.cpp @@ -632,26 +632,38 @@ String IRFujitsuAC::toString(void) { result += kSwingHStr; break; case kFujitsuAcSwingBoth: - result += kSwingVStr + '+' + kSwingHStr; + result += kSwingVStr; + result += '+'; + result += kSwingHStr; break; default: result += kUnknownStr; } result += ')'; } - result += kCommaSpaceStr + kCommandStr + kColonSpaceStr; + result += kCommaSpaceStr; + result += kCommandStr; + result += kColonSpaceStr; switch (this->getCmd()) { case kFujitsuAcCmdStepHoriz: - result += kStepStr + ' ' + kSwingHStr; + result += kStepStr; + result += ' '; + result += kSwingHStr; break; case kFujitsuAcCmdStepVert: - result += kStepStr + ' ' + kSwingVStr; + result += kStepStr; + result += ' '; + result += kSwingVStr; break; case kFujitsuAcCmdToggleSwingHoriz: - result += kToggleStr + ' ' + kSwingHStr; + result += kToggleStr; + result += ' '; + result += kSwingHStr; break; case kFujitsuAcCmdToggleSwingVert: - result += kToggleStr + ' ' + kSwingVStr; + result += kToggleStr; + result += ' '; + result += kSwingVStr; break; case kFujitsuAcCmdEcono: result += kEconoStr; @@ -663,7 +675,7 @@ String IRFujitsuAC::toString(void) { result += kNAStr; } if (this->getModel() == fujitsu_ac_remote_model_t::ARREB1E) - result += addBoolToString(getOutsideQuiet(), kOutsideStr + ' ' + kQuietStr); + result += addBoolToString(getOutsideQuiet(), kOutsideQuietStr); return result; } diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Fujitsu.h b/lib/IRremoteESP8266-2.7.1/src/ir_Fujitsu.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Fujitsu.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Fujitsu.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_GICable.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_GICable.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_GICable.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_GICable.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_GlobalCache.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_GlobalCache.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_GlobalCache.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_GlobalCache.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Goodweather.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Goodweather.cpp similarity index 98% rename from lib/IRremoteESP8266-2.7.0/src/ir_Goodweather.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Goodweather.cpp index 4cf2e55cd..4c5aa3513 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Goodweather.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Goodweather.cpp @@ -300,9 +300,9 @@ String IRGoodweatherAc::toString(void) { result += addFanToString(getFan(), kGoodweatherFanHigh, kGoodweatherFanLow, kGoodweatherFanAuto, kGoodweatherFanAuto, kGoodweatherFanMed); - result += addLabeledString(getTurbo() ? kToggleStr : F("-"), kTurboStr); - result += addLabeledString(getLight() ? kToggleStr : F("-"), kLightStr); - result += addLabeledString(getSleep() ? kToggleStr : F("-"), kSleepStr); + result += addLabeledString(getTurbo() ? kToggleStr : "-", kTurboStr); + result += addLabeledString(getLight() ? kToggleStr : "-", kLightStr); + result += addLabeledString(getSleep() ? kToggleStr : "-", kSleepStr); result += addIntToString(getSwing(), kSwingStr); result += kSpaceLBraceStr; switch (this->getSwing()) { diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Goodweather.h b/lib/IRremoteESP8266-2.7.1/src/ir_Goodweather.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Goodweather.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Goodweather.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Gree.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Gree.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_Gree.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Gree.cpp index 21eb78e28..2dbebe84b 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Gree.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Gree.cpp @@ -490,7 +490,7 @@ String IRGreeAC::toString(void) { result += addBoolToString(getLight(), kLightStr); result += addBoolToString(getSleep(), kSleepStr); result += addLabeledString(getSwingVerticalAuto() ? kAutoStr : kManualStr, - kSwingVStr + ' ' + kModeStr); + kSwingVModeStr); result += addIntToString(getSwingVerticalPosition(), kSwingVStr); result += kSpaceLBraceStr; switch (getSwingVerticalPosition()) { diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Gree.h b/lib/IRremoteESP8266-2.7.1/src/ir_Gree.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Gree.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Gree.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Haier.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Haier.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_Haier.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Haier.cpp index d0cbf5230..ac8be71ac 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Haier.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Haier.cpp @@ -414,10 +414,14 @@ String IRHaierAC::toString(void) { result += kSleepStr; break; case kHaierAcCmdTimerSet: - result += kTimerStr + ' ' + kSetStr; + result += kTimerStr; + result += ' '; + result += kSetStr; break; case kHaierAcCmdTimerCancel: - result += kTimerStr + ' ' + kCancelStr; + result += kTimerStr; + result += ' '; + result += kCancelStr; break; case kHaierAcCmdHealth: result += kHealthStr; diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Haier.h b/lib/IRremoteESP8266-2.7.1/src/ir_Haier.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Haier.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Haier.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Hitachi.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Hitachi.cpp similarity index 91% rename from lib/IRremoteESP8266-2.7.0/src/ir_Hitachi.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Hitachi.cpp index 6fe776362..fcbcb5fec 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Hitachi.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Hitachi.cpp @@ -537,7 +537,6 @@ void IRHitachiAc424::stateReset(void) { remote_state[3] = 0x40; remote_state[5] = 0xFF; remote_state[7] = 0xCC; - remote_state[11] = 0x13; // Button Action remote_state[33] = 0x80; remote_state[35] = 0x03; remote_state[37] = 0x01; @@ -576,12 +575,13 @@ void IRHitachiAc424::send(const uint16_t repeat) { #endif // SEND_HITACHI_AC424 bool IRHitachiAc424::getPower(void) { - return GETBIT8(remote_state[kHitachiAc424PowerByte], - kHitachiAc424PowerOffset); + return remote_state[kHitachiAc424PowerByte] == kHitachiAc424PowerOn; } void IRHitachiAc424::setPower(const bool on) { - setBit(&remote_state[kHitachiAc424PowerByte], kHitachiAc424PowerOffset, on); + setButton(kHitachiAc424ButtonPowerMode); + remote_state[kHitachiAc424PowerByte] = on ? kHitachiAc424PowerOn + : kHitachiAc424PowerOff; } void IRHitachiAc424::on(void) { setPower(true); } @@ -606,6 +606,7 @@ void IRHitachiAc424::setMode(const uint8_t mode) { newMode); if (newMode != kHitachiAc424Fan) setTemp(_previoustemp); setFan(getFan()); // Reset the fan speed after the mode change. + setButton(kHitachiAc424ButtonPowerMode); } uint8_t IRHitachiAc424::getTemp(void) { @@ -615,11 +616,15 @@ uint8_t IRHitachiAc424::getTemp(void) { void IRHitachiAc424::setTemp(const uint8_t celsius, bool setPrevious) { uint8_t temp; - if (setPrevious) _previoustemp = celsius; temp = std::min(celsius, kHitachiAc424MaxTemp); temp = std::max(temp, kHitachiAc424MinTemp); setBits(&remote_state[kHitachiAc424TempByte], kHitachiAc424TempOffset, kHitachiAc424TempSize, temp); + if (_previoustemp > temp) + setButton(kHitachiAc424ButtonTempDown); + else if (_previoustemp < temp) + setButton(kHitachiAc424ButtonTempUp); + if (setPrevious) _previoustemp = temp; } uint8_t IRHitachiAc424::getFan(void) { @@ -641,6 +646,9 @@ void IRHitachiAc424::setFan(const uint8_t speed) { } newSpeed = std::min(newSpeed, fanMax); + // Handle the setting the button value if we are going to change the value. + if (newSpeed != getFan()) setButton(kHitachiAc424ButtonFan); + // Set the values setBits(&remote_state[kHitachiAc424FanByte], kHighNibble, kNibbleSize, newSpeed); remote_state[9] = 0x92; @@ -654,6 +662,31 @@ void IRHitachiAc424::setFan(const uint8_t speed) { } } +uint8_t IRHitachiAc424::getButton(void) { + return remote_state[kHitachiAc424ButtonByte]; +} + +// The remote sends the type of button pressed on send +void IRHitachiAc424::setButton(const uint8_t button) { + remote_state[kHitachiAc424ButtonByte] = button; +} + +// The remote does not keep state of the vertical swing. +// A byte is sent indicating the swing button is pressed on the remote +void IRHitachiAc424::setSwingVToggle(const bool on) { + uint8_t button = getButton(); // Get the current button value. + if (on) + button = kHitachiAc424ButtonSwingV; // Set the button to SwingV. + else if (button == kHitachiAc424ButtonSwingV) // Asked to unset it + // It was set previous, so use Power as a default + button = kHitachiAc424ButtonPowerMode; + setButton(button); +} + +bool IRHitachiAc424::getSwingVToggle(void) { + return getButton() == kHitachiAc424ButtonSwingV; +} + // Convert a standard A/C mode into its native mode. uint8_t IRHitachiAc424::convertMode(const stdAc::opmode_t mode) { switch (mode) { @@ -710,10 +743,8 @@ stdAc::state_t IRHitachiAc424::toCommon(void) { result.celsius = true; result.degrees = this->getTemp(); result.fanspeed = this->toCommonFanSpeed(this->getFan()); - - // TODO(jamsinclair): Add support. - result.swingv = stdAc::swingv_t::kOff; - + result.swingv = this->getSwingVToggle() ? stdAc::swingv_t::kAuto + : stdAc::swingv_t::kOff; // Not supported. result.swingh = stdAc::swingh_t::kOff; result.quiet = false; @@ -731,7 +762,7 @@ stdAc::state_t IRHitachiAc424::toCommon(void) { // Convert the internal state into a human readable string. String IRHitachiAc424::toString(void) { String result = ""; - result.reserve(60); // Reserve some heap for the string to reduce fragging. + result.reserve(100); // Reserve some heap for the string to reduce fragging. result += addBoolToString(getPower(), kPowerStr, false); result += addModeToString(getMode(), 0, kHitachiAc424Cool, kHitachiAc424Heat, kHitachiAc424Dry, @@ -749,5 +780,21 @@ String IRHitachiAc424::toString(void) { default: result += kUnknownStr; } result += ')'; + result += addBoolToString(getSwingVToggle(), kSwingVToggleStr); + result += addIntToString(getButton(), kButtonStr); + result += kSpaceLBraceStr; + switch (getButton()) { + case kHitachiAc424ButtonPowerMode: + result += kPowerStr; + result += '/'; + result += kModeStr; + break; + case kHitachiAc424ButtonFan: result += kFanStr; break; + case kHitachiAc424ButtonSwingV: result += kSwingVStr; break; + case kHitachiAc424ButtonTempDown: result += kTempDownStr; break; + case kHitachiAc424ButtonTempUp: result += kTempUpStr; break; + default: result += kUnknownStr; + } + result += ')'; return result; } diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Hitachi.h b/lib/IRremoteESP8266-2.7.1/src/ir_Hitachi.h similarity index 90% rename from lib/IRremoteESP8266-2.7.0/src/ir_Hitachi.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Hitachi.h index 4b02b3a4c..3e5ab4ae0 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Hitachi.h +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Hitachi.h @@ -41,6 +41,14 @@ const uint8_t kHitachiAcPowerOffset = 0; const uint8_t kHitachiAcSwingOffset = 7; // HitachiAc424 +// Byte[11] +const uint8_t kHitachiAc424ButtonByte = 11; +const uint8_t kHitachiAc424ButtonPowerMode = 0x13; +const uint8_t kHitachiAc424ButtonFan = 0x42; +const uint8_t kHitachiAc424ButtonTempDown = 0x43; +const uint8_t kHitachiAc424ButtonTempUp = 0x44; +const uint8_t kHitachiAc424ButtonSwingV = 0x81; + // Byte[13] const uint8_t kHitachiAc424TempByte = 13; const uint8_t kHitachiAc424TempOffset = 2; @@ -65,7 +73,8 @@ const uint8_t kHitachiAc424FanMax = 6; const uint8_t kHitachiAc424FanMaxDry = 2; // Byte[27] const uint8_t kHitachiAc424PowerByte = 27; -const uint8_t kHitachiAc424PowerOffset = 4; +const uint8_t kHitachiAc424PowerOn = 0xF1; +const uint8_t kHitachiAc424PowerOff = 0xE1; // Classes class IRHitachiAc { @@ -138,6 +147,10 @@ class IRHitachiAc424 { uint8_t getTemp(void); void setFan(const uint8_t speed); uint8_t getFan(void); + uint8_t getButton(void); + void setButton(const uint8_t button); + void setSwingVToggle(const bool on); + bool getSwingVToggle(void); void setMode(const uint8_t mode); uint8_t getMode(void); uint8_t* getRaw(void); diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Inax.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Inax.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Inax.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Inax.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_JVC.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_JVC.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_JVC.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_JVC.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Kelvinator.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Kelvinator.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Kelvinator.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Kelvinator.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Kelvinator.h b/lib/IRremoteESP8266-2.7.1/src/ir_Kelvinator.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Kelvinator.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Kelvinator.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_LG.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_LG.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_LG.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_LG.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_LG.h b/lib/IRremoteESP8266-2.7.1/src/ir_LG.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_LG.h rename to lib/IRremoteESP8266-2.7.1/src/ir_LG.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Lasertag.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Lasertag.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Lasertag.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Lasertag.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Lego.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Lego.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Lego.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Lego.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Lutron.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Lutron.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Lutron.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Lutron.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_MWM.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_MWM.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_MWM.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_MWM.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Magiquest.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Magiquest.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Magiquest.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Magiquest.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Magiquest.h b/lib/IRremoteESP8266-2.7.1/src/ir_Magiquest.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Magiquest.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Magiquest.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Midea.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Midea.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_Midea.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Midea.cpp index 3160fc291..ce373ebfe 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Midea.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Midea.cpp @@ -387,7 +387,7 @@ String IRMideaAC::toString(void) { kMideaACFanAuto, kMideaACFanAuto, kMideaACFanMed); result += addBoolToString(getSleep(), kSleepStr); } - result += addBoolToString(getSwingVToggle(), kSwingVStr + ' ' + kToggleStr, + result += addBoolToString(getSwingVToggle(), kSwingVToggleStr, !isSwingVToggle()); return result; } diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Midea.h b/lib/IRremoteESP8266-2.7.1/src/ir_Midea.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Midea.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Midea.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Mitsubishi.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Mitsubishi.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_Mitsubishi.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Mitsubishi.cpp index 7e28fd332..cf5c573fc 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Mitsubishi.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Mitsubishi.cpp @@ -745,9 +745,16 @@ String IRMitsubishiAC::toString(void) { result += addIntToString(this->getVane(), kSwingVStr); result += kSpaceLBraceStr; switch (this->getVane()) { - case kMitsubishiAcVaneAuto: result += kAutoStr; break; - case kMitsubishiAcVaneAutoMove: result += kAutoStr + ' ' + kMoveStr; break; - default: result += kUnknownStr; + case kMitsubishiAcVaneAuto: + result += kAutoStr; + break; + case kMitsubishiAcVaneAutoMove: + result += kAutoStr; + result += ' '; + result += kMoveStr; + break; + default: + result += kUnknownStr; } result += ')'; result += addIntToString(this->getWideVane(), kSwingHStr); @@ -760,7 +767,9 @@ String IRMitsubishiAC::toString(void) { result += addLabeledString(minsToString(getClock() * 10), kClockStr); result += addLabeledString(minsToString(getStartClock() * 10), kOnTimerStr); result += addLabeledString(minsToString(getStopClock() * 10), kOffTimerStr); - result += kCommaSpaceStr + kTimerStr + kColonSpaceStr; + result += kCommaSpaceStr; + result += kTimerStr; + result += kColonSpaceStr; switch (this->getTimer()) { case kMitsubishiAcNoTimer: result += '-'; @@ -772,7 +781,9 @@ String IRMitsubishiAC::toString(void) { result += kStopStr; break; case kMitsubishiAcStartStopTimer: - result += kStartStr + '+' + kStopStr; + result += kStartStr; + result += '+'; + result += kStopStr; break; default: result += F("? ("); diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Mitsubishi.h b/lib/IRremoteESP8266-2.7.1/src/ir_Mitsubishi.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Mitsubishi.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Mitsubishi.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_MitsubishiHeavy.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_MitsubishiHeavy.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_MitsubishiHeavy.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_MitsubishiHeavy.cpp index 35ba18548..cc6d066f3 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_MitsubishiHeavy.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_MitsubishiHeavy.cpp @@ -501,10 +501,14 @@ String IRMitsubishiHeavy152Ac::toString(void) { result += kMaxRightStr; break; case kMitsubishiHeavy152SwingHLeftRight: - result += kLeftStr + ' ' + kRightStr; + result += kLeftStr; + result += ' '; + result += kRightStr; break; case kMitsubishiHeavy152SwingHRightLeft: - result += kRightStr + ' ' + kLeftStr; + result += kRightStr; + result += ' '; + result += kLeftStr; break; case kMitsubishiHeavy152SwingHOff: result += kOffStr; @@ -924,10 +928,14 @@ String IRMitsubishiHeavy88Ac::toString(void) { result += kMaxRightStr; break; case kMitsubishiHeavy88SwingHLeftRight: - result += kLeftStr + ' ' + kRightStr; + result += kLeftStr; + result += ' '; + result += kRightStr; break; case kMitsubishiHeavy88SwingHRightLeft: - result += kRightStr + ' ' + kLeftStr; + result += kRightStr; + result += ' '; + result += kLeftStr; break; case kMitsubishiHeavy88SwingH3D: result += k3DStr; diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_MitsubishiHeavy.h b/lib/IRremoteESP8266-2.7.1/src/ir_MitsubishiHeavy.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_MitsubishiHeavy.h rename to lib/IRremoteESP8266-2.7.1/src/ir_MitsubishiHeavy.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_NEC.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_NEC.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_NEC.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_NEC.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_NEC.h b/lib/IRremoteESP8266-2.7.1/src/ir_NEC.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_NEC.h rename to lib/IRremoteESP8266-2.7.1/src/ir_NEC.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Neoclima.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Neoclima.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Neoclima.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Neoclima.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Neoclima.h b/lib/IRremoteESP8266-2.7.1/src/ir_Neoclima.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Neoclima.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Neoclima.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Nikai.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Nikai.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Nikai.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Nikai.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Panasonic.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Panasonic.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Panasonic.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Panasonic.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Panasonic.h b/lib/IRremoteESP8266-2.7.1/src/ir_Panasonic.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Panasonic.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Panasonic.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Pioneer.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Pioneer.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Pioneer.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Pioneer.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Pronto.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Pronto.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Pronto.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Pronto.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_RC5_RC6.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_RC5_RC6.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_RC5_RC6.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_RC5_RC6.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_RCMM.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_RCMM.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_RCMM.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_RCMM.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Samsung.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Samsung.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Samsung.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Samsung.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Samsung.h b/lib/IRremoteESP8266-2.7.1/src/ir_Samsung.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Samsung.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Samsung.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Sanyo.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Sanyo.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Sanyo.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Sanyo.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Sharp.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Sharp.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Sharp.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Sharp.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Sharp.h b/lib/IRremoteESP8266-2.7.1/src/ir_Sharp.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Sharp.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Sharp.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Sherwood.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Sherwood.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Sherwood.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Sherwood.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Sony.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Sony.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Sony.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Sony.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Tcl.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Tcl.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Tcl.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Tcl.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Tcl.h b/lib/IRremoteESP8266-2.7.1/src/ir_Tcl.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Tcl.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Tcl.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Teco.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Teco.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Teco.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Teco.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Teco.h b/lib/IRremoteESP8266-2.7.1/src/ir_Teco.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Teco.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Teco.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Toshiba.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Toshiba.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Toshiba.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Toshiba.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Toshiba.h b/lib/IRremoteESP8266-2.7.1/src/ir_Toshiba.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Toshiba.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Toshiba.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Trotec.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Trotec.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Trotec.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Trotec.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Trotec.h b/lib/IRremoteESP8266-2.7.1/src/ir_Trotec.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Trotec.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Trotec.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Vestel.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Vestel.cpp similarity index 98% rename from lib/IRremoteESP8266-2.7.0/src/ir_Vestel.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Vestel.cpp index c54a262d7..c2a3a905b 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Vestel.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Vestel.cpp @@ -469,7 +469,7 @@ String IRVestelAc::toString(void) { // Not a time command, it's a normal command. result += addBoolToString(getPower(), kPowerStr, false); result += addModeToString(getMode(), kVestelAcAuto, kVestelAcCool, - kVestelAcHeat, kVestelAcDry, kVestelAcFan); + kVestelAcHeat, kVestelAcDry, kVestelAcFan); result += addTempToString(getTemp()); result += addIntToString(getFan(), kFanStr); result += kSpaceLBraceStr; @@ -487,10 +487,14 @@ String IRVestelAc::toString(void) { result += kHighStr; break; case kVestelAcFanAutoCool: - result += kAutoStr + ' ' + kCoolStr; + result += kAutoStr; + result += ' '; + result += kCoolStr; break; case kVestelAcFanAutoHot: - result += kAutoStr + ' ' + kHeatStr; + result += kAutoStr; + result += ' '; + result += kHeatStr; break; default: result += kUnknownStr; diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Vestel.h b/lib/IRremoteESP8266-2.7.1/src/ir_Vestel.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Vestel.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Vestel.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Whirlpool.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Whirlpool.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.0/src/ir_Whirlpool.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Whirlpool.cpp index b9bef9120..9dbdf62e5 100644 --- a/lib/IRremoteESP8266-2.7.0/src/ir_Whirlpool.cpp +++ b/lib/IRremoteESP8266-2.7.1/src/ir_Whirlpool.cpp @@ -472,7 +472,7 @@ String IRWhirlpoolAc::toString(void) { String result = ""; result.reserve(200); // Reserve some heap for the string to reduce fragging. result += addModelToString(decode_type_t::WHIRLPOOL_AC, getModel(), false); - result += addBoolToString(getPowerToggle(), kPowerStr + ' ' + kToggleStr); + result += addBoolToString(getPowerToggle(), kPowerToggleStr); result += addModeToString(getMode(), kWhirlpoolAcAuto, kWhirlpoolAcCool, kWhirlpoolAcHeat, kWhirlpoolAcDry, kWhirlpoolAcFan); result += addTempToString(getTemp()); diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Whirlpool.h b/lib/IRremoteESP8266-2.7.1/src/ir_Whirlpool.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Whirlpool.h rename to lib/IRremoteESP8266-2.7.1/src/ir_Whirlpool.h diff --git a/lib/IRremoteESP8266-2.7.0/src/ir_Whynter.cpp b/lib/IRremoteESP8266-2.7.1/src/ir_Whynter.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/ir_Whynter.cpp rename to lib/IRremoteESP8266-2.7.1/src/ir_Whynter.cpp diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/README.md b/lib/IRremoteESP8266-2.7.1/src/locale/README.md similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/README.md rename to lib/IRremoteESP8266-2.7.1/src/locale/README.md diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/de-CH.h b/lib/IRremoteESP8266-2.7.1/src/locale/de-CH.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/de-CH.h rename to lib/IRremoteESP8266-2.7.1/src/locale/de-CH.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/de-DE.h b/lib/IRremoteESP8266-2.7.1/src/locale/de-DE.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/de-DE.h rename to lib/IRremoteESP8266-2.7.1/src/locale/de-DE.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/defaults.h b/lib/IRremoteESP8266-2.7.1/src/locale/defaults.h similarity index 91% rename from lib/IRremoteESP8266-2.7.0/src/locale/defaults.h rename to lib/IRremoteESP8266-2.7.1/src/locale/defaults.h index 57d2d9d5b..20e38082a 100644 --- a/lib/IRremoteESP8266-2.7.0/src/locale/defaults.h +++ b/lib/IRremoteESP8266-2.7.1/src/locale/defaults.h @@ -349,6 +349,37 @@ #define D_STR_BOTTOM "Bottom" #endif // D_STR_BOTTOM +// Compound words/phrases/descriptions from pre-defined words. +// Note: Obviously these need to be defined *after* their component words. +#ifndef D_STR_EYEAUTO +#define D_STR_EYEAUTO D_STR_EYE " " D_STR_AUTO +#endif // D_STR_EYEAUTO +#ifndef D_STR_LIGHTTOGGLE +#define D_STR_LIGHTTOGGLE D_STR_LIGHT " " D_STR_TOGGLE +#endif // D_STR_LIGHTTOGGLE +#ifndef D_STR_OUTSIDEQUIET +#define D_STR_OUTSIDEQUIET D_STR_OUTSIDE " " D_STR_QUIET +#endif // D_STR_OUTSIDEQUIET +#ifndef D_STR_POWERTOGGLE +#define D_STR_POWERTOGGLE D_STR_POWER " " D_STR_TOGGLE +#endif // D_STR_POWERTOGGLE +#ifndef D_STR_SENSORTEMP +#define D_STR_SENSORTEMP D_STR_SENSOR " " D_STR_TEMP +#endif // D_STR_SENSORTEMP +#ifndef D_STR_SLEEP_TIMER +#define D_STR_SLEEP_TIMER D_STR_SLEEP " " D_STR_TIMER +#endif // D_STR_SLEEP_TIMER +#ifndef D_STR_SWINGVMODE +#define D_STR_SWINGVMODE D_STR_SWINGV " " D_STR_MODE +#endif // D_STR_SWINGVMODE +#ifndef D_STR_SWINGVTOGGLE +#define D_STR_SWINGVTOGGLE D_STR_SWINGV " " D_STR_TOGGLE +#endif // D_STR_SWINGVTOGGLE + +// Separators +#ifndef D_CHR_TIME_SEP +#define D_CHR_TIME_SEP ':' +#endif // D_CHR_TIME_SEP #ifndef D_STR_SPACELBRACE #define D_STR_SPACELBRACE " (" #endif // D_STR_SPACELBRACE @@ -359,9 +390,6 @@ #define D_STR_COLONSPACE ": " #endif // D_STR_COLONSPACE -#ifndef D_CHR_TIME_SEP -#define D_CHR_TIME_SEP ':' -#endif // D_CHR_TIME_SEP #ifndef D_STR_DAY #define D_STR_DAY "Day" #endif // D_STR_DAY diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/en-AU.h b/lib/IRremoteESP8266-2.7.1/src/locale/en-AU.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/en-AU.h rename to lib/IRremoteESP8266-2.7.1/src/locale/en-AU.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/en-IE.h b/lib/IRremoteESP8266-2.7.1/src/locale/en-IE.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/en-IE.h rename to lib/IRremoteESP8266-2.7.1/src/locale/en-IE.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/en-UK.h b/lib/IRremoteESP8266-2.7.1/src/locale/en-UK.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/en-UK.h rename to lib/IRremoteESP8266-2.7.1/src/locale/en-UK.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/en-US.h b/lib/IRremoteESP8266-2.7.1/src/locale/en-US.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/en-US.h rename to lib/IRremoteESP8266-2.7.1/src/locale/en-US.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/es-ES.h b/lib/IRremoteESP8266-2.7.1/src/locale/es-ES.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/es-ES.h rename to lib/IRremoteESP8266-2.7.1/src/locale/es-ES.h diff --git a/lib/IRremoteESP8266-2.7.0/src/locale/fr-FR.h b/lib/IRremoteESP8266-2.7.1/src/locale/fr-FR.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/src/locale/fr-FR.h rename to lib/IRremoteESP8266-2.7.1/src/locale/fr-FR.h diff --git a/lib/IRremoteESP8266-2.7.0/test/IRac_test.cpp b/lib/IRremoteESP8266-2.7.1/test/IRac_test.cpp similarity index 98% rename from lib/IRremoteESP8266-2.7.0/test/IRac_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/IRac_test.cpp index dfe808db4..0d8dfdb12 100644 --- a/lib/IRremoteESP8266-2.7.0/test/IRac_test.cpp +++ b/lib/IRremoteESP8266-2.7.1/test/IRac_test.cpp @@ -572,14 +572,19 @@ TEST(TestIRac, Hitachi424) { IRac irac(0); IRrecv capture(0); char expected[] = - "Power: On, Mode: 6 (Heat), Temp: 25C, Fan: 6 (Max)"; + "Power: On, Mode: 6 (Heat), Temp: 25C, Fan: 6 (Max), " + "Swing(V) Toggle: Off, Button: 19 (Power/Mode)"; + char expected_swingv[] = + "Power: On, Mode: 3 (Cool), Temp: 26C, Fan: 1 (Min), " + "Swing(V) Toggle: On, Button: 129 (Swing(V))"; ac.begin(); irac.hitachi424(&ac, true, // Power stdAc::opmode_t::kHeat, // Mode 25, // Celsius - stdAc::fanspeed_t::kMax); // Fan speed + stdAc::fanspeed_t::kMax, // Fan speed + stdAc::swingv_t::kOff); // Swing(V) ASSERT_EQ(expected, ac.toString()); ac._irsend.makeDecodeResult(); @@ -587,6 +592,21 @@ TEST(TestIRac, Hitachi424) { ASSERT_EQ(HITACHI_AC424, ac._irsend.capture.decode_type); ASSERT_EQ(kHitachiAc424Bits, ac._irsend.capture.bits); ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + + ac._irsend.reset(); + irac.hitachi424(&ac, + true, // Power + stdAc::opmode_t::kCool, // Mode + 26, // Celsius + stdAc::fanspeed_t::kMin, // Fan speed + stdAc::swingv_t::kAuto); // Swing(V) + + ASSERT_EQ(expected_swingv, ac.toString()); + ac._irsend.makeDecodeResult(); + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(HITACHI_AC424, ac._irsend.capture.decode_type); + ASSERT_EQ(kHitachiAc424Bits, ac._irsend.capture.bits); + ASSERT_EQ(expected_swingv, IRAcUtils::resultAcToString(&ac._irsend.capture)); } TEST(TestIRac, Kelvinator) { diff --git a/lib/IRremoteESP8266-2.7.0/test/IRrecv_test.cpp b/lib/IRremoteESP8266-2.7.1/test/IRrecv_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/IRrecv_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/IRrecv_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/IRrecv_test.h b/lib/IRremoteESP8266-2.7.1/test/IRrecv_test.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/IRrecv_test.h rename to lib/IRremoteESP8266-2.7.1/test/IRrecv_test.h diff --git a/lib/IRremoteESP8266-2.7.0/test/IRsend_test.cpp b/lib/IRremoteESP8266-2.7.1/test/IRsend_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/IRsend_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/IRsend_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/IRsend_test.h b/lib/IRremoteESP8266-2.7.1/test/IRsend_test.h similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/IRsend_test.h rename to lib/IRremoteESP8266-2.7.1/test/IRsend_test.h diff --git a/lib/IRremoteESP8266-2.7.0/test/IRutils_test.cpp b/lib/IRremoteESP8266-2.7.1/test/IRutils_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/IRutils_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/IRutils_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/Makefile b/lib/IRremoteESP8266-2.7.1/test/Makefile similarity index 98% rename from lib/IRremoteESP8266-2.7.0/test/Makefile rename to lib/IRremoteESP8266-2.7.1/test/Makefile index 0235042f7..ad75937b8 100644 --- a/lib/IRremoteESP8266-2.7.0/test/Makefile +++ b/lib/IRremoteESP8266-2.7.1/test/Makefile @@ -153,13 +153,13 @@ gtest_main.a : gtest-all.o gtest_main.o IRtext.o : $(USER_DIR)/IRtext.cpp $(USER_DIR)/IRtext.h $(USER_DIR)/IRremoteESP8266.h $(USER_DIR)/i18n.h $(USER_DIR)/locale/*.h $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/IRtext.cpp -IRutils.o : $(USER_DIR)/IRutils.cpp $(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h $(USER_DIR)/i18n.h +IRutils.o : $(USER_DIR)/IRutils.cpp $(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h $(USER_DIR)/i18n.h $(USER_DIR)/IRtext.cpp $(USER_DIR)/IRtext.h $(USER_DIR)/locale/*.h $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/IRutils.cpp IRutils_test.o : IRutils_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c IRutils_test.cpp -IRutils_test : IRutils_test.o ir_NEC.o ir_Nikai.o ir_Toshiba.o $(COMMON_OBJ) gtest_main.a +IRutils_test : IRutils_test.o ir_NEC.o ir_Nikai.o ir_Toshiba.o IRtext.o $(COMMON_OBJ) gtest_main.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ IRtimer.o : $(USER_DIR)/IRtimer.cpp $(USER_DIR)/IRtimer.h @@ -390,7 +390,7 @@ ir_Daikin_test.o : ir_Daikin_test.cpp $(USER_DIR)/ir_Daikin.h $(COMMON_TEST_DEPS ir_Daikin_test : $(COMMON_OBJ) ir_Daikin_test.o $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ -ir_Gree.o : $(USER_DIR)/ir_Gree.cpp $(GTEST_HEADERS) +ir_Gree.o : $(USER_DIR)/ir_Gree.cpp $(GTEST_HEADERS) $(COMMON_DEPS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Gree.cpp ir_Gree_test.o : ir_Gree_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS) @@ -417,7 +417,7 @@ ir_Nikai_test.o : ir_Nikai_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS) ir_Nikai_test : $(COMMON_OBJ) ir_Nikai_test.o $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ -ir_Toshiba.o : $(USER_DIR)/ir_Toshiba.cpp $(USER_DIR)/ir_Toshiba.h $(GTEST_HEADERS) +ir_Toshiba.o : $(USER_DIR)/ir_Toshiba.cpp $(USER_DIR)/ir_Toshiba.h $(COMMON_DEPS) $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Toshiba.cpp ir_Toshiba_test.o : ir_Toshiba_test.cpp $(USER_DIR)/ir_Toshiba.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS) diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Aiwa_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Aiwa_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Aiwa_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Aiwa_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Amcor_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Amcor_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Amcor_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Amcor_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Argo_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Argo_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Argo_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Argo_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Carrier_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Carrier_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Carrier_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Carrier_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Coolix_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Coolix_test.cpp similarity index 93% rename from lib/IRremoteESP8266-2.7.0/test/ir_Coolix_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Coolix_test.cpp index 2a3367765..514e16dba 100644 --- a/lib/IRremoteESP8266-2.7.0/test/ir_Coolix_test.cpp +++ b/lib/IRremoteESP8266-2.7.1/test/ir_Coolix_test.cpp @@ -1,6 +1,7 @@ // Copyright 2017-2018 David Conran #include "ir_Coolix.h" +#include "IRac.h" #include "IRsend.h" #include "IRsend_test.h" #include "gtest/gtest.h" @@ -746,3 +747,56 @@ TEST(TestCoolixACClass, Issue722) { // 564,1620,566,1618,562 // Raw data matches what is expected. "m560s1680m560s1680m560s105040", ac._irsend.outputStr()); } + +TEST(TestCoolixACClass, Issue985) { + IRrecv irrecv(0); + IRCoolixAC ac(0); + + // Test that if we ONLY turn the power off, it only sends a "power off" mesg. + // i.e. Code from: https://github.com/crankyoldgit/IRremoteESP8266/issues/985#issue-516210106 + // First block in the first code included. + ac.setPower(false); + ac.send(); + + ac._irsend.makeDecodeResult(); + ASSERT_TRUE(irrecv.decode(&ac._irsend.capture)); + EXPECT_EQ(COOLIX, ac._irsend.capture.decode_type); + EXPECT_EQ(kCoolixBits, ac._irsend.capture.bits); + EXPECT_EQ(kCoolixOff, ac._irsend.capture.value); + EXPECT_EQ("Power: Off", IRAcUtils::resultAcToString(&ac._irsend.capture)); + + ac._irsend.reset(); + + // Turn the unit on, cool mode, and set the temp. + // Code from: https://github.com/crankyoldgit/IRremoteESP8266/issues/985#issue-516210106 + // Second block in the first code included. + uint8_t aircon_temp = 20; // Random value chosen. + ac.setPower(true); + ac.setMode(kCoolixCool); + ac.setTemp(aircon_temp); + ac.send(); + + ac._irsend.makeDecodeResult(); + ASSERT_TRUE(irrecv.decode(&ac._irsend.capture)); + EXPECT_EQ(COOLIX, ac._irsend.capture.decode_type); + EXPECT_EQ(kCoolixBits, ac._irsend.capture.bits); + EXPECT_NE(kCoolixOff, ac._irsend.capture.value); + EXPECT_EQ( + "Power: On, Mode: 0 (Cool), Fan: 5 (Auto), Temp: 20C, Zone Follow: Off, " + "Sensor Temp: Off", IRAcUtils::resultAcToString(&ac._irsend.capture)); + + ac._irsend.reset(); + + // Now repeat the first block again. + // i.e. Code from: https://github.com/crankyoldgit/IRremoteESP8266/issues/985#issue-516210106 + // First block in the first code included. + ac.setPower(false); + ac.send(); + + ac._irsend.makeDecodeResult(); + ASSERT_TRUE(irrecv.decode(&ac._irsend.capture)); + EXPECT_EQ(COOLIX, ac._irsend.capture.decode_type); + EXPECT_EQ(kCoolixBits, ac._irsend.capture.bits); + EXPECT_EQ(kCoolixOff, ac._irsend.capture.value); + EXPECT_EQ("Power: Off", IRAcUtils::resultAcToString(&ac._irsend.capture)); +} diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Daikin_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Daikin_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Daikin_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Daikin_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Denon_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Denon_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Denon_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Denon_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Dish_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Dish_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Dish_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Dish_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Electra_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Electra_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Electra_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Electra_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Fujitsu_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Fujitsu_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Fujitsu_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Fujitsu_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_GICable_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_GICable_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_GICable_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_GICable_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_GlobalCache_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_GlobalCache_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_GlobalCache_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_GlobalCache_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Goodweather_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Goodweather_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Goodweather_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Goodweather_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Gree_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Gree_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Gree_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Gree_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Haier_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Haier_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Haier_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Haier_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Hitachi_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Hitachi_test.cpp similarity index 96% rename from lib/IRremoteESP8266-2.7.0/test/ir_Hitachi_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Hitachi_test.cpp index e84897dc8..1f04ee8ee 100644 --- a/lib/IRremoteESP8266-2.7.0/test/ir_Hitachi_test.cpp +++ b/lib/IRremoteESP8266-2.7.1/test/ir_Hitachi_test.cpp @@ -912,7 +912,8 @@ TEST(TestDecodeHitachiAc424, RealExample) { IRHitachiAc ac(0); ac.setRaw(irsend.capture.state); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 23C, Fan: 5 (Auto)", + "Power: On, Mode: 3 (Cool), Temp: 23C, Fan: 5 (Auto), " + "Swing(V) Toggle: Off, Button: 19 (Power/Mode)", IRAcUtils::resultAcToString(&irsend.capture)); } @@ -969,8 +970,10 @@ TEST(TestIRHitachiAc424Class, SetAndGetPower) { EXPECT_FALSE(ac.getPower()); ac.setPower(true); EXPECT_TRUE(ac.getPower()); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonPowerMode); ac.setPower(false); EXPECT_FALSE(ac.getPower()); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonPowerMode); } TEST(TestIRHitachiAc424Class, SetAndGetTemp) { @@ -1014,6 +1017,7 @@ TEST(TestIRHitachiAc424Class, SetAndGetFan) { EXPECT_EQ(kHitachiAc424FanAuto, ac.getFan()); ac.setFan(kHitachiAc424FanLow); EXPECT_EQ(kHitachiAc424FanLow, ac.getFan()); + EXPECT_EQ(kHitachiAc424ButtonFan, ac.getButton()); ac.setFan(kHitachiAc424FanHigh); EXPECT_EQ(kHitachiAc424FanHigh, ac.getFan()); ac.setFan(kHitachiAc424FanMax + 1); @@ -1050,6 +1054,29 @@ TEST(TestIRHitachiAc424Class, SetAndGetFan) { EXPECT_EQ(ac.getRaw()[29], 0x00); } + +TEST(TestIRHitachiAc424Class, SetAndGetButton) { + IRHitachiAc424 ac(0); + ac.on(); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonPowerMode); + ac.setButton(kHitachiAc424ButtonTempUp); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonTempUp); + ac.setButton(kHitachiAc424ButtonSwingV); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonSwingV); +} + +TEST(TestIRHitachiAc424Class, ToggleSwingVertical) { + IRHitachiAc424 ac(0); + ac.on(); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonPowerMode); + ac.setSwingVToggle(true); + EXPECT_TRUE(ac.getSwingVToggle()); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonSwingV); + ac.setSwingVToggle(false); + EXPECT_FALSE(ac.getSwingVToggle()); + EXPECT_EQ(ac.getButton(), kHitachiAc424ButtonPowerMode); +} + TEST(TestIRHitachiAc424Class, HumanReadable) { IRHitachiAc424 ac(0); @@ -1058,17 +1085,34 @@ TEST(TestIRHitachiAc424Class, HumanReadable) { ac.on(); ac.setFan(kHitachiAc424FanHigh); EXPECT_EQ( - "Power: On, Mode: 6 (Heat), Temp: 32C, Fan: 4 (High)", + "Power: On, Mode: 6 (Heat), Temp: 32C, Fan: 4 (High), " + "Swing(V) Toggle: Off, Button: 66 (Fan)", ac.toString()); ac.setMode(kHitachiAc424Cool); - ac.setTemp(kHitachiAc424MinTemp); ac.setFan(kHitachiAc424FanMin); + ac.setTemp(kHitachiAc424MinTemp); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 1 (Min)", + "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 1 (Min), " + "Swing(V) Toggle: Off, Button: 67 (Temp Down)", + ac.toString()); + ac.setSwingVToggle(true); + EXPECT_EQ( + "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 1 (Min), " + "Swing(V) Toggle: On, Button: 129 (Swing(V))", + ac.toString()); + ac.setTemp(ac.getTemp() + 1); + EXPECT_EQ( + "Power: On, Mode: 3 (Cool), Temp: 17C, Fan: 1 (Min), " + "Swing(V) Toggle: Off, Button: 68 (Temp Up)", + ac.toString()); + ac.setTemp(ac.getTemp() - 1); + EXPECT_EQ( + "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 1 (Min), " + "Swing(V) Toggle: Off, Button: 67 (Temp Down)", ac.toString()); } -TEST(TestIRHitachiAcClass424, toCommon) { +TEST(TestIRHitachiAc424Class, toCommon) { IRHitachiAc424 ac(0); ac.setPower(true); ac.setMode(kHitachiAc424Cool); @@ -1082,9 +1126,8 @@ TEST(TestIRHitachiAcClass424, toCommon) { ASSERT_EQ(20, ac.toCommon().degrees); ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode); ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed); - // TODO(jamsinclair): Add support. - ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv); // Unsupported. + ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv); ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh); ASSERT_FALSE(ac.toCommon().turbo); ASSERT_FALSE(ac.toCommon().clean); diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Inax_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Inax_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Inax_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Inax_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_JVC_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_JVC_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_JVC_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_JVC_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Kelvinator_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Kelvinator_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Kelvinator_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Kelvinator_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_LG_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_LG_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_LG_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_LG_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Lasertag_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Lasertag_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Lasertag_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Lasertag_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Lego_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Lego_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Lego_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Lego_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Lutron_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Lutron_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Lutron_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Lutron_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_MWM_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_MWM_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_MWM_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_MWM_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Magiquest_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Magiquest_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Magiquest_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Magiquest_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Midea_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Midea_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Midea_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Midea_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_MitsubishiHeavy_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_MitsubishiHeavy_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_MitsubishiHeavy_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_MitsubishiHeavy_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Mitsubishi_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Mitsubishi_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Mitsubishi_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Mitsubishi_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_NEC_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_NEC_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_NEC_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_NEC_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Neoclima_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Neoclima_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Neoclima_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Neoclima_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Nikai_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Nikai_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Nikai_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Nikai_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Panasonic_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Panasonic_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Panasonic_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Panasonic_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Pioneer_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Pioneer_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Pioneer_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Pioneer_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Pronto_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Pronto_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Pronto_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Pronto_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_RC5_RC6_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_RC5_RC6_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_RC5_RC6_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_RC5_RC6_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_RCMM_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_RCMM_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_RCMM_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_RCMM_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Samsung_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Samsung_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Samsung_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Samsung_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Sanyo_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Sanyo_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Sanyo_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Sanyo_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Sharp_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Sharp_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Sharp_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Sharp_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Sherwood_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Sherwood_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Sherwood_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Sherwood_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Sony_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Sony_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Sony_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Sony_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Tcl_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Tcl_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Tcl_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Tcl_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Teco_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Teco_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Teco_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Teco_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Toshiba_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Toshiba_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Toshiba_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Toshiba_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Trotec_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Trotec_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Trotec_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Trotec_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Vestel_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Vestel_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Vestel_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Vestel_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Whirlpool_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Whirlpool_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Whirlpool_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Whirlpool_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/test/ir_Whynter_test.cpp b/lib/IRremoteESP8266-2.7.1/test/ir_Whynter_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/test/ir_Whynter_test.cpp rename to lib/IRremoteESP8266-2.7.1/test/ir_Whynter_test.cpp diff --git a/lib/IRremoteESP8266-2.7.0/tools/Makefile b/lib/IRremoteESP8266-2.7.1/tools/Makefile similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/Makefile rename to lib/IRremoteESP8266-2.7.1/tools/Makefile diff --git a/lib/IRremoteESP8266-2.7.0/tools/RawToGlobalCache.sh b/lib/IRremoteESP8266-2.7.1/tools/RawToGlobalCache.sh similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/RawToGlobalCache.sh rename to lib/IRremoteESP8266-2.7.1/tools/RawToGlobalCache.sh diff --git a/lib/IRremoteESP8266-2.7.0/tools/auto_analyse_raw_data.py b/lib/IRremoteESP8266-2.7.1/tools/auto_analyse_raw_data.py similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/auto_analyse_raw_data.py rename to lib/IRremoteESP8266-2.7.1/tools/auto_analyse_raw_data.py diff --git a/lib/IRremoteESP8266-2.7.0/tools/auto_analyse_raw_data_test.py b/lib/IRremoteESP8266-2.7.1/tools/auto_analyse_raw_data_test.py similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/auto_analyse_raw_data_test.py rename to lib/IRremoteESP8266-2.7.1/tools/auto_analyse_raw_data_test.py diff --git a/lib/IRremoteESP8266-2.7.0/tools/gc_decode.cpp b/lib/IRremoteESP8266-2.7.1/tools/gc_decode.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/gc_decode.cpp rename to lib/IRremoteESP8266-2.7.1/tools/gc_decode.cpp diff --git a/lib/IRremoteESP8266-2.7.0/tools/generate_irtext_h.sh b/lib/IRremoteESP8266-2.7.1/tools/generate_irtext_h.sh similarity index 85% rename from lib/IRremoteESP8266-2.7.0/tools/generate_irtext_h.sh rename to lib/IRremoteESP8266-2.7.1/tools/generate_irtext_h.sh index 5b6e2e544..b4a600eef 100755 --- a/lib/IRremoteESP8266-2.7.0/tools/generate_irtext_h.sh +++ b/lib/IRremoteESP8266-2.7.1/tools/generate_irtext_h.sh @@ -26,8 +26,8 @@ cat >${OUTPUT} << EOF EOF # Parse and output contents of INPUT file. -egrep "^(String|char) " ${INPUT} | cut -f1 -d= | - sed 's/ PROGMEM//;s/ $/;/;s/^/extern const /' | sort -u >> ${OUTPUT} +sed 's/ PROGMEM//' ${INPUT} | egrep "^(const )?char" | cut -f1 -d= | + sed 's/ $/;/;s/^/extern /' | sort -u >> ${OUTPUT} # Footer cat >> ${OUTPUT} << EOF diff --git a/lib/IRremoteESP8266-2.7.0/tools/mkkeywords b/lib/IRremoteESP8266-2.7.1/tools/mkkeywords similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/mkkeywords rename to lib/IRremoteESP8266-2.7.1/tools/mkkeywords diff --git a/lib/IRremoteESP8266-2.7.0/tools/mode2_decode.cpp b/lib/IRremoteESP8266-2.7.1/tools/mode2_decode.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/mode2_decode.cpp rename to lib/IRremoteESP8266-2.7.1/tools/mode2_decode.cpp diff --git a/lib/IRremoteESP8266-2.7.0/tools/scrape_supported_devices.py b/lib/IRremoteESP8266-2.7.1/tools/scrape_supported_devices.py similarity index 100% rename from lib/IRremoteESP8266-2.7.0/tools/scrape_supported_devices.py rename to lib/IRremoteESP8266-2.7.1/tools/scrape_supported_devices.py diff --git a/platformio.ini b/platformio.ini index dd871a365..7e3eaec21 100755 --- a/platformio.ini +++ b/platformio.ini @@ -99,14 +99,10 @@ extra_scripts = pio/strip-floats.py [core_active] ; Select one core set for platform and build_flags -;platform = ${core_2_6_0.platform} -;build_flags = ${core_2_6_0.build_flags} platform = ${core_2_6_1.platform} build_flags = ${core_2_6_1.build_flags} ;platform = ${core_stage.platform} ;build_flags = ${core_stage.build_flags} -;platform = ${core_cstage.platform} -;build_flags = ${core_cstage.build_flags} ; ********************************************************************* @@ -114,71 +110,23 @@ build_flags = ${core_2_6_1.build_flags} build_flags = -D NDEBUG -mtarget-align -Wl,-Map,firmware.map - -[core_2_6_0] -; *** Esp8266 core for Arduino version 2.6.0 (for Windows, most Linux variants and Mac) -; *** custom setup until the core 2.6.0 version is official released from PlatformIO crew -platform = https://github.com/Jason2866/platform-espressif8266.git#core_2_6_0 -build_flags = ${esp82xx_defaults.build_flags} - -Wl,-Teagle.flash.1m.ld - -O2 - -DBEARSSL_SSL_BASIC -; NONOSDK221 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK221 -; NONOSDK22x_190313 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190313 -; NONOSDK22x_190703 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703 -; NONOSDK22x_191024 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191024 -; NONOSDK22x_191105 (Tasmota default) - -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191105 -; NONOSDK3V0 (known issues) -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3 -; lwIP 1.4 -; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH -; lwIP 2 - Low Memory -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY -; lwIP 2 - Higher Bandwidth -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH -; lwIP 2 - Higher Bandwidth Low Memory no Features -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY_LOW_FLASH -; lwIP 2 - Higher Bandwidth no Features (Tasmota default) - -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH -; lwIP 2 - Higher Bandwidth IPv6 (use ONLY if you need IPv6, experimental!) -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_IPV6_HIGHER_BANDWIDTH -; VTABLES in Flash (Tasmota default) - -DVTABLES_IN_FLASH -; VTABLES in Heap -; -DVTABLES_IN_DRAM -; VTABLES in IRAM -; -DVTABLES_IN_IRAM -; enable one option set -> No exception recommended -; No exception code in firmware - -fno-exceptions - -lstdc++ -; Exception code in firmware /needs much space! 90k -; -fexceptions -; -lstdc++-exc [core_2_6_1] -; *** Esp8266 core for Arduino version 2.6.1 (for Windows, most Linux variants and Mac) -; *** custom setup until the core 2.6.0 version is official released from PlatformIO crew -platform = https://github.com/Jason2866/platform-espressif8266.git#core_2_6_1 +; *** Esp8266 core for Arduino version 2.6.1 +platform = https://github.com/platformio/platform-espressif8266.git#develop build_flags = ${esp82xx_defaults.build_flags} -Wl,-Teagle.flash.1m.ld - -O2 -DBEARSSL_SSL_BASIC ; NONOSDK221 ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK221 ; NONOSDK22x_190313 ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190313 -; NONOSDK22x_190703 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703 -; NONOSDK22x_191024 +; NONOSDK22x_190703 = 2.2.2-dev(38a443e) (Tasmota default) + -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703 +; NONOSDK22x_191024 = 2.2.2-dev(5ab15d1) ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191024 -; NONOSDK22x_191105 (Tasmota default) - -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191105 +; NONOSDK22x_191105 = 2.2.2-dev(bb83b9b) +; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191105 ; NONOSDK3V0 (known issues) ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3 ; lwIP 1.4 @@ -212,17 +160,15 @@ build_flags = ${esp82xx_defaults.build_flags} platform = https://github.com/platformio/platform-espressif8266.git#feature/stage build_flags = ${esp82xx_defaults.build_flags} -Wl,-Teagle.flash.1m.ld -; Code optimization see https://github.com/esp8266/Arduino/issues/5790#issuecomment-475672473 - -O2 -DBEARSSL_SSL_BASIC ; NONOSDK221 ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK221 ; NONOSDK22x_190313 ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190313 ; NONOSDK22x_190703 (Tasmota default) -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703 + -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703 ; NONOSDK22x_191024 - -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191024 +; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191024 ; NONOSDK22x_191105 ; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191105 ; NONOSDK3V0 (known issues) @@ -251,49 +197,6 @@ build_flags = ${esp82xx_defaults.build_flags} ; -fexceptions ; -lstdc++-exc -[core_cstage] -; *** Arduino Esp8266 -> Stage with Xtensa build chain 2.5.0.4 and Esptoolpy 2.8 -platform = https://github.com/Jason2866/platform-espressif8266.git#feature/stage -build_flags = ${esp82xx_defaults.build_flags} - -Wl,-Tesp8266.flash.1m.ld - -O2 - -DBEARSSL_SSL_BASIC -; NONOSDK221 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK221 -; NONOSDK22x_190313 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190313 -; NONOSDK22x_190703 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703 -; NONOSDK22x_191024 -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191024 -; NONOSDK22x_191105 - -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191105 -; NONOSDK3V0 (known issues) -; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3 -; lwIP 1.4 -; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH -; lwIP 2 - Low Memory -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY -; lwIP 2 - Higher Bandwidth -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH -; lwIP 2 - Higher Bandwidth Low Memory no Features -; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY_LOW_FLASH -; lwIP 2 - Higher Bandwidth no Features - -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH -; VTABLES in Flash (default) - -DVTABLES_IN_FLASH -; VTABLES in Heap -; -DVTABLES_IN_DRAM -; VTABLES in IRAM -; -DVTABLES_IN_IRAM -; enable one option set -> No exception recommended -; No exception code in firmware - -fno-exceptions - -lstdc++ -; Exception code in firmware /needs much space! 90k -; -fexceptions -; -lstdc++-exc - [env:tasmota] platform = ${common.platform} framework = ${common.framework} diff --git a/scripter.md b/scripter.md deleted file mode 100644 index fe1380194..000000000 --- a/scripter.md +++ /dev/null @@ -1,755 +0,0 @@ -**Script Language for Tasmota** - -As an alternative to rules. (about 17k flash size, variable ram size) - -In submenu Configuration =\> edit script -1535 bytes max script size (uses rules buffer) - -to enable: -\#define USE_SCRIPT -\#undef USE_RULES - - -Up to 50 variables (45 numeric and 5 strings, maybe changed by #define) -Freely definable variable names (all names are intentionally case sensitive) -Nested if,then,else up to a level of 8 -Math operators **+,-,\*,/,%,&,|,^** -all operators may be used in the op= form e.g. **+=** -Left right evaluation with optional brackets -all numbers are float -e.g. temp=hum\*(100/37.5)+temp-(timer\*hum%10) -no spaces allowed between math operations -Comparison operators **==,!=,\>,\>=,<,<=** -**and** , **or** support -hexadecimal numbers are supported with prefix 0x - -strings support **+** and **+=** operators -string comparison **==,!=** -max string size = 19 chars (default, can be increased or decreased by optional >D parameter) - -**Comments** start with **;** - -**Sections** defined: - ->**\>D ssize** -ssize = optional max stringsize (default=19) -define and init variables here, must be the first section, no other code allowed -**p:**vname specifies permanent vars (the number of permanent vars is limited by tasmota rules space (50 bytes) -numeric var=4 bytes, string var=lenght of string+1) -**t:**vname specifies countdown timers, if >0 they are decremented in seconds until zero is reached. see example below -**i:**vname specifies auto increment counters if >=0 (in seconds) -**m:**vname specifies a median filter variable with 5 entries (for elimination of outliers) -**M:**vname specifies a moving average filter variable with 8 entries (for smoothing data) -(max 5 filters in total m+M) optional another filter lenght (1..127) can be given after the definition. -filter vars can be accessed also in indexed mode vname[x] (index = 1...N, index 0 returns current array index pointer) -by this filter vars can be used as arrays - ->all variable names length taken together may not exceed 256 characters, so keep variable names as short as possible. -memory is dynamically allocated as a result of the D section. -copying a string to a number or reverse is supported - ->**\>B** -executed on BOOT time and script save - ->**\>T** -executed on teleperiod time (**SENSOR** and **STATE**), get tele vars only in this section -remark: json variable names (like all others) may not contain math operators like - , you should set setoption64 1 to replace - with underscore - ->**\>F** -executed every 100 ms - ->**\>S** -executed every second - ->**\>E** -executed e.g. on power change and mqtt **RESULT** - ->**\>R** -executed on restart, p vars are saved automatically after this call - - -special variables (read only): - ->**upsecs** = seconds since start -**uptime** = minutes since start -**time** = minutes since midnight -**sunrise** = sunrise minutes since midnight -**sunset** = sunset minutes since midnight -**tper** = teleperiod (may be set also) -**tstamp** = timestamp (local date and time) -**topic** = mqtt topic -**gtopic** = mqtt group topic -**prefixn** = prefix n = 1-3 -**pwr[x]** = tasmota power state (x = 1-N) -**pc[x]** = tasmota pulse counter value (x = 1-4) -**tbut[x]** = touch screen button state (x = 1-N) -**sw[x]** = tasmota switch state (x = 1-N) ->**pin[x]** = gpio pin level (x = 0-16) -**pn[x]** = pin number for sensor code x, 99 if none -**pd[x]** = defined sensor for gpio pin nr x none=999 -**gtmp** = global temperature -**ghum** = global humidity -**gprs** = global pressure -**pow(x y)** = calculates the power of x^y -**med(n x)** = calculates a 5 value median filter of x (2 filters possible n=0,1) -**int(x)** = gets the integer part of x (like floor) -**hn(x)** = converts x (0..255) to a hex nibble string -**st(svar c n)** = stringtoken gets the n th substring of svar separated by c -**sl(svar)** = gets the length of a string -**sb(svar p n)** = gets a substring from svar at position p (if p<0 counts from end) and length n -**s(x)** = explicit conversion from number x to string -**mqtts** = state of mqtt disconnected=0, connected>0 -**wifis** = state of wifi disconnected=0, connected>0 - ->**hours** = hours -**mins** = mins -**secs** = seconds -**day** = day of month -**wday** = day of week -**month** = month -**year** = year - -these variables are cleared after reading true ->**chg[var]** = true if a variables value was changed (numeric vars only) -**upd[var]** = true if a variable was updated -**boot** = true on BOOT -**tinit** = true on time init -**tset** = true on time set -**mqttc** = true on mqtt connect -**mqttd** = true on mqtt disconnect -**wific** = true on wifi connect -**wifid** = true on wifi disconnect - -system vars (for debugging) ->**stack** = stack size -**heap** = heap size -**ram** = used ram size -**slen** = script length -**micros** = running microseconds -**millis** = running milliseconds -**loglvl** = loglevel of script cmds, may be set also - -remarks: -if you define a variable with the same name as a special -variable that special variable is discarded - - -**Tasmota** cmds start with **=\>** -within cmds you can replace text with variables with **%varname%** -a single percent sign must be given as **%%** -**->** is equivalent but doesnt send mqtt or any weblog (silent execute, usefull to reduce traffic) - -**special** cmds: - ->**print** or **=\>print** prints to info log for debugging - -to save code space nearly no error messages are provided. However it is taken care of that at least it should not crash on syntax errors. -if a variable does not exist a **???** is given on commands -if a **SENSOR** or **STATUS** or **RESULT** message or a var does not exist the destination variable is NOT updated. - -2 possibilities for conditionals: ->**if** a==b -**and** x==y -**or** k==i -**then** => do this -**else** => do that -**endif** - -OR - ->**if** a==b -**and** x==y -**or** k==i **{** - => do this -**} else {** - => do that -**}** - -you may NOT mix both methods - -also possible e.g. - ->if var1-var2==var3*var4 -then - -remarks: -the last closing bracket must be on a single line -the condition may be enclosed in brackets -and on the same line conditions may be bracketed e.g. if ((a==b) and ((c==d) or (c==e)) and (s!="x")) - - ->**break** exits a section or terminates a for next loop -**dpx** sets decimal precision to x (0-9) -**svars** save permanent vars -**delay(x)** pauses x milliseconds (should be as short as possible) -**spin(x m)** set gpio pin x (0-16) to value m (0,1) only the last bit is used, so even values set the pin to zero and uneven values set the pin to 1 -**spinm(x m)** set pin mode gpio pin x (0-16) to mode m (input=0,output=1,input with pullup=2) -**ws2812(array)** copies an array (defined with m:name) to the WS2812 LED chain the array should be defined as long as the number of pixels. the color is coded as 24 bit RGB -**hsvrgb(h s v)** converts hue (0-360), saturation (0-100) and value (0-100) to RGB color - ->**#name** names a subroutine, subroutines are called with **=#name** -**#name(param)** names a subroutines with a parameter is called with **=#name(param)** -subroutines end with the next '#' or '>' line or break, may be nested -params can be numbers or strings and on mismatch are converted -**=(svar)** executes a script in a string variable (dynamic or self modifying code) - ->**for var from to inc** -**next** -specifies a for next loop, (loop count must not be less then 1) - ->**switch x** -**case a** -**case b** -**ends** -specifies a switch case selector (numeric or string) - -**sd card support** -enable by CARD_CS = gpio pin of card chip select (+ 10k flash) -\#define USE_SCRIPT_FATFS CARD_CS -sd card uses standard hardware spi gpios: mosi,miso,sclk -max 4 files open at a time -allows for e.g. logging sensors to a tab delimited file and then download (see example below) -the download of files may be executed in a kind of "multitasking" when bit 7 of loglvl is set (128+loglevel) -without multitasking 150kb/s (all processes are stopped during download), with multitasking 50kb/s (other tasmota processes are running) -script itself is also stored on sdcard with a default size of 4096 chars - - -enable sd card directory support (+ 1,2k flash) -\#define SDCARD_DIR -shows a web sdcard directory (submeu of scripter) where you can -upload and download files to/from sd card - - ->**fr=fo("fname" m)** open file fname, mode 0=read, 1=write (returns file reference (0-3) or -1 for error) -**res=fw("text" fr)** writes text to (the end of) file fr, returns number of bytes written -**res=fr(svar fr)** reads a string into svar, returns bytes read (string is read until delimiter \t \n \r or eof) -**fc(fr)** close file -**ff(fr)** flush file, writes cached data and updates directory -**fd("fname")** delete file fname -**flx(fname)** create download link for file (x=1 or 2) fname = file name of file to download -**fsm** return 1 if filesystem is mounted, (valid sd card found) - -extended commands (+0,9k flash) -\#define USE_SCRIPT_FATFS_EXT ->**fmd("fname")** make directory fname ->**frd("fname")** remove directory fname ->**fx("fname")** check if file fname exists ->**fe("fname")** execute script fname (max 2048 bytes, script file must start with '>' char on the 1. line) - - -**konsole script cmds** ->**script 1 or 0** switch script on or off -**script >cmdline** executes the script cmdline -can be used e.g. to set variables e.g. **script >mintmp=15** -more then one line may be executed seperated by a semicolon e.g. **script >mintmp=15;maxtemp=40** -script itself cant be set because the size would not fit the mqtt buffers - -**subscribe,unsubscribe** ->if \#defined SUPPORT_MQTT_EVENT command subscribe and unsubscribe are supported. in contrast to rules no event is generated but the event name specifies a variable defined in D section and this variable is automatically set on transmission of the subscribed item - -**summary of optional defines** ->\#define USE_SCRIPT_FATFS CS_PIN : enables SD card support (on spi bus) also enables 4k script buffer -\#define USE_SCRIPT_FATFS_EXT : enables additional FS commands -\#define SDCARD_DIR : enables support for WEBUI for SD card directory up and download -\#define USE_24C256 : enables use of 24C256 i2c eeprom to expand script buffer (defaults to 4k) -\#define SUPPORT_MQTT_EVENT : enables support for subscribe unsubscribe -\#define USE_TOUCH_BUTTONS : enable virtual touch button support with touch displays - - -***example script*** -meant to show some of the possibilities -(actually this code ist too large) - -**\>D** -; define all vars here -p:mintmp=10 (p:means permanent) -p:maxtmp=30 -t:timer1=30 (t:means countdown timer) -t:mt=0 -i:count=0 (i:means auto counter) -hello="hello world" -string="xxx" -url="[192.168.178.86]" -hum=0 -temp=0 -timer=0 -dimmer=0 -sw=0 -rssi=0 -param=0 - -col="" -ocol="" -chan1=0 -chan2=0 -chan3=0 - -ahum=0 -atemp=0 -tcnt=0 -hour=0 -state=1 -m:med5=0 -M:movav=0 -; define array with 10 entries -m:array=0 10 - -**\>B** - -string=hello+"how are you?" -=\>print BOOT executed -=\>print %hello% -=\>mp3track 1 - -; list gpio pin definitions -for cnt 0 16 1 -tmp=pd[cnt] -=>print %cnt% = %tmp% -next - -; get gpio pin for relais 1 -tmp=pn[21] -=>print relais 1 is on pin %tmp% - -; pulse relais over raw gpio -spin(tmp 1) -delay(100) -spin(tmp 0) - -; raw pin level -=>print level of gpio1 %pin[1]% - -; pulse over tasmota cmd -=>power 1 -delay(100) -=>power 0 - -**\>T** -hum=BME280#Humidity -temp=BME280#Temperature -rssi=Wifi#RSSI -string=SleepMode - -; add to median filter -median=temp -; add to moving average filter -movav=hum - -; show filtered results -=>print %median% %movav% - -if chg[rssi]>0 -then =>print rssi changed to %rssi% -endif - -if temp\>30 -and hum\>70 -then =\>print damn hot! -endif - -**\>S** - -; every second but not completely reliable time here -; use upsecs and uptime or best t: for reliable timers - -; arrays -array[1]=4 -array[2]=5 -tmp=array[1]+array[2] - -; call subrountines with parameters -=#sub1("hallo") -=#sub2(999) - -; stop timer after expired -if timer1==0 -then timer1=-1 -=>print timer1 expired -endif - -; auto counter with restart -if count>=10 -then =>print 10 seconds over -count=0 -endif - -if upsecs%5==0 -then =\>print %upsecs% (every 5 seconds) -endif - -; not recommended for reliable timers -timer+=1 -if timer\>=5 -then =\>print 5 seconds over (may be) -timer=0 -endif - -dimmer+=1 -if dimmer\>100 -then dimmer=0 -endif - -=\>dimmer %dimmer% -=\>WebSend %url% dimmer %dimmer% - -; show on display -dp0 -=\>displaytext [c1l1f1s2p20] dimmer=%dimmer% - -=\>print %upsecs% %uptime% %time% %sunrise% %sunset% %tstamp% - -if time\>sunset -and time< sunrise -then -; night time -if pwr[1]==0 -then =\>power1 1 -endif -else -; day time -if pwr[1]\>0 -then =\>power1 0 -endif -endif - -; clr display on boot -if boot\>0 -then =\>displaytext [z] -endif - -; frost warning -if temp<0 -and mt<=0 -then =#sendmail("frost alert") -; alarm only every 5 minutes -mt=300 -=>mp3track 2 -endif - -; var has been updated -if upd[hello]>0 -then =>print %hello% -endif - -; send to Thingspeak every 60 seconds -; average data in between -if upsecs%60==0 -then -ahum/=tcnt -atemp/=tcnt -=>Websend [184.106.153.149:80]/update?key=PYUZMVWCICBW492&field1=%atemp%&field2=%ahum% -tcnt=0 -atemp=0 -ahum=0 -else -ahum+=hum -atemp+=temp -tcnt+=1 -endif - -hour=int(time/60) -if chg[hour]>0 -then -; exactly every hour -=>print full hour reached -endif - -if time>5 { -=>print more then 5 minutes after midnight -} else { -=>print less then 5 minutes after midnight -} - - -; publish abs hum every teleperiod time -if mqtts>0 -and upsecs%tper==0 -then -; calc abs humidity -tmp=pow(2.718281828 (17.67\*temp)/(temp+243.5)) -tmp=(6.112\*tmp\*hum\*18.01534)/((273.15+temp)\*8.31447215) -; publish median filtered value -=>Publish tele/%topic%/SENSOR {"Script":{"abshum":%med(0 tmp)%}} -endif - -;switch case state machine -switch state -case 1 -=>print state=%state% , start -state+=1 -case 2 -=>print state=%state% -state+=1 -case 3 -=>print state=%state% , reset -state=1 -ends - - -; subroutines -\#sub1(string) -=>print sub1: %string% -\#sub2(param) -=>print sub2: %param% - -\#sendmail(string) -=>sendmail [smtp.gmail.com:465:user:passwd:::alarm] %string% - -**\>E** -=\>print event executed! - -; get HSBColor 1. component -tmp=st(HSBColor , 1) - -; check if switch changed state -sw=sw[1] -if chg[sw]>0 -then =\>power1 %sw% -endif - -hello="event occured" - -; check for Color change (Color is a string) -col=Color -; color change needs 2 string vars -if col!=ocol -then ocol=col -=>print color changed %col% -endif - -; or check change of color channels -chan1=Channel[1] -chan2=Channel[2] -chan3=Channel[3] - -if chg[chan1]>0 -or chg[chan2]>0 -or chg[chan3]>0 -then => color has changed -endif - -; compose color string for red -col=hn(255)+hn(0)+hn(0) -=>color %col% - -**\>R** -=\>print restarting now - -**a log sensor example** -; define all vars here -; reserve large strings -**\>D** 48 -hum=0 -temp=0 -fr=0 -res=0 -; moving average for 60 seconds -M:mhum=0 60 -M:mtemp=0 60 -str="" - -**\>B** -; set sensor file download link -fl1("slog.txt") -; delete file in case we want to start fresh -;fd("slog.txt") - - -; list all files in root directory -fr=fo("/" 0) -for cnt 1 20 1 -res=fr(str fr) -if res>0 -then -=>print %cnt% : %str% -else -break -endif -next -fc(fr) - - -**\>T** -; get sensor values -temp=BME280#Temperature -hum=BME280#Humidity - -**\>S** -; average sensor values every second -mhum=hum -mtemp=temp - -; write average to sensor log every minute -if upsecs%60==0 -then -; open file for write -fr=fo("slog.txt" 1) -; compose string for tab delimited file entry -str=s(upsecs)+"\t"+s(mhum)+"\t"+s(mtemp)+"\n" -; write string to log file -res=fw(str fr) -; close file -fc(fr) -endif - -**\>R** - - - -**a real example** -epaper 29 with sgp30 and bme280 -some vars are set from iobroker -DisplayText substituted to save script space -**\>D** -hum=0 -temp=0 -press=0 -ahum=0 -tvoc=0 -eco2=0 -zwz=0 -wr1=0 -wr2=0 -wr3=0 -otmp=0 -pwl=0 -tmp=0 -DT="DisplayText" -; preset units in case they are not available -punit="hPa" -tunit="C" - -**\>B** -;reset auto draw -=>%DT% [zD0] -;clr display and draw a frame -=>%DT% [x0y20h296x0y40h296] - -**\>T** -; get tele vars -temp=BME280#Temperature -hum=BME280#Humidity -press=BME280#Pressure -tvoc=SGP30#TVOC -eco2=SGP30#eCO2 -ahum=SGP30#aHumidity -tunit=TempUnit -punit=PressureUnit - -**\>S** -// update display every teleperiod time -if upsecs%tper==0 -then -dp2 -=>%DT% [f1p7x0y5]%temp% %tunit% -=>%DT% [p5x70y5]%hum% %%[x250y5t] -=>%DT% [p11x140y5]%press% %punit% -=>%DT% [p10x30y25]TVOC: %tvoc% ppb -=>%DT% [p10x160y25]eCO2: %eco2% ppm -=>%DT% [p10c26l5]ahum: %ahum% g^m3 - -dp0 -=>%DT% [p25c1l5]WR 1 (Dach) : %wr1% W -=>%DT% [p25c1l6]WR 2 (Garage): %-wr3% W -=>%DT% [p25c1l7]WR 3 (Garten): %-wr2% W -=>%DT% [p25c1l8]Aussentemperatur: %otmp% C -=>%DT% [x170y95r120:30f2p6x185y100] %pwl% %% -; now update screen -=>%DT% [d] -endif - - -**\>E** - -**\>R** - -**another real example** -ILI 9488 color LCD Display shows various energy graphs -display switches on and off with proximity sensor -BMP280 and vl5310x -some vars are set from iobroker - -**>D** -temp=0 -press=0 -zwz=0 -wr1=0 -wr2=0 -wr3=0 -otmp=0 -pwl=0 -tmp=0 -dist=0 -DT="DisplayText" -punit="hPa" -tunit="C" -hour=0 - -**>B** -=>%DT% [z] - -// define 2 graphs, 2. has 3 tracks -=>%DT% [zCi1G2656:5:20:400:80:1440:-5000:5000:3Ci7f3x410y20]+5000 W[x410y95]-5000 W [Ci7f1x70y3] Zweirichtungsz~80hler - 24 Stunden -=>%DT% [Ci1G2657:5:120:400:80:1440:0:5000:3Ci7f3x410y120]+5000 W[x410y195]0 W [Ci7f1x70y103] Wechselrichter 1-3 - 24 Stunden -=>%DT% [Ci1G2658:5:120:400:80:1440:0:5000:16][Ci1G2659:5:120:400:80:1440:0:5000:5] -=>%DT% [f1s1b0:260:260:100:50:2:11:4:2:Rel 1:b1:370:260:100:50:2:11:4:2:Dsp off:] -=>mp3volume 100 -=>mp3track 4 - -**>T** -; get some tele vars -temp=BMP280#Temperature -press=BMP280#Pressure -tunit=TempUnit -punit=PressureUnit -dist=VL53L0X#Distance - -; check proximity sensor to switch display on/off -; to prevent burn in -if dist>300 -then -if pwr[2]>0 -then -=>power2 0 -endif -else -if pwr[2]==0 -then -=>power2 1 -endif -endif - - -**>S** -; update graph every teleperiod -if upsecs%tper==0 -then -dp2 -=>%DT% [f1Ci3x40y260w30Ci1] -=>%DT% [Ci7x120y220t] -=>%DT% [Ci7x180y220T] -=>%DT% [Ci7p8x120y240]%temp% %tunit% -=>%DT% [Ci7x120y260]%press% %punit% -=>%DT% [Ci7x120y280]%dist% mm -dp0 -=>%DT% [g0:%zwz%g1:%wr1%g2:%-wr2%g3:%-wr3%] -if zwz>0 -then -=>%DT% [p-8x410y55Ci2Bi0]%zwz% W -else -=>%DT% [p-8x410y55Ci3Bi0]%zwz% W -endif -=>%DT% [p-8x410y140Ci3Bi0]%wr1% W -=>%DT% [p-8x410y155Ci16Bi0]%-wr2% W -=>%DT% [p-8x410y170Ci5Bi0]%-wr3% W -endif - -; chime every full hour -hour=int(time/60) -if chg[hour]>0 -then =>mp3track 4 -endif - -**>E** - -**>R** diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md new file mode 100644 index 000000000..2d0acc894 --- /dev/null +++ b/tasmota/CHANGELOG.md @@ -0,0 +1,2195 @@ +## Unreleased (development) + +### 7.0.0.6 20191122 + +- Add colorpicker to WebUI by Christian Staars (#6984) +- Change new Fade system much smoother, Speed now up to 40 (#6942, #3714) +- Fix Arduino IDE function prototyping compile error (#6982) +- Change update lib IRremoteESP8266 updated to v2.7.1, -2.7k flash and -1.5k RAM for Tasmota-IR + +### 7.0.0.5 20191118 + +- Fix boot loop regression +- Add command ``TempOffset -12.6 .. 12.6`` to set global temperature sensor offset (#6958) +- Fix check deepsleep for valid values in Settings (#6961) +- Fix Wifi instability when light is on, due to sleep=0 (#6961, #6608) +- Add hardware detection to be overruled with ``SetOption51`` (#6969) + +### 7.0.0.4 20191108 + +- Add command ``WifiPower 0 .. 20.5`` to set Wifi Output Power which will be default set to 17dBm +- Change supported PCF8574 I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time +- Change supported PCF8574A I2C address range to 0x39 - 0x3F allowing other I2C devices with address 0x38 to be used at the same time +- Change supported MCP230xx I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time +- Add Keep last channels values when Color command end with '=' (#6799) +- Add support for I2C sensor TLS2591 Light Intensity sensor (#6873) +- Change Kept only NEC/RC5/RC6/HASH IR protocols in standard Tasmota, all other protocols require Tasmota-IR, saving 4K +- Add command ``SetOption76 0/1`` to enable incrementing bootcount when deepsleep is enabled (#6930) +- Change Reset erase end address from as seen by SDK (getFlashChipSize) to full flash size (getFlashChipRealSize) +- Change Zigbee log verbosity reduction + +### 7.0.0.3 20191103 + +- Add command ``I2cDriver`` for I2C driver runtime control using document I2CDEVICES.md +- Fix random crash caused by UPNP flood +- Add support for Honeywell HPMA115S0 particle concentration sensor by David Hunt (#6843) +- Remove driver xsns_12_ads1115_i2cdev replaced by xsns_12_ads1115 + +### 7.0.0.2 20191102 + +- Add command ``WebColor19`` to control color of Module and Name (#6811) +- Add support for Honeywell I2C HIH series Humidity and Temperetaure sensor (#6808) +- Fix wrong Dimmer behavior introduced with #6799 when ``SetOption37`` < 128 +- Change add DS18x20 support in Tasmota-IR +- Add Zigbee command support, considered as v1.0 for full Zigbee support +- Fix Reduce flash size after change to IRremoteESP8266 v2.7.0 + +### 7.0.0.1 20191027 + +- Remove update support for versions before 6.0 +- Change default GUI to dark theme +- Add command ``SetOption73 0/1`` to re-enable HTTP Cross-Origin Resource Sharing (CORS) now default disabled (#6767) +- Add frequency to ADE7953 energy monitor as used in Shelly 2.5 by ljakob (#6778) +- Add command ``SetOption74 0/1`` to enable DS18x20 internal pull-up and remove define DS18B20_INTERNAL_PULLUP (#6795) +- Fix better control of RGB/White when ``SetOption37`` >128, added ``Dimmer1`` and ``Dimmer2`` commands (#6714) +- Add hide Alexa objects with friendlyname starting with '$' (#6722, #6762) +- Add command ``SetOption75 0/1`` to switch between grouptopic (0) using fulltopic replacing %topic% or (1) is cmnd/\ (#6779) +- Change IRremoteESP8266 library to v2.7.0 + +### 6.7.1.1 20191026 + +- Change ArduinoSlave to TasmotaSlave +- Add support for Tuya battery powered devices (#6735) +- Change repository name from Sonoff-Tasmota to Tasmota and all code references from Sonoff to Tasmota + +## Released + +### 6.7.1 20191026 + +- Release +- Fix on energy monitoring devices using PowerDelta Exception0 with epc1:0x4000dce5 = Divide by zero (#6750) +- Fix Script array bug (#6751) + +### 6.7.0 20191025 + +- Release + +### 6.6.0.21 20191022 + +- Remove support for WPS and SmartConfig in favour of Web server (!) based WifiManager (#6680) +- Remove binary sonoff-classic (#6680) +- Remove command ``SetOption2`` + +### 6.6.0.20 20191018 + +- Add command ``SetOption65 0/1`` to disable (1) fast power cycle detection fixing unwanted brownout trigger +- Add absolute PowerDelta using command ``PowerDelta 101..32000`` where 101 = 101-100 = 1W, 202 = 202-100 = 102W (#5901) +- Add support for EX-Store WiFi Dimmer V4 (#5856) +- Add ``ZigbeeRead`` command and many improvements (#6095) +- Add ArduinoSlave driver (EXPERIMENTAL) + +### 6.6.0.19 20191018 + +- Replace obsolete xsns_23_sdm120 with xnrg_08_sdm120 and consolidate define USE_SDM120 +- Replace obsolete xsns_25_sdm630 with xnrg_10_sdm630 and consolidate define USE_SDM630 +- Replace obsolete xsns_49_solaxX1 with xnrg_12_solaxX1 (#6677) + +### 6.6.0.18 20191010 + +- Add command ``DimmerRange`` in Light module to support 2 byte dimming ranges from Tuya +- Add Zigbee additional commands and sending messages to control devices (#6095) +- Fix Rules were not triggered with IR unknown protocol or in sonoff-it (#6629) +- Add define USE_DEEPSLEEP and command ``DeepSleepTime 0 or 10..86400`` (seconds) to enter deepsleep mode (#6638) +- Add define USE_SONOFF_RF to enable/disable Sonoff Rf support (#6648) +- Add incremental beeps to Ifan03 remote control fan speed buttons (#6636) +- Add rule support after every command execution like Fanspeed#Data=2 (#6636) +- Fix handling of ligth channels when pwm_multichannel (Option68) is enabled +- Add WebUI for multiple, independent PWM channels +- Remove default DS18B20 driver and only support define DS18x20 (#6647) +- Add support for PMS3003 dust particle sensor +- Change Sonoff L1 support by adding define USE_SONOFF_L1 + +### 6.6.0.17 20191009 + +- Add command ``SetOption34 0..255`` to set backlog delay. Default value is 200 (mSeconds) (#6562) +- Add command ``Gpio 255`` to show physical GPIO configuration of all non-flash pins (#6407) + +### 6.6.0.16 20191008 + +- Change PZEM004T default address mask from 0.0.0.x to 192.168.1.x for legacy reason (#6585) +- Fix PZEM004T, PZEMAC and PZEMDC autodetection (#6585) +- Change light drivers internals to ease management + +### 6.6.0.15 20191003 + +- Change command ``PulseTime`` JSON message format and allow display of all pulsetimer information (#6519) +- Add support for Chint DDSU666 Modbus energy meter by Pablo Zerón +- Add support for SM2135 as used in Action LSC Smart Led E14 (#6495) +- Add command ``SetOption72 0/1`` to switch between software (0) or hardware (1) energy total counter (#6561) +- Add Zigbee tracking of connected devices and auto-probing of Manuf/Model Ids +- Fix better handling of PWM White Temperature mode for Module 48 (#6534) + +### 6.6.0.14 20190925 + +- Change command ``Tariffx`` to allow time entries like 23 (hours), 1320 (minutes) or 23:00. NOTE: As this is development branch previous tariffs are lost! (#6488) +- Remove support for define USE_DS18x20_LEGACY and legacy DS18x20 driver (#6486) +- Add initial support for MQTT logging using command ``MqttLog `` (#6498) +- Add Zigbee more support - collect endpoints and clusters, added ZigbeeDump command +- Add initial support for shutters by Stefan Bode (#288) +- Add command to MCP230xx: ``sensor29 pin,0/1/2`` for OFF/ON/TOGGLE +- Add initial support for PCF8574 I2C I/O Expander (currently output only) by Stefan Bode +- Add command ``SetOption71 0/1`` to switch between different Modbus Active Energy registers on DDS238-2 energy meters (#6531) +- Change command ``SetOption43`` to make it more general. Now supports PS_16_DZ driver too (#6544) +- Change command handling by moving buffers up in chain solving MQTTlog support (#6529) +- Change detection of non-MQTT commands by allowing non-space characters as delimiter (#6540) +- Fix TasmotaSerial: move serial send to IRAM for high speed baud rates + +### 6.6.0.13 20190922 + +- Add command ``EnergyReset4 x,x`` to initialize total usage for two tarrifs +- Add command ``EnergyReset5 x,x`` to initialize total export (or production) for two tarrifs +- Add command ``Sensor34 8,0`` and ``Sensor34 8,1`` to disable/enable JSON message on weight change over 4 gram +- Add JSON array index support to rules evaluation allowing trigger on ENERGY#POWER[2]>0.60 from JSON ..,"Power":[0.00,0.68],.. (#6160) + +### 6.6.0.12 20190910 + +- Redesign command ``Tariff`` to now default to 0 (=disabled) and allowing to set both Standard Time (ST) and Daylight Savings Time (DST) start hour +- Commands ``Tariff1 22,23`` = Tariff1 (Off-Peak) ST,DST Tariff2 (Standard) 6,7 = Tariff2 ST,DST Tariff9 0/1 = Weekend toggle (1 = Off-Peak during weekend) +- Change rename "Data" to "Hash" and limit to 32 bits when receiving UNKNOWN IR protocol (see DECODE_HASH from IRremoteESP8266) +- Add command ``Gpios 255/All`` to show all available GPIO components (#6407) +- Change JSON output format for commands ``Adc``, ``Adcs``, ``Modules``, ``Gpio`` and ``Gpios`` from list to dictionary (#6407) +- Add Zigbee support phase 3 - support for Xiaomi lumi.weather air quality sensor, Osram mini-switch +- Change energy sensors for three phase/channel support +- Add support for Shelly 2.5 dual energy (#6160) +- Add initial support for up to three PZEM-014/-016 on serial modbus connection with addresses 1 (default), 2 and 3 (#2315) +- Add initial support for up to three PZEM-004T on serial connection with addresses x.x.x.1 (default), 2 and 3 (#2315) +- Add initial support for up to three PZEM-003/-017 on serial modbus connection with addresses 1 (default), 2 and 3 (#2315) +- Add driver USE_SDM630_2 as future replacement for USE_SDM630 - Pls test and report +- Add command ``ModuleAddress 1/2/3`` to set Pzem module address when a single module is connected (#2315) + +### 6.6.0.11 20190907 + +- Change Settings crc calculation allowing short term backward compatibility +- Add support for up to 4 INA226 Voltage and Current sensors by Steve Rogers (#6342) +- Change Improve reliability of TasmotaSerial at 115200 bauds and reduce IRAM usage for Stage/pre-2.6 +- Add support for A4988 stepper-motor-driver-circuit by Tim Leuschner (#6370) +- Add support for Hiking DDS238-2 Modbus energy meter by Matteo Campanella (#6384) + +### 6.6.0.10 20190905 + +- Redesign Tuya support by Shantur Rathore removing commands SetOption34, 41, 44, 45, 46 and 65 (#6353) +- Add command Reset 99 to reset bootcount to zero (#684, #6351) +- Change command Time 1/2/3 to select JSON time format ISO, ISO + Epoch or Epoch for legacy reason + +### 6.6.0.9 20190828 + +- Change theoretical baudrate range to 300..19660500 bps in 300 increments (#6294) +- Add Full support of all protocols in IRremoteESP8266, to be used on dedicated-IR Tasmota version. Warning: +81k Flash when compiling with USE_IR_REMOTE_FULL +- Add compile time define USE_WS2812_HARDWARE to select hardware type WS2812, WS2812X, WS2813, SK6812, LC8812 or APA106 (DMA mode only) +- Add 'sonoff-ir' pre-packaged IR-dedicated firmware and 'sonoff-ircustom' to customize firmware with IR Full protocol support +- Add Zigbee support phase 2 - cc2530 initialization and basic ZCL decoding +- Add driver USE_SDM120_2 with Domoticz P1 Smart Meter functionality as future replacement for USE_SDM120 - Pls test and report +- Add command Power0 0/1/2/Off/On/Toggle to control all power outputs at once (#6340) +- Add time to more events (#6337) +- Add command Time 1/2/3 to select JSON time format ISO + Epoch, ISO or Epoch + +### 6.6.0.8 20190827 + +- Add Tuya Energy monitoring by Shantur Rathore +- Add phase 1 Domoticz P1 Smart Meter support using energy sensors handled by xdrv_03_energy.ino based on an idea by pablozg +- Add commands Tariff1 0..23 (start Off-Peak hour), Tariff2 0..23 (start Standard hour) and Tariff3 0/1 (Saturday and Sunday Off-Peak) + +### 6.6.0.7 20190825 + +- Expand Settings area to 4k for future use + +### 6.6.0.6 20190819 + +- Add I2C display driver for SH1106 oled by Gerhard Mutz +- Add SPI display drivers for epaper 4.2 inch, ILI9488 TFT, SSD1351 Color oled and RA8876 TFT by Gerhard Mutz +- Add support for HM17 bluetooth LE passive scan of ibeacon devices by Gerhard Mutz + +### 6.6.0.5 20190816 + +- Add command WebSensor 0/1 to control display of sensor data in web GUI (#6085) +- Change some table locations from RAM to Flash +- Fix wrong telemetry message when SetOption68 1 (#6191) +- Add support for RDM6300 125kHz RFID Reader by Gerhard Mutz + +### 6.6.0.4 20190806 + +- Add support for CHIRP soil moisture sensor by Christian Baars +- Add debug compile features using defines DEBUG_TASMOTA_CORE, DEBUG_TASMOTA_DRIVER and DEBUG_TASMOTA_SENSOR. +- See DEBUG_CORE_LOG example in sonoff.ino and DEBUG_DRIVER_LOG example in xdrv_09_timers.ino +- Add support for Solax X1 inverter by Pablo Zerón +- Add ZigBee support phase 1 - low level MQTT ZNP messages for CC2530 devices +- Add command Buzzer with optional parameters ,, enabled when a buzzer is configured (#5988) +- Add support for PAJ7620 gesture sensor by Christian Baars + +### 6.6.0.3 20190725 + +- Change filename of configuration backup from using FriendlyName1 to Hostname solving diacritic issues (#2422) +- Change Store AWS IoT Private Key and Certificate in SPI Flash avoiding device-specific compilations +- Upgrade library IRRemoteEsp8266 to 2.6.4, now using sendPioneer() +- Add support for MAX31865 Thermocouple sensor by Alberto Lopez Siemens +- Add option 0 to Width1 (Marker), Width2 (Second), Width3 (Minute) and Width4 (Hour) disabling display (#6152) +- Add MqttCount metric to STATE (#6155) +- Add define USE_ENERGY_MARGIN_DETECTION to disable Energy Margin and Power Limit detection +- Add define USE_ENERGY_POWER_LIMIT to disable Energy Power Limit detection while Energy Margin detection is active +- Add allow repeat/longpress for IRSend raw, introduced IRSend option (#6074) +- Add SetOption68 to enable multi-channel PWM instead of a single light (#6134) + +### 6.6.0.2 20190714 + +- Change commands Var and Mem to show all parameters when no index is given (#6107) +- Add command SetOption67 0/1 to disable or enable a buzzer as used in iFan03 +- Add command DisplayWidth to set pixel width on supported devices +- Add command DisplayHeight to set pixel height on supported devices +- Add support for Sonoff iFan03 as module 71 (#5988) +- Add support for a buzzer +- Add support for IRSend long press ('repeat' feature from IRRemoteESP8266) (#6074) +- Add support for IRHVAC Midea/Komeco protocol (#3227) +- Add support for more IRSend protocols enabled in my_user_config.h +- Add support for IRSend Pioneer protocol (#6100) +- Add Oled reset GPIO option "OLED reset" + +### 6.6.0.1 20190708 + +- Fix Domoticz battery level set to 100 if define USE_ADC_VCC is not used (#6033) +- Fix Force Elliptic Curve for Letsencrypt TLS #6042 +- Fix WeMo emulation for 1G echo and 2G echo dot (#6086) +- Fix Xiaomi Philips brightness (#6091) +- Change defines USE_TX20_WIND_SENSOR and USE_RC_SWITCH in my_user_config.h to disable to lower iram usage enabling latest core compilation (#6060, #6062) +- Add blend RGB leds with White leds for better whites (#5895, #5704) +- Add command SetOption41 0..8 to control number of Tuya switches (#6039) +- Add command SetOption42 0..255 to set overtemperature (Celsius only) threshold resulting in power off all on energy monitoring devices. Default setting is 90 (#6036) +- Add command SetOption66 0/1 to enable or disable Tuya dimmer range 255 slider control +- Add command Time to disable NTP and set UTC time as Epoch value if above 1451602800 (=20160101). Time 0 re-enables NTP (#5279) +- Add AZ7798 automatic setting of clock display (#6034) +- Add Epoch and UptimeSec to JSON messages (#6068) +- Add support for up to 4 INA219 sensors (#6046) + +### 6.6.0 20190707 + +- Remove support of TLS on core 2.3.0 and extent support on core 2.4.2 and up +- Remove MQTT uptime message every hour +- Refactor some defines to const +- Refactor webserver HTML input, button, textarea, and select name based on id +- Refactor webserver sensor data collection +- Refactor TLS based on BearSSL, warning breaking change for fingerprints validation +- Refactor management of lights, using classes and integers instead of floats +- Refactor UDP initial message handling from string to char using static memory and add debug info (#5505) +- Refactor IRSend and receive for 64-bit support (#5523) +- Refactor MQTT which might solve issue (#5755) +- Refactor IRSend by using heap when more than 199 values need to be send. May need increase of define MQTT_MAX_PACKET_SIZE too (#5950) +- Refactor double to float in rules, and replaced trigonometric functions from stdlib with smaller versions (#6005) +- Change pubsubclient MQTT_KEEPALIVE from 10 to 30 seconds for AWS IoT support +- Change gamma correction as default behavior, ie "Ledtable 1" +- Change PWM resolution from 8 to 10 bits for low brightness lights +- Change IRSend Panasonic protocol to 64-bit (#5523) +- Change ADC0 to enabled by default in my_user_config.h (#5671) +- Change define USE_EMULATION by USE_EMULATION_HUE and USE_EMULATION_WEMO (#5826) +- Change default PowerDelta from 80% to 0% on new installations (#5858, #5028, #4813, #4130, #4145, #3795, #3778, #3660, #3648) +- Fix display Bug in KNX webmenu for Physical Address +- Fix the Unescape() function and the SendSerial3 behaviour +- Fix webserver multiple Javascript window.onload functionality +- Fix TasmotaSerial at 9600 bps solving DFPlayer comms (#5528) +- Fix Configure Timer Web GUI (#5568) +- Fix Shelly 2.5 I2C address priority issue when VEML6070 code is present by disabling VEML6070 for Shelly 2.5 (#5592) +- Fix use of SerialDelimiter value 128 (#5634) +- Fix Sonoff Pow R2 / S31 invalid energy increments (#5789) +- Fix core 2.5.x ISR not in IRAM exception (#5837) +- Fix Philips Hue emulation Alexa issue by using part of MAC address for LightId (#5849) +- Fix missing white channel for WS2812 (#5869) +- Fix PZem startup issue (#5875) +- Fix exception 9 when syslog is enabled and NTP is just synced (#5917) +- Fix Toggle functionality to button double press when one button and two devices are detected (#5935) +- Fix channel command for dual dimmers (#5940) +- Fix not restoring white value on power off/power on (#5993) +- Add command AdcParam to control ADC0 Temperature and Light formula parameters +- Add command LedMask to assign which relay has access to power LED (#5602, #5612) +- Add extended LED power control using command LedPowerX where X is 1 to 4. Enabled when "LedLink(i)" is configured too (#5709) +- Add command Sensor20 1..255 to change Nova Fitness SDS01 working period in minutes (#5452) +- Add command SetOption38 6..255 to set IRReceive protocol detection sensitivity mimizing UNKNOWN protocols (#5853) +- Add command SetOption39 1..255 to control CSE7766 (Pow R2) or HLW8032 (Blitzwolf SHP5) handling of power loads below 6W. Default setting is 128 (#5756) +- Add command SetOption40 0..250 to disable button functionality if activated for over 0.1 second. Needs SetOption1 1 and SetOption13 0 (#5449) +- Add command SetOption63 0/1 to disable relay state feedback scan at restart (#5594, #5663) +- Add command SetOption64 0/1 to switch between "-" or "_" as sensor index separator impacting DS18X20, DHT, BMP and SHT3X sensor names (#5689) +- Add command SetOption65 0/1 and more Tuya Serial based device support (#5815) +- Add command WebColor to change GUI colors on the fly +- Add support for AWS IoT with TLS 1.2 on core 2.4.2 and up. Full doc here: https://github.com/arendst/Tasmota/wiki/AWS-IoT +- Add support for Badger HR-E Water Meter (#5539) +- Add support for Shelly 2.5 Energy and overtemp Monitoring (#5592) +- Add support for color and colortone for Philips Hue emulation via Alexa (#5600 #4809) +- Add support for Scripts as replacement for Rules. Default disabled but can be enabled in my_user_config.h (#5689) +- Add support for up to four LEDs related to four power outputs. Enabled when "LedLink(i)" is configured too (#5709) +- Add support for Shelly 1PM Template {"NAME":"Shelly 1PM","GPIO":[56,0,0,0,82,134,0,0,0,0,0,21,0],"FLAG":2,"BASE":18} (#5716) +- Add support for SPS30 Particle sensor thanks to Gerhard Mutz (#5830) +- Add support for VL53L0x time of flight sensor. Might interfere with TSL2561 using same I2C address (#5845) +- Add support for Sonoff L1 thanks to reef-actor (#6002) +- Add rule Http#Initialized +- Add rule System#Save executed just before a planned restart +- Add rule support for single JSON value pair like {"SSerialReceived":"on"} by expanding it to {"SSerialReceived":{"Data":"on"}} allowing for trigger SSerialReceived#Data=on (#5638) +- Add define USE_COUNTER to my_user_config.h to save space in sonoff-basic.bin and sonoff-minimal.bin +- Add define USE_DHT to my_user_config.h to save space in sonoff-basic.bin +- Add defines USE_EMULATION_WEMO and USE_EMULATION_HUE to my_user_config.h to control emulation features at compile time (#5826) +- Add Toggle functionality to button double press when more devices are detected +- Add device OverTemp (>73 Celsius) detection to Energy Monitoring devices with temperature sensor powering off all outputs +- Add Tuya Dimmer 10 second heartbeat serial packet required by some Tuya dimmer secondary MCUs +- Add all temperature, humidity and pressure for global access +- Add validation check when loading settings from flash +- Add HX711 weight restore after controlled restart or after power restore just before executing command Sensor34 7 (#5367, #5786) +- Add GUI hexadecimal color options in my_user_config.h (#5586) +- Add alternative IRSend command syntax IRSend raw,\,\
,\
,\,\,\,\ (#5610) +- Add user configurable ADC0 to Module and Template configuration compatible with current FLAG options (#5671) +- Add AriLux RF control GPIO option "ALux IrSel" (159) replacing "Led4i" (59) for full LED control (#5709) +- Add LED GPIO option "LedLink" (157) and "LedLinki" (158) to select dedicated link status LED (#5709) +- Add all 5 PWM channels individually adressable with LEDs. (#5741) +- Add reset of Energy values when connection to sensor is lost for over 4 seconds (#5874, #5881) +- Add checkbox to GUI password field enabling visibility during password entry only (#5934) + +### 6.5.0 20190319 + +- Remove commands SetOption14 and SetOption63 as it has been superseded by command Interlock +- Remove command SetOption35 0-255 for mDNS start-up delay (#4793) +- Remove support for MQTT_LIBRARY_TYPE, MQTT_ARDUINOMQTT and MQTT_TASMOTAMQTT (#5474) +- Change webserver content handling from single String to small Chunks increasing RAM +- Change code use of boolean to bool and byte to uint8_t +- Change code uint8_t flags to bool flags +- Change sonoff_template.h layout regarding optional module flags like ADC0 +- Change sonoff_template.h module lay-out by removing non-configurable GPIOs +- Change button driver making it modular +- Change switch driver making it modular and introduce input filter (#4665, #4724) +- Change switch input detection by optimizing switch debounce (#4724) +- Change web authentication (#4865) +- Change image name BE_MINIMAL to FIRMWARE_MINIMAL and USE_xyz to FIRMWARE_xyz (#5106) +- Change GUI weblog from XML to plain text solving possible empty screens (#5154) +- Fix most compiler warnings +- Fix Display exception 28 when JSON value is nullptr received +- Fix epaper driver (#4785) +- Fix HAss Sensor Discovery Software Watchdog restart (#4831, #4988) +- Fix allowable MAX_RULE_VARS to 16 (#4933) +- Fix mDNS addService (#4938, #4951) +- Fix HAss discovery of MHZ19(B) sensors (#4992) +- Fix some exceptions and watchdogs due to lack of stack space (#5215) +- Fix GUI wifi password acception starting with asteriks (*) (#5231, #5242) +- Fix command WebSend intermittent results (#5273, #5304) +- Fix additional characters in fallbacktopic, hostname and mqttclient on core 2.5.0 (#5359, #5417) +- Fix Energy TotalStartTime when commands EnergyReset0 and/or EnergyReset3 used (#5373) +- Fix DS18S20 temperature calculation (#5375) +- Fix float calculations in range from 0 to -1 (#5386) +- Fix exception on GUI Configure Logging and Configure Other (#5424) +- Add commands PowerCal, VoltageCal and CurrentCal for HLW8012, HJL01 and BL0937 based energy sensors +- Add command SerialDelimiter 128 to filter reception of only characters between ASCII 32 and 127 (#5131) +- Add command SSerialSend5 \ to SerialBridge +- Add command Interlock 0 / 1 / 1,2 3,4 .. to control interlock ON/OFF and add up to 8 relays in 1 to 4 interlock groups (#4910, #5014) +- Add command Template 255 to copy module configuration over to current active template and store as user template named Merged (#5371) +- Add command WifiConfig 7 to allow reset of device in AP mode without admin password (#5297) +- Add command SetOption36 to control boot loop default restoration (#4645, #5063) +- Add command SetOption37 for RGBCW color mapping (#5326) +- Add command SetOption55 0/1 and define MDNS_ENABLE to disable/enable mDNS (#4793, #4923) +- Add command SetOption62 0/1 to disable retain on Button or Switch hold messages (#5299) +- Add support for Smanergy KA10 Smart Wall Socket with Energy monitoring +- Add support for commands in sensor drivers +- Add support for MAX31855 K-Type thermocouple sensor using softSPI (#4764) +- Add support for Near Field Communication (NFC) controller PN532 using Serial (#4791, #5162) +- Add support for OBI Power Socket 2 (#4829) +- Add support for YTF IR Bridge (#4855) +- Add support for Mi LED Desk Lamp with rotary switch (#4887) +- Add support for Digoo DG-SP202 Smart Socket with Energy monitoring (#4891) +- Add support for MAX44009 Ambient Light sensor (#4907) +- Add support for inverted buttons and inverted buttons without pullup (#4914) +- Add support for Luminea ZX2820 Smart Socket with Energy monitoring (#4921) +- Add support for multiple ADS1115 I2C devices (#5083) +- Add support for online template change using command Template or GUI Configure Other (#5177) +- Add support for Korean language translations (#5344) +- Add support for sensor SCD30 (#5434) +- Add parameter CFG_HOLDER to status 1 message (#5206) +- Add SetOption32 until SetOption49 diagnostic information to Status 3 report as replacement for second property value in SetOption property name +- Add Resolution property to Status 3 report providing previous SetOption second value property +- Add property MqttCount to status 6 message representing number of Mqtt re-connections +- Add property LinkCount to state and status 11 message representing number of Wifi Link re-connections +- Add property Downtime to state and status 11 message representing the duration of wifi connection loss +- Add variable %timestamp% to rules (#4749) +- Add rule support for "==", "!=" ">=" and "<=" (#5122) +- Add rule expression enabled by define USE_EXPRESSION in my_user_config.h (#5210) +- Add Power status functionality to LED2 when configured leaving LED1 for Link status indication +- Add user configuration of HLW8012 and HJL-01/BL0937 Energy Monitoring as used in Sonoff Pow and many Tuya based devices +- Add user configuration of MCP39F501 Energy Monitoring as used in Shelly2 +- Add online template configuration using both commands and Configure Template menu option in GUI +- Add (S)SerialSend3 escape sequence \x to allow hexadecimal byte value (#3560, #4947) +- Add define DS18B20_INTERNAL_PULLUP to select internal input pullup when only one DS18B20 sensor is connected eliminating external resistor (#4738) +- Add button control when no relay configured (#4682) +- Add startup delay of 4 seconds to button control (#4829) +- Add core version conditional compile options to provided PWM files (#4917) +- Add resiliency to saved Settings (#5065) +- Add MHZ19 Temperature as Domoticz Temperature selection (#5128) +- Add HAss status sensor (#5139) +- Add status message to former declined group commands (#5145) +- Add 0x to IRRemote (SetOption29) and RCSwitch (SetOption28) received hexadecimal data (#5431) + +### 6.4.1 20181224 + +- Change RAM usage BMP/BME I2C sensors +- Change FallbackTopic from cmnd/\/ to cmnd/\_fb/ to discriminate from Topic (#1528) +- Change FallbackTopic detection (#4706) +- Change Hass discovery to short MQTT messages as used by Hass 0.81 and up (#4711) +- Change MQTT GUI password handling (#4723) +- Fix possible dtostrf buffer overflows by increasing buffers +- Fix wifi strongest signal detection (#4704) +- Fix Alexa "this value is outside the range of the device". Needs power cycle and Alexa deletion/discovery cycle. (#3159, #4712) +- Add Slovak language file (#4663) +- Add support for AZ-Instrument 7798 CO2 meter/datalogger (#4672) +- Add define WIFI_SOFT_AP_CHANNEL in my_user_config.h to set Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI (#4673) +- Add define USE_MQTT_TLS_CA_CERT for checking MQTT TLS against root ca using Let's Encrypt cert from sonoff_letsencrypt.h - not supported with core 2.3.0 (#4703) + +### 6.4.0 20181217 + +- Change GUI Configure Module by using AJAX for data fetch to cut page size (and memory use) by 40% + In case of web page errors clear your browser cache or do Page Reload (F5 or Ctrl+R) +- Change enforcing flashmode dout but it is still mandatory +- Change bootcount update (being first) flash write to 10 seconds after restart +- Change display and epaper drivers +- Change command WebSend Host header field from IP address to hostname (#4331) +- Change log buffer size from 512 to 520 to accommodate http sensor data (#4354) +- Change default WIFI_CONFIG_TOOL from WIFI_WAIT to WIFI_RETRY in my_user_config.h (#4400) +- Change webgui refresh time delay for Save Settings and local OTA Upload (#4423) +- Change SR-04 driver to use NewPing library (#4488) +- Change MCP230xx driver to support interrupt retention over teleperiod (#4547) +- Change support for MPU6050 using DMP (#4581) +- Fix unintended function overload of WifiState +- Fix wifi connection errors using wifi disconnect and ESP.reset instead of ESP.restart +- Fix Sonoff Pow R2 and Sonoff S31 Serial interface hang caused by Sonoff Basic R2 driver delay implementation (and possibly core bug) +- Fix MQTT connection error after restart +- Fix wifi re-scan connection baseline +- Fix possible strncat buffer overflows +- Fix intermittent Pzem sensor energy overflow calculation error +- Fix shelly2 ghost switching caused by lack of pull-up inputs (#4255) +- Fix hardware serial pin configuration. To keep using hardware serial swap current Rx/Tx pin configuration only (#4280) +- Fix MqttRetry values above 255 seconds (#4424) +- Fix WifiManager functionality on initial installation (#4433) +- Fix ArduinoOTA for Core 2.5.0 (#4620) +- Add minutes to commands Timezone to allow all possible world timezones +- Add more strict checks for GPIO selections +- Add code image and optional commit number to version +- Add dynamic delay to main loop providing time for wifi background tasks +- Add additional start-up delay during initial wifi connection +- Add support for decoding Theo V2 sensors as documented on https://sidweb.nl using 434MHz RF sensor receiver +- Add support for decoding Alecto V2 sensors like ACH2010, WS3000 and DKW2012 weather stations using 868MHz RF sensor receiver +- Add user definition of defines WIFI_RSSI_THRESHOLD (default 10) and WIFI_RESCAN_MINUTES (default 44) +- Add command SetOption58 0/1 to enable IR raw data info in JSON message (#2116) +- Add command IRSend |0,,,.. to allow raw data transmission (#2116) +- Add command SetOption56 0/1 to enable wifi network scan and select highest RSSI (#3173) +- Add command SetOption57 0/1 to enable wifi network re-scan every 44 minutes with a rssi threshold of 10 to select highest RSSI (#3173) +- Add support for SDM220 (#3610) +- Add default sleep 1 to sonoff-basic to lower energy consumption (#4217) +- Add wifi status to Tuya (#4221) +- Add delays to reduce CPU usage at boot time (#4233) +- Add command SetOption24 0/1 to select pressure unit as hPa or mmHg (#4241) +- Add optional hardware serial when GPIO13(Rx) and GPIO15(Tx) are selected removing hardware serial from GPIO01(Tx) and GPIO03(Rx) (#4288) +- Add support for Gosund SP1 v2.3 Power Socket with Energy Monitoring (#4297) +- Add support for Armtronix dimmers. See wiki for info (#4321) +- Add to command WebSend option to send a direct path when command starts with a slash (#4329) +- Add support for LG HVac and IrRemote (#4377) +- Add initial support for Hass sensor discovery (#4380) +- Add support for Fujitsu HVac and IrRemote (#4387) +- Add support for I2C MGC3130 Electric Field Effect sensor by Christian Baars (#3774, #4404) +- Add command CalcRes to set number of decimals (0 - 7) used in commands ADD, SUB, MULT and SCALE (#4420) +- Add CPU average load to state message (#4431) +- Add command SetOption59 0/1 to change state topic from tele/STATE to stat/RESULT (#4450) +- Add support for SM Smart Wifi Dimmer PS-16-DZ (#4465) +- Add support for Teckin US Power Socket with Energy Monitoring (#4481) +- Add command SetOption60 0/1 to select dynamic sleep (0) or sleep (1) (#4497) +- Add support for iFan02 Fanspeed in Domoticz using a selector (#4517) +- Add support for GPIO02 for newer Sonoff Basic (#4518) +- Add Announce Switches to MQTT Discovery (#4531) +- Add support for Manzoku Power Strip (#4590) + +### 6.3.0 20181030 + +- Change web Configure Module GPIO drop down list order for better readability +- Change status JSON message providing more switch and retain information +- Change xsns_17_senseair.ino to use TasmotaModbus library +- Change MCP230xx driver +- Change PubSubClient Mqtt library to non-blocking EspEasy version +- Change energy monitoring using energy sensor driver modules +- Change Webserver page handler for easier extension (thx to Adrian Scillato) +- Change pinmode for no-pullup defined switches to pullup when configured as switchmode PUSHBUTTON (=3 and up) (#3896) +- Change default OTA Url to http://thehackbox.org/tasmota/release/sonoff.bin (#4170) +- Remove support for MQTT Client esp-mqtt-arduino by #define MQTT_LIBRARY_TYPE MQTT_ESPMQTTARDUINO +- Remove commands PowerCal, VoltageCal and CurrentCal as more functionality is provided by commands PowerSet, VoltageSet and CurrentSet +- Remove restart after ntpserver change and force NTP re-sync (#3890) +- Fix showing Period Power in energy threshold messages +- Fix header file execution order by renaming user_config.h to my_user_config.h +- Fix some TSL2561 driver issues (#3681) +- Fix KNX PA exception. Regression from 6.2.1 buffer overflow caused by subStr() (#3700, #3710) +- Fix setting and getting color temperature for Philips Hue emulation (#3733) +- Fix ButtonRetain to not use default topic for clearing retain messages (#3737) +- Fix syslog when emulation is selected (#2109, #3784) +- Fix rule trigger POWER1#STATE execution after restart and SetOption0 is 0 (#3856) +- Fix Home Assistant forced light discovery (#3908) +- Fix invalid configuration restores and decode_config.py crc error when savedata = 0 (#3918) +- Fix timer offset -00:00 causing 12:00 hour offset (#3923) +- Fix I2CScan invalid JSON error message (#3925) +- Fix exception when wrong Domoticz JSON message is received (#3963) +- Fix Sonoff Bridge RfRaw receive (#4080, #4085) +- Fix possible wifi connection error (#4044, #4083) +- Fix invalid JSON floating point result from nan (Not a Number) and inf (Infinity) into null (#4147) +- Fix rule mqtt#connected trigger when mqtt is disabled (#4149) +- Add support for LCD, Matrix, TFT and Oled displays +- Add support for Neo Coolcam Wifi Smart Power Plug +- Add support for Michael Haustein ESP Switch +- Add support for MQTT Client based on lwmqtt to be selected by #define MQTT_LIBRARY_TYPE MQTT_ARDUINOMQTT +- Add support for Neo Coolcam Wifi Smart Power Plug +- Add support for Michael Haustein ESP Switch +- Add support for MQTT Client based on lwmqtt to be selected by #define MQTT_LIBRARY_TYPE MQTT_ARDUINOMQTT +- Add support for DS3231 Real Time Clock +- Add support for HX711 Load Cell with optional web GUI scale interface to demonstrate easy GUI plug-in +- Add support for serial 8N2 communication to TasmotaModbus and TasmotaSerial libraries +- Add support for RF transceiving using library RcSwitch (#2702) +- Add support for Shelly 1 and Shelly 2 (#2789) +- Add support for La Crosse TX20 Anemometer (#2654, #3146) +- Add support for MP3 player using DFRobot RB-DFR-562 (#3723) +- Add Support for Xiaomi-Philips Bulbs (#3787) +- Add support for PCA9685 12bit 16pin hardware PWM driver (#3866) +- Add support for EXS Relay V5.0 (#3810) +- Add support for OBI Power Socket (#1988, #3944) +- Add support for Teckin Power Socket with Energy Monitoring (#3950) +- Add support for Pzem-003/017 DC Energy monitoring module (#3694) +- Add support for Pzem-014/016 AC Energy monitoring module (#3694) +- Add support for CSL Aplic WDP 303075 Power Socket with Energy Monitoring (#3991, #3996) +- Add support for Tuya Dimmer (#469, #4075) +- Add command Display to show all settings at once +- Add command SerialSend5 to send raw serial data like "A5074100545293" +- Add command WebRefresh 1000..10000 to control web page refresh in milliseconds. Default is 2345 +- Add command WeightRes 0..3 to control display of decimals for kilogram +- Add command RGBWWTable to support color calibration (#3933) +- Add command Reset 4 (reset to defaults but keep wifi params) and Reset 5 (as reset 4 and also erase flash) (#4061) +- Add command SetOption35 0..255 (seconds) to delay mDNS initialization to control possible Wifi connect problems +- Add command SetOption52 0/1 to control display of optional time offset from UTC in JSON messages (#3629, #3711) +- Add command SetOption53 0/1 to toggle gui display of Hostname and IP address (#1006, #2091) +- Add authentication to HTTP web pages +- Add decimals as input to commands PowerSet, VoltageSet and CurrentSet +- Add tools/decode-config.py by Norbert Richter to decode configuration data. See file for information +- Add define USE_DISPLAYS for selecting image sonoff-display +- Add define USE_BASIC for selecting image sonoff-basic without most sensors +- Add auto reload of main web page to some web restarts +- Add TasmotaModbus library as very basic modbus wrapper for TasmotaSerial +- Add more API callbacks and document API.md +- Add Apparent Power and Reactive Power to Energy Monitoring devices (#251) +- Add token %hostname% to command FullTopic (#3018) +- Add Wifi channel number to state message (#3664) +- Add user configurable GPIO02 and GPIO03 on H801 devices (#3692) +- Add toggle function RGBW lights (#3695, #3697) +- Add network information to display start screen (#3704) +- Add sleep to Nova Fitness SDS01X sensor (#2841, #3724, #3749) +- Add Analog input AD0 enabled to sonoff-sensors.bin (#3756, #3757) +- Add power value below 5W to Sonoff Pow R2 and S31 (#3745) +- Add RF Receiver control to module MagicHome to be used on Arilux LC10 (#3792) +- Add userid/password option to decode-status.py (#3796) +- Add delay after restart before processing rule sensor data (#3811) +- Add force_update to Home Assistant discovery (#3873) +- Add rule triggers SWITCH1#BOOT and POWER1#BOOT (#3904, #3910) +- Add Hebrew language file (#3960) +- Add TotalStartTime to Energy JSON message (#3971) +- Add whitespace removal from RfRaw and SerialSend5 (#4020) +- Add support for two BMP/BME sensors (#4195) + +### 6.2.1 20180905 + +- Fix possible ambiguity on command parameters if StateText contains numbers only (#3656) +- Fix Wemo emulation to select the first relay when more than one relay is present (#3657) +- Fix possible exception due to buffer overflow (#3659) +- Fix lost energy today and total energy value after power cycle (#3689) + +### 6.2.0 20180901 + +- Allow user override of define MAX_RULE_VARS and MAX_RULE_TIMERS (#3561) +- Disable wifi sleep for both Esp8266/Arduino core 2.4.1 and 2.4.2 to solve device freeze caused by Espressif SDK bug (#3554) +- Change DS18B20 driver to provide better instant results +- Change some sensor drivers to provide instant results +- Change define USE_ALL_SENSORS to USE_SENSORS as it doesn't contain all sensors due to duplicate I2C addresses +- Change some sensor update timings: AdcEvery 200 -> 250, Senseair 300 -> 250, SDM120 300 -> 250, SDM630 300 -> 250 +- Change default Wifi config option from WPS to Wifi Manager if WPS is disabled or Wifi Smartconfig if webserver is disabled or Wifi Serial input if Smartconfig is disabled +- Change SHT1x driver to provide better instant results and fix I2C interference +- Change DHT driver to provide better instant results and add decimals to DHT11 (#3164) +- Change DS18x20 driver to provide better instant results (#3169) +- Change CounterType 1 from milliseconds to microseconds (#3437) +- Change scheduler for better sleep support using Uptime, Delay, PulseTime and TelePeriod, Blinktime (#3581) +- Remove unused functionality from Sonoff-minimal to save space +- Remove WPS and SmartConfig from sonoff-minimal saving 56k code space +- Remove TSL2561 debug message and update library (#2415) +- Remove forced restart when sleep command is executed (#3554) +- Fix invalid response using more than 4 switches and domoticz +- Fix sonoff-minimal not using default settings +- Fix unsecure main webpage update +- Fix DHT driver mixing values for different sensors (#1797) +- Fix EnergyReset3 regression not clearing total energy (#2723) +- Fix rules once regression from v6.1.0 (#3198, #3226) +- Fix command Scale buffer overflow (#3236) +- Fix possible WDT due to long MQTT publish handling (#3313) +- Fix command TimeDst/TimeStd invalid JSON (#3322) +- Fix handling of default names when using names starting with shortcut character ",0,1 or 2 (#3392, #3600, #3618) +- Fix LM75AD I2C sensor detection (#3408) +- Fix iFan02 power on state (#3412, #3530) +- Fix some Pow R2 and S31 checksum errors using optimized re-sync (#3425) +- Fix SDM120 reporting wrong negative values to Domoticz (#3521) +- Fix MQTT reconnection detection when using TasmotaMqtt library (#3558) +- Fix OtaMagic when file path contains a dash (-) (#3563) +- Fix Sonoff Bridge data reception when using Portisch EFM8 firmware using in data buffer length (#3605) +- Add read sensor retry to DS18B20, DS18x20, DHT, SHT1X and HTU21 +- Add user selection of Wifi Smartconfig as define USE_SMARTCONFIG in user_config.h +- Add boot loop detection and perform some solutions +- Add wifi and mqtt status led blinkyblinky to be disabled by SetOption31 1. Does not work when LedPower is On (deliberate) (#871, #2230, #3114, #3155) +- Add support for TM1638 switch (#2226) +- Add GPIO options ButtonXn, SwitchXn and CounterXn to select INPUT mode instead of INPUT_PULLUP (#2525) +- Add support for APDS9960 proximity sensor (#3051) +- Add support for MPR121 controller in input mode for touch buttons (#3142) +- Add support for MCP230xx for general purpose input expansion and command Sensor29 (#3188) +- Add default Wifi Configuration tool as define WIFI_CONFIG_NO_SSID in user_config.h if no SSID is configured (#3224) +- Add command Timers 0/1 to globally disable or enable armed timers (#3270) +- Add support for CCS811 sensor (#3309) +- Add Turkish language file (#3332) +- Add command SerialSend4 to send binary serial data (#3345) +- Add initial support for sensor MPU6050 (#3352) +- Add rule triggers Wifi#Connected and Wifi#Disconnected (#3359) +- Add option + to command Rule to concatenate new rule with existing rules (#3365) +- Add message when JavaScript is not enabled in webbrowser (#3388) +- Add build time setting of ButtonTopic and SwitchTopic (#3414) +- Add iFan02 Fanspeed + and Fanspeed - command options (#3415) +- Add Individual HSBColorX commands (#3430, #3615) +- Add output support on MCP23008/MCP23017 (#3436) +- Add modulo option to rules like rule1 on Time#Minute|5 do backlog power on;delay 200;power off endon (#3466) +- Add RGB support for Domoticz (#3547) +- Add all ruletimer values to command RuleTimer result message (#3571) +- Add command Publish2 for publishing retained MQTT messages (#3593) +- Add commands ButtonDebounce 40..1000 and SwitchDebounce 40..1000 to have user control over debounce timing. Default is 50mS (#3594) +- Add RuleX debug options 8,9,10 (StopOnError) to control RuleX execution status after an exception restart (#3607) +- Add rule variables %sunrise%, %sunset%, %uptime% and %time% (#3608) +- Add optional MQTT_TELE_RETAIN to Energy Margins message (#3612, 3614) + +### 6.1.1 20180714 + +- Revert wifi changes (#3177) +- Revert sonoff-minimal removals causing failure of wifi connection (#3177) + +### 6.1.0 20180706 + +- Remove version 3, 4 and pre 5.2 settings auto-upgrade. See https://github.com/arendst/Tasmota/wiki/Upgrading#migration-path +- Change default CFG_HOLDER from 0x20161209 to 4617 (=0x1209) - no impact on default upgrades +- Change number of supported switches from 4 to 8 (#2885, #3086) +- Change BME680 driver from Adafruit to Bosch BME680 library (#2969) +- Fix Pzem004T checksum error +- Fix KNX bug when doing reply of sensors values +- Fix rules induced LWT message +- Fix possible wifi connection problem (#1366) +- Fix some Pow R2 and S31 checksum errors (#1907) +- Fix display selection of un-available GPIO options in Module Configuration webpage (#2718) +- Fix timer re-trigger within one minute after restart (#2744) +- Fix IRSend not accepting data value of 0 by David Conran (#2751) +- Fix vars on rules by Adrian Scillato (#2769) +- Fix bug in KNX menu by Adrian Scillato (#2770) +- Fix anomalies in rules (#2778) +- Fix HUE bridge V1 software version by Heiko Krupp (#2788) +- Fix Hardware Watchdog restart when using event command (#2853) +- Add Ukrainian language file +- Add KNX support for DS18S20 Temperature sensor +- Add CRC to Settings making future upgrades more fail-safe +- Add feature information to Status 4 +- Add tools folder with python script decode-status.py for decoding some status fields like SetOption and Features +- Add Slots on the KNX Web Menu to select Group Addess to receive data to trigger rules +- Add two rule sets of 511 characters using commands rule1, rule2 and rule3 +- Add Console Commands to send KNX Commands and KNX Values +- Add Slots on the KNX Web Menu to select Group Addess to send data from console commands +- Add Events to trigger rules when a command or read requests is received from KNX +- Add command SetOption30 to enforce Hass discovery as light group (#1784) +- Add support for BlitzWolf BW-SHP2 (and Homecube, Gosund SP1) Energy Monitoring Smart Socket (#2223) +- Add time in minutes to rule Time#Initialized, Time#set and Time#Minute (#2669) +- Add Eastron SDM630 energy meter by Gennaro Tortone (#2735) +- Add KNX communication enhancement by Adrian Scillato (#2742) +- Add KNX energy data by Adrian Scillato (#2750) +- Add rule support for IrReceive and RfReceive (#2758) +- Add python script fw-server.py in tools folder to create a simple OTA server by Gennaro Tortone (#2759) +- Add rule variables %time% for minutes since midnight, %uptime%, %sunrise% and %sunset% giving time in minutes (#2669) +- Add rules %mem1% to %mem5% variable names storing data in flash (#2780) +- Add rules test on %varx% or %memx% (#2780) +- Add optional token %id% substituting the unique MAC address to fulltopic by Michael Graf (#2794) +- Add support for Sonoff S26 Smart Socket (#2808) +- Add command WebSend [(:,:)] (#2821) +- Add increment and decrement value to command Counter (#2838) +- Add support for Sonoff iFan02 as module 44 introducing command FanSpeed 0..3 (#2839) +- Add source information to command execution to be shown with logging option 3 (#2843) +- Add support for uploading Sonoff Bridge firmware found in tools/fw_efm8bb1 folder build by Portisch using Web Gui File Upload (#2886) +- Add command RfRaw to control Portisch firmware features +- Add support for I2C temperature sensor LM75AD (#2909) +- Add option 0 to command Timers disarming all timers (#2962) +- Add performance improvement when updating multiple individual WS2812 pixels (#3007) +- Add command SetOption28 to switch between hex or decimal Sonoff Bridge RF received data format (#3008) +- Add command SetOption29 to switch between hex or decimal IR received data format +- Add decimal values support for commands ADD, SUB, MULT and SCALE (#3083, #3089) +- Add support for bitflags SetOption50 .. SetOption81 (#3118) + +### 5.14.0 20180515 + +- Update language files +- Update TasmotaSerial to 2.0.0 allowing Hardware Serial Fallback when correct connections are configured +- Change command handling +- Change user_config(_override).h defines TIME_STD and TIME_DST +- Change user_config(_override).h otaurl to http://sonoff.maddox.co.uk/tasmota/sonoff.bin (#2588, #2602) +- Fix configuration restore regression from 5.13.1 +- Fix compile error when ADC is enabled and Rules are disabled (#2608) +- Fix rule power trigger when no backlog command is used (#2613) +- Fix several timer data input and output errors (#2597, #2620) +- Fix KNX config error (#2628) +- Fix sensor MHZ-19 vanishing data over time (#2659) +- Fix KNX reconnection issue (#2679) +- Fix DST and STD time for Southern Hemisphere by Adrian Scillato (#2684, #2714) +- Add Portuguese in Brazil language file +- Add SetOption26 to enforce use of indexes even when only one relay is present (#1055) +- Add support for sensor SI1145 UV Index / IR / Visible light (#2496) +- Add rule state test for On/Off in addition to 0/1 (#2613) +- Add hardware serial option to MHZ-19 sensor (#2659) +- Add Eastron SDM120 energy meter by Gennaro Tortone (#2694) +- Add user entry DST/STD using commands TimeStd and TimeDst (See wiki for parameter syntax) (#2721) + +### 5.13.1 20180501 + +- Fix JSON buffers size too small for execution in some situations (#2580) +- Fix configuration restore (#2591) +- Add define MODULE for user selecting default model although it preferably should not be changed (#569, #2589) + +### 5.13.0 20180430 + +- Change platformio option sonoff-ds18x20 to sonoff-allsensors enabling ds18x20 and all other sensors in one image +- Change status display of Ssid and SetOption +- Change default option SetOption15 from 0 to 1 providing better initial PWM experience +- Change webpage parameter communication +- Change max number of commands in Backlog from 15 to 30 and ignore commands overflowing +- Change TSL2561 driver to joba library and delete Adafruit library (#1644) +- Change default parameters in user_config.h to undefined for easy installation (#1851) +- Change max user configurable hold time from 10 to 25 seconds (#1851) +- Change Sonoff SC JSON format (#1939) +- Change Polish language to using Diacritics (#2005) +- Change user_config_override usage by providing user_config_override_sample.h (#2228) +- Change MQTT response topic for Energy changes from ENERGY to SENSOR (#2229, #2251) +- Change default Reset configuration time from 4 seconds to 40 seconds on Button hold (#2268) +- Change ESP8266 Analog JSON message from {"Analog0:123"} to {"ANALOG":{"A0:123"}} to accomodate rules (#2560) +- Change Counter JSON message from {"Counter1":0,"Counter3":0} to {"COUNTER":{"C1":0,"C3":0}} to accomodate rules +- Change ADS1115 JSON message from {"ADS1115":{"Analog0":123,"Analog1":123}} to {"ADS1115":{"A0":123,"A1":123}} +- Fix intermittent exception when dns lookup is used while sleep is enabled +- Fix 5.4.0 regression turning off single press after button hold during 4x hold time +- Fix possible wifi connection problem by erasing sdk configuration parameters +- Fix NTP sync to Thu Jan 01 08:00:10 1970 results in uptime 17651+ days (core2.4.1/sdk2.2.1) +- Fix MAX31850 higher temperatures (#1269) +- Fix freeing more code space when emulation is disabled (#1592) +- Fix providing web page configuratin option for Friendly Name when no device (relay or light) is configured (#1850) +- Fix compile error when define HOME_ASSISTANT_DISCOVERY_ENABLE is not set (#1937) +- Fix MQTT TLS fingerprint validation (#2033) +- Fix update temperature on DS18x20 drivers (#2328) +- Fix compile error when not defined USE_TIMERS (#2400) +- Fix configuration filename truncation when it contains spaces (#2484, #2490) +- Fix Energy Today and Yesterday overflow (#2543) +- Add serial debug info +- Add Portuguese language file +- Add Czech language file +- Add Bulgarian language file +- Add Domoticz dust (custom) sensors to PMS5003 and NovaFitness SDS drivers as PM1, PM2.5 and PM10 +- Add commands Publish, Rule, RuleTimer and Event. See Wiki about Rule restriction, usage and examples +- Add sonoff-classic, sonoff-allsensors and sonoff-knx +- Add some coloring to important web buttons +- Add support for sensor HC-SR04 ultrasonic (#113, #1964, #2444) +- Add define MQTT_TELE_RETAIN compile option default set to 0 (#1071) +- Add 16 timers using commands Timer and Timers (#1091) +- Add optional Timer configuration webpage to be enabled in user_config.h with define USE_TIMERS_WEB +- Add Multichannel Gas sensor using MultiChannel_Gas_Sensor library (#1245) +- Add Domoticz Battery and RSSI Quality (#1604) +- Add command HSBColor Hue,Sat,Bri (#1642, #2203) +- Add compile time support for WS2812 BRG and RBG led configurations to be defined in user_config.h (#1690) +- Add optional usage of %d or %X suffices in MQTT client to append chipid (#1871) +- Add optional usage of %d or %X suffices in MQTT topic to append chipid (#1871) +- Add optional usage of %d or %04d in ota url to be replaced with chipid (#1871) +- Add Sonoff Bridge command RfKey 5 to show current RF key values either default or learned (#1884) +- Add user configurable serial GPIOs to MagicHome and Arilux modules (#1887) +- Add Russian language file (#1909) +- Add Webserver upload preflight request support (#1927) +- Add Home Assistant clear other device (#1931) +- Add Restart time to Status 1 (#1938) +- Add optional TSL2561 driver using library Joba_Tsl2561 to be enabled in user_config.h with define USE_TSL2561_JOBA (#1951) +- Add support for sensor SHTC3 (#1967) +- Add compiler check for stable lwIP version v1.4 (#1940) +- Add support for multiple SHT3X sensors (#1949, #2110) +- Add always suffix with device number in Mqtt discovery topic (#1962) +- Add support for optional MQTT drivers to be selected in user_config.h (#1992) +- Add optional Arduino OTA support to be enabled in user_config.h (#1998) +- Add diacritics to Polish language file (#2005) +- Add Hungarian language file (#2024) +- Add support for Nova Fitness SDS011 and possibly SDS021 particle concentration sensor (#2070) +- Add single decimal precision to Nova Fitness SDS0x1 sensor values (#2093) +- Add Chinese (Traditional) in Taiwan language file (#2108) +- Add Sonoff SC domoticz support for Sound level as Counter and Air quality (#2118) +- Add a second TLS fingerprint to allow switching keys in TLS mode (#2033, #2102) +- Add display of remaining pulse time to command PulseTime (#2085) +- Add additional time offset to Wifi Retry based on device mac address (#2089) +- Add command Color6 RRGGBB for Clock hour marker color and command Rotation pixels for Clock rotation (#2092) +- Add HTML language header in local language (#2123) +- Add command PowerDelta 0..100 (percentage) to Energy monitoring devices to report on active power load change (#2157) +- Add Restart Reason to Status 1 report (#2161) +- Add command Channel 0..100 to control dimmer value for individual color channels (#2111, #2203) +- Add support for Hardware Serial bridge using commands SerialDelimiter, Baudrate and SerialSend. Supports 8N1 and text only (#2182) +- Add support for Software Serial bridge using commands SerialDelimiter, SBaudrate and SSerialSend. Supports 8N1 and text only (#2190) +- Add support for Zengge WF017 PWM Led strip controller (#2202) +- Add PWM status to command State if PWM enabled (#2203) +- Add all FriendlyNames to Status information (#2208) +- Add Channel status information (#2211) +- Add hexadecimal Data entry to command IrSend using 0x notation (#1290, #2314) +- Add Home Assistant MQTT Discovery for Buttons and change SetOption19 response (#2277) +- Add multiple color entry support for command Led like Led2 120000 001200 000012 setting led2 as Red, Led3 as Green and Led4 as Blue (#2303) +- Add hexadecimal RGB color entry on RGBCW leds (#2304) +- Add support for SGP30 gas and air quality sensor (#2307) +- Add optional Sunrise and Sunset timers with commands Latitide and Longitude to be enabled with define USE_SUNRISE in user_config.h (#2317) +- Add timer sunrise and sunset offset (#2378) +- Add user selectable defines for Sunrise/set Dawn option (#2378) +- Add optional KNX IP Protocol Support (#2402) +- Add random window to timers (#2447) +- Add Greek language file (#2491) +- Add support for Sonoff Pow R2 (#2340) +- Add GPIO_User to GPIO02 for all Sonoff T1 (#2524) + +### 5.12.0 20180209 + +- Change library PubSubClient.h define MQTT_MAX_PACKET_SIZE from 512 to 1000 for Home Assistant support +- Change relation of define MESSZ being dependent on PubSubClient.h define MQTT_MAX_PACKET_SIZE +- Change command color parameter input checks to less strict for Home Assistant support +- Change command Ina219Mode into command Sensor13 +- Change commands HlwPCal, HlwUCal and HlwICal to PowerCal, VoltageCal and CurrentCal to be used for both Pow and S31 calibration +- Change commands HlwPSet, HlwUSet and HlwISet to PowerSet, VoltageSet and CurrentSet to be used for both Pow and S31 calibration +- Change uptime from hour to second resulting in a display of 123T13:45:21 where 123 is days +- Change module name Wemos D1 mini into Generic (#1220) +- Change HTML from width=100% to style=width:100% supporting HTML5 (#1358) +- Change OSWATCH_RESET_TIME (Blocked loop) from 30 to 120 seconds to allow slow networks (#1556) +- Change WIFI_MANAGER_SEC into WIFI_CONFIG_SEC (#1616) +- Change function pointers code to save code space and memory (#1683) +- Change webserver argument processing gaining 5k code space (#1705) +- Change weblog memory usage (#1730, #1793, #1819) +- Update TasmotaSerial library to 1.1.0 +- Update language files Italian (#1594), Dutch (#1723) and Spanish (#1722) +- Fix Non-English JSON temperature unit attachement +- Fix Arilux RF induced exception by moving interrupt handler to iram on non ESP8266/Arduino lib v2.3.0 +- Fix truncated command names and wrong response for DomoticzSwitchIdx (#1571) +- Fix %-sign issue as printf escape character in Humidity and Sonoff SC (#1579) +- Fix DS18B20 temperature JSON decimal dot (#1561) +- Fix Energy JSON message (#1621) +- Fix IRSend parameter translation (#1636) +- Fix TSL2561 device detection (#1644, #1825) +- Fix BME680 teleperiod resistance measuring (#1647) +- Fix Energy Monitoring Energy Today and Energy Total reading after restart (#1648) +- Fix IRReceive Data value (#1663) +- Fix Energy Monitoring Energy Period roll-over (#1688) +- Fix compiler warnings (#1774) +- Fix command PWM response if no PWM channel is configured (#1783) +- Add locale Decimal Separator to Web sensor page +- Add ColorTemperature to light status message +- Add command PowerOnState option 5 which inverts PulseTime and allows for delayed always on after power on +- Add OtaMagic two step Web server OTA upgrade using filename-minimal image if OTA free space is too small +- Add support for PMS5003 and PMS7003 particle concentration sensor +- Add command SetOption21 1 to allow Energy Monitoring when power is off on Sonoff Pow and Sonoff S31 (#1420) +- Add Chinese language file (#1551) +- Add French language file (#1561) +- Add Spanish language file (#1589) +- Add HTTP Allow Cross Origin removed from ESP8266/Arduino lib v2.4.0 (#1572) +- Add Home Assistant MQTT Discovery for switch and light to be enabled by command SetOption19 1 (#1534) or define HOME_ASSISTANT_DISCOVERY_ENABLE in user_config.h (#1685) +- Add command State to retrieve device state information (same data as teleperiod state and status 11 in slightly different JSON format) +- Add optional login to Webserver AP mode (#1587, #1635) +- Add command Sensor15 2 to start MHZ19(B) Zero Point Calibration (#1643) +- Add support for Sonoff S31 Smart Socket with Power Consumption Detection (#1626) +- Add command SetOption20 to allow update of Dimmer/Color/Ct without turning power on (#1719, #1741) +- Add NTP sync time slot based on chip id (#1773) +- Add cursor pointer to web button (#1836) + +### 5.11.1 20180107 + +- Fix Sonoff Pow command handling (#1542) + +### 5.11.0 20180107 + +- Minor webpage HTML optimizations (#1358) +- Updated German translation (#1438) +- Change Sonoff Pow Energy MQTT data message and consolidate Status 8 into Status 10 +- Change ADS1115 default voltage range from +/-2V to +/-6V (#1289) +- Change text to Active for 3 minutes (#1364) +- Change Wemo SetBinaryState to distinguish from GetBinaryState (#1357) +- Change output of HTTP command to valid JSON and Array only (#1363) +- Removed all MQTT, JSON and Command language defines from locale files and set fixed to English (#1473) +- Renamed commands Color2,3,4 to Color3,4,5 +- Fix BME280 calculation (#1051) +- Fix Sonoff Bridge missed learned key if learned data contains 0x55 (End of Transmission) flag (#1095, #1294) +- Fix PWM initialization in Dimmer/Color mode (#1321) +- Fix Wemo Emulation (#1357) +- Fix display of build date and time in non-english locale (#1465) +- Fix Wemo and Hue emulation by adding M-Search response delay (#1486) +- Add libraries Adafruit_BME680-1.0.5, Adafruit_Sensor-1.0.2.02, TasmotaSerial-1.0.0 and TSL2561-Arduino-Library +- Add command Color2 to set color while keeping same dimmer value +- Add device function pointers +- Add support for SenseAir S8 CO2 sensor +- Add color led signal to Carbon Dioxide (CO2) sensors using defines CO2_LOW and CO2_HIGH in user_config.h +- Add support for Domoticz Air Quality sensor to be used by MH-Z19(B) and SenseAir sensors +- Add support for PZEM004T energy sensor +- Add support for iTead SI7021 temperature and humidity sensor by consolidating DHT22 into AM2301 and using former DHT22 as SI7021 (#735) +- Add support for BME680 using adafruit libraries (#1212) +- Add support for MH-Z19(B) CO2 sensor (#561, #1248) +- Add multipress support and more user configurable GPIO to Sonoff Dual R2 (#1291) +- Add support for TSL2561 using adafruit library (#661, #1311) +- Add support for SHT3x (#1314) +- Add support for Arilux LC06 (#1414) +- Add Italian language file (#1449) +- Add 2nd Gen Alexa support to Wemo emulation discovery (#1357, #1450) +- Add define for additional number of WS2812 schemes (#1463) + +### 5.10.0 20171201 + +- Upgrade library ArduinoJson to 5.11.2 +- Upgrade library IRRemoteEsp8266 to 2.2.1 + 2 commits but disabled some protocols (code size reduction) +- Upgrade library NeoPixelBus to 2.2.9 +- Upgrade library OneWire to 2.3.3 + 6 commits and disabled CRC lookup-table (#define ONEWIRE_CRC8_TABLE 0) (code size reduction) +- Update library PubSubClient to 2.6 + 9 commits and additional delay (#790) +- Update core_esp8266_wiring_digital.c to latest (staged) level +- Patch library I2Cdevlib-Core for esp8266-core 2.4.0-rc2 compatibility +- Remove command EnergyReset 1..3 now replaced by EnergyReset1 to EnergyReset3 +- Remove spaces in JSON messages (code size reduction) +- Renamed xsns_05_ds18x20.ino to xsns_05_ds18x20_legacy.ino still using library OneWire and providing dynamic sensor scan +- Fix possible iram1_0_seg compile error by shrinking ICACHE_RAM_ATTR code usage +- Fix PWM watchdog timeout if Dimmer is set to 100 or Color set to 0xFF (#1146) +- Fix Sonoff Bridge Learn Mode hang caused by unrecognised RF code (#1181) +- Fix blank console log window by using XML character encoding (#1187) +- Fix wrong response name for command HlwISet (#1214) +- Fix DHT type sensor timeout recognition by distinguish "signal already there" from "timeout" (#1233) +- Add fixed color options 1..12 to command Color +- Add + (plus) and - (minus) to commands Dimmer (+10/-10), Speed and Scheme +- Add + (plus) and - (minus) to command Color to select 1 out of 12 preset colors +- Add + (plus) and - (minus) to command Ct to control ColdWarm led ColorTemperature (+34/-34) +- Add commands EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3 0..42500000 +- to (Re)set Energy Today, Yesterday or Total respectively in Wh (#406, #685, #1202) +- Add optional ADS1115 driver as alternative for unsupported I2Cdevlib in esp8266-core 2.4.0-rc2 +- Add support for INA219 Voltage and Current sensor to be enabled in user_config.h with define USE_INA219 +- Add support for Arilux LC11 (Clearing RF home code when selecting no Arilux module) +- Add support for WS2812 RGBW ledstrips to be enabled in user_config.h with define USE_WS2812_CTYPE (#1156) +- Add SettingsSaveAll routine to command SaveData to be used before controlled power down (#1202) +- Add option PUSHBUTTON_TOGGLE (SwitchMode 7) to allow toggling on any switch change (#1221) +- Add new xdrv_05_ds18x20.ino free from library OneWire and add the following features: +- Add support for DS1822 +- Add forced setting of 12-bit resolution for selected device types (#1222) +- Add read temperature retry counter (#1215) +- Fix lost sensors by performing sensor probe at restart only thereby removing dynamic sensor probe (#1215) +- Fix sensor address sorting using ascending sort on sensor type followed by sensor address +- Rewrite JSON resulting in shorter message allowing more sensors in default firmware image: +- "DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6} +- Add additional define in user_config.h to select either single sensor (defines disabled), new multi sensor (USE_DS18X20) or legacy multi sensor (USE_DS18X20_LEGACY) +- Add clock support for more different pixel counts (#1226) +- Add support for Sonoff Dual R2 (#1249) +- Add FriendlyName to web page tab and add program information to web page footer (#1275) + +### 5.9.1 20171107 + +- Add external sensor function pointer interface to enable easy sensor addition +- Add support for ADS1115 to be enabled in user_config.h and needs libraries i2cdevlib-Core and i2cdevlib-ADS1115 (#338, #660) +- Fix Backup Configuration file download failure by defining proper file size (#1115) +- Fix Exception 26 and empty console screen after usage of command WakeupDuration (#1133) +- Fix some changed iTead web links in README.md (#1137) + +### 5.9.0 20171030 + +- Rewrite code (partly) using Google C++ Style Guide (https://google.github.io/styleguide/cppguide.html) +- Rewrite code by using command lookup tables and javascript (client side) web page expansions +- Change HTML/CSS to enable nicer form field entry +- Change default PWM assignments for H801 RGB(CW) led controller to support optional Color/Dimmer control +- GPIO04 (W2) from GPIO_PWM2 to GPIO_USER to be user configurable for GPIO_PWM5 (second White - Warm if W1 is Cold) +- GPIO12 (Blue) GPIO_PWM3 no change +- GPIO13 (Green) from GPIO_PWM4 to GPIO_PWM2 +- GPIO14 (W1) from GPIO_PWM1 to GPIO_USER to be user configurable for GPIO_PWM4 (first White - Cold or Warm) +- GPIO15 (Red) from GPIO_PWM5 to GPIO_PWM1 +- Change default PWM assignments for MagicHome RGB(W) led controller to support optional Color/Dimmer control +- GPIO05 (Green) from GPIO_PWM4 to GPIO_PWM2 +- GPIO12 (Blue) from GPIO_PWM5 to GPIO_PWM3 +- GPIO13 (White) GPIO_USER to be user configurable for GPIO_PWM4 (White - Cold or Warm) +- GPIO14 (Red) from GPIO_PWM3 to GPIO_PWM1 +- Change default PWM assignment for Witty Cloud to support optional Color/Dimmer control (#976) +- GPIO12 (Green) from GPIO_PWM4 to GPIO_PWM2 +- GPIO13 (Blue) from GPIO_PWM5 to GPIO_PWM3 +- GPIO15 (Red) from GPIO_PWM3 to GPIO_PWM1 +- Change when another module is selected now all GPIO user configuration is removed +- Change command name IRRemote to IRSend (#956) +- Remove Arduino IDE version too low warning as it interferes with platformio.ini platform = espressif8266_stage +- Fix command FullTopic entry when using serial or console interface +- Fix possible UDP syslog blocking +- Fix minimum TelePeriod of 10 seconds set by web page +- Fix command GPIOx JSON response (#897) +- Fix inverted relay power on state (#909) +- Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930) +- Fix alignment of web page items in some browsers (#935) +- Fix setting all saved power settings to Off when SetOption0 (SaveState) = 0 (#955) +- Fix timezone range from -12/12 to -13/13 (#968) +- Fix Southern Hemisphere TIME_STD/TIME_DST (#968) +- Fix TLS MQTT SSL fingerprint test (#970, #808) +- Fix virtual relay status message used with Color/Dimmer control (#989) +- Fix command IRSend and IRHvac case sensitive parameter regression introduced with version 5.8.0 (#993) +- Fix pressure calculation for some BMP versions regression introduced with version 5.8.0i (#974) +- Fix Domoticz Dimmer set to same level not powering on (#945) +- Fix Blocked Loop when erasing large flash using command reset 2 (#1002) +- Fix relay power control when light power control is also configured as regression from 5.8.0 (#1016) +- Fix Mqtt server mDNS lookup only when MqttHost name is empty (#1026) +- Add debug information to MQTT subscribe +- Add translations to I2Cscan +- Add translation to BH1750 unit lx +- Add light scheme options (Color cycle Up, Down, Random) and moving WS2812 schemes up by 3 +- Add Domoticz counter sensor to IrReceive representing Received IR Protocol and Data +- Add option 0 to MqttHost to allow empty Mqtt host name +- Add support for Arilux AL-LC01 RGB Led controller (#370) +- Add esp8266 de-blocking to PubSubClient library (#790) +- Add Domoticz sensors for Voltage and Current (#903) +- Add platformio OTA upload support (#928, #934) +- Add warning to webpage when USE_MINIMAL is selected (#929) +- Add smoother movement of hour hand in WS2812 led clock (#936) +- Add support for Magic Home RGBW and some Arilux Led controllers (#940) +- Add command SetOption15 0 (default) for command PWM control or SetOption15 1 for commands Color/Dimmer control to PWM RGB(CW) leds (#941) +- Add Domoticz counter sensor to Sonoff Bridge representing Received RF code (#943) +- Add support for Luani HVIO board (https://luani.de/projekte/esp8266-hvio/) (#953) +- Add PWM initialization after restart (#955) +- Add IR Receiver support. Disable in user_config.h (#956) +- Add support for inverted PWM (#960) +- Add Sea level pressure calculation and Provide command Altitude (#974) +- Add support for up to 8 relays (#995) +- Add commands RfSync, RfLow, RfHigh, RfHost and RfCode to allow sending custom RF codes (#1001) +- Add retain to ENERGY messages controlled by command SensorRetain (#1013) +- Add commands Color2, Color3, Color4, Width2, Width3, Width4 and SetOption16 to set Ws2812 Clock parameters (#1019) +- Add German language file (#1022) +- Add support for connecting to MQTT brokers without userid and/or password (#1023) +- Add support for esp8266 core v2.4.0-rc2 (#1024) +- Add commands PwmRange 1,255..1023 and PwmFrequency 1,100..4000 (#1025) +- Add Polish language file (#1044, #1047) +- Add support for KMC 70011 Power Monitoring Smart Plug (#1045) +- Add support for VEML6070 I2C Ultra Violet level sensor (#1053) +- Add light turn Off Fade (#925) +- Add IrSend command option Panasonic as IrSend {"Protocol":"Panasonic", "Bits":16388, "Data":\} +- where 16388 is 0x4004 hexadecimal (#1014) +- Add retry counter to DHT11/21/22 sensors (#1082) + +### 5.8.0 20170918 + +- Remove the need for NeoPixelBus library for Hue support +- Consolidate WS2812 into Sonoff Led for flexible future led strip library changes +- Invert WS2812 fade speed to align with Sonoff led (Speed 1 = fast, Speed 8 = slow) +- Remove upper case MQTT receive buffer +- Reduce code and string length for output of commands Modules and GPIOs +- Add Sonoff SC debug information +- Change syslog service +- Removed webserver syslog disable as now no longer needed +- Increased default MQTT message size from 368 to 405 bytes while keeping MQTT_MAX_PACKET_SIZE = 512 (because we can) +- Fix MQTT Offline or Remove MQTT retained topic code +- Fix Domoticz loop when Emulation is selected +- Add blink to WS2812 and Sonoff Led (#643) +- Add option WIFI_WAIT (5) to command WifiConfig to allow connection retry to same AP without restart or update flash (#772, #869) +- Add support for Witty Cloud (#794) +- Add GPIO14 to Sonoff Dual (#797, #839) +- Add support for Yunshan Wifi Relay (#802) +- Add GPIO16 input pulldown (#827) +- Add timeout to DHT and DS18B20 sensors (#852) +- Fix watchdog timeout caused by lack of stack space by moving to heap (#853) +- Allow LogPort and MqttPort up to 65535 and add LogPort tot Status 3 (#859) +- Allow command SwitchTopic in group mode (#861) +- Allow command SwitchMode if no switches are defined (#861) +- Add optional dimmer parameter to command Wakeup for WS2812, AiLight, Sonoff B1, Led and BN-SZ01 (#867) +- Fix basic On, Off, Toggle, Blink and BlinkOff commands when other language is selected (#874) + +### 5.7.1 20170909 + +- Remove leading spaces from MQTT data +- Fix webconsole special character entry +- Allow # as prefix for color value +- Fix Alexa detection and Hue App Update Request (#698, #854) + +### 5.7.0 20170907 + +- Shrink module configuration webpage +- Fix settings order during startup to allow for displaying debug messages +- Fix some string length issues +- Add more string length tests by using strncpy +- Add Ai-Thinker RGBW led (AiLight) +- Add Power check and add PulseTime to power check at startup (#526) +- Add Supla Espablo support (#755) +- Add more precision to Sonoff Pow period and power results using command WattRes 0|1 (#759) +- Add basic internationalization and localization (#763) +- Add more Sonoff Pow range checking (#772) +- Fix invalid JSON (#786, #822) +- Add duplicate check to received RF signal within 2 seconds for Sonoff Bridge (#810) + +### 5.6.1 20170818 + +- Change module list order in webpage +- Fix Sonoff T1 1CH and 2CH configuration (#751) + +### 5.6.0 20170818 + +- Fix Sonoff Pow intermittent exception 0 +- Change Sonoff Pow sending Domoticz telemetry data only +- Add Ai-Thinker RGBW led (AiLight) (experimental) +- Add NeoPixelBus library to Sonoff Led for Hue support +- Add user configurable GPIO4 and GPIO5 to module Sonoff Bridge +- Add Sonoff B1 RGBCW led support with command Color RRGGBBCCWW (#676) +- Add command CT 152..500 to Sonoff Led and Sonoff B1 to control Color Temperature +- Add Cold-Warm slider to web page for Sonoff Led and Sonoff B1 +- Add CT parameter to Hue +- Add Sonoff T1 support (#582) +- Add AnalogInput0 if configured as Analog Input to webpage (#697, #746) +- Add command SetOption14 0|1 to enable interlock mode (#719, #721) +- Fix Mitsubishi HVAC IR power controll (#740) + +### 5.5.2 20170808 + +- Extent max number of WS2812 pixels from 256 to 512 (#667) +- Add OTA handling if server responds with no update available (#695) +- Removed undocumented command FlashMode (#696) +- Fix compile time error message due to increased message buffer size (#703) + +### 5.5.1 20170805 + +- Fix Sonoff Rf Bridge issues +- Add Sonoff RF Bridge MQTT messages on received and learned RF signal +- Add command VoltRes 0|1 to select voltage resolution to 0.1 V (#654) +- Add averaging to Analog input (#686) +- Add Energy tele data on Sonoff Pow Threshold change (#688) +- Fix inconsistent property names in Messages (#690) + +### 5.5.0 20170730 + +- Reduce code space by removing the following commands as they are replaced by SetOption alternatives: +- SaveState = SetOption0 +- ButtonRestrict = SetOption1 +- Units = SetOption2 +- MQTT = SetOption3 +- MQTTResponse = SetOption4 +- TempUnit = SetOption8 +- Smoothing WS2812 animation poll, invert fade speed and max allowed wakeup time down to 3000 seconds +- Fix initial button press detection +- Add support for Sonoff RF Bridge 433 using command RfKey +- Fix regression from 5.0.7 by increasing message buffer size from 360 to 368 to accomodate 4 x DS18x20 sensors (#637) +- Add GroupTopic to Topic test when using ButtonTopic/SwitchTopic to send either ON/OFF or TOGGLE (#642) +- Adjust HLW calibration limits to accomodate HuaFan device and add commands HlwPSet, HlwUSet and HlwISet (#654) + +### 5.4.0 20170725 + +- Fix command reset regression introduced in 5.2.0 +- Increase polling from 0.1 second to 0.05 second +- Add multipress to all buttons +- Fix button 1 double press behaviour on multi relay devices +- Add support for Hua Fan Smart Socket (#479) +- Add support for Sonoff 4ch Pro (#565) +- Add command SetOption13 1 to allow immediate action on single button press +- (disables multipress, hold and unrestricted commands) (#587) + +### 5.3.0 20170715 + +- Major Hue rewrite which might introduce Alexa problems. If so, initiate an issue +- Add support for Sonoff Led and BN-SZ01 Ceiling Led brightness control to Hue +- Fix Sonoff Led Power, Dimmer and Color MQTT response (#176) +- Add commands Delay and Backlog to allow multiple commands at once separated by ";" (#593) +- Use default flashmode DOUT to solve restart hangs on esp8285 chips (#453, #598) +- Change Web console column width from 99 to 300 (#599) + +### 5.2.4 20170703 + +- Removed flash mode update after selecting different module solving esp8285 related problems +- Add device type flag to sonoff_template.ino +- Change Sonoff Led Wakeup and add support for Sonoff BN-SZ01 Led (#567) + +### 5.2.3 20170630 + +- Change Sonoff Led color conversion code +- Fix SetOption12 handling +- Simplify auto configuration upgrade +- Add option Upgrade \ to only upgrade to any higher version (Old PR #213) +- Change FallbackTopic to cmnd/\/\ \ bypassing FullTopic and Prefix (#538) + +### 5.2.2 20170625 + +- Add configuration SaveAddress to Status 1 and Information Page +- Change Sonoff Led Color conversion from AtoH to strtol +- Fix possible wrong uploads due to configuration overwrites (#542) +- Fix payload negative numbers (#547) + +### 5.2.1 20170622 + +- Fix Restore Configuration in case of lower version +- Revert auto configuration upgrade allowing easy upgrade which was removed in version 5.2.0 +- Fix config auto upgrade from versions below version 4.1.1 (#530) + +### 5.2.0 20170619 + +- Add command SetOption12 1 to disable newly released configuration flash rotate to reduce flash wear +- Fix command CounterDebounce by removing test for active GPIO (#524) +- Add command SetOption33 1..250 to allow user configure POW Max_Power_Retry count (#525) + +### 5.1.7 20170616 + +- Prep removal of SetOptions alternatives +- Restore webpage upgrade error messages removed in 5.1.5 +- Add hold button functionality to buttons 2 to 4 +- Add command SetOption32 1..100 to set Key Hold Time from 0.1 seconds to 10 seconds (#200) +- Allow slashes in Topic, GroupTopic, ButtonTopic and SwitchTopic (#507) +- Changed webpage form actions from post to get and use relative path url (#434, #522) + +### 5.1.6 20170606 + +- Shrink code +- Removed online configuration of Domoticz In and Domoticz Out MQTT strings +- Removed commands DomoticzInTopic and DomoticzOutTopic +- Add define KEY_HOLD_TIME to configure button hold threshold before sending MQTT Hold message +- Add command StateText4 to configure button MQTT Hold text (= MQTT_CMND_HOLD) +- Add command SetOption11 0|1 to swap pushbutton single and double press functionality (#200) +- Add command SwitchMode 5 (PUSHBUTTONHOLD) and 6 (PUSHBUTTONHOLD_INV) (#489) + +### 5.1.5 20170604 + +- Shrink code in preparation to ESP8266-Arduino 2.4.0-rc1 +- Add effect parameter to HUE Device (#464) + +### 5.1.4 20170601 + +- Removed pre-compiled versions from repository as they are available within the release +- Changed HUE Device type to color supporting version (#464) +- Fix compile error when BE_MINIMAL is selected (#467, #476) +- Add multiple compiled versions to release using updated Travis script and platformio.ini (#467) + +### 5.1.3 20170520 + +- Add Domoticz Counter + +### 5.1.2 20170519 + +- Fix Counter/Timer JSON message and update Counter/Timer on webpage +- Fix WS2812 Domoticz related regression issues + +### 5.1.1 20170517 + +- Allow command FullTopic in group mode +- Prepare for more use of RTC memory +- Add independant WS2812 led string power control (#386, #390) +- Add command Counter to control up to four GPIO falling edge interrupt counters or timers (#459) +- Add command CounterType to select between pulse counting or pulse timing +- Add command CounterDebounce to select global counter debounce time in mSec + +### 5.1.0 20170513 + +- Fix Offline/Removal of retained topic when FullTopic is changed +- Add FullTopic to MQTT Configuration and Information web pages +- Add license model GPLv3 (#188) + +### 5.0.7 20170511 + +- Fix possible exception 28 on empty command +- Add command SetOption0 as replacement for SaveState +- Add command SetOption1 as replacement for ButtonRestrict +- Add command SetOption2 as replacement for Units +- Add command SetOption4 as replacement for MqttResponse +- Add command SetOption8 as replacement for TempUnit +- Add command SetOption10 On|Off to select between Offline or Removing previous retained topic (#417, #436) + +### 5.0.6 20170510 + +- Remove hyphen in case of a single DHT sensor connected (#427) +- Add command MqttRetry to change default MQTT reconnect retry timer from minimal 10 seconds (#429) + +### 5.0.5 20170508 + +- Add command FullTopic with tokens %topic% (replaced by command Topic value) and +- %prefix% (replaced by command Prefix values) for more flexible topic definitions (#244) +- See wiki > MQTT Features https://github.com/arendst/Tasmota/wiki/MQTT-Features for more information + +### 5.0.4 20170505 + +- Add Sonoff Pow Energy Total up to 40 MWh +- Add command EnergyReset 1|2|3 to reset Energy counters (#406) +- Fix Domoticz Energy logging (#411) +- Add command PowerOnState 4 to keep relay always on and disabling all power control (#418) + +### 5.0.3 20170504 + +- Add command SensorRetain on|off to enable retaining of mqtt message tele/sonoff/SENSOR (#74) +- Change WifiConfig timeout from 60 seconds to 180 seconds (#212) +- Change Sonoff Touch command Ledstate functionality by turning led on if power is off (#214) +- Add 4 seconds delay after power on before enabling button to workaround Wemos D1 mini RTS circuit (#380) + +### 5.0.2 20170503 + +- Reset SaveData, SaveState and MqttResponse to default values due to rearranging settings +- Moved some settings to flag area +- Add command TempUnit Celsius|Fahrenheit for selecting Celsius or Fahrenheit (#347) +- Add command TempRes 0..3 for selecting Temperature Resolution (#347) +- Add command HumRes 0..3 for selecting Humidity Resolution (#347) +- Add command PressRes 0..3 for selecting Pressure Resolution (#347) +- Add command EnergyRes 0..5 for selecting Energy Resolution (#347) +- Add "TempUnit":"C|F" to sensor JSON output (#347) +- Add support for up to three DHT type sensors each using a different GPIO (#339, #404) + +### 5.0.1 20170429 + +- Adjust Sonoff SC messages to prepare for display feature +- Move static data from RAM to Flash +- Fix PowerOnState for some devices not reporting "Power on" state (#284, #380, #383) + +### 5.0.0 20170425 + +- Memory status message update +- Fix setting migration to better preserve settings during move (#382) +- Best practice is first doing a Backup Configuration before installing version 5.0.0 +- Reset save count after setting move +- Start using new linker script without SPIFFS + +### 4.2.0 20170424 + +- Prepare for SPIFFS removal by moving settings to EEPROM area +- Fix compilation error when webserver is disabled (#378) + +### 4.1.3 20170410 + +- Add user configuarble GPIO to module S20 Socket and Slampher +- Add support for Sonoff SC (#112) +- Set PWM frequency from 1000Hz to 910Hz as used on iTead Sonoff Led firmware (#122) +- Set Sonoff Led unconfigured floating outputs to 0 to reduce exceptions due to power supply instabilities (#122) +- Add Access Point Mac Address to Status 11 and Telemetry (#329) +- Fix DS18B20 negative temperature readings (#334) + +### 4.1.2 20170403 + +- Rename Unrecognised command to Unknown command +- Remove all command lists +- Remove command SmartConfig (superseded by WifiConfig) +- Fix boot loop when selecting module Sonoff 4CH or Sonoff Touch on non ESP8285 hardware +- Add optional support for Toshiba and Mitsubishi HVAC IR control (needs updated IRremote8266 library) (#83, #257) +- Add all configured switches to Domoticz Configuration web page (#305) +- Fix compile error when selecting WS2812 DMA (#313) + +### 4.1.1 20170329 + +- Fix default Telemetry for command Prefix3 +- Fix webserver Module parameters for disabled select +- Fix sensor status for enabled switches +- Remove Light as alternative for Power (save code space) +- Remove migration option from pre V3 (code cleanup) +- Remove unofficial SPIFFS support (code cleanup) +- Remove command list when unknown command is entered (save code space) +- Rename Status11 json from StatusPWR to unique StatusSTS +- Rename command Gateway to IPAddres2, Subnetmask to IPAddress3 and DnsServer to IPAddress4 (save code space) +- Add Command MqttResponse to select either command or RESULT topic as response (#258) +- Add command StateText1 to StateText3 to assign MQTT_STATUS_OFF, MQTT_STATUS_ON and MQTT_CMND_TOGGLE respectively (#286) +- Remove restart after IPAddress changes (#292) +- Add support for MAX31850 in xsns_ds18x20.ino (#295) +- Fix possible uptime update misses (#302) + +### 4.1.0 20170325 + +- Change static IP addresses in user_config.h from list (using commas) to string (using dots) +- Unify display result of commands Modules, Module and Gpios +- Rewrite Module selection web page to bring size down from 18651 to 4319 bytes (!) (#234, #240) +- Add basic support for (Lixada) H801 RGBWW controller (#252) +- Add command Prefix1 to Prefix3 to assign SUB_PREFIX, PUB_PREFIX and PUB_PREFIX2 respectively (#255) +- Add static ip addresses to flash (#262) +- Add commands IpAddress, Gateway, Subnetmask and DnsServer to select static ip addresses (#273) + +### 4.0.8 20170321 + +- Fix entering non-numeric webpassword +- Force selection between TLS or Webserver due to memory restraint (#240) +- Allow entering empty string using "0" for selected commands (#242) +- Fix exception when posting commands to web console containing % (#250) + +### 4.0.7 20170319 + +- Increased Sonoff Led PWM frequency from 432 to 1000 +- Fix possible watch dog reboot after changing module type on web page +- Fix reporting of GPIO usage from web page +- Fix Sonoff Led blank during firmware upgrade +- Fix Sonoff Led flicker and possible flash corruption by using latest Arduino-esp8266 versions of pwm core files included in sonoff library (#211) +- Add PWM output control with commands PWM1 to PWM5 using user selectable GPIOs (#211) +- Fix exceptions due to low values of commands HlwPCal (10000), HlwUCal (1000) and HlwICal (2500) (#223) +- Add Switch state to sensor status (#227, #233) +- Add user configuarble GPIO to module Sonoff Touch (#228) +- Add define WEB_PORT to user_config.h to change default web server port from 80 (#232) +- Fix failed Ota Firmware upgrade started from Web page (#235) + +### 4.0.6 20170316 + +- Fix to better find device by Wifi hostname +- Fix compile error when some I2C devices are disabled +- Add (experimental) support for SHT1X emulating I2C (#97) +- Add ADC to ElectroDragon (#203) +- Add support for Sonoff Dev (#206) + +### 4.0.5 20170314 + +- Add command Status 11 to show power status with Vcc if define USE_ADC_VCC is enabled (default) +- Add ADC input to Sonoff SV and Wemos D1 mini - Needs recompile with define USE_ADC_VCC disabled (#137) +- Add MQTT host:port to timeout message (#199) + +### 4.0.4 20170312 + +- Add pulse timers for up to 4 relays (#106) +- Fix Sonoff Led power state when dimmer or color is 0 (#176) +- Add command NtpServer to configure up to three NTP servers (#177) +- Delete module User Test as module Wemos D1 mini has same/more user configurable GPIO (#178) +- Add more user configurable GPIO to module ElectroDragon (#183) + +### 4.0.3 20170309 + +- Renamed Module NodeMCU to WeMos D1 mini +- Add GPIO1 as user option to some modules +- Add Buttons, Relays and Leds to user configurable options (#159) +- Add description on Module parameters web page to some well known GPIOs (#107, #171) + +### 4.0.2 20170308 + +- Restore correct seriallog level after Serial logging was disabled +- Add simple dimmer slider to Sonoff Led web page +- Reduced root webpage size by 31% +- Expand Status 2 with Build date/time and core version +- Fix webserver redirection when not in WifiManager mode (#156) +- Add command ButtonRestrict On/Off to restrict access to button hold and button multi press options above 2 (#161) +- Fix DS18S20 negative temperature readings (#165) +- Fix crlf compilation error due to bad syntax (#144, #167) + +### 4.0.1 20170305 + +- Fix char default sizes and set MESSZ to 360 (#143) +- Fix SerialLog setting status +- Disable syslog when emulation is active +- Add DS18B20 web page display refresh + +### 4.0.0 20170303 + +- Add define to remove config migration code for versions below 3.0 (See Wiki-Upgrade-Migration path) +- Free memory by switching from String to char[] +- Raised Sonoff Led PWM frequency from 200Hz to 432Hz in search of stability (hardware watchdog timeouts) (#122) +- Increase message size and suggested minimum MQTT_MAX_PACKET_SIZE to 512 (#114, #124) +- Remove runtime warning message regarding MQTT_MAX_PACKET_SIZE too small as it is now moved to compile time (#124) +- Fix possible panics with web console and http commands while UDP syslog is active (#127) +- Add optional static IP address (#129) +- Add define ENERGY_RESOLUTION in user_config.h to allow user control over precision (#136) + +### 3.9.22 20170228 + +- Update web console +- Fix Status 4 JSON message +- Add Exception info during restart if available +- Add osWatch service to detect loop hangs that might happen during (OTA) upgrades +- Add WiOn support for relay and switch only (#82, #102) +- Allow for user specified relay count up to four in sonoff_template.h (#109) +- Add support for HTU21 compatible I2C sensors SI7013, SI7020 and SI7021 (#118) +- Add NodeMCU or Wemos configuration option (#119) + +### 3.9.21 20170224 + +- Add ajax to web root page and web console (#79) +- Add commands SwitchMode1..4 and enable user switches 2, 3 and 4 (#84, #88) +- Fix MQTT upgrade when webserver is active + +### 3.9.20 20170221 + +- Add minimal basic authentication to Web Admin mode (#87) +- Fix Hue and add HSB support (#89) + +### 3.9.19 20170219 + +- Sonoff Led: Made GPIO04, 05 and 15 available for user +- Sonoff Led: Add commands Fade, Speed, WakupDuration, Wakeup and LedTable + +### 3.9.18 20170218 + +- Fix ledstate 0 to turn off led +- Fix Sonoff Led dimmer range (#16) +- Change Sonoff Led command Dimmer to act on both cold and warm color +- Add Sonoff Led command Color CCWW where CCWW are hexadecimal values fro 00 - FF +- Reduce Sonoff Led flickering by disabling interrupts during flash save and disabling +- Led during OTA upgrade and Web upload (#16) + +### 3.9.17 20170217 + +- Fix possible ArduinoJSON related memory fragmentation +- Changed console logging using less memory +- Add GPIO04 as user selectable for Sonoff Dual (#75) + +### 3.9.16 20170214 + +- Update latching relay handler +- Add support for IR led using IRremoteESP8266 library (#59) +- Add Hue argument passing using ArduinoJSON library (#59) + +### 3.9.15 20170213 + +- Change JSON float values from string to number according to http://json.org (#56) +- Add support for exs latched relay module https://ex-store.de/ESP8266-WiFi-Relay-V31 (#58) +- Add support for inverted relays +- Changed MAX_LOG_LINES from 70 to 60 to preserve memory + +### 3.9.14 20170211 + +- Add False and True as alternatives for 0/Off and 1/On (#49) +- Fix Status10 JSON format (#52) +- Fix DS18x20 using OneWire library (#53) + +### 3.9.13 20170210 + +- Add FlashChipMode to Status 4 +- Removed redundant DHT2 option and code +- Add Sonoff SV GPIO pin 05 configuration (#40) +- Add configuration file backup and restore via web page +- Fix latency due to light_sleep mode even if sleep was set to zero (#50) + +### 3.9.12 20170208 + +- Fix compile error when webserver is disabled (#30) +- Fix possible ESP8285 flash problem by updating Flash Chip Mode to DOUT during OTA upload +- Fix hostname issues by not allowing user entry of string formatting and removing from user_config.h (#36) + +### 3.9.11 20170204 + +- Fix command I2Cscan +- Fix not allowed spaces in Topic, ButtonTopic and SwitchTopic +- Make all TELEMETRY, STATUS and COMMAND message topics unique (#4) +- Advertise command topic to be used by iobroker (#299) +- Fix butten (non)detection if no GPIO_KEY1 is defined (#13) +- Change WeMo serialnumber from 7 decimal chars to 8 hexadecimal chars (#18) +- Update web page with Build Date/Time, Emulation and mDNS Discovery and Advertise information (#21) + +### 3.9.10 20170130 + +- Add WS2812 Color Type selection (RGB or GRB) to user_config.h (#7) +- Hue api changes to support HUE App(s) (#8) + +### 3.9.9 20170130 + +- Add command status 10 showing sensor data +- Fix hlw status messages if hlw is disabled + +### 3.9.8 20170130 + +- Remove GPIO07 and GPIO08 from user selectable (#5) + +### 3.9.7 20170129 + +- Fix possible WS2812 exceptions when using emulation +- Add command Emulation to dynamic configure Belkin WeMo and Hue Bridge for Alexa + +### 3.9.6 20170129 + +- Add dynamic sleep for WS2812 animation (#1) + +### 3.9.5 20170128 + +- Fix error message in case of wrong Domoticz command + +### 3.9.4 20170127 + +- Fix Sonoff Dual Relay switching (#287) + +### 3.9.3 20170127 + +- Add confirmation before Restart via webpage +- Expand Domoticz Configuration webpage with Key, Switch and Sensor Index and +- add commands DomoticzSwitchIdx and DomoticzSensorIdx (#86) (#174) (#219) +- Fix default DHT11 sensor driver selection +- Fix LedPower status after button press (#279) +- Add command Sleep 0 - 250 mSec for optional light sleep mode to lower energy consumption (#272) +- (Expect overall button/key/switch misses and wrong values on Sonoff Pow) +- Add Hue brightness extension (#281) +- Fix Hue brightness and change to call by reference (#283) + +### 3.9.2 20170124 + +- Add confirmation before Reset Configuration via webpage (#244) +- Add WS2812 features (see Wiki commands) + +### 3.9.1 20170124 + +- Change PowerOnState function to only trigger when Power On (and not just restart) (#238) +- Move HLW interrupts back to RAM and make WS2812_DMA optional as it generates Exception on Pow (#264) +- Add charset=utf-8 to webpages (#266) +- Update Hue emulation (#268) +- Fix status module number +- Add support for domoticz Dimmer on Sonoff_Led and WS2812 +- Fix possible ESP8285 flash problem by updating Flash Chip Mode to DOUT during web upload + +### 3.2.6a 20170120 + +- Fix Sonoff Pow compile error (#255) +- Move HLW interrupts back to ROM (Needed for WS2812 DMA interrupts) +- Removed all IO config from user_config.h as this will be done by commands or webpage +- Removed MessageFormat and supports JSON only except POWER/LIGHT status +- Add command LedPower to control main led (#247) +- Add more FriendlyNames for Hue (#254) +- Add DMA support for WS2812 when using pin 3 while other pins work just as well in my case... +- Add HUE emulation for Alexa (#229) +- Add basic WS2812 support (#229) +- Fix Wemo when MQTT is disabled (#245) +- Revert ButtonTopic and change SwitchTopic1 - 4 to one SwitchTopic +- Rename MqttUnits to Units +- Add Mqtt command to enable/disable MQTT + +### 3.2.2a 20170115 + +- Add dynamic (Sonoff) Module, user GPIO and sensor selection (one size fits (almost) all) +- Add support for Sonoff LED +- Add Seriallog disable after 600 seconds for Sonoff Dual and 4 Channel +- Add ButtonTopic2 - 4, SwitchTopic1 - 4 and SwitchRetain + +### 3.2.2 20170113 + +- Fix PowerOnState 2 functionality after re-applying power (#230) + +### 3.2.1 20170113 + +- Fix some failed command decoding (#228) +- Removed passwords from status messages (#216) + +### 3.2.0 20170111 + +- Add I2C BH1750 sensor (#222) +- Sensor rewrite preparing for online selection + +### 3.1.16 20170109 + +- Fix Domoticz possible error condition +- Remove Wifi password from connection message (#216) +- Add Configure Other menu item to web page (#209) +- Add command FriendlyName, field Friendly Name and define FRIENDLY_NAME to be used by Alexa +- eliminating current use of MQTT_CLIENT_ID (#209) +- Add friendlyname to webpage replacing former hostname + +### 3.1.15 20170108 + +- Fix Domoticz send key regression with Toggle command + +### 3.1.14 20170107 + +- Add support for command TOGGLE (define MQTT_CMND_TOGGLE) when ButtonTopic is in use and not equal to Topic (#207) + +### 3.1.13 20170107 + +- Fix web console command input when SUB_PREFIX contains '/' (#152) +- Add command response to web command (#200) +- Add option to disable MQTT as define USE_MQTT in user_config.h (#200) + +### 3.1.12 20170106 + +- Add OTA retry to solve possible HTTP transient errors (#204) +- Fix MQTT host discovery + +### 3.1.11 20170105 + +- Add mDNS to advertise webserver as .local/ + +### 3.1.10 20170105 + +- Fix ButtonTopic when SUB_PREFIX = PUB_PREFIX +- Add workaround for possible MQTT queueing when SUB_PREFIX = PUB_PREFIX +- Add optional MQTT host discovery using define USE_DISCOVERY in user_config.h (#115) + +### 3.1.9 20170104 + +- Fix Power Blink start position (toggled) +- Change PulseTime increments: 1 .. 111 in 0.1 sec (max 11 seconds) and 112 .. 64900 in seconds (= 12 seconds until 18 hours) (#188) +- Add support for SUB_PREFIX = PUB_PREFIX (#190) + +### 3.1.8 20170103 + +- Add retain flag to LWT offline and only send "tele/sonoff/LWT Offline" (#179) +- Change retained LWT Online message to only send "tele/sonoff/LWT Online" + +### 3.1.7 20161231 + +- Add retained message LWT Online when sonoff makes MQTT connection (#179) + +### 3.1.6 20161230 + +- Add blinking using commands BlinkTime, BlinkCount and Power Blink|3|BlinkOff|4 (#165) + +### 3.1.5 20161228 + +- Fix serial space command exception (28) + +### 3.1.4 20161227 + +- Fix MQTT subscribe regression exception (3) (#162) +- Fix serial empty command exception (28) + +### 3.1.3 20161225 + +- Extent Domoticz configuration webpage with optional indices (#153) +- Fix multi relay legacy tele message from tele/sonoff/2/POWER to tele/sonoff/POWER2 +- Add support for iTead Motor Clockwise/Anticlockwise + +### 3.1.2 20161224 + +- Extent command PowerOnState with toggle at power on (option 2 is now option 3!) (#156) + +### 3.1.1 20161223 + +- Add support for Sonoff Touch and Sonoff 4CH (#40) +- Update DomoticzIdx and DomoticzKeyIdx with relay/key index (DomoticzIdx1/DomoticzKeyIdx1) +- Add command PowerOnState to control relay(s) at power on (#154) + +### 3.1.0 20161221 + +- Add Sonoff Pow measurement smoothing +- Fix serial command topic preamble error (#151) +- Fix 2.x to 3.x migration inconsistencies (#146) + +### 3.0.9 20161218 + +- Add Sonoff Pow voltage reading when relay is on but no load present (#123) + +### 3.0.8 20161218 + +- Add temperature conversion to Fahrenheit as option in user_config.h (TEMP_CONVERSION) (#145) + +### 3.0.7 20161217 + +- Add user_config_override.h to be used by user to override some defaults in user_config.h (#58) +- Fix Sonoff Pow low power (down to 4W) intermittent measurements (#123) + +### 3.0.6 20161217 + +- Fix MQTT_CLIENT_ID starting with % sign as in "%06X" (#142) +- Add auto power off after PulseTime### 0.1 Sec to relay 1 (#134) + +### 3.0.5 20161215 + +- Add more control over LED with command LedState options (#136, #143) +- LED_OFF (0), LED_POWER (1), LED_MQTTSUB (2), LED_POWER_MQTTSUB (3), LED_MQTTPUB (4), LED_POWER_MQTTPUB (5), LED_MQTT (6), LED_POWER_MQTT (7) +- Add option WIFI_RETRY (4) to command WifiConfig to allow connection retry to other AP without restart (#73) + +### 3.0.4 20161211 + +- Fix intermittent Domoticz update misses (#133) + +### 3.0.3 20161210 + +- Fix compiler warnings (#132) +- Remove redundant code +- Fix Domoticz pushbutton support + +### 3.0.2 20161209 + +- Add pushbutton to SwitchMode (#130) + +### 3.0.1 20161209 + +- Fix initial config + +### 3.0.0 20161208 + +- Migrate and clean-up flash layout +- Settings from version 2.x are saved but settings from version 3.x can not be used with version 2.x +- Change SEND_TELEMETRY_RSSI to SEND_TELEMETRY_WIFI and add AP and SSID to telemetry +- Split long JSON messages +- Fix inconsistent status messages +- Fix all status messages to return JSON if enabled +- Remove relay index in cmnd/sonoff//POWER now changed +- to cmnd/sonoff/POWER for single relay units +- and cmnd/sonoff/POWER for multi relay units like Sonoff dual +- Add retain option to Power/Light status controlled by command PowerRetain On|Off (#126) + +### 2.1.2 20161204 + +- Add support for second wifi AP (#73) +- Update command WifiConfig +- Fix possible WifiManager hang + +### 2.1.1a 20161203 + +- Fix scan for wifi networks if WeMo is enabled +- Fix syslog setting using web page + +### 2.1.1 20161202 + +- Add support for ElectroDragon second relay and button (only toggle with optional ButtonTopic) (#110) + +### 2.1.0 20161202 + +- Add optional EXPERIMENTAL TLS to MQTT (#49) +- Fix MQTT payload handling (#111) +- Optimzed WeMo code + +### 2.0.21a 20161201 + +- Fix WeMo PowerPlug emulation + +### 2.0.21 20161130 + +- Add Belkin WeMo PowerPlug emulation enabled with USE_WEMO_EMULATION in user_config.h (Heiko Krupp) (#105, #109) + +### 2.0.20 20161130 + +- Relax MQTTClient naming but only allows hexadecimal uppercase numbers (#107) +- Add I2C support with command I2CScan +- Add I2C sensor driver for HTU21 as alternate sensor using TH10/16 connectors (Heiko Krupp) (#105) +- Add I2C sensor driver for BMP085/BMP180/BMP280/BME280 as alternate sensor using TH10/16 connectors + +### 2.0.19a 20161127 + +- Add support for ButtonTopic and ButtonRetain to wall switch function +- Add pullup to SWITCH_PIN and command SwitchMode to syntax + +### 2.0.18 20161126 + +- Add SUB_PREFIX multi level support allowing 'cmnd' or 'cmnd/level2/level3' +- Add wall switch function to GPIO14 and command SwitchMode (Alex Scott) (#103) + +### 2.0.17 20161123 + +- Calibrate HLWPCAL from 12345 to 12530 +- Add alternative sensor driver DHT2 using Adafruit DHT library +- Add define MESSAGE_FORMAT to user_config.h +- Throttle console messages +- Shorten JSON messages +- Fix possible Panic +- Fix User mode webserver security + +### 2.0.16 20161118 + +- Add alternative sensor driver DS18x20 using OneWire library (#95) +- Change sensor MQTT message from tele/sonoff/TEMPERATURE to tele/sonoff/DHT/TEMPERATURE or +- tele/sonoff/DS18B20/TEMPERATURE or tele/sonoff/DS18x20/1/TEMPERATURE +- Add sensors to root webpage and auto refresh every 4 seconds (#92) +- Add optional JSON messageformat to all telemetry data +- Enforce minimum TelePeriod to be 10 seconds +- Fix Energy Yesterday reset after restart +- Add Energy Today restore after controlled restart + +### 2.0.15 20161116 + +- Change TODAY_POWER and PERIOD_POWER to TODAY_ENERGY and PERIOD_ENERGY +- Fix serial regression +- Fix syslog hangs when loghost is unavailable + +### 2.0.14 20161115 + +- Add HLW threshold delay +- Fix HLW intermittent current deviation +- Fix button functionality during wificonfig +- Add CRC check to DS18B20 sensor (#88) + +### 2.0.13 20161113 + +- Add additional upload error code descriptions +- Add PlatformIO support (#80) + +### 2.0.12 20161113 + +- Fix Serial and Web response regression when no MQTT connection available +- Fix Sonoff Dual power telemetric data for second relay +- Removed MQTT password from Information web page +- Hide MQTT password from Configure MQTT web page + +### 2.0.11 20161111 + +- Rewrite button and web toggle code +- Fix NTP sync +- Add HLW calibration commands HLWPCAL, HLWUCAL and HLWICAL (need define USE_POWERCALIBRATION) +- Fix power threshold tests + +### 2.0.10 20161109 + +- Add additional Domoticz define (#63) +- Add defines MQTT_STATUS_ON and MQTT_STATUS_OFF in user_config.h to select status On/Off string +- Fix status response differences (#65) +- Fix divide by zero exception (#70) +- Fix syslog loop exception + +### 2.0.9 20161108 + +- clarify MODULE in user_config.h +- Fix hlw false values + +### 2.0.8 20161108 + +- Add initial status after power on +- Seperate driver files +- Fix hlw code and calibrate Pow +- Move user config defines to user_config.h (#61) + +### 2.0.7 20161030 + +- Make Ticker mandatory +- Add Domoticz support (Increase MQTT_MAX_PACKET_SIZE to 400) (#54) +- Add command MessageFormat 0|1 to select either legacy or JSON output + +### 2.0.6 20161024 + +- Add Sonoff Pow power factor +- Initial support for up to four relays using iTEAD PSB (4Channel) +- - Currently only supports one button (All buttons behave the same) +- - Use command MODEL 4 to select four relay option +- (After first power on it will support 2 relays like Sonoff Dual) +- Fix ledstate +- Add command Status 9 to display Sonoff Pow thresholds +- Add commands PowerLow, PowerHigh, VoltageLow, VoltageHigh, CurrentLow and CurrentHigh for use +- with Sonoff Pow thresholds + +### 2.0.5 20161018 + +- Add updates to user_config.h - moved SEND_TELEMETRY_DS18B20 and SEND_TELEMETRY_DHT to module area. +- As Sonoff TH10/16 does not have the logic installed for GPIO04 You'll have to select ONE of both +- Add Sonoff Pow support (experimental until Pow tested) +- Add command Status 8 to display Sonoff Pow energy values +- Add command MqttUnits On|Off to add units to values +- Change web main page header character size +- Change On/Off to ON/OFF status messages to satisfy openHAB +- Change TEMP to TEMPERATURE and HUM to HUMIDITY + +### 2.0.4 20161009 + +- Add MQTT_BUTTON_RETAIN, SAVE_DATA and SAVE_STATE defines to user_config.h (#35) +- Update ButtonRetain to remove retained message(s) from broker when turned off +- Add Retain for second relay on Sonoff Dual +- Provide power status messages with device topic index if requested + +### 2.0.3 20161008 + +- Update wifi initialization +- Add command BUTTONRETAIN for optional MQTT retain on button press (#35) +- Add command SAVESTATE to disable power state save. May be used with MQTT retain + +### 2.0.2 20161006 + +- Fix wifi issue 2186 + +### 2.0.1 20161002 + +- Fix button press + +### 2.0.0 20161002 + +- Update Sonoff TH10/16 sensor pins (My TH10 only has GPIO14 connected) +- Add full support for Sonoff dual + +### 1.0.35 20160929 + +- Add more lines to console +- Add timeout and disable MQTT on web upload +- Add command SAVEDATA to control parameter save (for flash wear afficionados) (#30) + +### 1.0.34 20160926 + +- Fix button press six and seven +- Add more information to webserver + +### 1.0.33 20160915 + +- Better WPS error message +- Separate webserver code from support.ino into webserver.ino +- Fix webserver User by removing unwanted restart option + +### 1.0.32 20160913 + +- Add Wifi Protected Setup (WPS) as third option for initial config +- Add command WIFICONFIG replacing deprecated command SMARTCONFIG +- Add option WIFICONFIG 3 to start WPSconfig +- Add option WIFICONFIG 0 to start saved Wifi config tool (WPSconfig, Smartconfig or Wifimanager) +- Change button behaviour - See Wiki + +### 1.0.31 20160907 + +- Fix DS18B20 misread if teleperiod = 2 +- Tuned sensor code +- Updated prefered ElectroDragon connection to Relay 1 and Button 1 +- Moved SONOFF and ELECTRO_DRAGON port config to user_config.h + +### 1.0.30 20160902 + +- Fix command TELEPERIOD 0 +- Add ESP- tag to UDP log message for easy rsyslogd filtering +- Add ElectroDragon (Relay 2 only) functionality. Select with #define MODULE ELECTRO_DRAGON +- Add ? as null message alternative +- Add DHT temperature and humidity telemetry support. Enable with #define SEND_TELEMETRY_DHT +- Add DS18B20 temperature telemetry support. Enable with #define SEND_TELEMETRY_DS18B20 +- Restrict HOSTNAME, MQTTCLIENT, TOPIC and BUTTONTOPIC in topic mode only + +### 1.0.29 20160831 + +- Allow UPGRADE, OTAURL, RESTART, RESET, MQTTHOST, MQTTPORT, MQTTUSER, MQTTPASSWORD and WEBSERVER also in group mode + +### 1.0.28 20160831 + +- Add webserver state to status 5 +- Add optional PUB_PREFIX2 (tele) for telemetry usage +- Add command TELEPERIOD +- Fix syntax message +- Change memory status display + +### 1.0.27 20160831 + +- Add sketch flash size +- Add console to webserver +- Add command weblog +- Change WifiManager web pages to minimal +- Change display default hostname and MQTT client id in webserver +- Change HTTP command interface to http://sonoff-1234/cm?cmnd=light 2 +- Change HEARTBEAT to UPTIME + +### 1.0.26 20160829 + +- Add define USE_WEBSERVER to disable web server code in source +- Add file upload as alternative for ota upload to webserver +- Add information to webserver +- Add command hostname +- Add command logport +- Change HTTP command interface to http://sonoff-1234/cmd?cmnd=light 2 +- Change button behaviour with regards to Smartconfig and OTA upload. See README.md +- Enforce default hostname to either "%s-%04d" or user defined without any % +- Enforce default mqtt client id to either "DVES_%06X" or user defined without any % + +### 1.0.25 20160822 + +- Remove config system halts to keep ota available + +### 1.0.24 20160821 + +- Add test for MQTT_SUBTOPIC +- Change log range to LOG_LEVEL_ALL +- Change MQTT introduction messages +- Moved MQTT_MAX_PACKET_SIZE warning message to introduction messages + +### 1.0.23 20160821 + +- Add option USE_SPIFFS to move config from flash to spiffs +- Add webserver with options 0 (off), 1 (user) and 2 (admin) +- Add HTTP command interface (http://sonoff-1234/c?cmnd=light 2) +- Add wifimanager countdown counter +- Add command line webpage +- Add relay control to wifimanager +- Add restart option 99 to force restart +- Fix wifi hostname +- Fix NETBIOS hostname problem by reducing default hostname length +- Fix possible exception if WIFI_HOSTNAME is changed +- Fix upgrade messages +- Reduce memory use by redesigning config routines +- Split syntax message +- Rename define SERIAL_IO to USE_SERIAL + +### 1.0.22 20160814 + +- Add all MQTT parameters for configuration +- Add wifimanager to configure Wifi and MQTT via web server +- Change NTP time handling +- Fix Smartconfig parameter buffer overflow +- Fix PlatformIO warnings + +### 1.0.21 20160808 + +- Remove semaphore as subscription flooding (more than 15 subscriptions per second) is managed by SDK (LmacRxBlk:1) +- Add optional RTC interrupt (define USE_TICKER) to keep RTC synced during subscription flooding +- Remove heartbeatflag + +### 1.0.20 20160805 + +- Add semaphore to handle out of memory when too many subscriptions requested +- Use Daylight Saving (DST) parameters from user_config.h when timezone = 99 +- Add status 7 option displaying RTC information +- Add ledstate to status 0 + +### 1.0.19 20160803 + +- Fix possible MQTT_CLIENT_ID induced Exception(28) + +### 1.0.18 20160803 + +- Moved Cfg_Default +- Fix negative data handling +- Remove MQTT information from status 1 and add labels to status 1 +- Add mac address to status 5 +- Add MQTT ClientId, UserId and Password to status 6 + +### 1.0.17 20160731 + +- Better variable range checking +- Change ambiguous connection messages +- Add timestamp to serial message + +### 1.0.16 20160729 + +- Moved wifi, rtc, syslog and config to support.ino +- Fixed button action when buttontopic is used. Introduced with 1.0.15 +- Better buffer overflow checks (strlcpy) + +### 1.0.15 20160728 + +- Removed pubsubclient config changes from sonoff.ino as it doesn't work +- reapply MQTT_MAX_PACKET_SIZE 256 and MQTT_KEEPALIVE 120 to PubSubClient.h +- Add status 0 option displaying all status messages +- Change MQTT_MAX_PACKET_SIZE from 1024 to 256 +- Add buffer overflow checks (snprintf and strncpy) +- Implemented common string sizes + +### 1.0.14 20160722 + +- Seperate user config from sonoff.ino to user_config.h (pucebaboon) +- Change defaults from sidnas2 to domus1 +- Add MQTT status message as status 6 (pucebaboon) +- Add status type to message (pucebaboon) +- Add pubsubclient config changes to sonoff.ino (pucebaboon) + +### 1.0.13 20160702 + +- Add Ledstate 1 option to show power state on led + +### 1.0.12 20160529 + +- Allow disable of button topic using "0" + +### 1.0.11 20160524 + +- Provide button response if MQTT connection lost + +### 1.0.10 20160520 + +- Add optional button topic to assist external MQTT clients +- Change version notation +- Reset default values + +### 1.0.9 20160503 + +- Add more blinks +- Add reset 2 option erasing flash +- Add status 5 option displaying network info +- Add syslog check for Wifi connection +- Resize MqttPublish log array +- Change Wifi smartconfig active from 100 to 60 seconds +- Update Wifi initialization + +### 1.0.8 20160430 + +- Remove use of Wifi config data from SDK +- Add status 3 (syslog info) and status 4 (flash info) +- Add restart option to button (5 quick presses) + +### 1.0.7 20160420 + +- Add UDP syslog support +- Change HOST command to MQTTHOST command +- Add commands SYSLOG, SERIALLOG and LOGHOST +- Change hostname to lower case to distinguise between open-sdk version +- Add support for ESP-12F used in my modified wkaku power socket switch +- Fix timezone command +- Add RTC month names for future use +- Modify button code +- Remove initialization errors by better use of MQTT loop + +### 1.0.6 20160406 + +- Removed Wifi AP mode (#1) +- Add test for Arduino IDE version >= 1.6.8 +- Fix RTC time sync code + +### 1.0.5 20160310 + +- Initial public release +- Show debug info by selecting option from IDE Tools Debug port: Serial diff --git a/tasmota/_changelog.ino b/tasmota/_changelog.ino deleted file mode 100644 index cbc56312c..000000000 --- a/tasmota/_changelog.ino +++ /dev/null @@ -1,1977 +0,0 @@ -/*********************************************************************************************\ - * 7.0.0.4 20191108 - * Add command WifiPower 0 .. 20.5 to set Wifi Output Power which will be default set to 17dBm - * Change supported PCF8574 I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time - * Change supported PCF8574A I2C address range to 0x39 - 0x3F allowing other I2C devices with address 0x38 to be used at the same time - * Change supported MCP230xx I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time - * Add Keep last channels values when Color command end with '=' (#6799) - * Add support for I2C sensor TLS2591 Light Intensity sensor (#6873) - * Change Kept only NEC/RC5/RC6/HASH IR protocols in standard Tasmota, all other protocols require Tasmota-IR, saving 4K - * Add command SetOption76 0/1 to enable incrementing bootcount when deepsleep is enabled (#6930) - * Change Reset erase end address from as seen by SDK (getFlashChipSize) to full flash size (getFlashChipRealSize) - * Change Zigbee log verbosity reduction - * - * 7.0.0.3 20191103 - * Add command I2cDriver for I2C driver runtime control using document I2CDEVICES.md - * Fix random crash caused by UPNP flood - * Add support for Honeywell HPMA115S0 particle concentration sensor by David Hunt (#6843) - * Remove driver xsns_12_ads1115_i2cdev replaced by xsns_12_ads1115 - * - * 7.0.0.2 20191102 - * Add command WebColor19 to control color of Module and Name (#6811) - * Add support for Honeywell I2C HIH series Humidity and Temperetaure sensor (#6808) - * Fix wrong Dimmer behavior introduced with #6799 when SetOption37 < 128 - * Change add DS18x20 support in Tasmota-IR - * Add Zigbee command support, considered as v1.0 for full Zigbee support - * Fix Reduce flash size after change to IRremoteESP8266 v2.7.0 - * - * 7.0.0.1 20191027 - * Remove update support for versions before 6.0 - * Change default GUI to dark theme - * Add command SetOption73 0/1 to re-enable HTTP Cross-Origin Resource Sharing (CORS) now default disabled (#6767) - * Add frequency to ADE7953 energy monitor as used in Shelly 2.5 by ljakob (#6778) - * Add command SetOption74 0/1 to enable DS18x20 internal pull-up and remove define DS18B20_INTERNAL_PULLUP (#6795) - * Fix better control of RGB/White when SetOption37 >128, added Dimmer1 and Dimmer2 commands (#6714) - * Add hide Alexa objects with friendlyname starting with '$' (#6722, #6762) - * Add command SetOption75 0/1 to switch between grouptopic (0) using fulltopic replacing %topic% or (1) is cmnd/ (#6779) - * Change Update IRremoteESP8266 to v2.7.0 - * - * 6.7.1.1 20191026 - * Change ArduinoSlave to TasmotaSlave (Experimental) - * Add support for Tuya battery powered devices (#6735) - * Change repository name from Sonoff-Tasmota to Tasmota - * Change all code references from Sonoff to Tasmota - * - * 6.7.1 20191026 - * Release - * Fix on energy monitoring devices using PowerDelta Exception0 with epc1:0x4000dce5 = Divide by zero (#6750) - * Fix Script array bug (#6751) - * - * 6.7.0 20191025 - * Release - * - * 6.6.0.21 20191022 - * Remove support for WPS and SmartConfig in favour of Web server (!) based WifiManager (#6680) - * Remove binary sonoff-classic (#6680) - * Remove command SetOption2 - * - * 6.6.0.20 20191018 - * Add command SetOption65 0/1 to disable (1) fast power cycle detection fixing unwanted brownout trigger - * Add absolute PowerDelta using command PowerDelta 101..32000 where 101 = 101-100 = 1W, 202 = 202-100 = 102W (#5901) - * Add support for EX-Store WiFi Dimmer V4 (#5856) - * Add ZigbeeRead command and many improvements (#6095) - * Add ArduinoSlave driver (EXPERIMENTAL) - * - * 6.6.0.19 20191018 - * Replace obsolete xsns_23_sdm120 with xnrg_08_sdm120 and consolidate define USE_SDM120 - * Replace obsolete xsns_25_sdm630 with xnrg_10_sdm630 and consolidate define USE_SDM630 - * Replace obsolete xsns_49_solaxX1 with xnrg_12_solaxX1 (#6677) - * - * 6.6.0.18 20191010 - * Add command DimmerRange in Light module to support 2 byte dimming ranges from Tuya - * Add Zigbee additional commands and sending messages to control devices (#6095) - * Fix Rules were not triggered with IR unknown protocol or in sonoff-it (#6629) - * Add define USE_DEEPSLEEP and command DeepSleepTime 0 or 10..86400 (seconds) to enter deepsleep mode (#6638) - * Add define USE_SONOFF_RF to enable/disable Sonoff Rf support (#6648) - * Add incremental beeps to Ifan03 remote control fan speed buttons (#6636) - * Add rule support after every command execution like Fanspeed#Data=2 (#6636) - * Fix handling of ligth channels when pwm_multichannel (Option68) is enabled - * Add WebUI for multiple, independent PWM channels - * Remove default DS18B20 driver and only support define DS18x20 (#6647) - * Add support for PMS3003 dust particle sensor - * Change Sonoff L1 support by adding define USE_SONOFF_L1 - * - * 6.6.0.17 20191009 - * Add command SetOption34 0..255 to set backlog delay. Default value is 200 (mSeconds) (#6562) - * Add command Gpio 255 to show physical GPIO configuration of all non-flash pins (#6407) - * - * 6.6.0.16 20191008 - * Change PZEM004T default address mask from 0.0.0.x to 192.168.1.x for legacy reason (#6585) - * Fix PZEM004T, PZEMAC and PZEMDC autodetection (#6585) - * Change light drivers internals to ease management - * - * 6.6.0.15 20191003 - * Change command PulseTime JSON message format and allow display of all pulsetimer information (#6519) - * Add support for Chint DDSU666 Modbus energy meter by Pablo Zerón - * Add support for SM2135 as used in Action LSC Smart Led E14 (#6495) - * Add command SetOption72 0/1 to switch between software (0) or hardware (1) energy total counter (#6561) - * Add Zigbee tracking of connected devices and auto-probing of Manuf/Model Ids - * Fix better handling of PWM White Temperature mode for Module 48 (#6534) - * - * 6.6.0.14 20190925 - * Change command Tariffx to allow time entries like 23 (hours), 1320 (minutes) or 23:00. NOTE: As this is development branch previous tariffs are lost! (#6488) - * Remove support for define USE_DS18x20_LEGACY and legacy DS18x20 driver (#6486) - * Add initial support for MQTT logging using command MqttLog (#6498) - * Add Zigbee more support - collect endpoints and clusters, added ZigbeeDump command - * Add initial support for shutters by Stefan Bode (#288) - * Add command to MCP230xx: sensor29 pin,0/1/2 for OFF/ON/TOGGLE - * Add initial support for PCF8574 I2C I/O Expander (currently output only) by Stefan Bode - * Add command SetOption71 0/1 to switch between different Modbus Active Energy registers on DDS238-2 energy meters (#6531) - * Change command SetOption43 to make it more general. Now supports PS_16_DZ driver too (#6544) - * Change command handling by moving buffers up in chain solving MQTTlog support (#6529) - * Change detection of non-MQTT commands by allowing non-space characters as delimiter (#6540) - * Fix TasmotaSerial: move serial send to IRAM for high speed baud rates - * - * 6.6.0.13 20190922 - * Add command EnergyReset4 x,x to initialize total usage for two tarrifs - * Add command EnergyReset5 x,x to initialize total export (or production) for two tarrifs - * Add command Sensor34 8,0 and Sensor34 8,1 to disable/enable JSON message on weight change over 4 gram - * Add JSON array index support to rules evaluation allowing trigger on ENERGY#POWER[2]>0.60 from JSON ..,"Power":[0.00,0.68],.. (#6160) - * - * 6.6.0.12 20190910 - * Redesign command Tariff to now default to 0 (=disabled) and allowing to set both Standard Time (ST) and Daylight Savings Time (DST) start hour - * Commands Tariff1 22,23 = Tariff1 (Off-Peak) ST,DST Tariff2 (Standard) 6,7 = Tariff2 ST,DST Tariff9 0/1 = Weekend toggle (1 = Off-Peak during weekend) - * Change rename "Data" to "Hash" and limit to 32 bits when receiving UNKNOWN IR protocol (see DECODE_HASH from IRremoteESP8266) - * Add command Gpios 255/All to show all available GPIO components (#6407) - * Change JSON output format for commands Adc, Adcs, Modules, Gpio and Gpios from list to dictionary (#6407) - * Add Zigbee support phase 3 - support for Xiaomi lumi.weather air quality sensor, Osram mini-switch - * Change energy sensors for three phase/channel support - * Add support for Shelly 2.5 dual energy (#6160) - * Add initial support for up to three PZEM-014/-016 on serial modbus connection with addresses 1 (default), 2 and 3 (#2315) - * Add initial support for up to three PZEM-004T on serial connection with addresses x.x.x.1 (default), 2 and 3 (#2315) - * Add initial support for up to three PZEM-003/-017 on serial modbus connection with addresses 1 (default), 2 and 3 (#2315) - * Add driver USE_SDM630_2 as future replacement for USE_SDM630 - Pls test and report - * Add command ModuleAddress 1/2/3 to set Pzem module address when a single module is connected (#2315) - * - * 6.6.0.11 20190907 - * Change Settings crc calculation allowing short term backward compatibility - * Add support for up to 4 INA226 Voltage and Current sensors by Steve Rogers (#6342) - * Change Improve reliability of TasmotaSerial at 115200 bauds and reduce IRAM usage for Stage/pre-2.6 - * Add support for A4988 stepper-motor-driver-circuit by Tim Leuschner (#6370) - * Add support for Hiking DDS238-2 Modbus energy meter by Matteo Campanella (#6384) - * - * 6.6.0.10 20190905 - * Redesign Tuya support by Shantur Rathore removing commands SetOption34, 41, 44, 45, 46 and 65 (#6353) - * Add command Reset 99 to reset bootcount to zero (#684, #6351) - * Change command Time 1/2/3 to select JSON time format ISO, ISO + Epoch or Epoch for legacy reason - * - * 6.6.0.9 20190828 - * Change theoretical baudrate range to 300..19660500 bps in 300 increments (#6294) - * Add Full support of all protocols in IRremoteESP8266, to be used on dedicated-IR Tasmota version. Warning: +81k Flash when compiling with USE_IR_REMOTE_FULL - * Add compile time define USE_WS2812_HARDWARE to select hardware type WS2812, WS2812X, WS2813, SK6812, LC8812 or APA106 (DMA mode only) - * Add 'sonoff-ir' pre-packaged IR-dedicated firmware and 'sonoff-ircustom' to customize firmware with IR Full protocol support - * Add Zigbee support phase 2 - cc2530 initialization and basic ZCL decoding - * Add driver USE_SDM120_2 with Domoticz P1 Smart Meter functionality as future replacement for USE_SDM120 - Pls test and report - * Add command Power0 0/1/2/Off/On/Toggle to control all power outputs at once (#6340) - * Add time to more events (#6337) - * Add command Time 1/2/3 to select JSON time format ISO + Epoch, ISO or Epoch - * - * 6.6.0.8 20190827 - * Add Tuya Energy monitoring by Shantur Rathore - * Add phase 1 Domoticz P1 Smart Meter support using energy sensors handled by xdrv_03_energy.ino based on an idea by pablozg - * Add commands Tariff1 0..23 (start Off-Peak hour), Tariff2 0..23 (start Standard hour) and Tariff3 0/1 (Saturday and Sunday Off-Peak) - * - * 6.6.0.7 20190825 - * Expand Settings area to 4k for future use - * - * 6.6.0.6 20190819 - * Add I2C display driver for SH1106 oled by Gerhard Mutz - * Add SPI display drivers for epaper 4.2 inch, ILI9488 TFT, SSD1351 Color oled and RA8876 TFT by Gerhard Mutz - * Add support for HM17 bluetooth LE passive scan of ibeacon devices by Gerhard Mutz - * - * 6.6.0.5 20190816 - * Add command WebSensor 0/1 to control display of sensor data in web GUI (#6085) - * Change some table locations from RAM to Flash - * Fix wrong telemetry message when SetOption68 1 (#6191) - * Add support for RDM6300 125kHz RFID Reader by Gerhard Mutz - * - * 6.6.0.4 20190806 - * Add support for CHIRP soil moisture sensor by Christian Baars - * Add debug compile features using defines DEBUG_TASMOTA_CORE, DEBUG_TASMOTA_DRIVER and DEBUG_TASMOTA_SENSOR. - * See DEBUG_CORE_LOG example in sonoff.ino and DEBUG_DRIVER_LOG example in xdrv_09_timers.ino - * Add support for Solax X1 inverter by Pablo Zerón - * Add ZigBee support phase 1 - low level MQTT ZNP messages for CC2530 devices - * Add command Buzzer with optional parameters ,, enabled when a buzzer is configured (#5988) - * Add support for PAJ7620 gesture sensor by Christian Baars - * - * 6.6.0.3 20190725 - * Change filename of configuration backup from using FriendlyName1 to Hostname solving diacritic issues (#2422) - * Change Store AWS IoT Private Key and Certificate in SPI Flash avoiding device-specific compilations - * Upgrade library IRRemoteEsp8266 to 2.6.4, now using sendPioneer() - * Add support for MAX31865 Thermocouple sensor by Alberto Lopez Siemens - * Add option 0 to Width1 (Marker), Width2 (Second), Width3 (Minute) and Width4 (Hour) disabling display (#6152) - * Add MqttCount metric to STATE (#6155) - * Add define USE_ENERGY_MARGIN_DETECTION to disable Energy Margin and Power Limit detection - * Add define USE_ENERGY_POWER_LIMIT to disable Energy Power Limit detection while Energy Margin detection is active - * Add allow repeat/longpress for IRSend raw, introduced IRSend option (#6074) - * Add SetOption68 to enable multi-channel PWM instead of a single light (#6134) - * - * 6.6.0.2 20190714 - * Change commands Var and Mem to show all parameters when no index is given (#6107) - * Add command SetOption67 0/1 to disable or enable a buzzer as used in iFan03 - * Add command DisplayWidth to set pixel width on supported devices - * Add command DisplayHeight to set pixel height on supported devices - * Add support for Sonoff iFan03 as module 71 (#5988) - * Add support for a buzzer - * Add support for IRSend long press ('repeat' feature from IRRemoteESP8266) (#6074) - * Add support for IRHVAC Midea/Komeco protocol (#3227) - * Add support for more IRSend protocols enabled in my_user_config.h - * Add support for IRSend Pioneer protocol (#6100) - * Add Oled reset GPIO option "OLED reset" - * - * 6.6.0.1 20190708 - * Fix Domoticz battery level set to 100 if define USE_ADC_VCC is not used (#6033) - * Fix Force Elliptic Curve for Letsencrypt TLS #6042 - * Fix WeMo emulation for 1G echo and 2G echo dot (#6086) - * Fix Xiaomi Philips brightness (#6091) - * Change defines USE_TX20_WIND_SENSOR and USE_RC_SWITCH in my_user_config.h to disable to lower iram usage enabling latest core compilation (#6060, #6062) - * Add blend RGB leds with White leds for better whites (#5895, #5704) - * Add command SetOption41 0..8 to control number of Tuya switches (#6039) - * Add command SetOption42 0..255 to set overtemperature (Celsius only) threshold resulting in power off all on energy monitoring devices. Default setting is 90 (#6036) - * Add command SetOption66 0/1 to enable or disable Tuya dimmer range 255 slider control - * Add command Time to disable NTP and set UTC time as Epoch value if above 1451602800 (=20160101). Time 0 re-enables NTP (#5279) - * Add AZ7798 automatic setting of clock display (#6034) - * Add Epoch and UptimeSec to JSON messages (#6068) - * Add support for up to 4 INA219 sensors (#6046) - * - * 6.6.0 20190707 - * Remove support of TLS on core 2.3.0 and extent support on core 2.4.2 and up - * Remove MQTT uptime message every hour - * Refactor some defines to const - * Refactor webserver HTML input, button, textarea, and select name based on id - * Refactor webserver sensor data collection - * Refactor TLS based on BearSSL, warning breaking change for fingerprints validation - * Refactor management of lights, using classes and integers instead of floats - * Refactor UDP initial message handling from string to char using static memory and add debug info (#5505) - * Refactor IRSend and receive for 64-bit support (#5523) - * Refactor MQTT which might solve issue (#5755) - * Refactor IRSend by using heap when more than 199 values need to be send. May need increase of define MQTT_MAX_PACKET_SIZE too (#5950) - * Refactor double to float in rules, and replaced trigonometric functions from stdlib with smaller versions (#6005) - * Change pubsubclient MQTT_KEEPALIVE from 10 to 30 seconds for AWS IoT support - * Change gamma correction as default behavior, ie "Ledtable 1" - * Change PWM resolution from 8 to 10 bits for low brightness lights - * Change IRSend Panasonic protocol to 64-bit (#5523) - * Change ADC0 to enabled by default in my_user_config.h (#5671) - * Change define USE_EMULATION by USE_EMULATION_HUE and USE_EMULATION_WEMO (#5826) - * Change default PowerDelta from 80% to 0% on new installations (#5858, #5028, #4813, #4130, #4145, #3795, #3778, #3660, #3648) - * Fix display Bug in KNX webmenu for Physical Address - * Fix the Unescape() function and the SendSerial3 behaviour - * Fix webserver multiple Javascript window.onload functionality - * Fix TasmotaSerial at 9600 bps solving DFPlayer comms (#5528) - * Fix Configure Timer Web GUI (#5568) - * Fix Shelly 2.5 I2C address priority issue when VEML6070 code is present by disabling VEML6070 for Shelly 2.5 (#5592) - * Fix use of SerialDelimiter value 128 (#5634) - * Fix Sonoff Pow R2 / S31 invalid energy increments (#5789) - * Fix core 2.5.x ISR not in IRAM exception (#5837) - * Fix Philips Hue emulation Alexa issue by using part of MAC address for LightId (#5849) - * Fix missing white channel for WS2812 (#5869) - * Fix PZem startup issue (#5875) - * Fix exception 9 when syslog is enabled and NTP is just synced (#5917) - * Fix Toggle functionality to button double press when one button and two devices are detected (#5935) - * Fix channel command for dual dimmers (#5940) - * Fix not restoring white value on power off/power on (#5993) - * Add command AdcParam to control ADC0 Temperature and Light formula parameters - * Add command LedMask to assign which relay has access to power LED (#5602, #5612) - * Add extended LED power control using command LedPowerX where X is 1 to 4. Enabled when "LedLink(i)" is configured too (#5709) - * Add command Sensor20 1..255 to change Nova Fitness SDS01 working period in minutes (#5452) - * Add command SetOption38 6..255 to set IRReceive protocol detection sensitivity mimizing UNKNOWN protocols (#5853) - * Add command SetOption39 1..255 to control CSE7766 (Pow R2) or HLW8032 (Blitzwolf SHP5) handling of power loads below 6W. Default setting is 128 (#5756) - * Add command SetOption40 0..250 to disable button functionality if activated for over 0.1 second. Needs SetOption1 1 and SetOption13 0 (#5449) - * Add command SetOption63 0/1 to disable relay state feedback scan at restart (#5594, #5663) - * Add command SetOption64 0/1 to switch between "-" or "_" as sensor index separator impacting DS18X20, DHT, BMP and SHT3X sensor names (#5689) - * Add command SetOption65 0/1 and more Tuya Serial based device support (#5815) - * Add command WebColor to change GUI colors on the fly - * Add support for AWS IoT with TLS 1.2 on core 2.4.2 and up. Full doc here: https://github.com/arendst/Tasmota/wiki/AWS-IoT - * Add support for Badger HR-E Water Meter (#5539) - * Add support for Shelly 2.5 Energy and overtemp Monitoring (#5592) - * Add support for color and colortone for Philips Hue emulation via Alexa (#5600 #4809) - * Add support for Scripts as replacement for Rules. Default disabled but can be enabled in my_user_config.h (#5689) - * Add support for up to four LEDs related to four power outputs. Enabled when "LedLink(i)" is configured too (#5709) - * Add support for Shelly 1PM Template {"NAME":"Shelly 1PM","GPIO":[56,0,0,0,82,134,0,0,0,0,0,21,0],"FLAG":2,"BASE":18} (#5716) - * Add support for SPS30 Particle sensor thanks to Gerhard Mutz (#5830) - * Add support for VL53L0x time of flight sensor. Might interfere with TSL2561 using same I2C address (#5845) - * Add support for Sonoff L1 thanks to reef-actor (#6002) - * Add rule Http#Initialized - * Add rule System#Save executed just before a planned restart - * Add rule support for single JSON value pair like {"SSerialReceived":"on"} by expanding it to {"SSerialReceived":{"Data":"on"}} allowing for trigger SSerialReceived#Data=on (#5638) - * Add define USE_COUNTER to my_user_config.h to save space in sonoff-basic.bin and sonoff-minimal.bin - * Add define USE_DHT to my_user_config.h to save space in sonoff-basic.bin - * Add defines USE_EMULATION_WEMO and USE_EMULATION_HUE to my_user_config.h to control emulation features at compile time (#5826) - * Add Toggle functionality to button double press when more devices are detected - * Add device OverTemp (>73 Celsius) detection to Energy Monitoring devices with temperature sensor powering off all outputs - * Add Tuya Dimmer 10 second heartbeat serial packet required by some Tuya dimmer secondary MCUs - * Add all temperature, humidity and pressure for global access - * Add validation check when loading settings from flash - * Add HX711 weight restore after controlled restart or after power restore just before executing command Sensor34 7 (#5367, #5786) - * Add GUI hexadecimal color options in my_user_config.h (#5586) - * Add alternative IRSend command syntax IRSend raw,,
,
,,,, (#5610) - * Add user configurable ADC0 to Module and Template configuration compatible with current FLAG options (#5671) - * Add AriLux RF control GPIO option "ALux IrSel" (159) replacing "Led4i" (59) for full LED control (#5709) - * Add LED GPIO option "LedLink" (157) and "LedLinki" (158) to select dedicated link status LED (#5709) - * Add all 5 PWM channels individually adressable with LEDs. (#5741) - * Add reset of Energy values when connection to sensor is lost for over 4 seconds (#5874, #5881) - * Add checkbox to GUI password field enabling visibility during password entry only (#5934) - * - * 6.5.0 20190319 - * Remove commands SetOption14 and SetOption63 as it has been superseded by command Interlock - * Remove command SetOption35 0-255 for mDNS start-up delay (#4793) - * Remove support for MQTT_LIBRARY_TYPE, MQTT_ARDUINOMQTT and MQTT_TASMOTAMQTT (#5474) - * Change webserver content handling from single String to small Chunks increasing RAM - * Change code use of boolean to bool and byte to uint8_t - * Change code uint8_t flags to bool flags - * Change sonoff_template.h layout regarding optional module flags like ADC0 - * Change sonoff_template.h module lay-out by removing non-configurable GPIOs - * Change button driver making it modular - * Change switch driver making it modular and introduce input filter (#4665, #4724) - * Change switch input detection by optimizing switch debounce (#4724) - * Change web authentication (#4865) - * Change image name BE_MINIMAL to FIRMWARE_MINIMAL and USE_xyz to FIRMWARE_xyz (#5106) - * Change GUI weblog from XML to plain text solving possible empty screens (#5154) - * Fix most compiler warnings - * Fix Display exception 28 when JSON value is nullptr received - * Fix epaper driver (#4785) - * Fix HAss Sensor Discovery Software Watchdog restart (#4831, #4988) - * Fix allowable MAX_RULE_VARS to 16 (#4933) - * Fix mDNS addService (#4938, #4951) - * Fix HAss discovery of MHZ19(B) sensors (#4992) - * Fix some exceptions and watchdogs due to lack of stack space (#5215) - * Fix GUI wifi password acception starting with asteriks (*) (#5231, #5242) - * Fix command WebSend intermittent results (#5273, #5304) - * Fix additional characters in fallbacktopic, hostname and mqttclient on core 2.5.0 (#5359, #5417) - * Fix Energy TotalStartTime when commands EnergyReset0 and/or EnergyReset3 used (#5373) - * Fix DS18S20 temperature calculation (#5375) - * Fix float calculations in range from 0 to -1 (#5386) - * Fix exception on GUI Configure Logging and Configure Other (#5424) - * Add commands PowerCal, VoltageCal and CurrentCal for HLW8012, HJL01 and BL0937 based energy sensors - * Add command SerialDelimiter 128 to filter reception of only characters between ASCII 32 and 127 (#5131) - * Add command SSerialSend5 \ to SerialBridge - * Add command Interlock 0 / 1 / 1,2 3,4 .. to control interlock ON/OFF and add up to 8 relays in 1 to 4 interlock groups (#4910, #5014) - * Add command Template 255 to copy module configuration over to current active template and store as user template named Merged (#5371) - * Add command WifiConfig 7 to allow reset of device in AP mode without admin password (#5297) - * Add command SetOption36 to control boot loop default restoration (#4645, #5063) - * Add command SetOption37 for RGBCW color mapping (#5326) - * Add command SetOption55 0/1 and define MDNS_ENABLE to disable/enable mDNS (#4793, #4923) - * Add command SetOption62 0/1 to disable retain on Button or Switch hold messages (#5299) - * Add support for Smanergy KA10 Smart Wall Socket with Energy monitoring - * Add support for commands in sensor drivers - * Add support for MAX31855 K-Type thermocouple sensor using softSPI (#4764) - * Add support for Near Field Communication (NFC) controller PN532 using Serial (#4791, #5162) - * Add support for OBI Power Socket 2 (#4829) - * Add support for YTF IR Bridge (#4855) - * Add support for Mi LED Desk Lamp with rotary switch (#4887) - * Add support for Digoo DG-SP202 Smart Socket with Energy monitoring (#4891) - * Add support for MAX44009 Ambient Light sensor (#4907) - * Add support for inverted buttons and inverted buttons without pullup (#4914) - * Add support for Luminea ZX2820 Smart Socket with Energy monitoring (#4921) - * Add support for multiple ADS1115 I2C devices (#5083) - * Add support for online template change using command Template or GUI Configure Other (#5177) - * Add support for Korean language translations (#5344) - * Add support for sensor SCD30 (#5434) - * Add parameter CFG_HOLDER to status 1 message (#5206) - * Add SetOption32 until SetOption49 diagnostic information to Status 3 report as replacement for second property value in SetOption property name - * Add Resolution property to Status 3 report providing previous SetOption second value property - * Add property MqttCount to status 6 message representing number of Mqtt re-connections - * Add property LinkCount to state and status 11 message representing number of Wifi Link re-connections - * Add property Downtime to state and status 11 message representing the duration of wifi connection loss - * Add variable %timestamp% to rules (#4749) - * Add rule support for "==", "!=" ">=" and "<=" (#5122) - * Add rule expression enabled by define USE_EXPRESSION in my_user_config.h (#5210) - * Add Power status functionality to LED2 when configured leaving LED1 for Link status indication - * Add user configuration of HLW8012 and HJL-01/BL0937 Energy Monitoring as used in Sonoff Pow and many Tuya based devices - * Add user configuration of MCP39F501 Energy Monitoring as used in Shelly2 - * Add online template configuration using both commands and Configure Template menu option in GUI - * Add (S)SerialSend3 escape sequence \x to allow hexadecimal byte value (#3560, #4947) - * Add define DS18B20_INTERNAL_PULLUP to select internal input pullup when only one DS18B20 sensor is connected eliminating external resistor (#4738) - * Add button control when no relay configured (#4682) - * Add startup delay of 4 seconds to button control (#4829) - * Add core version conditional compile options to provided PWM files (#4917) - * Add resiliency to saved Settings (#5065) - * Add MHZ19 Temperature as Domoticz Temperature selection (#5128) - * Add HAss status sensor (#5139) - * Add status message to former declined group commands (#5145) - * Add 0x to IRRemote (SetOption29) and RCSwitch (SetOption28) received hexadecimal data (#5431) - * - * 6.4.1 20181224 - * Change RAM usage BMP/BME I2C sensors - * Change FallbackTopic from cmnd// to cmnd/_fb/ to discriminate from Topic (#1528) - * Change FallbackTopic detection (#4706) - * Change Hass discovery to short MQTT messages as used by Hass 0.81 and up (#4711) - * Change MQTT GUI password handling (#4723) - * Fix possible dtostrf buffer overflows by increasing buffers - * Fix wifi strongest signal detection (#4704) - * Fix Alexa "this value is outside the range of the device". Needs power cycle and Alexa deletion/discovery cycle. (#3159, #4712) - * Add Slovak language file (#4663) - * Add support for AZ-Instrument 7798 CO2 meter/datalogger (#4672) - * Add define WIFI_SOFT_AP_CHANNEL in my_user_config.h to set Soft Access Point Channel number between 1 and 13 as used by Wifi Manager web GUI (#4673) - * Add define USE_MQTT_TLS_CA_CERT for checking MQTT TLS against root ca using Let's Encrypt cert from sonoff_letsencrypt.h - not supported with core 2.3.0 (#4703) - * - * 6.4.0 20181217 - * Change GUI Configure Module by using AJAX for data fetch to cut page size (and memory use) by 40% - In case of web page errors clear your browser cache or do Page Reload (F5 or Ctrl+R) - * Change enforcing flashmode dout but it is still mandatory - * Change bootcount update (being first) flash write to 10 seconds after restart - * Change display and epaper drivers - * Change command WebSend Host header field from IP address to hostname (#4331) - * Change log buffer size from 512 to 520 to accommodate http sensor data (#4354) - * Change default WIFI_CONFIG_TOOL from WIFI_WAIT to WIFI_RETRY in my_user_config.h (#4400) - * Change webgui refresh time delay for Save Settings and local OTA Upload (#4423) - * Change SR-04 driver to use NewPing library (#4488) - * Change MCP230xx driver to support interrupt retention over teleperiod (#4547) - * Change support for MPU6050 using DMP (#4581) - * Fix unintended function overload of WifiState - * Fix wifi connection errors using wifi disconnect and ESP.reset instead of ESP.restart - * Fix Sonoff Pow R2 and Sonoff S31 Serial interface hang caused by Sonoff Basic R2 driver delay implementation (and possibly core bug) - * Fix MQTT connection error after restart - * Fix wifi re-scan connection baseline - * Fix possible strncat buffer overflows - * Fix intermittent Pzem sensor energy overflow calculation error - * Fix shelly2 ghost switching caused by lack of pull-up inputs (#4255) - * Fix hardware serial pin configuration. To keep using hardware serial swap current Rx/Tx pin configuration only (#4280) - * Fix MqttRetry values above 255 seconds (#4424) - * Fix WifiManager functionality on initial installation (#4433) - * Fix ArduinoOTA for Core 2.5.0 (#4620) - * Add minutes to commands Timezone to allow all possible world timezones - * Add more strict checks for GPIO selections - * Add code image and optional commit number to version - * Add dynamic delay to main loop providing time for wifi background tasks - * Add additional start-up delay during initial wifi connection - * Add support for decoding Theo V2 sensors as documented on https://sidweb.nl using 434MHz RF sensor receiver - * Add support for decoding Alecto V2 sensors like ACH2010, WS3000 and DKW2012 weather stations using 868MHz RF sensor receiver - * Add user definition of defines WIFI_RSSI_THRESHOLD (default 10) and WIFI_RESCAN_MINUTES (default 44) - * Add command SetOption58 0/1 to enable IR raw data info in JSON message (#2116) - * Add command IRSend |0,,,.. to allow raw data transmission (#2116) - * Add command SetOption56 0/1 to enable wifi network scan and select highest RSSI (#3173) - * Add command SetOption57 0/1 to enable wifi network re-scan every 44 minutes with a rssi threshold of 10 to select highest RSSI (#3173) - * Add support for SDM220 (#3610) - * Add default sleep 1 to sonoff-basic to lower energy consumption (#4217) - * Add wifi status to Tuya (#4221) - * Add delays to reduce CPU usage at boot time (#4233) - * Add command SetOption24 0/1 to select pressure unit as hPa or mmHg (#4241) - * Add optional hardware serial when GPIO13(Rx) and GPIO15(Tx) are selected removing hardware serial from GPIO01(Tx) and GPIO03(Rx) (#4288) - * Add support for Gosund SP1 v2.3 Power Socket with Energy Monitoring (#4297) - * Add support for Armtronix dimmers. See wiki for info (#4321) - * Add to command WebSend option to send a direct path when command starts with a slash (#4329) - * Add support for LG HVac and IrRemote (#4377) - * Add initial support for Hass sensor discovery (#4380) - * Add support for Fujitsu HVac and IrRemote (#4387) - * Add support for I2C MGC3130 Electric Field Effect sensor by Christian Baars (#3774, #4404) - * Add command CalcRes to set number of decimals (0 - 7) used in commands ADD, SUB, MULT and SCALE (#4420) - * Add CPU average load to state message (#4431) - * Add command SetOption59 0/1 to change state topic from tele/STATE to stat/RESULT (#4450) - * Add support for SM Smart Wifi Dimmer PS-16-DZ (#4465) - * Add support for Teckin US Power Socket with Energy Monitoring (#4481) - * Add command SetOption60 0/1 to select dynamic sleep (0) or sleep (1) (#4497) - * Add support for iFan02 Fanspeed in Domoticz using a selector (#4517) - * Add support for GPIO02 for newer Sonoff Basic (#4518) - * Add Announce Switches to MQTT Discovery (#4531) - * Add support for Manzoku Power Strip (#4590) - * - * 6.3.0 20181030 - * Change web Configure Module GPIO drop down list order for better readability - * Change status JSON message providing more switch and retain information - * Change xsns_17_senseair.ino to use TasmotaModbus library - * Change MCP230xx driver - * Change PubSubClient Mqtt library to non-blocking EspEasy version - * Change energy monitoring using energy sensor driver modules - * Change Webserver page handler for easier extension (thx to Adrian Scillato) - * Change pinmode for no-pullup defined switches to pullup when configured as switchmode PUSHBUTTON (=3 and up) (#3896) - * Change default OTA Url to http://thehackbox.org/tasmota/release/sonoff.bin (#4170) - * Remove support for MQTT Client esp-mqtt-arduino by #define MQTT_LIBRARY_TYPE MQTT_ESPMQTTARDUINO - * Remove commands PowerCal, VoltageCal and CurrentCal as more functionality is provided by commands PowerSet, VoltageSet and CurrentSet - * Remove restart after ntpserver change and force NTP re-sync (#3890) - * Fix showing Period Power in energy threshold messages - * Fix header file execution order by renaming user_config.h to my_user_config.h - * Fix some TSL2561 driver issues (#3681) - * Fix KNX PA exception. Regression from 6.2.1 buffer overflow caused by subStr() (#3700, #3710) - * Fix setting and getting color temperature for Philips Hue emulation (#3733) - * Fix ButtonRetain to not use default topic for clearing retain messages (#3737) - * Fix syslog when emulation is selected (#2109, #3784) - * Fix rule trigger POWER1#STATE execution after restart and SetOption0 is 0 (#3856) - * Fix Home Assistant forced light discovery (#3908) - * Fix invalid configuration restores and decode_config.py crc error when savedata = 0 (#3918) - * Fix timer offset -00:00 causing 12:00 hour offset (#3923) - * Fix I2CScan invalid JSON error message (#3925) - * Fix exception when wrong Domoticz JSON message is received (#3963) - * Fix Sonoff Bridge RfRaw receive (#4080, #4085) - * Fix possible wifi connection error (#4044, #4083) - * Fix invalid JSON floating point result from nan (Not a Number) and inf (Infinity) into null (#4147) - * Fix rule mqtt#connected trigger when mqtt is disabled (#4149) - * Add support for LCD, Matrix, TFT and Oled displays - * Add support for Neo Coolcam Wifi Smart Power Plug - * Add support for Michael Haustein ESP Switch - * Add support for MQTT Client based on lwmqtt to be selected by #define MQTT_LIBRARY_TYPE MQTT_ARDUINOMQTT - * Add support for Neo Coolcam Wifi Smart Power Plug - * Add support for Michael Haustein ESP Switch - * Add support for MQTT Client based on lwmqtt to be selected by #define MQTT_LIBRARY_TYPE MQTT_ARDUINOMQTT - * Add support for DS3231 Real Time Clock - * Add support for HX711 Load Cell with optional web GUI scale interface to demonstrate easy GUI plug-in - * Add support for serial 8N2 communication to TasmotaModbus and TasmotaSerial libraries - * Add support for RF transceiving using library RcSwitch (#2702) - * Add support for Shelly 1 and Shelly 2 (#2789) - * Add support for La Crosse TX20 Anemometer (#2654, #3146) - * Add support for MP3 player using DFRobot RB-DFR-562 (#3723) - * Add Support for Xiaomi-Philips Bulbs (#3787) - * Add support for PCA9685 12bit 16pin hardware PWM driver (#3866) - * Add support for EXS Relay V5.0 (#3810) - * Add support for OBI Power Socket (#1988, #3944) - * Add support for Teckin Power Socket with Energy Monitoring (#3950) - * Add support for Pzem-003/017 DC Energy monitoring module (#3694) - * Add support for Pzem-014/016 AC Energy monitoring module (#3694) - * Add support for CSL Aplic WDP 303075 Power Socket with Energy Monitoring (#3991, #3996) - * Add support for Tuya Dimmer (#469, #4075) - * Add command Display to show all settings at once - * Add command SerialSend5 to send raw serial data like "A5074100545293" - * Add command WebRefresh 1000..10000 to control web page refresh in milliseconds. Default is 2345 - * Add command WeightRes 0..3 to control display of decimals for kilogram - * Add command RGBWWTable to support color calibration (#3933) - * Add command Reset 4 (reset to defaults but keep wifi params) and Reset 5 (as reset 4 and also erase flash) (#4061) - * Add command SetOption35 0..255 (seconds) to delay mDNS initialization to control possible Wifi connect problems - * Add command SetOption52 0/1 to control display of optional time offset from UTC in JSON messages (#3629, #3711) - * Add command SetOption53 0/1 to toggle gui display of Hostname and IP address (#1006, #2091) - * Add authentication to HTTP web pages - * Add decimals as input to commands PowerSet, VoltageSet and CurrentSet - * Add tools/decode-config.py by Norbert Richter to decode configuration data. See file for information - * Add define USE_DISPLAYS for selecting image sonoff-display - * Add define USE_BASIC for selecting image sonoff-basic without most sensors - * Add auto reload of main web page to some web restarts - * Add TasmotaModbus library as very basic modbus wrapper for TasmotaSerial - * Add more API callbacks and document API.md - * Add Apparent Power and Reactive Power to Energy Monitoring devices (#251) - * Add token %hostname% to command FullTopic (#3018) - * Add Wifi channel number to state message (#3664) - * Add user configurable GPIO02 and GPIO03 on H801 devices (#3692) - * Add toggle function RGBW lights (#3695, #3697) - * Add network information to display start screen (#3704) - * Add sleep to Nova Fitness SDS01X sensor (#2841, #3724, #3749) - * Add Analog input AD0 enabled to sonoff-sensors.bin (#3756, #3757) - * Add power value below 5W to Sonoff Pow R2 and S31 (#3745) - * Add RF Receiver control to module MagicHome to be used on Arilux LC10 (#3792) - * Add userid/password option to decode-status.py (#3796) - * Add delay after restart before processing rule sensor data (#3811) - * Add force_update to Home Assistant discovery (#3873) - * Add rule triggers SWITCH1#BOOT and POWER1#BOOT (#3904, #3910) - * Add Hebrew language file (#3960) - * Add TotalStartTime to Energy JSON message (#3971) - * Add whitespace removal from RfRaw and SerialSend5 (#4020) - * Add support for two BMP/BME sensors (#4195) - * - * 6.2.1 20180905 - * Fix possible ambiguity on command parameters if StateText contains numbers only (#3656) - * Fix Wemo emulation to select the first relay when more than one relay is present (#3657) - * Fix possible exception due to buffer overflow (#3659) - * Fix lost energy today and total energy value after power cycle (#3689) - * - * 6.2.0 20180901 - * Allow user override of define MAX_RULE_VARS and MAX_RULE_TIMERS (#3561) - * Disable wifi sleep for both Esp8266/Arduino core 2.4.1 and 2.4.2 to solve device freeze caused by Espressif SDK bug (#3554) - * Change DS18B20 driver to provide better instant results - * Change some sensor drivers to provide instant results - * Change define USE_ALL_SENSORS to USE_SENSORS as it doesn't contain all sensors due to duplicate I2C addresses - * Change some sensor update timings: AdcEvery 200 -> 250, Senseair 300 -> 250, SDM120 300 -> 250, SDM630 300 -> 250 - * Change default Wifi config option from WPS to Wifi Manager if WPS is disabled or Wifi Smartconfig if webserver is disabled or Wifi Serial input if Smartconfig is disabled - * Change SHT1x driver to provide better instant results and fix I2C interference - * Change DHT driver to provide better instant results and add decimals to DHT11 (#3164) - * Change DS18x20 driver to provide better instant results (#3169) - * Change CounterType 1 from milliseconds to microseconds (#3437) - * Change scheduler for better sleep support using Uptime, Delay, PulseTime and TelePeriod, Blinktime (#3581) - * Remove unused functionality from Sonoff-minimal to save space - * Remove WPS and SmartConfig from sonoff-minimal saving 56k code space - * Remove TSL2561 debug message and update library (#2415) - * Remove forced restart when sleep command is executed (#3554) - * Fix invalid response using more than 4 switches and domoticz - * Fix sonoff-minimal not using default settings - * Fix unsecure main webpage update - * Fix DHT driver mixing values for different sensors (#1797) - * Fix EnergyReset3 regression not clearing total energy (#2723) - * Fix rules once regression from v6.1.0 (#3198, #3226) - * Fix command Scale buffer overflow (#3236) - * Fix possible WDT due to long MQTT publish handling (#3313) - * Fix command TimeDst/TimeStd invalid JSON (#3322) - * Fix handling of default names when using names starting with shortcut character ",0,1 or 2 (#3392, #3600, #3618) - * Fix LM75AD I2C sensor detection (#3408) - * Fix iFan02 power on state (#3412, #3530) - * Fix some Pow R2 and S31 checksum errors using optimized re-sync (#3425) - * Fix SDM120 reporting wrong negative values to Domoticz (#3521) - * Fix MQTT reconnection detection when using TasmotaMqtt library (#3558) - * Fix OtaMagic when file path contains a dash (-) (#3563) - * Fix Sonoff Bridge data reception when using Portisch EFM8 firmware using in data buffer length (#3605) - * Add read sensor retry to DS18B20, DS18x20, DHT, SHT1X and HTU21 - * Add user selection of Wifi Smartconfig as define USE_SMARTCONFIG in user_config.h - * Add boot loop detection and perform some solutions - * Add wifi and mqtt status led blinkyblinky to be disabled by SetOption31 1. Does not work when LedPower is On (deliberate) (#871, #2230, #3114, #3155) - * Add support for TM1638 switch (#2226) - * Add GPIO options ButtonXn, SwitchXn and CounterXn to select INPUT mode instead of INPUT_PULLUP (#2525) - * Add support for APDS9960 proximity sensor (#3051) - * Add support for MPR121 controller in input mode for touch buttons (#3142) - * Add support for MCP230xx for general purpose input expansion and command Sensor29 (#3188) - * Add default Wifi Configuration tool as define WIFI_CONFIG_NO_SSID in user_config.h if no SSID is configured (#3224) - * Add command Timers 0/1 to globally disable or enable armed timers (#3270) - * Add support for CCS811 sensor (#3309) - * Add Turkish language file (#3332) - * Add command SerialSend4 to send binary serial data (#3345) - * Add initial support for sensor MPU6050 (#3352) - * Add rule triggers Wifi#Connected and Wifi#Disconnected (#3359) - * Add option + to command Rule to concatenate new rule with existing rules (#3365) - * Add message when JavaScript is not enabled in webbrowser (#3388) - * Add build time setting of ButtonTopic and SwitchTopic (#3414) - * Add iFan02 Fanspeed + and Fanspeed - command options (#3415) - * Add Individual HSBColorX commands (#3430, #3615) - * Add output support on MCP23008/MCP23017 (#3436) - * Add modulo option to rules like rule1 on Time#Minute|5 do backlog power on;delay 200;power off endon (#3466) - * Add RGB support for Domoticz (#3547) - * Add all ruletimer values to command RuleTimer result message (#3571) - * Add command Publish2 for publishing retained MQTT messages (#3593) - * Add commands ButtonDebounce 40..1000 and SwitchDebounce 40..1000 to have user control over debounce timing. Default is 50mS (#3594) - * Add RuleX debug options 8,9,10 (StopOnError) to control RuleX execution status after an exception restart (#3607) - * Add rule variables %sunrise%, %sunset%, %uptime% and %time% (#3608) - * Add optional MQTT_TELE_RETAIN to Energy Margins message (#3612, 3614) - * - * 6.1.1 20180714 - * Revert wifi changes (#3177) - * Revert sonoff-minimal removals causing failure of wifi connection (#3177) - * - * 6.1.0 20180706 - * Remove version 3, 4 and pre 5.2 settings auto-upgrade. See https://github.com/arendst/Tasmota/wiki/Upgrading#migration-path - * Change default CFG_HOLDER from 0x20161209 to 4617 (=0x1209) - no impact on default upgrades - * Change number of supported switches from 4 to 8 (#2885, #3086) - * Change BME680 driver from Adafruit to Bosch BME680 library (#2969) - * Fix Pzem004T checksum error - * Fix KNX bug when doing reply of sensors values - * Fix rules induced LWT message - * Fix possible wifi connection problem (#1366) - * Fix some Pow R2 and S31 checksum errors (#1907) - * Fix display selection of un-available GPIO options in Module Configuration webpage (#2718) - * Fix timer re-trigger within one minute after restart (#2744) - * Fix IRSend not accepting data value of 0 by David Conran (#2751) - * Fix vars on rules by Adrian Scillato (#2769) - * Fix bug in KNX menu by Adrian Scillato (#2770) - * Fix anomalies in rules (#2778) - * Fix HUE bridge V1 software version by Heiko Krupp (#2788) - * Fix Hardware Watchdog restart when using event command (#2853) - * Add Ukrainian language file - * Add KNX support for DS18S20 Temperature sensor - * Add CRC to Settings making future upgrades more fail-safe - * Add feature information to Status 4 - * Add tools folder with python script decode-status.py for decoding some status fields like SetOption and Features - * Add Slots on the KNX Web Menu to select Group Addess to receive data to trigger rules - * Add two rule sets of 511 characters using commands rule1, rule2 and rule3 - * Add Console Commands to send KNX Commands and KNX Values - * Add Slots on the KNX Web Menu to select Group Addess to send data from console commands - * Add Events to trigger rules when a command or read requests is received from KNX - * Add command SetOption30 to enforce Hass discovery as light group (#1784) - * Add support for BlitzWolf BW-SHP2 (and Homecube, Gosund SP1) Energy Monitoring Smart Socket (#2223) - * Add time in minutes to rule Time#Initialized, Time#set and Time#Minute (#2669) - * Add Eastron SDM630 energy meter by Gennaro Tortone (#2735) - * Add KNX communication enhancement by Adrian Scillato (#2742) - * Add KNX energy data by Adrian Scillato (#2750) - * Add rule support for IrReceive and RfReceive (#2758) - * Add python script fw-server.py in tools folder to create a simple OTA server by Gennaro Tortone (#2759) - * Add rule variables %time% for minutes since midnight, %uptime%, %sunrise% and %sunset% giving time in minutes (#2669) - * Add rules %mem1% to %mem5% variable names storing data in flash (#2780) - * Add rules test on %varx% or %memx% (#2780) - * Add optional token %id% substituting the unique MAC address to fulltopic by Michael Graf (#2794) - * Add support for Sonoff S26 Smart Socket (#2808) - * Add command WebSend [(:,:)] (#2821) - * Add increment and decrement value to command Counter (#2838) - * Add support for Sonoff iFan02 as module 44 introducing command FanSpeed 0..3 (#2839) - * Add source information to command execution to be shown with logging option 3 (#2843) - * Add support for uploading Sonoff Bridge firmware found in tools/fw_efm8bb1 folder build by Portisch using Web Gui File Upload (#2886) - * Add command RfRaw to control Portisch firmware features - * Add support for I2C temperature sensor LM75AD (#2909) - * Add option 0 to command Timers disarming all timers (#2962) - * Add performance improvement when updating multiple individual WS2812 pixels (#3007) - * Add command SetOption28 to switch between hex or decimal Sonoff Bridge RF received data format (#3008) - * Add command SetOption29 to switch between hex or decimal IR received data format - * Add decimal values support for commands ADD, SUB, MULT and SCALE (#3083, #3089) - * Add support for bitflags SetOption50 .. SetOption81 (#3118) - * - * 5.14.0 20180515 - * Update language files - * Update TasmotaSerial to 2.0.0 allowing Hardware Serial Fallback when correct connections are configured - * Change command handling - * Change user_config(_override).h defines TIME_STD and TIME_DST - * Change user_config(_override).h otaurl to http://sonoff.maddox.co.uk/tasmota/sonoff.bin (#2588, #2602) - * Fix configuration restore regression from 5.13.1 - * Fix compile error when ADC is enabled and Rules are disabled (#2608) - * Fix rule power trigger when no backlog command is used (#2613) - * Fix several timer data input and output errors (#2597, #2620) - * Fix KNX config error (#2628) - * Fix sensor MHZ-19 vanishing data over time (#2659) - * Fix KNX reconnection issue (#2679) - * Fix DST and STD time for Southern Hemisphere by Adrian Scillato (#2684, #2714) - * Add Portuguese in Brazil language file - * Add SetOption26 to enforce use of indexes even when only one relay is present (#1055) - * Add support for sensor SI1145 UV Index / IR / Visible light (#2496) - * Add rule state test for On/Off in addition to 0/1 (#2613) - * Add hardware serial option to MHZ-19 sensor (#2659) - * Add Eastron SDM120 energy meter by Gennaro Tortone (#2694) - * Add user entry DST/STD using commands TimeStd and TimeDst (See wiki for parameter syntax) (#2721) - * - * 5.13.1 20180501 - * Fix JSON buffers size too small for execution in some situations (#2580) - * Fix configuration restore (#2591) - * Add define MODULE for user selecting default model although it preferably should not be changed (#569, #2589) - * - * 5.13.0 20180430 - * Change platformio option sonoff-ds18x20 to sonoff-allsensors enabling ds18x20 and all other sensors in one image - * Change status display of Ssid and SetOption - * Change default option SetOption15 from 0 to 1 providing better initial PWM experience - * Change webpage parameter communication - * Change max number of commands in Backlog from 15 to 30 and ignore commands overflowing - * Change TSL2561 driver to joba library and delete Adafruit library (#1644) - * Change default parameters in user_config.h to undefined for easy installation (#1851) - * Change max user configurable hold time from 10 to 25 seconds (#1851) - * Change Sonoff SC JSON format (#1939) - * Change Polish language to using Diacritics (#2005) - * Change user_config_override usage by providing user_config_override_sample.h (#2228) - * Change MQTT response topic for Energy changes from ENERGY to SENSOR (#2229, #2251) - * Change default Reset configuration time from 4 seconds to 40 seconds on Button hold (#2268) - * Change ESP8266 Analog JSON message from {"Analog0:123"} to {"ANALOG":{"A0:123"}} to accomodate rules (#2560) - * Change Counter JSON message from {"Counter1":0,"Counter3":0} to {"COUNTER":{"C1":0,"C3":0}} to accomodate rules - * Change ADS1115 JSON message from {"ADS1115":{"Analog0":123,"Analog1":123}} to {"ADS1115":{"A0":123,"A1":123}} - * Fix intermittent exception when dns lookup is used while sleep is enabled - * Fix 5.4.0 regression turning off single press after button hold during 4x hold time - * Fix possible wifi connection problem by erasing sdk configuration parameters - * Fix NTP sync to Thu Jan 01 08:00:10 1970 results in uptime 17651+ days (core2.4.1/sdk2.2.1) - * Fix MAX31850 higher temperatures (#1269) - * Fix freeing more code space when emulation is disabled (#1592) - * Fix providing web page configuratin option for Friendly Name when no device (relay or light) is configured (#1850) - * Fix compile error when define HOME_ASSISTANT_DISCOVERY_ENABLE is not set (#1937) - * Fix MQTT TLS fingerprint validation (#2033) - * Fix update temperature on DS18x20 drivers (#2328) - * Fix compile error when not defined USE_TIMERS (#2400) - * Fix configuration filename truncation when it contains spaces (#2484, #2490) - * Fix Energy Today and Yesterday overflow (#2543) - * Add serial debug info - * Add Portuguese language file - * Add Czech language file - * Add Bulgarian language file - * Add Domoticz dust (custom) sensors to PMS5003 and NovaFitness SDS drivers as PM1, PM2.5 and PM10 - * Add commands Publish, Rule, RuleTimer and Event. See Wiki about Rule restriction, usage and examples - * Add sonoff-classic, sonoff-allsensors and sonoff-knx - * Add some coloring to important web buttons - * Add support for sensor HC-SR04 ultrasonic (#113, #1964, #2444) - * Add define MQTT_TELE_RETAIN compile option default set to 0 (#1071) - * Add 16 timers using commands Timer and Timers (#1091) - * Add optional Timer configuration webpage to be enabled in user_config.h with define USE_TIMERS_WEB - * Add Multichannel Gas sensor using MultiChannel_Gas_Sensor library (#1245) - * Add Domoticz Battery and RSSI Quality (#1604) - * Add command HSBColor Hue,Sat,Bri (#1642, #2203) - * Add compile time support for WS2812 BRG and RBG led configurations to be defined in user_config.h (#1690) - * Add optional usage of %d or %X suffices in MQTT client to append chipid (#1871) - * Add optional usage of %d or %X suffices in MQTT topic to append chipid (#1871) - * Add optional usage of %d or %04d in ota url to be replaced with chipid (#1871) - * Add Sonoff Bridge command RfKey 5 to show current RF key values either default or learned (#1884) - * Add user configurable serial GPIOs to MagicHome and Arilux modules (#1887) - * Add Russian language file (#1909) - * Add Webserver upload preflight request support (#1927) - * Add Home Assistant clear other device (#1931) - * Add Restart time to Status 1 (#1938) - * Add optional TSL2561 driver using library Joba_Tsl2561 to be enabled in user_config.h with define USE_TSL2561_JOBA (#1951) - * Add support for sensor SHTC3 (#1967) - * Add compiler check for stable lwIP version v1.4 (#1940) - * Add support for multiple SHT3X sensors (#1949, #2110) - * Add always suffix with device number in Mqtt discovery topic (#1962) - * Add support for optional MQTT drivers to be selected in user_config.h (#1992) - * Add optional Arduino OTA support to be enabled in user_config.h (#1998) - * Add diacritics to Polish language file (#2005) - * Add Hungarian language file (#2024) - * Add support for Nova Fitness SDS011 and possibly SDS021 particle concentration sensor (#2070) - * Add single decimal precision to Nova Fitness SDS0x1 sensor values (#2093) - * Add Chinese (Traditional) in Taiwan language file (#2108) - * Add Sonoff SC domoticz support for Sound level as Counter and Air quality (#2118) - * Add a second TLS fingerprint to allow switching keys in TLS mode (#2033, #2102) - * Add display of remaining pulse time to command PulseTime (#2085) - * Add additional time offset to Wifi Retry based on device mac address (#2089) - * Add command Color6 RRGGBB for Clock hour marker color and command Rotation pixels for Clock rotation (#2092) - * Add HTML language header in local language (#2123) - * Add command PowerDelta 0..100 (percentage) to Energy monitoring devices to report on active power load change (#2157) - * Add Restart Reason to Status 1 report (#2161) - * Add command Channel 0..100 to control dimmer value for individual color channels (#2111, #2203) - * Add support for Hardware Serial bridge using commands SerialDelimiter, Baudrate and SerialSend. Supports 8N1 and text only (#2182) - * Add support for Software Serial bridge using commands SerialDelimiter, SBaudrate and SSerialSend. Supports 8N1 and text only (#2190) - * Add support for Zengge WF017 PWM Led strip controller (#2202) - * Add PWM status to command State if PWM enabled (#2203) - * Add all FriendlyNames to Status information (#2208) - * Add Channel status information (#2211) - * Add hexadecimal Data entry to command IrSend using 0x notation (#1290, #2314) - * Add Home Assistant MQTT Discovery for Buttons and change SetOption19 response (#2277) - * Add multiple color entry support for command Led like Led2 120000 001200 000012 setting led2 as Red, Led3 as Green and Led4 as Blue (#2303) - * Add hexadecimal RGB color entry on RGBCW leds (#2304) - * Add support for SGP30 gas and air quality sensor (#2307) - * Add optional Sunrise and Sunset timers with commands Latitide and Longitude to be enabled with define USE_SUNRISE in user_config.h (#2317) - * Add timer sunrise and sunset offset (#2378) - * Add user selectable defines for Sunrise/set Dawn option (#2378) - * Add optional KNX IP Protocol Support (#2402) - * Add random window to timers (#2447) - * Add Greek language file (#2491) - * Add support for Sonoff Pow R2 (#2340) - * Add GPIO_User to GPIO02 for all Sonoff T1 (#2524) - * - * 5.12.0 20180209 - * Change library PubSubClient.h define MQTT_MAX_PACKET_SIZE from 512 to 1000 for Home Assistant support - * Change relation of define MESSZ being dependent on PubSubClient.h define MQTT_MAX_PACKET_SIZE - * Change command color parameter input checks to less strict for Home Assistant support - * Change command Ina219Mode into command Sensor13 - * Change commands HlwPCal, HlwUCal and HlwICal to PowerCal, VoltageCal and CurrentCal to be used for both Pow and S31 calibration - * Change commands HlwPSet, HlwUSet and HlwISet to PowerSet, VoltageSet and CurrentSet to be used for both Pow and S31 calibration - * Change uptime from hour to second resulting in a display of 123T13:45:21 where 123 is days - * Change module name Wemos D1 mini into Generic (#1220) - * Change HTML from width=100% to style=width:100% supporting HTML5 (#1358) - * Change OSWATCH_RESET_TIME (Blocked loop) from 30 to 120 seconds to allow slow networks (#1556) - * Change WIFI_MANAGER_SEC into WIFI_CONFIG_SEC (#1616) - * Change function pointers code to save code space and memory (#1683) - * Change webserver argument processing gaining 5k code space (#1705) - * Change weblog memory usage (#1730, #1793, #1819) - * Update TasmotaSerial library to 1.1.0 - * Update language files Italian (#1594), Dutch (#1723) and Spanish (#1722) - * Fix Non-English JSON temperature unit attachement - * Fix Arilux RF induced exception by moving interrupt handler to iram on non ESP8266/Arduino lib v2.3.0 - * Fix truncated command names and wrong response for DomoticzSwitchIdx (#1571) - * Fix %-sign issue as printf escape character in Humidity and Sonoff SC (#1579) - * Fix DS18B20 temperature JSON decimal dot (#1561) - * Fix Energy JSON message (#1621) - * Fix IRSend parameter translation (#1636) - * Fix TSL2561 device detection (#1644, #1825) - * Fix BME680 teleperiod resistance measuring (#1647) - * Fix Energy Monitoring Energy Today and Energy Total reading after restart (#1648) - * Fix IRReceive Data value (#1663) - * Fix Energy Monitoring Energy Period roll-over (#1688) - * Fix compiler warnings (#1774) - * Fix command PWM response if no PWM channel is configured (#1783) - * Add locale Decimal Separator to Web sensor page - * Add ColorTemperature to light status message - * Add command PowerOnState option 5 which inverts PulseTime and allows for delayed always on after power on - * Add OtaMagic two step Web server OTA upgrade using filename-minimal image if OTA free space is too small - * Add support for PMS5003 and PMS7003 particle concentration sensor - * Add command SetOption21 1 to allow Energy Monitoring when power is off on Sonoff Pow and Sonoff S31 (#1420) - * Add Chinese language file (#1551) - * Add French language file (#1561) - * Add Spanish language file (#1589) - * Add HTTP Allow Cross Origin removed from ESP8266/Arduino lib v2.4.0 (#1572) - * Add Home Assistant MQTT Discovery for switch and light to be enabled by command SetOption19 1 (#1534) or define HOME_ASSISTANT_DISCOVERY_ENABLE in user_config.h (#1685) - * Add command State to retrieve device state information (same data as teleperiod state and status 11 in slightly different JSON format) - * Add optional login to Webserver AP mode (#1587, #1635) - * Add command Sensor15 2 to start MHZ19(B) Zero Point Calibration (#1643) - * Add support for Sonoff S31 Smart Socket with Power Consumption Detection (#1626) - * Add command SetOption20 to allow update of Dimmer/Color/Ct without turning power on (#1719, #1741) - * Add NTP sync time slot based on chip id (#1773) - * Add cursor pointer to web button (#1836) - * - * 5.11.1 20180107 - * Fix Sonoff Pow command handling (#1542) - * - * 5.11.0 20180107 - * Minor webpage HTML optimizations (#1358) - * Updated German translation (#1438) - * Change Sonoff Pow Energy MQTT data message and consolidate Status 8 into Status 10 - * Change ADS1115 default voltage range from +/-2V to +/-6V (#1289) - * Change text to Active for 3 minutes (#1364) - * Change Wemo SetBinaryState to distinguish from GetBinaryState (#1357) - * Change output of HTTP command to valid JSON and Array only (#1363) - * Removed all MQTT, JSON and Command language defines from locale files and set fixed to English (#1473) - * Renamed commands Color2,3,4 to Color3,4,5 - * Fix BME280 calculation (#1051) - * Fix Sonoff Bridge missed learned key if learned data contains 0x55 (End of Transmission) flag (#1095, #1294) - * Fix PWM initialization in Dimmer/Color mode (#1321) - * Fix Wemo Emulation (#1357) - * Fix display of build date and time in non-english locale (#1465) - * Fix Wemo and Hue emulation by adding M-Search response delay (#1486) - * Add libraries Adafruit_BME680-1.0.5, Adafruit_Sensor-1.0.2.02, TasmotaSerial-1.0.0 and TSL2561-Arduino-Library - * Add command Color2 to set color while keeping same dimmer value - * Add device function pointers - * Add support for SenseAir S8 CO2 sensor - * Add color led signal to Carbon Dioxide (CO2) sensors using defines CO2_LOW and CO2_HIGH in user_config.h - * Add support for Domoticz Air Quality sensor to be used by MH-Z19(B) and SenseAir sensors - * Add support for PZEM004T energy sensor - * Add support for iTead SI7021 temperature and humidity sensor by consolidating DHT22 into AM2301 and using former DHT22 as SI7021 (#735) - * Add support for BME680 using adafruit libraries (#1212) - * Add support for MH-Z19(B) CO2 sensor (#561, #1248) - * Add multipress support and more user configurable GPIO to Sonoff Dual R2 (#1291) - * Add support for TSL2561 using adafruit library (#661, #1311) - * Add support for SHT3x (#1314) - * Add support for Arilux LC06 (#1414) - * Add Italian language file (#1449) - * Add 2nd Gen Alexa support to Wemo emulation discovery (#1357, #1450) - * Add define for additional number of WS2812 schemes (#1463) - * - * 5.10.0 20171201 - * Upgrade library ArduinoJson to 5.11.2 - * Upgrade library IRRemoteEsp8266 to 2.2.1 + 2 commits but disabled some protocols (code size reduction) - * Upgrade library NeoPixelBus to 2.2.9 - * Upgrade library OneWire to 2.3.3 + 6 commits and disabled CRC lookup-table (#define ONEWIRE_CRC8_TABLE 0) (code size reduction) - * Update library PubSubClient to 2.6 + 9 commits and additional delay (#790) - * Update core_esp8266_wiring_digital.c to latest (staged) level - * Patch library I2Cdevlib-Core for esp8266-core 2.4.0-rc2 compatibility - * Remove command EnergyReset 1..3 now replaced by EnergyReset1 to EnergyReset3 - * Remove spaces in JSON messages (code size reduction) - * Renamed xsns_05_ds18x20.ino to xsns_05_ds18x20_legacy.ino still using library OneWire and providing dynamic sensor scan - * Fix possible iram1_0_seg compile error by shrinking ICACHE_RAM_ATTR code usage - * Fix PWM watchdog timeout if Dimmer is set to 100 or Color set to 0xFF (#1146) - * Fix Sonoff Bridge Learn Mode hang caused by unrecognised RF code (#1181) - * Fix blank console log window by using XML character encoding (#1187) - * Fix wrong response name for command HlwISet (#1214) - * Fix DHT type sensor timeout recognition by distinguish "signal already there" from "timeout" (#1233) - * Add fixed color options 1..12 to command Color - * Add + (plus) and - (minus) to commands Dimmer (+10/-10), Speed and Scheme - * Add + (plus) and - (minus) to command Color to select 1 out of 12 preset colors - * Add + (plus) and - (minus) to command Ct to control ColdWarm led ColorTemperature (+34/-34) - * Add commands EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3 0..42500000 - * to (Re)set Energy Today, Yesterday or Total respectively in Wh (#406, #685, #1202) - * Add optional ADS1115 driver as alternative for unsupported I2Cdevlib in esp8266-core 2.4.0-rc2 - * Add support for INA219 Voltage and Current sensor to be enabled in user_config.h with define USE_INA219 - * Add support for Arilux LC11 (Clearing RF home code when selecting no Arilux module) - * Add support for WS2812 RGBW ledstrips to be enabled in user_config.h with define USE_WS2812_CTYPE (#1156) - * Add SettingsSaveAll routine to command SaveData to be used before controlled power down (#1202) - * Add option PUSHBUTTON_TOGGLE (SwitchMode 7) to allow toggling on any switch change (#1221) - * Add new xdrv_05_ds18x20.ino free from library OneWire and add the following features: - * Add support for DS1822 - * Add forced setting of 12-bit resolution for selected device types (#1222) - * Add read temperature retry counter (#1215) - * Fix lost sensors by performing sensor probe at restart only thereby removing dynamic sensor probe (#1215) - * Fix sensor address sorting using ascending sort on sensor type followed by sensor address - * Rewrite JSON resulting in shorter message allowing more sensors in default firmware image: - * "DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6} - * Add additional define in user_config.h to select either single sensor (defines disabled), new multi sensor (USE_DS18X20) or legacy multi sensor (USE_DS18X20_LEGACY) - * Add clock support for more different pixel counts (#1226) - * Add support for Sonoff Dual R2 (#1249) - * Add FriendlyName to web page tab and add program information to web page footer (#1275) - * - * 5.9.1 20171107 - * Add external sensor function pointer interface to enable easy sensor addition - * Add support for ADS1115 to be enabled in user_config.h and needs libraries i2cdevlib-Core and i2cdevlib-ADS1115 (#338, #660) - * Fix Backup Configuration file download failure by defining proper file size (#1115) - * Fix Exception 26 and empty console screen after usage of command WakeupDuration (#1133) - * Fix some changed iTead web links in README.md (#1137) - * - * 5.9.0 20171030 - * Rewrite code (partly) using Google C++ Style Guide (https://google.github.io/styleguide/cppguide.html) - * Rewrite code by using command lookup tables and javascript (client side) web page expansions - * Change HTML/CSS to enable nicer form field entry - * Change default PWM assignments for H801 RGB(CW) led controller to support optional Color/Dimmer control - * GPIO04 (W2) from GPIO_PWM2 to GPIO_USER to be user configurable for GPIO_PWM5 (second White - Warm if W1 is Cold) - * GPIO12 (Blue) GPIO_PWM3 no change - * GPIO13 (Green) from GPIO_PWM4 to GPIO_PWM2 - * GPIO14 (W1) from GPIO_PWM1 to GPIO_USER to be user configurable for GPIO_PWM4 (first White - Cold or Warm) - * GPIO15 (Red) from GPIO_PWM5 to GPIO_PWM1 - * Change default PWM assignments for MagicHome RGB(W) led controller to support optional Color/Dimmer control - * GPIO05 (Green) from GPIO_PWM4 to GPIO_PWM2 - * GPIO12 (Blue) from GPIO_PWM5 to GPIO_PWM3 - * GPIO13 (White) GPIO_USER to be user configurable for GPIO_PWM4 (White - Cold or Warm) - * GPIO14 (Red) from GPIO_PWM3 to GPIO_PWM1 - * Change default PWM assignment for Witty Cloud to support optional Color/Dimmer control (#976) - * GPIO12 (Green) from GPIO_PWM4 to GPIO_PWM2 - * GPIO13 (Blue) from GPIO_PWM5 to GPIO_PWM3 - * GPIO15 (Red) from GPIO_PWM3 to GPIO_PWM1 - * Change when another module is selected now all GPIO user configuration is removed - * Change command name IRRemote to IRSend (#956) - * Remove Arduino IDE version too low warning as it interferes with platformio.ini platform = espressif8266_stage - * Fix command FullTopic entry when using serial or console interface - * Fix possible UDP syslog blocking - * Fix minimum TelePeriod of 10 seconds set by web page - * Fix command GPIOx JSON response (#897) - * Fix inverted relay power on state (#909) - * Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930) - * Fix alignment of web page items in some browsers (#935) - * Fix setting all saved power settings to Off when SetOption0 (SaveState) = 0 (#955) - * Fix timezone range from -12/12 to -13/13 (#968) - * Fix Southern Hemisphere TIME_STD/TIME_DST (#968) - * Fix TLS MQTT SSL fingerprint test (#970, #808) - * Fix virtual relay status message used with Color/Dimmer control (#989) - * Fix command IRSend and IRHvac case sensitive parameter regression introduced with version 5.8.0 (#993) - * Fix pressure calculation for some BMP versions regression introduced with version 5.8.0i (#974) - * Fix Domoticz Dimmer set to same level not powering on (#945) - * Fix Blocked Loop when erasing large flash using command reset 2 (#1002) - * Fix relay power control when light power control is also configured as regression from 5.8.0 (#1016) - * Fix Mqtt server mDNS lookup only when MqttHost name is empty (#1026) - * Add debug information to MQTT subscribe - * Add translations to I2Cscan - * Add translation to BH1750 unit lx - * Add light scheme options (Color cycle Up, Down, Random) and moving WS2812 schemes up by 3 - * Add Domoticz counter sensor to IrReceive representing Received IR Protocol and Data - * Add option 0 to MqttHost to allow empty Mqtt host name - * Add support for Arilux AL-LC01 RGB Led controller (#370) - * Add esp8266 de-blocking to PubSubClient library (#790) - * Add Domoticz sensors for Voltage and Current (#903) - * Add platformio OTA upload support (#928, #934) - * Add warning to webpage when USE_MINIMAL is selected (#929) - * Add smoother movement of hour hand in WS2812 led clock (#936) - * Add support for Magic Home RGBW and some Arilux Led controllers (#940) - * Add command SetOption15 0 (default) for command PWM control or SetOption15 1 for commands Color/Dimmer control to PWM RGB(CW) leds (#941) - * Add Domoticz counter sensor to Sonoff Bridge representing Received RF code (#943) - * Add support for Luani HVIO board (https://luani.de/projekte/esp8266-hvio/) (#953) - * Add PWM initialization after restart (#955) - * Add IR Receiver support. Disable in user_config.h (#956) - * Add support for inverted PWM (#960) - * Add Sea level pressure calculation and Provide command Altitude (#974) - * Add support for up to 8 relays (#995) - * Add commands RfSync, RfLow, RfHigh, RfHost and RfCode to allow sending custom RF codes (#1001) - * Add retain to ENERGY messages controlled by command SensorRetain (#1013) - * Add commands Color2, Color3, Color4, Width2, Width3, Width4 and SetOption16 to set Ws2812 Clock parameters (#1019) - * Add German language file (#1022) - * Add support for connecting to MQTT brokers without userid and/or password (#1023) - * Add support for esp8266 core v2.4.0-rc2 (#1024) - * Add commands PwmRange 1,255..1023 and PwmFrequency 1,100..4000 (#1025) - * Add Polish language file (#1044, #1047) - * Add support for KMC 70011 Power Monitoring Smart Plug (#1045) - * Add support for VEML6070 I2C Ultra Violet level sensor (#1053) - * Add light turn Off Fade (#925) - * Add IrSend command option Panasonic as IrSend {"Protocol":"Panasonic", "Bits":16388, "Data":} - * where 16388 is 0x4004 hexadecimal (#1014) - * Add retry counter to DHT11/21/22 sensors (#1082) - * - * 5.8.0 20170918 - * Remove the need for NeoPixelBus library for Hue support - * Consolidate WS2812 into Sonoff Led for flexible future led strip library changes - * Invert WS2812 fade speed to align with Sonoff led (Speed 1 = fast, Speed 8 = slow) - * Remove upper case MQTT receive buffer - * Reduce code and string length for output of commands Modules and GPIOs - * Add Sonoff SC debug information - * Change syslog service - * Removed webserver syslog disable as now no longer needed - * Increased default MQTT message size from 368 to 405 bytes while keeping MQTT_MAX_PACKET_SIZE = 512 (because we can) - * Fix MQTT Offline or Remove MQTT retained topic code - * Fix Domoticz loop when Emulation is selected - * Add blink to WS2812 and Sonoff Led (#643) - * Add option WIFI_WAIT (5) to command WifiConfig to allow connection retry to same AP without restart or update flash (#772, #869) - * Add support for Witty Cloud (#794) - * Add GPIO14 to Sonoff Dual (#797, #839) - * Add support for Yunshan Wifi Relay (#802) - * Add GPIO16 input pulldown (#827) - * Add timeout to DHT and DS18B20 sensors (#852) - * Fix watchdog timeout caused by lack of stack space by moving to heap (#853) - * Allow LogPort and MqttPort up to 65535 and add LogPort tot Status 3 (#859) - * Allow command SwitchTopic in group mode (#861) - * Allow command SwitchMode if no switches are defined (#861) - * Add optional dimmer parameter to command Wakeup for WS2812, AiLight, Sonoff B1, Led and BN-SZ01 (#867) - * Fix basic On, Off, Toggle, Blink and BlinkOff commands when other language is selected (#874) - * - * 5.7.1 20170909 - * Remove leading spaces from MQTT data - * Fix webconsole special character entry - * Allow # as prefix for color value - * Fix Alexa detection and Hue App Update Request (#698, #854) - * - * 5.7.0 20170907 - * Shrink module configuration webpage - * Fix settings order during startup to allow for displaying debug messages - * Fix some string length issues - * Add more string length tests by using strncpy - * Add Ai-Thinker RGBW led (AiLight) - * Add Power check and add PulseTime to power check at startup (#526) - * Add Supla Espablo support (#755) - * Add more precision to Sonoff Pow period and power results using command WattRes 0|1 (#759) - * Add basic internationalization and localization (#763) - * Add more Sonoff Pow range checking (#772) - * Fix invalid JSON (#786, #822) - * Add duplicate check to received RF signal within 2 seconds for Sonoff Bridge (#810) - * - * 5.6.1 20170818 - * Change module list order in webpage - * Fix Sonoff T1 1CH and 2CH configuration (#751) - * - * 5.6.0 20170818 - * Fix Sonoff Pow intermittent exception 0 - * Change Sonoff Pow sending Domoticz telemetry data only - * Add Ai-Thinker RGBW led (AiLight) (experimental) - * Add NeoPixelBus library to Sonoff Led for Hue support - * Add user configurable GPIO4 and GPIO5 to module Sonoff Bridge - * Add Sonoff B1 RGBCW led support with command Color RRGGBBCCWW (#676) - * Add command CT 152..500 to Sonoff Led and Sonoff B1 to control Color Temperature - * Add Cold-Warm slider to web page for Sonoff Led and Sonoff B1 - * Add CT parameter to Hue - * Add Sonoff T1 support (#582) - * Add AnalogInput0 if configured as Analog Input to webpage (#697, #746) - * Add command SetOption14 0|1 to enable interlock mode (#719, #721) - * Fix Mitsubishi HVAC IR power controll (#740) - * - * 5.5.2 20170808 - * Extent max number of WS2812 pixels from 256 to 512 (#667) - * Add OTA handling if server responds with no update available (#695) - * Removed undocumented command FlashMode (#696) - * Fix compile time error message due to increased message buffer size (#703) - * - * 5.5.1 20170805 - * Fix Sonoff Rf Bridge issues - * Add Sonoff RF Bridge MQTT messages on received and learned RF signal - * Add command VoltRes 0|1 to select voltage resolution to 0.1 V (#654) - * Add averaging to Analog input (#686) - * Add Energy tele data on Sonoff Pow Threshold change (#688) - * Fix inconsistent property names in Messages (#690) - * - * 5.5.0 20170730 - * Reduce code space by removing the following commands as they are replaced by SetOption alternatives: - * SaveState = SetOption0 - * ButtonRestrict = SetOption1 - * Units = SetOption2 - * MQTT = SetOption3 - * MQTTResponse = SetOption4 - * TempUnit = SetOption8 - * Smoothing WS2812 animation poll, invert fade speed and max allowed wakeup time down to 3000 seconds - * Fix initial button press detection - * Add support for Sonoff RF Bridge 433 using command RfKey - * Fix regression from 5.0.7 by increasing message buffer size from 360 to 368 to accomodate 4 x DS18x20 sensors (#637) - * Add GroupTopic to Topic test when using ButtonTopic/SwitchTopic to send either ON/OFF or TOGGLE (#642) - * Adjust HLW calibration limits to accomodate HuaFan device and add commands HlwPSet, HlwUSet and HlwISet (#654) - * - * 5.4.0 20170725 - * Fix command reset regression introduced in 5.2.0 - * Increase polling from 0.1 second to 0.05 second - * Add multipress to all buttons - * Fix button 1 double press behaviour on multi relay devices - * Add support for Hua Fan Smart Socket (#479) - * Add support for Sonoff 4ch Pro (#565) - * Add command SetOption13 1 to allow immediate action on single button press - * (disables multipress, hold and unrestricted commands) (#587) - * - * 5.3.0 20170715 - * Major Hue rewrite which might introduce Alexa problems. If so, initiate an issue - * Add support for Sonoff Led and BN-SZ01 Ceiling Led brightness control to Hue - * Fix Sonoff Led Power, Dimmer and Color MQTT response (#176) - * Add commands Delay and Backlog to allow multiple commands at once separated by ";" (#593) - * Use default flashmode DOUT to solve restart hangs on esp8285 chips (#453, #598) - * Change Web console column width from 99 to 300 (#599) - * - * 5.2.4 20170703 - * Removed flash mode update after selecting different module solving esp8285 related problems - * Add device type flag to sonoff_template.ino - * Change Sonoff Led Wakeup and add support for Sonoff BN-SZ01 Led (#567) - * - * 5.2.3 20170630 - * Change Sonoff Led color conversion code - * Fix SetOption12 handling - * Simplify auto configuration upgrade - * Add option Upgrade to only upgrade to any higher version (Old PR #213) - * Change FallbackTopic to cmnd// bypassing FullTopic and Prefix (#538) - * - * 5.2.2 20170625 - * Add configuration SaveAddress to Status 1 and Information Page - * Change Sonoff Led Color conversion from AtoH to strtol - * Fix possible wrong uploads due to configuration overwrites (#542) - * Fix payload negative numbers (#547) - * - * 5.2.1 20170622 - * Fix Restore Configuration in case of lower version - * Revert auto configuration upgrade allowing easy upgrade which was removed in version 5.2.0 - * Fix config auto upgrade from versions below version 4.1.1 (#530) - * - * 5.2.0 20170619 - * Add command SetOption12 1 to disable newly released configuration flash rotate to reduce flash wear - * Fix command CounterDebounce by removing test for active GPIO (#524) - * Add command SetOption33 1..250 to allow user configure POW Max_Power_Retry count (#525) - * - * 5.1.7 20170616 - * Prep removal of SetOptions alternatives - * Restore webpage upgrade error messages removed in 5.1.5 - * Add hold button functionality to buttons 2 to 4 - * Add command SetOption32 1..100 to set Key Hold Time from 0.1 seconds to 10 seconds (#200) - * Allow slashes in Topic, GroupTopic, ButtonTopic and SwitchTopic (#507) - * Changed webpage form actions from post to get and use relative path url (#434, #522) - * - * 5.1.6 20170606 - * Shrink code - * Removed online configuration of Domoticz In and Domoticz Out MQTT strings - * Removed commands DomoticzInTopic and DomoticzOutTopic - * Add define KEY_HOLD_TIME to configure button hold threshold before sending MQTT Hold message - * Add command StateText4 to configure button MQTT Hold text (= MQTT_CMND_HOLD) - * Add command SetOption11 0|1 to swap pushbutton single and double press functionality (#200) - * Add command SwitchMode 5 (PUSHBUTTONHOLD) and 6 (PUSHBUTTONHOLD_INV) (#489) - * - * 5.1.5 20170604 - * Shrink code in preparation to ESP8266-Arduino 2.4.0-rc1 - * Add effect parameter to HUE Device (#464) - * - * 5.1.4 20170601 - * Removed pre-compiled versions from repository as they are available within the release - * Changed HUE Device type to color supporting version (#464) - * Fix compile error when BE_MINIMAL is selected (#467, #476) - * Add multiple compiled versions to release using updated Travis script and platformio.ini (#467) - * - * 5.1.3 20170520 - * Add Domoticz Counter - * - * 5.1.2 20170519 - * Fix Counter/Timer JSON message and update Counter/Timer on webpage - * Fix WS2812 Domoticz related regression issues - * - * 5.1.1 20170517 - * Allow command FullTopic in group mode - * Prepare for more use of RTC memory - * Add independant WS2812 led string power control (#386, #390) - * Add command Counter to control up to four GPIO falling edge interrupt counters or timers (#459) - * Add command CounterType to select between pulse counting or pulse timing - * Add command CounterDebounce to select global counter debounce time in mSec - * - * 5.1.0 20170513 - * Fix Offline/Removal of retained topic when FullTopic is changed - * Add FullTopic to MQTT Configuration and Information web pages - * Add license model GPLv3 (#188) - * - * 5.0.7 20170511 - * Fix possible exception 28 on empty command - * Add command SetOption0 as replacement for SaveState - * Add command SetOption1 as replacement for ButtonRestrict - * Add command SetOption2 as replacement for Units - * Add command SetOption4 as replacement for MqttResponse - * Add command SetOption8 as replacement for TempUnit - * Add command SetOption10 On|Off to select between Offline or Removing previous retained topic (#417, #436) - * - * 5.0.6 20170510 - * Remove hyphen in case of a single DHT sensor connected (#427) - * Add command MqttRetry to change default MQTT reconnect retry timer from minimal 10 seconds (#429) - * - * 5.0.5 20170508 - * Add command FullTopic with tokens %topic% (replaced by command Topic value) and - * %prefix% (replaced by command Prefix values) for more flexible topic definitions (#244) - * See wiki > MQTT Features https://github.com/arendst/Tasmota/wiki/MQTT-Features for more information - * - * 5.0.4 20170505 - * Add Sonoff Pow Energy Total up to 40 MWh - * Add command EnergyReset 1|2|3 to reset Energy counters (#406) - * Fix Domoticz Energy logging (#411) - * Add command PowerOnState 4 to keep relay always on and disabling all power control (#418) - * - * 5.0.3 20170504 - * Add command SensorRetain on|off to enable retaining of mqtt message tele/sonoff/SENSOR (#74) - * Change WifiConfig timeout from 60 seconds to 180 seconds (#212) - * Change Sonoff Touch command Ledstate functionality by turning led on if power is off (#214) - * Add 4 seconds delay after power on before enabling button to workaround Wemos D1 mini RTS circuit (#380) - * - * 5.0.2 20170503 - * Reset SaveData, SaveState and MqttResponse to default values due to rearranging settings - * Moved some settings to flag area - * Add command TempUnit Celsius|Fahrenheit for selecting Celsius or Fahrenheit (#347) - * Add command TempRes 0..3 for selecting Temperature Resolution (#347) - * Add command HumRes 0..3 for selecting Humidity Resolution (#347) - * Add command PressRes 0..3 for selecting Pressure Resolution (#347) - * Add command EnergyRes 0..5 for selecting Energy Resolution (#347) - * Add "TempUnit":"C|F" to sensor JSON output (#347) - * Add support for up to three DHT type sensors each using a different GPIO (#339, #404) - * - * 5.0.1 20170429 - * Adjust Sonoff SC messages to prepare for display feature - * Move static data from RAM to Flash - * Fix PowerOnState for some devices not reporting "Power on" state (#284, #380, #383) - * - * 5.0.0 20170425 - * Memory status message update - * Fix setting migration to better preserve settings during move (#382) - * Best practice is first doing a Backup Configuration before installing version 5.0.0 - * Reset save count after setting move - * Start using new linker script without SPIFFS - * - * 4.2.0 20170424 - * Prepare for SPIFFS removal by moving settings to EEPROM area - * Fix compilation error when webserver is disabled (#378) - * - * 4.1.3 20170410 - * Add user configuarble GPIO to module S20 Socket and Slampher - * Add support for Sonoff SC (#112) - * Set PWM frequency from 1000Hz to 910Hz as used on iTead Sonoff Led firmware (#122) - * Set Sonoff Led unconfigured floating outputs to 0 to reduce exceptions due to power supply instabilities (#122) - * Add Access Point Mac Address to Status 11 and Telemetry (#329) - * Fix DS18B20 negative temperature readings (#334) - * - * 4.1.2 20170403 - * Rename Unrecognised command to Unknown command - * Remove all command lists - * Remove command SmartConfig (superseded by WifiConfig) - * Fix boot loop when selecting module Sonoff 4CH or Sonoff Touch on non ESP8285 hardware - * Add optional support for Toshiba and Mitsubishi HVAC IR control (needs updated IRremote8266 library) (#83, #257) - * Add all configured switches to Domoticz Configuration web page (#305) - * Fix compile error when selecting WS2812 DMA (#313) - * - * 4.1.1 20170329 - * Fix default Telemetry for command Prefix3 - * Fix webserver Module parameters for disabled select - * Fix sensor status for enabled switches - * Remove Light as alternative for Power (save code space) - * Remove migration option from pre V3 (code cleanup) - * Remove unofficial SPIFFS support (code cleanup) - * Remove command list when unknown command is entered (save code space) - * Rename Status11 json from StatusPWR to unique StatusSTS - * Rename command Gateway to IPAddres2, Subnetmask to IPAddress3 and DnsServer to IPAddress4 (save code space) - * Add Command MqttResponse to select either command or RESULT topic as response (#258) - * Add command StateText1 to StateText3 to assign MQTT_STATUS_OFF, MQTT_STATUS_ON and MQTT_CMND_TOGGLE respectively (#286) - * Remove restart after IPAddress changes (#292) - * Add support for MAX31850 in xsns_ds18x20.ino (#295) - * Fix possible uptime update misses (#302) - * - * 4.1.0 20170325 - * Change static IP addresses in user_config.h from list (using commas) to string (using dots) - * Unify display result of commands Modules, Module and Gpios - * Rewrite Module selection web page to bring size down from 18651 to 4319 bytes (!) (#234, #240) - * Add basic support for (Lixada) H801 RGBWW controller (#252) - * Add command Prefix1 to Prefix3 to assign SUB_PREFIX, PUB_PREFIX and PUB_PREFIX2 respectively (#255) - * Add static ip addresses to flash (#262) - * Add commands IpAddress, Gateway, Subnetmask and DnsServer to select static ip addresses (#273) - * - * 4.0.8 20170321 - * Fix entering non-numeric webpassword - * Force selection between TLS or Webserver due to memory restraint (#240) - * Allow entering empty string using "0" for selected commands (#242) - * Fix exception when posting commands to web console containing % (#250) - * - * 4.0.7 20170319 - * Increased Sonoff Led PWM frequency from 432 to 1000 - * Fix possible watch dog reboot after changing module type on web page - * Fix reporting of GPIO usage from web page - * Fix Sonoff Led blank during firmware upgrade - * Fix Sonoff Led flicker and possible flash corruption by using latest Arduino-esp8266 versions - * of pwm core files included in sonoff library (#211) - * Add PWM output control with commands PWM1 to PWM5 using user selectable GPIOs (#211) - * Fix exceptions due to low values of commands HlwPCal (10000), HlwUCal (1000) and HlwICal (2500) (#223) - * Add Switch state to sensor status (#227, #233) - * Add user configuarble GPIO to module Sonoff Touch (#228) - * Add define WEB_PORT to user_config.h to change default web server port from 80 (#232) - * Fix failed Ota Firmware upgrade started from Web page (#235) - * - * 4.0.6 20170316 - * Fix to better find device by Wifi hostname - * Fix compile error when some I2C devices are disabled - * Add (experimental) support for SHT1X emulating I2C (#97) - * Add ADC to ElectroDragon (#203) - * Add support for Sonoff Dev (#206) - * - * 4.0.5 20170314 - * Add command Status 11 to show power status with Vcc if define USE_ADC_VCC is enabled (default) - * Add ADC input to Sonoff SV and Wemos D1 mini - Needs recompile with define USE_ADC_VCC disabled (#137) - * Add MQTT host:port to timeout message (#199) - * - * 4.0.4 20170312 - * Add pulse timers for up to 4 relays (#106) - * Fix Sonoff Led power state when dimmer or color is 0 (#176) - * Add command NtpServer to configure up to three NTP servers (#177) - * Delete module User Test as module Wemos D1 mini has same/more user configurable GPIO (#178) - * Add more user configurable GPIO to module ElectroDragon (#183) - * - * 4.0.3 20170309 - * Renamed Module NodeMCU to WeMos D1 mini - * Add GPIO1 as user option to some modules - * Add Buttons, Relays and Leds to user configurable options (#159) - * Add description on Module parameters web page to some well known GPIOs (#107, #171) - * - * 4.0.2 20170308 - * Restore correct seriallog level after Serial logging was disabled - * Add simple dimmer slider to Sonoff Led web page - * Reduced root webpage size by 31% - * Expand Status 2 with Build date/time and core version - * Fix webserver redirection when not in WifiManager mode (#156) - * Add command ButtonRestrict On/Off to restrict access to button hold and button multi press options above 2 (#161) - * Fix DS18S20 negative temperature readings (#165) - * Fix crlf compilation error due to bad syntax (#144, #167) - * - * 4.0.1 20170305 - * Fix char default sizes and set MESSZ to 360 (#143) - * Fix SerialLog setting status - * Disable syslog when emulation is active - * Add DS18B20 web page display refresh - * - * 4.0.0 20170303 - * Add define to remove config migration code for versions below 3.0 (See Wiki-Upgrade-Migration path) - * Free memory by switching from String to char[] - * Raised Sonoff Led PWM frequency from 200Hz to 432Hz in search of stability (hardware watchdog timeouts) (#122) - * Increase message size and suggested minimum MQTT_MAX_PACKET_SIZE to 512 (#114, #124) - * Remove runtime warning message regarding MQTT_MAX_PACKET_SIZE too small as it is now moved to compile time (#124) - * Fix possible panics with web console and http commands while UDP syslog is active (#127) - * Add optional static IP address (#129) - * Add define ENERGY_RESOLUTION in user_config.h to allow user control over precision (#136) - * - * 3.9.22 20170228 - * Update web console - * Fix Status 4 JSON message - * Add Exception info during restart if available - * Add osWatch service to detect loop hangs that might happen during (OTA) upgrades - * Add WiOn support for relay and switch only (#82, #102) - * Allow for user specified relay count up to four in sonoff_template.h (#109) - * Add support for HTU21 compatible I2C sensors SI7013, SI7020 and SI7021 (#118) - * Add NodeMCU or Wemos configuration option (#119) - * - * 3.9.21 20170224 - * Add ajax to web root page and web console (#79) - * Add commands SwitchMode1..4 and enable user switches 2, 3 and 4 (#84, #88) - * Fix MQTT upgrade when webserver is active - * - * 3.9.20 20170221 - * Add minimal basic authentication to Web Admin mode (#87) - * Fix Hue and add HSB support (#89) - * - * 3.9.19 20170219 - * Sonoff Led: Made GPIO04, 05 and 15 available for user - * Sonoff Led: Add commands Fade, Speed, WakupDuration, Wakeup and LedTable - * - * 3.9.18 20170218 - * Fix ledstate 0 to turn off led - * Fix Sonoff Led dimmer range (#16) - * Change Sonoff Led command Dimmer to act on both cold and warm color - * Add Sonoff Led command Color CCWW where CCWW are hexadecimal values fro 00 - FF - * Reduce Sonoff Led flickering by disabling interrupts during flash save and disabling - * Led during OTA upgrade and Web upload (#16) - * - * 3.9.17 20170217 - * Fix possible ArduinoJSON related memory fragmentation - * Changed console logging using less memory - * Add GPIO04 as user selectable for Sonoff Dual (#75) - * - * 3.9.16 20170214 - * Update latching relay handler - * Add support for IR led using IRremoteESP8266 library (#59) - * Add Hue argument passing using ArduinoJSON library (#59) - * - * 3.9.15 20170213 - * Change JSON float values from string to number according to http://json.org (#56) - * Add support for exs latched relay module https://ex-store.de/ESP8266-WiFi-Relay-V31 (#58) - * Add support for inverted relays - * Changed MAX_LOG_LINES from 70 to 60 to preserve memory - * - * 3.9.14 20170211 - * Add False and True as alternatives for 0/Off and 1/On (#49) - * Fix Status10 JSON format (#52) - * Fix DS18x20 using OneWire library (#53) - * - * 3.9.13 20170210 - * Add FlashChipMode to Status 4 - * Removed redundant DHT2 option and code - * Add Sonoff SV GPIO pin 05 configuration (#40) - * Add configuration file backup and restore via web page - * Fix latency due to light_sleep mode even if sleep was set to zero (#50) - * - * 3.9.12 20170208 - * Fix compile error when webserver is disabled (#30) - * Fix possible ESP8285 flash problem by updating Flash Chip Mode to DOUT during OTA upload - * Fix hostname issues by not allowing user entry of string formatting and removing from user_config.h (#36) - * - * 3.9.11 20170204 - * Fix command I2Cscan - * Fix not allowed spaces in Topic, ButtonTopic and SwitchTopic - * Make all TELEMETRY, STATUS and COMMAND message topics unique (#4) - * Advertise command topic to be used by iobroker (#299) - * Fix butten (non)detection if no GPIO_KEY1 is defined (#13) - * Change WeMo serialnumber from 7 decimal chars to 8 hexadecimal chars (#18) - * Update web page with Build Date/Time, Emulation and mDNS Discovery and Advertise information (#21) - * - * 3.9.10 20170130 - * Add WS2812 Color Type selection (RGB or GRB) to user_config.h (#7) - * Hue api changes to support HUE App(s) (#8) - * - * 3.9.9 20170130 - * Add command status 10 showing sensor data - * Fix hlw status messages if hlw is disabled - * - * 3.9.8 20170130 - * Remove GPIO07 and GPIO08 from user selectable (#5) - * - * 3.9.7 20170129 - * Fix possible WS2812 exceptions when using emulation - * Add command Emulation to dynamic configure Belkin WeMo and Hue Bridge for Alexa - * - * 3.9.6 20170129 - * Add dynamic sleep for WS2812 animation (#1) - * - * 3.9.5 20170128 - * Fix error message in case of wrong Domoticz command - * - * 3.9.4 20170127 - * Fix Sonoff Dual Relay switching (#287) - * - * 3.9.3 20170127 - * Add confirmation before Restart via webpage - * Expand Domoticz Configuration webpage with Key, Switch and Sensor Index and - * add commands DomoticzSwitchIdx and DomoticzSensorIdx (#86) (#174) (#219) - * Fix default DHT11 sensor driver selection - * Fix LedPower status after button press (#279) - * Add command Sleep 0 - 250 mSec for optional light sleep mode to lower energy consumption (#272) - * (Expect overall button/key/switch misses and wrong values on Sonoff Pow) - * Add Hue brightness extension (#281) - * Fix Hue brightness and change to call by reference (#283) - * - * 3.9.2 20170124 - * Add confirmation before Reset Configuration via webpage (#244) - * Add WS2812 features (see Wiki commands) - * - * 3.9.1 20170124 - * Change PowerOnState function to only trigger when Power On (and not just restart) (#238) - * Move HLW interrupts back to RAM and make WS2812_DMA optional as it generates Exception on Pow (#264) - * Add charset=utf-8 to webpages (#266) - * Update Hue emulation (#268) - * Fix status module number - * Add support for domoticz Dimmer on Sonoff_Led and WS2812 - * Fix possible ESP8285 flash problem by updating Flash Chip Mode to DOUT during web upload - * - * 3.2.6a 20170120 - * Fix Sonoff Pow compile error (#255) - * Move HLW interrupts back to ROM (Needed for WS2812 DMA interrupts) - * Removed all IO config from user_config.h as this will be done by commands or webpage - * Removed MessageFormat and supports JSON only except POWER/LIGHT status - * Add command LedPower to control main led (#247) - * Add more FriendlyNames for Hue (#254) - * Add DMA support for WS2812 when using pin 3 while other pins work just as well in my case... - * Add HUE emulation for Alexa (#229) - * Add basic WS2812 support (#229) - * Fix Wemo when MQTT is disabled (#245) - * Revert ButtonTopic and change SwitchTopic1 - 4 to one SwitchTopic - * Rename MqttUnits to Units - * Add Mqtt command to enable/disable MQTT - * - * 3.2.2a 20170115 - * Add dynamic (Sonoff) Module, user GPIO and sensor selection (one size fits (almost) all) - * Add support for Sonoff LED - * Add Seriallog disable after 600 seconds for Sonoff Dual and 4 Channel - * Add ButtonTopic2 - 4, SwitchTopic1 - 4 and SwitchRetain - * - * 3.2.2 20170113 - * Fix PowerOnState 2 functionality after re-applying power (#230) - * - * 3.2.1 20170113 - * Fix some failed command decoding (#228) - * Removed passwords from status messages (#216) - * - * 3.2.0 20170111 - * Add I2C BH1750 sensor (#222) - * Sensor rewrite preparing for online selection - * - * 3.1.16 20170109 - * Fix Domoticz possible error condition - * Remove Wifi password from connection message (#216) - * Add Configure Other menu item to web page (#209) - * Add command FriendlyName, field Friendly Name and define FRIENDLY_NAME to be used by Alexa - * eliminating current use of MQTT_CLIENT_ID (#209) - * Add friendlyname to webpage replacing former hostname - * - * 3.1.15 20170108 - * Fix Domoticz send key regression with Toggle command - * - * 3.1.14 20170107 - * Add support for command TOGGLE (define MQTT_CMND_TOGGLE) when ButtonTopic is in use and not equal to Topic (#207) - * - * 3.1.13 20170107 - * Fix web console command input when SUB_PREFIX contains '/' (#152) - * Add command response to web command (#200) - * Add option to disable MQTT as define USE_MQTT in user_config.h (#200) - * - * 3.1.12 20170106 - * Add OTA retry to solve possible HTTP transient errors (#204) - * Fix MQTT host discovery - * - * 3.1.11 20170105 - * Add mDNS to advertise webserver as .local/ - * - * 3.1.10 20170105 - * Fix ButtonTopic when SUB_PREFIX = PUB_PREFIX - * Add workaround for possible MQTT queueing when SUB_PREFIX = PUB_PREFIX - * Add optional MQTT host discovery using define USE_DISCOVERY in user_config.h (#115) - * - * 3.1.9 20170104 - * Fix Power Blink start position (toggled) - * Change PulseTime increments: 1 .. 111 in 0.1 sec (max 11 seconds) and 112 .. 64900 in seconds (= 12 seconds until 18 hours) (#188) - * Add support for SUB_PREFIX = PUB_PREFIX (#190) - * - * 3.1.8 20170103 - * Add retain flag to LWT offline and only send "tele/sonoff/LWT Offline" (#179) - * Change retained LWT Online message to only send "tele/sonoff/LWT Online" - * - * 3.1.7 20161231 - * Add retained message LWT Online when sonoff makes MQTT connection (#179) - * - * 3.1.6 20161230 - * Add blinking using commands BlinkTime, BlinkCount and Power Blink|3|BlinkOff|4 (#165) - * - * 3.1.5 20161228 - * Fix serial space command exception (28) - * - * 3.1.4 20161227 - * Fix MQTT subscribe regression exception (3) (#162) - * Fix serial empty command exception (28) - * - * 3.1.3 20161225 - * Extent Domoticz configuration webpage with optional indices (#153) - * Fix multi relay legacy tele message from tele/sonoff/2/POWER to tele/sonoff/POWER2 - * Add support for iTead Motor Clockwise/Anticlockwise - * - * 3.1.2 20161224 - * Extent command PowerOnState with toggle at power on (option 2 is now option 3!) (#156) - * - * 3.1.1 20161223 - * Add support for Sonoff Touch and Sonoff 4CH (#40) - * Update DomoticzIdx and DomoticzKeyIdx with relay/key index (DomoticzIdx1/DomoticzKeyIdx1) - * Add command PowerOnState to control relay(s) at power on (#154) - * - * 3.1.0 20161221 - * Add Sonoff Pow measurement smoothing - * Fix serial command topic preamble error (#151) - * Fix 2.x to 3.x migration inconsistencies (#146) - * - * 3.0.9 20161218 - * Add Sonoff Pow voltage reading when relay is on but no load present (#123) - * - * 3.0.8 20161218 - * Add temperature conversion to Fahrenheit as option in user_config.h (TEMP_CONVERSION) (#145) - * - * 3.0.7 20161217 - * Add user_config_override.h to be used by user to override some defaults in user_config.h (#58) - * Fix Sonoff Pow low power (down to 4W) intermittent measurements (#123) - * - * 3.0.6 20161217 - * Fix MQTT_CLIENT_ID starting with % sign as in "%06X" (#142) - * Add auto power off after PulseTime * 0.1 Sec to relay 1 (#134) - * - * 3.0.5 20161215 - * Add more control over LED with command LedState options (#136, #143) - * LED_OFF (0), LED_POWER (1), LED_MQTTSUB (2), LED_POWER_MQTTSUB (3), LED_MQTTPUB (4), LED_POWER_MQTTPUB (5), LED_MQTT (6), LED_POWER_MQTT (7) - * Add option WIFI_RETRY (4) to command WifiConfig to allow connection retry to other AP without restart (#73) - * - * 3.0.4 20161211 - * Fix intermittent Domoticz update misses (#133) - * - * 3.0.3 20161210 - * Fix compiler warnings (#132) - * Remove redundant code - * Fix Domoticz pushbutton support - * - * 3.0.2 20161209 - * Add pushbutton to SwitchMode (#130) - * - * 3.0.1 20161209 - * Fix initial config - * - * 3.0.0 20161208 - * Migrate and clean-up flash layout - * Settings from version 2.x are saved but settings from version 3.x can not be used with version 2.x - * Change SEND_TELEMETRY_RSSI to SEND_TELEMETRY_WIFI and add AP and SSID to telemetry - * Split long JSON messages - * Fix inconsistent status messages - * Fix all status messages to return JSON if enabled - * Remove relay index in cmnd/sonoff//POWER now changed - * to cmnd/sonoff/POWER for single relay units - * and cmnd/sonoff/POWER for multi relay units like Sonoff dual - * Add retain option to Power/Light status controlled by command PowerRetain On|Off (#126) - * - * 2.1.2 20161204 - * Add support for second wifi AP (#73) - * Update command WifiConfig - * Fix possible WifiManager hang - * - * 2.1.1a 20161203 - * Fix scan for wifi networks if WeMo is enabled - * Fix syslog setting using web page - * - * 2.1.1 20161202 - * Add support for ElectroDragon second relay and button (only toggle with optional ButtonTopic) (#110) - * - * 2.1.0 20161202 - * Add optional EXPERIMENTAL TLS to MQTT (#49) - * Fix MQTT payload handling (#111) - * Optimzed WeMo code - * - * 2.0.21a 20161201 - * Fix WeMo PowerPlug emulation - * - * 2.0.21 20161130 - * Add Belkin WeMo PowerPlug emulation enabled with USE_WEMO_EMULATION in user_config.h (Heiko Krupp) (#105, #109) - * - * 2.0.20 20161130 - * Relax MQTTClient naming but only allows hexadecimal uppercase numbers (#107) - * Add I2C support with command I2CScan - * Add I2C sensor driver for HTU21 as alternate sensor using TH10/16 connectors (Heiko Krupp) (#105) - * Add I2C sensor driver for BMP085/BMP180/BMP280/BME280 as alternate sensor using TH10/16 connectors - * - * 2.0.19a 20161127 - * Add support for ButtonTopic and ButtonRetain to wall switch function - * Add pullup to SWITCH_PIN and command SwitchMode to syntax - * - * 2.0.18 20161126 - * Add SUB_PREFIX multi level support allowing 'cmnd' or 'cmnd/level2/level3' - * Add wall switch function to GPIO14 and command SwitchMode (Alex Scott) (#103) - * - * 2.0.17 20161123 - * Calibrate HLWPCAL from 12345 to 12530 - * Add alternative sensor driver DHT2 using Adafruit DHT library - * Add define MESSAGE_FORMAT to user_config.h - * Throttle console messages - * Shorten JSON messages - * Fix possible Panic - * Fix User mode webserver security - * - * 2.0.16 20161118 - * Add alternative sensor driver DS18x20 using OneWire library (#95) - * Change sensor MQTT message from tele/sonoff/TEMPERATURE to tele/sonoff/DHT/TEMPERATURE or - * tele/sonoff/DS18B20/TEMPERATURE or tele/sonoff/DS18x20/1/TEMPERATURE - * Add sensors to root webpage and auto refresh every 4 seconds (#92) - * Add optional JSON messageformat to all telemetry data - * Enforce minimum TelePeriod to be 10 seconds - * Fix Energy Yesterday reset after restart - * Add Energy Today restore after controlled restart - * - * 2.0.15 20161116 - * Change TODAY_POWER and PERIOD_POWER to TODAY_ENERGY and PERIOD_ENERGY - * Fix serial regression - * Fix syslog hangs when loghost is unavailable - * - * 2.0.14 20161115 - * Add HLW threshold delay - * Fix HLW intermittent current deviation - * Fix button functionality during wificonfig - * Add CRC check to DS18B20 sensor (#88) - * - * 2.0.13 20161113 - * Add additional upload error code descriptions - * Add PlatformIO support (#80) - * - * 2.0.12 20161113 - * Fix Serial and Web response regression when no MQTT connection available - * Fix Sonoff Dual power telemetric data for second relay - * Removed MQTT password from Information web page - * Hide MQTT password from Configure MQTT web page - * - * 2.0.11 20161111 - * Rewrite button and web toggle code - * Fix NTP sync - * Add HLW calibration commands HLWPCAL, HLWUCAL and HLWICAL (need define USE_POWERCALIBRATION) - * Fix power threshold tests - * - * 2.0.10 20161109 - * Add additional Domoticz define (#63) - * Add defines MQTT_STATUS_ON and MQTT_STATUS_OFF in user_config.h to select status On/Off string - * Fix status response differences (#65) - * Fix divide by zero exception (#70) - * Fix syslog loop exception - * - * 2.0.9 20161108 - * clarify MODULE in user_config.h - * Fix hlw false values - * - * 2.0.8 20161108 - * Add initial status after power on - * Seperate driver files - * Fix hlw code and calibrate Pow - * Move user config defines to user_config.h (#61) - * - * 2.0.7 20161030 - * Make Ticker mandatory - * Add Domoticz support (Increase MQTT_MAX_PACKET_SIZE to 400) (#54) - * Add command MessageFormat 0|1 to select either legacy or JSON output - * - * 2.0.6 20161024 - * Add Sonoff Pow power factor - * Initial support for up to four relays using iTEAD PSB (4Channel) - * - Currently only supports one button (All buttons behave the same) - * - Use command MODEL 4 to select four relay option - * (After first power on it will support 2 relays like Sonoff Dual) - * Fix ledstate - * Add command Status 9 to display Sonoff Pow thresholds - * Add commands PowerLow, PowerHigh, VoltageLow, VoltageHigh, CurrentLow and CurrentHigh for use - * with Sonoff Pow thresholds - * - * 2.0.5 20161018 - * Add updates to user_config.h - moved SEND_TELEMETRY_DS18B20 and SEND_TELEMETRY_DHT to module area. - * As Sonoff TH10/16 does not have the logic installed for GPIO04 You'll have to select ONE of both - * Add Sonoff Pow support (experimental until Pow tested) - * Add command Status 8 to display Sonoff Pow energy values - * Add command MqttUnits On|Off to add units to values - * Change web main page header character size - * Change On/Off to ON/OFF status messages to satisfy openHAB - * Change TEMP to TEMPERATURE and HUM to HUMIDITY - * - * 2.0.4 20161009 - * Add MQTT_BUTTON_RETAIN, SAVE_DATA and SAVE_STATE defines to user_config.h (#35) - * Update ButtonRetain to remove retained message(s) from broker when turned off - * Add Retain for second relay on Sonoff Dual - * Provide power status messages with device topic index if requested - * - * 2.0.3 20161008 - * Update wifi initialization - * Add command BUTTONRETAIN for optional MQTT retain on button press (#35) - * Add command SAVESTATE to disable power state save. May be used with MQTT retain - * - * 2.0.2 20161006 - * Fix wifi issue 2186 - * - * 2.0.1 20161002 - * Fix button press - * - * 2.0.0 20161002 - * Update Sonoff TH10/16 sensor pins (My TH10 only has GPIO14 connected) - * Add full support for Sonoff dual - * - * 1.0.35 20160929 - * Add more lines to console - * Add timeout and disable MQTT on web upload - * Add command SAVEDATA to control parameter save (for flash wear afficionados) (#30) - * - * 1.0.34 20160926 - * Fix button press six and seven - * Add more information to webserver - * - * 1.0.33 20160915 - * Better WPS error message - * Separate webserver code from support.ino into webserver.ino - * Fix webserver User by removing unwanted restart option - * - * 1.0.32 20160913 - * Add Wifi Protected Setup (WPS) as third option for initial config - * Add command WIFICONFIG replacing deprecated command SMARTCONFIG - * Add option WIFICONFIG 3 to start WPSconfig - * Add option WIFICONFIG 0 to start saved Wifi config tool (WPSconfig, Smartconfig or Wifimanager) - * Change button behaviour - See Wiki - * - * 1.0.31 20160907 - * Fix DS18B20 misread if teleperiod = 2 - * Tuned sensor code - * Updated prefered ElectroDragon connection to Relay 1 and Button 1 - * Moved SONOFF and ELECTRO_DRAGON port config to user_config.h - * - * 1.0.30 20160902 - * Fix command TELEPERIOD 0 - * Add ESP- tag to UDP log message for easy rsyslogd filtering - * Add ElectroDragon (Relay 2 only) functionality. Select with #define MODULE ELECTRO_DRAGON - * Add ? as null message alternative - * Add DHT temperature and humidity telemetry support. Enable with #define SEND_TELEMETRY_DHT - * Add DS18B20 temperature telemetry support. Enable with #define SEND_TELEMETRY_DS18B20 - * Restrict HOSTNAME, MQTTCLIENT, TOPIC and BUTTONTOPIC in topic mode only - * - * 1.0.29 20160831 - * Allow UPGRADE, OTAURL, RESTART, RESET, MQTTHOST, MQTTPORT, MQTTUSER, MQTTPASSWORD and WEBSERVER also in group mode - * - * 1.0.28 20160831 - * Add webserver state to status 5 - * Add optional PUB_PREFIX2 (tele) for telemetry usage - * Add command TELEPERIOD - * Fix syntax message - * Change memory status display - * - * 1.0.27 20160831 - * Add sketch flash size - * Add console to webserver - * Add command weblog - * Change WifiManager web pages to minimal - * Change display default hostname and MQTT client id in webserver - * Change HTTP command interface to http://sonoff-1234/cm?cmnd=light 2 - * Change HEARTBEAT to UPTIME - * - * 1.0.26 20160829 - * Add define USE_WEBSERVER to disable web server code in source - * Add file upload as alternative for ota upload to webserver - * Add information to webserver - * Add command hostname - * Add command logport - * Change HTTP command interface to http://sonoff-1234/cmd?cmnd=light 2 - * Change button behaviour with regards to Smartconfig and OTA upload. See README.md - * Enforce default hostname to either "%s-%04d" or user defined without any % - * Enforce default mqtt client id to either "DVES_%06X" or user defined without any % - * - * 1.0.25 20160822 - * Remove config system halts to keep ota available - * - * 1.0.24 20160821 - * Add test for MQTT_SUBTOPIC - * Change log range to LOG_LEVEL_ALL - * Change MQTT introduction messages - * Moved MQTT_MAX_PACKET_SIZE warning message to introduction messages - * - * 1.0.23 20160821 - * Add option USE_SPIFFS to move config from flash to spiffs - * Add webserver with options 0 (off), 1 (user) and 2 (admin) - * Add HTTP command interface (http://sonoff-1234/c?cmnd=light 2) - * Add wifimanager countdown counter - * Add command line webpage - * Add relay control to wifimanager - * Add restart option 99 to force restart - * Fix wifi hostname - * Fix NETBIOS hostname problem by reducing default hostname length - * Fix possible exception if WIFI_HOSTNAME is changed - * Fix upgrade messages - * Reduce memory use by redesigning config routines - * Split syntax message - * Rename define SERIAL_IO to USE_SERIAL - * - * 1.0.22 20160814 - * Add all MQTT parameters for configuration - * Add wifimanager to configure Wifi and MQTT via web server - * Change NTP time handling - * Fix Smartconfig parameter buffer overflow - * Fix PlatformIO warnings - * - * 1.0.21 20160808 - * Remove semaphore as subscription flooding (more than 15 subscriptions per second) is managed by SDK (LmacRxBlk:1) - * Add optional RTC interrupt (define USE_TICKER) to keep RTC synced during subscription flooding - * Remove heartbeatflag - * - * 1.0.20 20160805 - * Add semaphore to handle out of memory when too many subscriptions requested - * Use Daylight Saving (DST) parameters from user_config.h when timezone = 99 - * Add status 7 option displaying RTC information - * Add ledstate to status 0 - * - * 1.0.19 20160803 - * Fix possible MQTT_CLIENT_ID induced Exception(28) - * - * 1.0.18 20160803 - * Moved Cfg_Default - * Fix negative data handling - * Remove MQTT information from status 1 and add labels to status 1 - * Add mac address to status 5 - * Add MQTT ClientId, UserId and Password to status 6 - * - * 1.0.17 20160731 - * Better variable range checking - * Change ambiguous connection messages - * Add timestamp to serial message - * - * 1.0.16 20160729 - * Moved wifi, rtc, syslog and config to support.ino - * Fixed button action when buttontopic is used. Introduced with 1.0.15 - * Better buffer overflow checks (strlcpy) - * - * 1.0.15 20160728 - * Removed pubsubclient config changes from sonoff.ino as it doesn't work - * reapply MQTT_MAX_PACKET_SIZE 256 and MQTT_KEEPALIVE 120 to PubSubClient.h - * Add status 0 option displaying all status messages - * Change MQTT_MAX_PACKET_SIZE from 1024 to 256 - * Add buffer overflow checks (snprintf and strncpy) - * Implemented common string sizes - * - * 1.0.14 20160722 - * Seperate user config from sonoff.ino to user_config.h (pucebaboon) - * Change defaults from sidnas2 to domus1 - * Add MQTT status message as status 6 (pucebaboon) - * Add status type to message (pucebaboon) - * Add pubsubclient config changes to sonoff.ino (pucebaboon) - * - * 1.0.13 20160702 - * Add Ledstate 1 option to show power state on led - * - * 1.0.12 20160529 - * Allow disable of button topic using "0" - * - * 1.0.11 20160524 - * Provide button response if MQTT connection lost - * - * 1.0.10 20160520 - * Add optional button topic to assist external MQTT clients - * Change version notation - * Reset default values - * - * 1.0.9 20160503 - * Add more blinks - * Add reset 2 option erasing flash - * Add status 5 option displaying network info - * Add syslog check for Wifi connection - * Resize MqttPublish log array - * Change Wifi smartconfig active from 100 to 60 seconds - * Update Wifi initialization - * - * 1.0.8 20160430 - * Remove use of Wifi config data from SDK - * Add status 3 (syslog info) and status 4 (flash info) - * Add restart option to button (5 quick presses) - * - * 1.0.7 20160420 - * Add UDP syslog support - * Change HOST command to MQTTHOST command - * Add commands SYSLOG, SERIALLOG and LOGHOST - * Change hostname to lower case to distinguise between open-sdk version - * Add support for ESP-12F used in my modified wkaku power socket switch - * Fix timezone command - * Add RTC month names for future use - * Modify button code - * Remove initialization errors by better use of MQTT loop - * - * 1.0.6 20160406 - * Removed Wifi AP mode (#1) - * Add test for Arduino IDE version >= 1.6.8 - * Fix RTC time sync code - * - * 1.0.5 20160310 - * Initial public release - * Show debug info by selecting option from IDE Tools Debug port: Serial -\*********************************************************************************************/ diff --git a/tasmota/i18n.h b/tasmota/i18n.h index d1e85c1de..5de4b7a1d 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -290,6 +290,7 @@ #define D_JSON_GPIO "GPIO" #define D_JSON_FLAG "FLAG" #define D_JSON_BASE "BASE" +#define D_CMND_TEMPOFFSET "TempOffset" // Commands xdrv_01_mqtt.ino #define D_CMND_MQTTLOG "MqttLog" diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h index 086c6a2be..014d822a9 100644 --- a/tasmota/language/es-ES.h +++ b/tasmota/language/es-ES.h @@ -28,7 +28,7 @@ * Use online command StateText to translate ON, OFF, HOLD and TOGGLE. * Use online command Prefix to translate cmnd, stat and tele. * - * Updated until v7.0.0.3 + * Updated until v7.0.0.5 \*********************************************************************/ #define LANGUAGE_MODULE_NAME // Enable to display "Module Generic" (ie Spanish), Disable to display "Generic Module" (ie English) @@ -75,7 +75,7 @@ #define D_COUNTER "Contador" #define D_CURRENT "Corriente" // As in Voltage and Current #define D_DATA "Datos" -#define D_DARKLIGHT "Oscura" +#define D_DARKLIGHT "Oscuro" #define D_DEBUG "Debug" #define D_DISABLED "Deshabilitado" #define D_DISTANCE "Distancia" diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h index 51c24912d..c6236a05f 100644 --- a/tasmota/language/ko-KO.h +++ b/tasmota/language/ko-KO.h @@ -236,7 +236,7 @@ #define D_SECONDS "초" #define D_DEVICE_WILL_RESTART "이 장치는 몇 초 후 재시작됩니다" #define D_BUTTON_TOGGLE "켜기/끄기" -#define D_CONFIGURATION "설정" +#define D_CONFIGURATION "설정 메뉴" #define D_INFORMATION "정보" #define D_FIRMWARE_UPGRADE "펌웨어 업그레이드" #define D_CONSOLE "콘솔" @@ -250,11 +250,11 @@ #define D_CONFIGURE_OTHER "기타 설정" #define D_CONFIRM_RESET_CONFIGURATION "설정 초기화 확인" #define D_RESET_CONFIGURATION "설정 초기화" -#define D_BACKUP_CONFIGURATION "백업 설정" -#define D_RESTORE_CONFIGURATION "복원 설정" +#define D_BACKUP_CONFIGURATION "설정 백업" +#define D_RESTORE_CONFIGURATION "설정 복구" #define D_MAIN_MENU "메인 메뉴" -#define D_MODULE_PARAMETERS "모듈 파라미터" +#define D_MODULE_PARAMETERS "모듈 설정" #define D_MODULE_TYPE "모듈 타입" #define D_PULLUP_ENABLE "버튼 없음/스위치 당김" #define D_ADC "ADC" @@ -262,8 +262,8 @@ #define D_SERIAL_IN "Serial In" #define D_SERIAL_OUT "Serial Out" -#define D_WIFI_PARAMETERS "Wifi 파리미터" -#define D_SCAN_FOR_WIFI_NETWORKS "Wifi 네트워크를 검색 중.." +#define D_WIFI_PARAMETERS "Wifi 설정" +#define D_SCAN_FOR_WIFI_NETWORKS "Wifi 네트워크를 검색.." #define D_SCAN_DONE "검색 완료" #define D_NO_NETWORKS_FOUND "발견된 네트워크가 없습니다" #define D_REFRESH_TO_SCAN_AGAIN "검색 재시도" @@ -278,11 +278,11 @@ #define D_AP2_SSID "AP2 SSId" #define D_AP2_PASSWORD "AP2 비밀번호" -#define D_MQTT_PARAMETERS "MQTT 파라미터" +#define D_MQTT_PARAMETERS "MQTT 설정" #define D_CLIENT "클라이언트" #define D_FULL_TOPIC "Full Topic" -#define D_LOGGING_PARAMETERS "로그 파라미터" +#define D_LOGGING_PARAMETERS "로그 설정" #define D_SERIAL_LOG_LEVEL "Serial 로그 레벨" #define D_MQTT_LOG_LEVEL "Mqtt 로그 레벨" #define D_WEB_LOG_LEVEL "Web 로그 레벨" @@ -292,7 +292,7 @@ #define D_SYSLOG_PORT "시스템로그 포트" #define D_TELEMETRY_PERIOD "보고 주기" -#define D_OTHER_PARAMETERS "기타 파라미터" +#define D_OTHER_PARAMETERS "기타 설정" #define D_TEMPLATE "템플릿" #define D_ACTIVATE "활성화" #define D_WEB_ADMIN_PASSWORD "Web Admin 비밀번호" @@ -304,7 +304,7 @@ #define D_MULTI_DEVICE "다수 장치" #define D_CONFIGURE_TEMPLATE "템플릿 설정" -#define D_TEMPLATE_PARAMETERS "템플릿 상세" +#define D_TEMPLATE_PARAMETERS "템플릿 설정" #define D_TEMPLATE_NAME "이름" #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "옵션" @@ -335,7 +335,7 @@ #define D_UPGRADE_BY_WEBSERVER "웹 서버에서 업그레이드" #define D_OTA_URL "OTA Url" #define D_START_UPGRADE "업그레이드 시작" -#define D_UPGRADE_BY_FILE_UPLOAD "업로드 된 파일로 업그레이드" +#define D_UPGRADE_BY_FILE_UPLOAD "파일에서 업로드해 업그레이드" #define D_UPLOAD_STARTED "업로드 시작됨" #define D_UPGRADE_STARTED "업그레이드 시작됨" #define D_UPLOAD_DONE "업그레이드 완료" @@ -387,7 +387,7 @@ #define D_3_RESPONSE_PACKETS_SENT "3 요청 패킷이 전송됨" // xdrv_07_domoticz.ino -#define D_DOMOTICZ_PARAMETERS "Domoticz 파라미터" +#define D_DOMOTICZ_PARAMETERS "Domoticz 설정" #define D_DOMOTICZ_IDX "Idx" #define D_DOMOTICZ_KEY_IDX "Key idx" #define D_DOMOTICZ_SWITCH_IDX "스위치 idx" @@ -406,7 +406,7 @@ // xdrv_09_timers.ino #define D_CONFIGURE_TIMER "타이머 설정" -#define D_TIMER_PARAMETERS "타이머 파라미터" +#define D_TIMER_PARAMETERS "타이머 설정" #define D_TIMER_ENABLE "타이머 사용" #define D_TIMER_ARM "Arm" #define D_TIMER_TIME "시간" @@ -417,7 +417,7 @@ // xdrv_10_knx.ino #define D_CONFIGURE_KNX "KNX 설정" -#define D_KNX_PARAMETERS "KNX 파라미터" +#define D_KNX_PARAMETERS "KNX 설정" #define D_KNX_GENERAL_CONFIG "일반" #define D_KNX_PHYSICAL_ADDRESS "물리적 주소" #define D_KNX_PHYSICAL_ADDRESS_NOTE "( KNX 네트워크 상에서 반드시 고유한 이름이어야 합니다 )" diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h index 7e75276db..7a631f95f 100644 --- a/tasmota/language/pl-PL.h +++ b/tasmota/language/pl-PL.h @@ -57,53 +57,53 @@ #define D_AS "jak" #define D_AUTO "AUTO" #define D_BLINK "Miganie" -#define D_BLINKOFF "MiganieWył" -#define D_BOOT_COUNT "Licznik uruchomienia" +#define D_BLINKOFF "Miganie - Wył." +#define D_BOOT_COUNT "Licznik restartów" #define D_BRIGHTLIGHT "Jasny" #define D_BSSID "BSSId" #define D_BUTTON "Przycisk" #define D_BY "by" // Written by me -#define D_BYTES "Bajtow" -#define D_CELSIUS "Celsiusza" +#define D_BYTES "Bajtów" +#define D_CELSIUS "Celsiusz" #define D_CHANNEL "Kanał" -#define D_CO2 "Dwutlenku węgla" -#define D_CODE "kod" // Button code +#define D_CO2 "Dwutlenek węgla" +#define D_CODE "Kod" // Button code #define D_COLDLIGHT "Zimny" #define D_COMMAND "Komenda" #define D_CONNECTED "Połączony" #define D_COUNT "Licz" #define D_COUNTER "Licznik" -#define D_CURRENT "Bieżący" // As in Voltage and Current +#define D_CURRENT "Prąd" // As in Voltage and Current #define D_DATA "Data" #define D_DARKLIGHT "Ciemny" #define D_DEBUG "Debug" -#define D_DISABLED "Zablokowany" +#define D_DISABLED "Wyłączony" #define D_DISTANCE "Odległość" #define D_DNS_SERVER "Serwer DNS" #define D_DONE "Wykonane" -#define D_DST_TIME "DST" +#define D_DST_TIME "Czas DST" #define D_ECO2 "eCO2" #define D_EMULATION "Emulacja" -#define D_ENABLED "Otwarty" -#define D_ERASE "Nadpisz" +#define D_ENABLED "Załączony" +#define D_ERASE "Wyczyść" #define D_ERROR "Błąd" -#define D_FAHRENHEIT "Fahrenheita" +#define D_FAHRENHEIT "Fahrenheit" #define D_FAILED "Błędny" #define D_FALLBACK "Awaryjny" -#define D_FALLBACK_TOPIC "Zastępczy temat" +#define D_FALLBACK_TOPIC "Temat zastępczy" #define D_FALSE "Fałsz" #define D_FILE "Plik" -#define D_FLOW_RATE "Flow rate" +#define D_FLOW_RATE "Przepływ" #define D_FREE_MEMORY "Wolna pamięć" -#define D_FREQUENCY "Frequency" +#define D_FREQUENCY "Częstotliwość" #define D_GAS "Gas" #define D_GATEWAY "Brama" #define D_GROUP "Grupa" #define D_HOST "Serwer" #define D_HOSTNAME "Nazwa serwera" #define D_HUMIDITY "Wilgotność" -#define D_ILLUMINANCE "Oświetlenie" -#define D_IMMEDIATE "Natychmiastowe" // Button immediate +#define D_ILLUMINANCE "Podświetlanie" +#define D_IMMEDIATE "Natychmiastowy" // Button immediate #define D_INDEX "Indeks" #define D_INFO "Informacja" #define D_INFRARED "Podczerwień" @@ -113,27 +113,27 @@ #define D_LWT "LWT" #define D_MODULE "Moduł" #define D_MQTT "MQTT" -#define D_MULTI_PRESS "wielokrotne-naciśnięcie" -#define D_NOISE "Hałas" +#define D_MULTI_PRESS "Wielokrotne naciśnięcie" +#define D_NOISE "Szum" #define D_NONE "Brak" #define D_OFF "Wyłączony" #define D_OFFLINE "Nieaktywny" #define D_OK "Ok" -#define D_ON "Włączony" +#define D_ON "Załączony" #define D_ONLINE "Aktywny" #define D_PASSWORD "Hasło" #define D_PORT "Port" -#define D_POWER_FACTOR "Współczynik mocy" +#define D_POWER_FACTOR "Cosinus fi" #define D_POWERUSAGE "Moc" -#define D_POWERUSAGE_ACTIVE "Czynna Moc" -#define D_POWERUSAGE_APPARENT "Pozorna Moc" -#define D_POWERUSAGE_REACTIVE "Reaktywna Moc" +#define D_POWERUSAGE_ACTIVE "Moc czynna" +#define D_POWERUSAGE_APPARENT "Moc pozorna" +#define D_POWERUSAGE_REACTIVE "Moc bierna" #define D_PRESSURE "Ciśnienie" #define D_PRESSUREATSEALEVEL "Ciśnienie na poziomie morza" -#define D_PROGRAM_FLASH_SIZE "Wielkość programu flash" -#define D_PROGRAM_SIZE "Wielkość programu" +#define D_PROGRAM_FLASH_SIZE "Rozmiar programu flash" +#define D_PROGRAM_SIZE "Rozmiar programu" #define D_PROJECT "Projekt" -#define D_RAIN "Rain" +#define D_RAIN "Deszcz" #define D_RECEIVED "Otrzymany" #define D_RESTART "Restart" #define D_RESTARTING "Restartowanie" @@ -148,8 +148,8 @@ #define D_STD_TIME "STD" #define D_STOP "Stop" #define D_SUBNET_MASK "Maska podsieci" -#define D_SUBSCRIBE_TO "Subskrybuj do" -#define D_UNSUBSCRIBE_FROM "Unsubscribe from" +#define D_SUBSCRIBE_TO "Subskrybuj" +#define D_UNSUBSCRIBE_FROM "Nie subskrybuj" #define D_SUCCESSFUL "Powodzenie" #define D_SUNRISE "Wschód słońca" #define D_SUNSET "Zachód słońca" @@ -157,7 +157,7 @@ #define D_TO "do" #define D_TOGGLE "Przełącz" #define D_TOPIC "Temat" -#define D_TOTAL_USAGE "Total Usage" +#define D_TOTAL_USAGE "Całkowite użycie" #define D_TRANSMIT "Wyślij" #define D_TRUE "Prawda" #define D_TVOC "TVOC" @@ -166,21 +166,21 @@ #define D_UPTIME "Czas pracy" #define D_USER "Użytkownik" #define D_UTC_TIME "UTC" -#define D_UV_INDEX "UV Index" +#define D_UV_INDEX "Index UV" #define D_UV_INDEX_1 "Niski" #define D_UV_INDEX_2 "Średni" #define D_UV_INDEX_3 "Wysoki" #define D_UV_INDEX_4 "Niebezpieczny" -#define D_UV_INDEX_5 "BurnL1/2" -#define D_UV_INDEX_6 "BurnL3" +#define D_UV_INDEX_5 "Burn L1/2" +#define D_UV_INDEX_6 "Burn L3" #define D_UV_INDEX_7 "OoR" #define D_UV_LEVEL "Poziom UV" -#define D_UV_POWER "UV Power" +#define D_UV_POWER "Moc UV" #define D_VERSION "Wersja" #define D_VOLTAGE "Napięcie" -#define D_WEIGHT "Weight" -#define D_WARMLIGHT "Nagrzanie" -#define D_WEB_SERVER "Web Serwer" +#define D_WEIGHT "Waga" +#define D_WARMLIGHT "Temperatura światła" +#define D_WEB_SERVER "Serwer Web" // tasmota.ino #define D_WARNING_MINIMAL_VERSION "UWAGA Ta wersja nie obsługuje zapisu ustawień" @@ -192,33 +192,33 @@ #define D_SET_BAUDRATE_TO "Ustaw szybkość transmisji na" #define D_RECEIVED_TOPIC "Otrzymany temat" #define D_DATA_SIZE "Wielkość danych" -#define D_ANALOG_INPUT "Wej_analogowe" +#define D_ANALOG_INPUT "Wejście analogowe" // support.ino #define D_OSWATCH "osWatch" #define D_BLOCKED_LOOP "Pętla zablokowana" -#define D_WPS_FAILED_WITH_STATUS "Błąd WPSconfig ze statusem" +#define D_WPS_FAILED_WITH_STATUS "Błąd konfiguracji WPS ze statusem" #define D_ACTIVE_FOR_3_MINUTES "aktywny 3 minuty" #define D_FAILED_TO_START "nie udało się uruchomić" -#define D_PATCH_ISSUE_2186 "Błąd łatki 2186" +#define D_PATCH_ISSUE_2186 "Błąd poprawki 2186" #define D_CONNECTING_TO_AP "Łączenie z AP" #define D_IN_MODE "w trybie" -#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło sie, ponieważ nie otrzymano adresu IP" -#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło sie jako AP nie można osiągnać" -#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło sie z nieprawidlowym hasłem dostepu AP" -#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu AP przekroczony" +#define D_CONNECT_FAILED_NO_IP_ADDRESS "Połączenie nie powiodło się, ponieważ nie otrzymano adresu IP" +#define D_CONNECT_FAILED_AP_NOT_REACHED "Połączenie nie powiodło się, AP nie osiągalny" +#define D_CONNECT_FAILED_WRONG_PASSWORD "Połączenie nie powiodło się, nieprawidlowe hasło" +#define D_CONNECT_FAILED_AP_TIMEOUT "Nie udało się nawiązac połączenia, limit czasu przekroczony" #define D_ATTEMPTING_CONNECTION "Próba połączenia..." #define D_CHECKING_CONNECTION "Sprawdzanie połączenia..." -#define D_QUERY_DONE "Wykonano zapytanie. Znaleziono uslugi MQTT" +#define D_QUERY_DONE "Zapytanie wykonane" #define D_MQTT_SERVICE_FOUND "Usługa MQTT została znaleziona" -#define D_FOUND_AT "znalezione w" +#define D_FOUND_AT "znaleziono w" #define D_SYSLOG_HOST_NOT_FOUND "Syslog Host nie znaleziony" // settings.ino -#define D_SAVED_TO_FLASH_AT "Zapisane do pamięci flash w" -#define D_LOADED_FROM_FLASH_AT "Wczytane z pamięci flash z" +#define D_SAVED_TO_FLASH_AT "Zapisano do pamięci flash w" +#define D_LOADED_FROM_FLASH_AT "Wczytano z pamięci flash w" #define D_USE_DEFAULTS "Użyj domyślnych" -#define D_ERASED_SECTOR "Wymazany sektor" +#define D_ERASED_SECTOR "Sektor wymazany" // xdrv_02_webserver.ino #define D_NOSCRIPT "Aby korzystać z Tasmota, włącz obsługę JavaScript" @@ -233,21 +233,21 @@ #define D_TRYING_TO_CONNECT "Próbuję połączyć urzadzenie z siecią" #define D_RESTART_IN "Zrestartuj" -#define D_SECONDS "sekund" +#define D_SECONDS "Sekund" #define D_DEVICE_WILL_RESTART "Urządzenie zrestartuje sie za kilka sekund" -#define D_BUTTON_TOGGLE "Przełącznik" +#define D_BUTTON_TOGGLE "Załącz/Wyłącz" #define D_CONFIGURATION "Konfiguracja" #define D_INFORMATION "Informacje" #define D_FIRMWARE_UPGRADE "Aktualizacja oprogramowania" #define D_CONSOLE "Konsola" #define D_CONFIRM_RESTART "Potwierdź restart" -#define D_CONFIGURE_MODULE "Konfiguruj moduł" -#define D_CONFIGURE_WIFI "Konfiguruj WiFi" -#define D_CONFIGURE_MQTT "Konfiguruj MQTT" -#define D_CONFIGURE_DOMOTICZ "Konfiguruj Domoticz" -#define D_CONFIGURE_LOGGING "Konfiguruj zapis dziennika" -#define D_CONFIGURE_OTHER "Konfiguruj inne" +#define D_CONFIGURE_MODULE "Konfiguracja modułu" +#define D_CONFIGURE_WIFI "Konfiguracja WiFi" +#define D_CONFIGURE_MQTT "Konfiguracja MQTT" +#define D_CONFIGURE_DOMOTICZ "Konfiguracja Domoticza" +#define D_CONFIGURE_LOGGING "Konfiguracja dziennika" +#define D_CONFIGURE_OTHER "Inne konfiguracje" #define D_CONFIRM_RESET_CONFIGURATION "Potwierdź reset ustawień" #define D_RESET_CONFIGURATION "Reset ustawień" #define D_BACKUP_CONFIGURATION "Kopia ustawień" @@ -255,39 +255,39 @@ #define D_MAIN_MENU "Menu główne" #define D_MODULE_PARAMETERS "Parametry modułu" -#define D_MODULE_TYPE "Typ modułu" -#define D_PULLUP_ENABLE "No Button/Switch pull-up" +#define D_MODULE_TYPE "Typ" +#define D_PULLUP_ENABLE "Przełącznik pull-up" #define D_ADC "ADC" #define D_GPIO "GPIO" -#define D_SERIAL_IN "Serial In" -#define D_SERIAL_OUT "Serial Out" +#define D_SERIAL_IN "Wejście rs" +#define D_SERIAL_OUT "Wyjście rs" -#define D_WIFI_PARAMETERS "Parametry WiFi" -#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci WiFi" -#define D_SCAN_DONE "Skan wykonany" +#define D_WIFI_PARAMETERS "Parametry sieci WiFi" +#define D_SCAN_FOR_WIFI_NETWORKS "Skanuj sieci" +#define D_SCAN_DONE "Skanowanie wykonane" #define D_NO_NETWORKS_FOUND "Nie znaleziono sieci" -#define D_REFRESH_TO_SCAN_AGAIN "Odswież aby ponownie zeskanowac" -#define D_DUPLICATE_ACCESSPOINT "Kopiuj AP" +#define D_REFRESH_TO_SCAN_AGAIN "Odśwież aby ponownie wyszukać sieci" +#define D_DUPLICATE_ACCESSPOINT "Duplikuj" #define D_SKIPPING_LOW_QUALITY "Pominięto z powodu niskiej jakości sygnału" #define D_RSSI "RSSI" #define D_WEP "WEP" #define D_WPA_PSK "WPA PSK" #define D_WPA2_PSK "WPA2 PSK" -#define D_AP1_SSID "AP1 SSID" -#define D_AP1_PASSWORD "Hasło AP1" -#define D_AP2_SSID "AP2 SSID" -#define D_AP2_PASSWORD "Hasło AP2" +#define D_AP1_SSID "Nazwa 1" +#define D_AP1_PASSWORD "Hasło 1" +#define D_AP2_SSID "Nazwa 2" +#define D_AP2_PASSWORD "Hasło 2" #define D_MQTT_PARAMETERS "Parametry MQTT" #define D_CLIENT "Klient" #define D_FULL_TOPIC "Pełny temat" #define D_LOGGING_PARAMETERS "Opcje dziennika" -#define D_SERIAL_LOG_LEVEL "Serial poziom dziennika" -#define D_MQTT_LOG_LEVEL "Mqtt log level" -#define D_WEB_LOG_LEVEL "Web poziom dziennika" -#define D_SYS_LOG_LEVEL "System poziom dziennika" -#define D_MORE_DEBUG "Więcej informacji debug" +#define D_SERIAL_LOG_LEVEL "Serial - poziom" +#define D_MQTT_LOG_LEVEL "Mqtt - poziom" +#define D_WEB_LOG_LEVEL "Web - poziom" +#define D_SYS_LOG_LEVEL "System - poziom" +#define D_MORE_DEBUG "Więcej informacji dziennika" #define D_SYSLOG_HOST "Syslog host" #define D_SYSLOG_PORT "Syslog port" #define D_TELEMETRY_PERIOD "Okres telemetrii" @@ -295,15 +295,15 @@ #define D_OTHER_PARAMETERS "Inne parametry" #define D_TEMPLATE "Szablon" #define D_ACTIVATE "Aktywuj" -#define D_WEB_ADMIN_PASSWORD "Hasło administratora Web" -#define D_MQTT_ENABLE "MQTT aktywne" -#define D_FRIENDLY_NAME "Twoja nazwa" +#define D_WEB_ADMIN_PASSWORD "Hasło administratora" +#define D_MQTT_ENABLE "Załącz MQTT" +#define D_FRIENDLY_NAME "Nazwa" #define D_BELKIN_WEMO "Belkin WeMo" -#define D_HUE_BRIDGE "Hue Bridge" -#define D_SINGLE_DEVICE "pojedyncze urządzenie" -#define D_MULTI_DEVICE "wiele urządzeń" +#define D_HUE_BRIDGE "Mostek Hue" +#define D_SINGLE_DEVICE "pojedyńcze urządzenie" +#define D_MULTI_DEVICE "multi urządzenie" -#define D_CONFIGURE_TEMPLATE "Konfiguruj szablon" +#define D_CONFIGURE_TEMPLATE "Konfiguracja szablonu" #define D_TEMPLATE_PARAMETERS "Parametry szablonu" #define D_TEMPLATE_NAME "Nazwa" #define D_BASE_TYPE "Na bazie" @@ -313,37 +313,37 @@ #define D_CONFIGURATION_SAVED "Ustawienia zapisane" #define D_CONFIGURATION_RESET "Ustawienia zresetowane" -#define D_PROGRAM_VERSION "Wersja programu" -#define D_BUILD_DATE_AND_TIME "Dzień i godzina kompilacji" +#define D_PROGRAM_VERSION "Wersja oprogramowania" +#define D_BUILD_DATE_AND_TIME "Data kompilacji" #define D_CORE_AND_SDK_VERSION "Wersja Core/SDK" #define D_FLASH_WRITE_COUNT "Liczba zapisów do pamięci" -#define D_MAC_ADDRESS "Adres Mac" -#define D_MQTT_HOST "Host MQTT" -#define D_MQTT_PORT "Port MQTT" -#define D_MQTT_CLIENT "Klient MQTT" -#define D_MQTT_USER "Uzytkownik MQTT" -#define D_MQTT_TOPIC "Temat MQTT" -#define D_MQTT_GROUP_TOPIC "Temat grupy MQTT" -#define D_MQTT_FULL_TOPIC "Pełen temat MQTT" +#define D_MAC_ADDRESS "Adres MAC" +#define D_MQTT_HOST "Host" +#define D_MQTT_PORT "Port" +#define D_MQTT_CLIENT "Klient" +#define D_MQTT_USER "Użytkownik" +#define D_MQTT_TOPIC "Temat" +#define D_MQTT_GROUP_TOPIC "Temat grupy" +#define D_MQTT_FULL_TOPIC "Pełny temat" #define D_MDNS_DISCOVERY "Wykrywanie mDNS" #define D_MDNS_ADVERTISE "Rozgłaszanie mDNS" #define D_ESP_CHIP_ID "ID ukladu ESP" -#define D_FLASH_CHIP_ID "ID układu pamięci flash" -#define D_FLASH_CHIP_SIZE "Rozmiar flash" -#define D_FREE_PROGRAM_SPACE "Wolne miejsce programu" +#define D_FLASH_CHIP_ID "ID pamięci flash" +#define D_FLASH_CHIP_SIZE "Rozmiar pamięci flash" +#define D_FREE_PROGRAM_SPACE "Wolna pamięć programu" #define D_UPGRADE_BY_WEBSERVER "Aktualizacja z serwera Web" -#define D_OTA_URL "URL OTA" -#define D_START_UPGRADE "Start aktualizacji" -#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja poprzez wgranie pliku" +#define D_OTA_URL "Adres serwera" +#define D_START_UPGRADE "Aktualizuj" +#define D_UPGRADE_BY_FILE_UPLOAD "Aktualizacja z pliku" #define D_UPLOAD_STARTED "Wgrywanie rozpoczęte" #define D_UPGRADE_STARTED "Aktualizacja rozpoczęta" #define D_UPLOAD_DONE "Wgrywanie zakończone" #define D_UPLOAD_ERR_1 "Nie wybrano pliku" #define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca" #define D_UPLOAD_ERR_3 "Magiczny bajt jest inny niz 0xE9" -#define D_UPLOAD_ERR_4 "Rozmiar programu jest większy niż rzeczywisty rozmiar pamieci flash" -#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodnosci stanu porównywanych bitow" +#define D_UPLOAD_ERR_4 "Rozmiar programu jest większy niż rzeczywisty rozmiar pamięci flash" +#define D_UPLOAD_ERR_5 "Wgrywanie, bufor niezgodności stanu porównywanych bitow" #define D_UPLOAD_ERR_6 "Błąd wgrywania. Uruchomiono zapis do dziennika na poziomie 3" #define D_UPLOAD_ERR_7 "Wgrywanie przerwane" #define D_UPLOAD_ERR_8 "Błędny plik" @@ -355,116 +355,116 @@ #define D_UPLOAD_ERROR_CODE "Błąd wgrywania" #define D_ENTER_COMMAND "Wprowadź polecenie" -#define D_ENABLE_WEBLOG_FOR_RESPONSE "Włącz poziom 2 zapisu Weblog, jeśli oczekiwana jest odpowiedź" +#define D_ENABLE_WEBLOG_FOR_RESPONSE "Włącz poziom 2 zapisu dziennika, jeśli oczekiwana jest odpowiedź" #define D_NEED_USER_AND_PASSWORD "Wymagany użytkownik=&hasło=" // xdrv_01_mqtt.ino #define D_FINGERPRINT "Weryfikuj odcisk TLS..." #define D_TLS_CONNECT_FAILED_TO "Nieudane połączenie TLS do" #define D_RETRY_IN "Spróbuj ponownie" -#define D_VERIFIED "Zweryfikowano odcisku" +#define D_VERIFIED "Zweryfikowano odcisk" #define D_INSECURE "Nieprawidłowe połączenie z powodu błędnego odcisku TLS" #define D_CONNECT_FAILED_TO "Nie udało się nawiązać połączenia" // xplg_wemohue.ino -#define D_MULTICAST_DISABLED "Multicast jest wyłączony" -#define D_MULTICAST_REJOINED "Multicast (re)dołączony" -#define D_MULTICAST_JOIN_FAILED "Multicast nie powiodło się" +#define D_MULTICAST_DISABLED "Multicast wyłączony" +#define D_MULTICAST_REJOINED "Multicast dołączony" +#define D_MULTICAST_JOIN_FAILED "Podłączenie Multicast nie powiodło się" #define D_FAILED_TO_SEND_RESPONSE "Nie udało się wysłać odpowiedzi" #define D_WEMO "WeMo" -#define D_WEMO_BASIC_EVENT "WeMo podstawowe zdarzenie" -#define D_WEMO_EVENT_SERVICE "WeMo zdarzenie service" -#define D_WEMO_META_SERVICE "WeMo meta service" -#define D_WEMO_SETUP "WeMo setup" -#define D_RESPONSE_SENT "Odpowiedź wysłana" +#define D_WEMO_BASIC_EVENT "Zdarzenie podstawowe" +#define D_WEMO_EVENT_SERVICE "Zdarzenie serwisowe" +#define D_WEMO_META_SERVICE "Meta dane serwisowe" +#define D_WEMO_SETUP "Ustawienia WeMo" +#define D_RESPONSE_SENT "Wyślij odpowiedź" #define D_HUE "Hue" -#define D_HUE_BRIDGE_SETUP "Hue setup" -#define D_HUE_API_NOT_IMPLEMENTED "Hue API nie zaimplementowane" -#define D_HUE_API "Hue API" -#define D_HUE_POST_ARGS "Hue POST args" +#define D_HUE_BRIDGE_SETUP "Ustawienia Hue" +#define D_HUE_API_NOT_IMPLEMENTED "Api nie zaimplementowane" +#define D_HUE_API "API" +#define D_HUE_POST_ARGS "POST argument" #define D_3_RESPONSE_PACKETS_SENT "3 pakiety odpowiedzi wysyłane" // xdrv_07_domoticz.ino #define D_DOMOTICZ_PARAMETERS "Parametry Domoticz" #define D_DOMOTICZ_IDX "Idx" -#define D_DOMOTICZ_KEY_IDX "Key idx" -#define D_DOMOTICZ_SWITCH_IDX "Przełącznik idx" -#define D_DOMOTICZ_SENSOR_IDX "Sensor idx" - #define D_DOMOTICZ_TEMP "Temp" - #define D_DOMOTICZ_TEMP_HUM "Temp,Wilg" - #define D_DOMOTICZ_TEMP_HUM_BARO "Temp,Wilg,Cis" - #define D_DOMOTICZ_POWER_ENERGY "Moc,Energia" - #define D_DOMOTICZ_ILLUMINANCE "Oświetl." - #define D_DOMOTICZ_COUNT "Licznik/PM1" - #define D_DOMOTICZ_VOLTAGE "Napięcie/PM2,5" - #define D_DOMOTICZ_CURRENT "Prąd/PM10" - #define D_DOMOTICZ_AIRQUALITY "AirQuality" - #define D_DOMOTICZ_P1_SMART_METER "P1SmartMeter" -#define D_DOMOTICZ_UPDATE_TIMER "Zaktualizuj czasomierz" +#define D_DOMOTICZ_KEY_IDX "Klucz Idx" +#define D_DOMOTICZ_SWITCH_IDX "Przełącznik Idx" +#define D_DOMOTICZ_SENSOR_IDX "Sensor Idx" + #define D_DOMOTICZ_TEMP "Temperatura" + #define D_DOMOTICZ_TEMP_HUM "Temperatura, Wilgotność" + #define D_DOMOTICZ_TEMP_HUM_BARO "Temperatura, Wilgotność, Ciśnienie" + #define D_DOMOTICZ_POWER_ENERGY "Moc, Energia" + #define D_DOMOTICZ_ILLUMINANCE "Oświetlenie" + #define D_DOMOTICZ_COUNT "Licznik" + #define D_DOMOTICZ_VOLTAGE "Napięcie" + #define D_DOMOTICZ_CURRENT "Prąd" + #define D_DOMOTICZ_AIRQUALITY "Jakość powietrza" + #define D_DOMOTICZ_P1_SMART_METER "Miernik P1" +#define D_DOMOTICZ_UPDATE_TIMER "Aktualizacja zegara" // xdrv_09_timers.ino -#define D_CONFIGURE_TIMER "Konfiguruj harmonogram" -#define D_TIMER_PARAMETERS "Parametry harmonogramów" -#define D_TIMER_ENABLE "Włącz Harmonogramy" -#define D_TIMER_ARM "Włącz" -#define D_TIMER_TIME "Według godziny" +#define D_CONFIGURE_TIMER "Konfiguracja harmonogramu" +#define D_TIMER_PARAMETERS "Parametry harmonogramu" +#define D_TIMER_ENABLE "Załącz harmonogram" +#define D_TIMER_ARM "Załącz" +#define D_TIMER_TIME "Czas" #define D_TIMER_DAYS "Dni" #define D_TIMER_REPEAT "Powtarzaj" #define D_TIMER_OUTPUT "Wyjście" #define D_TIMER_ACTION "Akcja" // xdrv_10_knx.ino -#define D_CONFIGURE_KNX "Konfiguruj KNX" +#define D_CONFIGURE_KNX "Konfiguracja KNX" #define D_KNX_PARAMETERS "Parametry KNX" -#define D_KNX_GENERAL_CONFIG "Ogólne" -#define D_KNX_PHYSICAL_ADDRESS "Adres Fizyczny" -#define D_KNX_PHYSICAL_ADDRESS_NOTE "( Musi być unikalny w sieci KNX )" -#define D_KNX_ENABLE "Włącz KNX" -#define D_KNX_GROUP_ADDRESS_TO_WRITE "Dane do wysłania do adresów grupowych" +#define D_KNX_GENERAL_CONFIG "Konfiguracja ogólna" +#define D_KNX_PHYSICAL_ADDRESS "Adres fizyczny" +#define D_KNX_PHYSICAL_ADDRESS_NOTE "(Musi być unikalny w sieci KNX)" +#define D_KNX_ENABLE "Załącz" +#define D_KNX_GROUP_ADDRESS_TO_WRITE "Adresy grupowe do zapisu" #define D_ADD "Dodaj" #define D_DELETE "Usuń" #define D_REPLY "Odpowiedz" -#define D_KNX_GROUP_ADDRESS_TO_READ "Adresy grupowe do odbioru danych z" -#define D_RECEIVED_FROM "Otrzymane od" +#define D_KNX_GROUP_ADDRESS_TO_READ "Adresy grupowe do odbioru" +#define D_RECEIVED_FROM "Odebrane od" #define D_KNX_COMMAND_WRITE "Zapisz" #define D_KNX_COMMAND_READ "Czytaj" -#define D_KNX_COMMAND_OTHER "Inne" -#define D_SENT_TO "wysłane do" +#define D_KNX_COMMAND_OTHER "Inna komenda" +#define D_SENT_TO "Wyślij do" #define D_KNX_WARNING "Adres grupy (0/0/0) jest zarezerwowany i nie można go użyć." -#define D_KNX_ENHANCEMENT "Usprawnienie Komunikacji" -#define D_KNX_TX_SLOT "KNX TX" -#define D_KNX_RX_SLOT "KNX RX" +#define D_KNX_ENHANCEMENT "Rozszerzenia" +#define D_KNX_TX_SLOT "Gniazdo TX" +#define D_KNX_RX_SLOT "Gniazdo RX" // xdrv_03_energy.ino -#define D_ENERGY_TODAY "Energia Dzisiaj" -#define D_ENERGY_YESTERDAY "Energia Wczoraj" -#define D_ENERGY_TOTAL "Energia suma" +#define D_ENERGY_TODAY "Energia dzisiaj" +#define D_ENERGY_YESTERDAY "Energia wczoraj" +#define D_ENERGY_TOTAL "Energia całkowita" // xdrv_27_shutter.ino -#define D_OPEN "Open" -#define D_CLOSE "Close" -#define D_DOMOTICZ_SHUTTER "Shutter" +#define D_OPEN "Otwórz" +#define D_CLOSE "Zamknij" +#define D_DOMOTICZ_SHUTTER "Roleta" // xdrv_28_pcf8574.ino -#define D_CONFIGURE_PCF8574 "Configure PCF8574" -#define D_PCF8574_PARAMETERS "PCF8574 parameters" -#define D_INVERT_PORTS "Invert Ports" -#define D_DEVICE "Device" -#define D_DEVICE_INPUT "Input" -#define D_DEVICE_OUTPUT "Output" +#define D_CONFIGURE_PCF8574 "Konfiguracja PCF8574" +#define D_PCF8574_PARAMETERS "Parametry PCF8574" +#define D_INVERT_PORTS "Porty odwrócone" +#define D_DEVICE "Urządzenie" +#define D_DEVICE_INPUT "Wejście" +#define D_DEVICE_OUTPUT "Wyjście" // xsns_05_ds18b20.ino -#define D_SENSOR_BUSY "Czujnik DS18x20 zajęty" -#define D_SENSOR_CRC_ERROR "Czujnik DS18x20 błąd CRC" -#define D_SENSORS_FOUND "Znaleziono Czujnik DS18x20" +#define D_SENSOR_BUSY "Czujnik zajęty" +#define D_SENSOR_CRC_ERROR "Błąd CRC czujnika" +#define D_SENSORS_FOUND "Znaleziono czujnik" // xsns_06_dht.ino #define D_TIMEOUT_WAITING_FOR "Trwa oczekiwanie" -#define D_START_SIGNAL_LOW "sygnał startowy niski" -#define D_START_SIGNAL_HIGH "sygnał startowy wysoki" -#define D_PULSE "pulse" +#define D_START_SIGNAL_LOW "Sygnał startowy niski" +#define D_START_SIGNAL_HIGH "Sygnał startowy wysoki" +#define D_PULSE "Impuls" #define D_CHECKSUM_FAILURE "Błędna suma kontrolna" // xsns_07_sht1x.ino @@ -486,22 +486,22 @@ // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Usuń wagę" -#define D_HX_CAL_REFERENCE "Załaduj masę referencyjną" +#define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną" #define D_HX_CAL_DONE "Skalibrowany" -#define D_HX_CAL_FAIL "Błąd Kalibracji" -#define D_RESET_HX711 "Zresetuj Skalę" -#define D_CONFIGURE_HX711 "Skonfiguruj Skalę" -#define D_HX711_PARAMETERS "Parametry Skali" +#define D_HX_CAL_FAIL "Błąd kalibracji" +#define D_RESET_HX711 "Zresetuj skalę" +#define D_CONFIGURE_HX711 "Skonfiguruj skalę" +#define D_HX711_PARAMETERS "Parametry skali" #define D_ITEM_WEIGHT "Waga przedmiotu" #define D_REFERENCE_WEIGHT "Waga referencyjna" #define D_CALIBRATE "Skalibruj" #define D_CALIBRATION "Kalibrowanie" //xsns_35_tx20.ino -#define D_TX20_WIND_DIRECTION "Kierunek wiatru" -#define D_TX20_WIND_SPEED "Prędkość wiatru" -#define D_TX20_WIND_SPEED_AVG "Średnia prędkość wiatru" -#define D_TX20_WIND_SPEED_MAX "Maksymalna prędkość wiatru" +#define D_TX20_WIND_DIRECTION "Kierunek" +#define D_TX20_WIND_SPEED "Prędkość" +#define D_TX20_WIND_SPEED_AVG "Średnia prędkość" +#define D_TX20_WIND_SPEED_MAX "Maksymalna prędkość" #define D_TX20_NORTH "N" #define D_TX20_EAST "E" #define D_TX20_SOUTH "S" @@ -509,7 +509,7 @@ // tasmota_template.h - keep them as short as possible to be able to fit them in GUI drop down box #define D_SENSOR_NONE "Brak" -#define D_SENSOR_USER "User" +#define D_SENSOR_USER "Użytkownik" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" #define D_SENSOR_SI7021 "SI7021" @@ -517,15 +517,15 @@ #define D_SENSOR_I2C_SCL "I2C SCL" #define D_SENSOR_I2C_SDA "I2C SDA" #define D_SENSOR_WS2812 "WS2812" -#define D_SENSOR_DFR562 "MP3 Player" +#define D_SENSOR_DFR562 "Odtearzacz MP3" #define D_SENSOR_IRSEND "IRsend" -#define D_SENSOR_SWITCH "Przela" // Suffix "1" -#define D_SENSOR_BUTTON "Przyci" // Suffix "1" -#define D_SENSOR_RELAY "Przek" // Suffix "1i" +#define D_SENSOR_SWITCH "Przełącznik" // Suffix "1" +#define D_SENSOR_BUTTON "Przycisk" // Suffix "1" +#define D_SENSOR_RELAY "Przekaźnik" // Suffix "1i" #define D_SENSOR_LED "Led" // Suffix "1i" -#define D_SENSOR_LED_LINK "LedLink" // Suffix "i" +#define D_SENSOR_LED_LINK "Led link" // Suffix "i" #define D_SENSOR_PWM "PWM" // Suffix "1" -#define D_SENSOR_COUNTER "Liczni" // Suffix "1" +#define D_SENSOR_COUNTER "Licznik" // Suffix "1" #define D_SENSOR_IRRECV "IRrecv" #define D_SENSOR_MHZ_RX "MHZ Rx" #define D_SENSOR_MHZ_TX "MHZ Tx" @@ -540,7 +540,7 @@ #define D_SENSOR_SPI_MISO "SPI MISO" #define D_SENSOR_SPI_MOSI "SPI MOSI" #define D_SENSOR_SPI_CLK "SPI CLK" -#define D_SENSOR_BACKLIGHT "Backlight" +#define D_SENSOR_BACKLIGHT "Podświetlanie" #define D_SENSOR_PMS5003 "PMS5003" #define D_SENSOR_SDS0X1_RX "SDS0X1 Rx" #define D_SENSOR_SDS0X1_TX "SDS0X1 Tx" @@ -623,8 +623,8 @@ #define D_SENSOR_DDSU666_RX "DDSU666 Rx" #define D_SENSOR_SM2135_CLK "SM2135 Clk" #define D_SENSOR_SM2135_DAT "SM2135 Dat" -#define D_SENSOR_DEEPSLEEP "DeepSleep" -#define D_SENSOR_EXS_ENABLE "EXS Enable" +#define D_SENSOR_DEEPSLEEP "Głęboko uśpiony" +#define D_SENSOR_EXS_ENABLE "Załącz EXS" #define D_SENSOR_SLAVE_TX "Slave TX" #define D_SENSOR_SLAVE_RX "Slave RX" #define D_SENSOR_SLAVE_RESET "Slave RST" @@ -664,37 +664,37 @@ #define D_UNIT_WATT_METER_QUADRAT "W/m²" //SDM220 -#define D_PHASE_ANGLE "Phase Angle" -#define D_IMPORT_ACTIVE "Import Active" -#define D_EXPORT_ACTIVE "Export Active" -#define D_IMPORT_REACTIVE "Import Reactive" -#define D_EXPORT_REACTIVE "Export Reactive" -#define D_TOTAL_REACTIVE "Total Reactive" +#define D_PHASE_ANGLE "Przesunięcie faz" +#define D_IMPORT_ACTIVE "Czynna pobrana" +#define D_EXPORT_ACTIVE "Czynna oddana" +#define D_IMPORT_REACTIVE "Bierna pobrana" +#define D_EXPORT_REACTIVE "Bierna oddana" +#define D_TOTAL_REACTIVE "Bierna całkowita" #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" //SOLAXX1 -#define D_PV1_VOLTAGE "PV1 Voltage" -#define D_PV1_CURRENT "PV1 Current" -#define D_PV1_POWER "PV1 Power" -#define D_PV2_VOLTAGE "PV2 Voltage" -#define D_PV2_CURRENT "PV2 Current" -#define D_PV2_POWER "PV2 Power" -#define D_SOLAR_POWER "Solar Power" -#define D_INVERTER_POWER "Inverter Power" +#define D_PV1_VOLTAGE "Napięcie PV1" +#define D_PV1_CURRENT "Prąd PV1" +#define D_PV1_POWER "Moc PV1 " +#define D_PV2_VOLTAGE "Napięcie PV2" +#define D_PV2_CURRENT "Prąd PV2" +#define D_PV2_POWER "Moc PV2" +#define D_SOLAR_POWER "Moc PV" +#define D_INVERTER_POWER "Moc invertera" #define D_STATUS "Status" -#define D_WAITING "Waiting" -#define D_CHECKING "Checking" -#define D_WORKING "Working" -#define D_FAILURE "Failure" -#define D_SOLAX_ERROR_0 "No Error Code" -#define D_SOLAX_ERROR_1 "Grid Lost Fault" -#define D_SOLAX_ERROR_2 "Grid Voltage Fault" -#define D_SOLAX_ERROR_3 "Grid Frequency Fault" -#define D_SOLAX_ERROR_4 "Pv Voltage Fault" -#define D_SOLAX_ERROR_5 "Isolation Fault" -#define D_SOLAX_ERROR_6 "Over Temperature Fault" -#define D_SOLAX_ERROR_7 "Fan Fault" -#define D_SOLAX_ERROR_8 "Other Device Fault" +#define D_WAITING "Oczekiwanie" +#define D_CHECKING "Sprawdzanie" +#define D_WORKING "Praca" +#define D_FAILURE "Błąd" +#define D_SOLAX_ERROR_0 "Błąd - brak kodu" +#define D_SOLAX_ERROR_1 "Błąd - utrata sieci" +#define D_SOLAX_ERROR_2 "Błąd - napięcie sieci" +#define D_SOLAX_ERROR_3 "Błąd - częstotliwość sieci" +#define D_SOLAX_ERROR_4 "Błąd - napięcie PV" +#define D_SOLAX_ERROR_5 "Błąd - usterka izolacji" +#define D_SOLAX_ERROR_6 "Błąd - przegrzanie" +#define D_SOLAX_ERROR_7 "Błąd - wentylator" +#define D_SOLAX_ERROR_8 "Błąd - inne urządzenie" #endif // _LANGUAGE_PL_PL_D_H_ diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index aa98f3e82..7ef154d53 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -218,7 +218,8 @@ // (POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON) #define APP_BLINKTIME 10 // [BlinkTime] Time in 0.1 Sec to blink/toggle power for relay 1 #define APP_BLINKCOUNT 10 // [BlinkCount] Number of blinks (0 = 32000) -#define APP_SLEEP 0 // [Sleep] Sleep time to lower energy consumption (0 = Off, 1 - 250 mSec) +#define APP_SLEEP 0 // [Sleep] Sleep time to lower energy consumption (0 = Off, 1 - 250 mSec), +#define PWM_MAX_SLEEP 10 // Sleep will be lowered to this value when light is on, to avoid flickering #define KEY_DEBOUNCE_TIME 50 // [ButtonDebounce] Number of mSeconds button press debounce time #define KEY_HOLD_TIME 40 // [SetOption32] Number of 0.1 seconds to hold Button or external Pushbutton before sending HOLD message @@ -289,7 +290,8 @@ // -- MQTT - TLS - AWS IoT ------------------------ // Using TLS starting with version v6.5.0.16 compilation will only work using Core 2.4.2 and 2.5.2. No longer supported: 2.3.0 //#define USE_MQTT_TLS // Use TLS for MQTT connection (+34.5k code, +7.0k mem and +4.8k additional during connection handshake) -// #define USE_MQTT_TLS_CA_CERT // Force full CA validation instead of fingerprints, slower, but simpler to use (+2.2k code, +1.9k mem during connection handshake) +// #define USE_MQTT_TLS_CA_CERT // Force full CA validation instead of fingerprints, slower, but simpler to use. (+2.2k code, +1.9k mem during connection handshake) + // This includes the LetsEncrypt CA in tasmota_ca.ino for verifying server certificates // #define USE_MQTT_TLS_FORCE_EC_CIPHER // Force Elliptic Curve cipher (higher security) required by some servers (automatically enabled with USE_MQTT_AWS_IOT) (+11.4k code, +0.4k mem) // #define USE_MQTT_AWS_IOT // Enable MQTT for AWS IoT - requires a private key (+11.9k code, +0.4k mem) // Note: you need to generate a private key + certificate per device and update 'tasmota/tasmota_aws_iot.cpp' diff --git a/tasmota/settings.h b/tasmota/settings.h index f88f33c52..876e0bde5 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -434,8 +434,9 @@ struct SYSCFG { uint32_t deepsleep; // E94 uint16_t energy_power_delta; // E98 uint8_t shutter_motordelay[MAX_SHUTTERS]; // E9A + int8_t temp_comp; // E9E - uint8_t free_e9e[2]; // E9E + uint8_t free_e9f[1]; // E9F uint8_t web_color2[2][3]; // EA0 - Needs to be on integer / 3 distance from web_color diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 552f04937..9ca979b45 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -314,7 +314,9 @@ void SetFlashModeDout(void) if (ESP.flashRead(address, (uint32_t*)_buffer, FLASH_SECTOR_SIZE)) { if (_buffer[2] != 3) { // DOUT _buffer[2] = 3; - if (ESP.flashEraseSector(address / FLASH_SECTOR_SIZE)) ESP.flashWrite(address, (uint32_t*)_buffer, FLASH_SECTOR_SIZE); + if (ESP.flashEraseSector(address / FLASH_SECTOR_SIZE)) { + ESP.flashWrite(address, (uint32_t*)_buffer, FLASH_SECTOR_SIZE); + } } } delete[] _buffer; @@ -401,7 +403,7 @@ void UpdateQuickPowerCycle(bool update) if (update && ((pc_register & 0xFFFFFFF0) == 0xFFA55AB0)) { uint32_t counter = ((pc_register & 0xF) << 1) & 0xF; if (0 == counter) { // 4 power cycles in a row - SettingsErase(2); // Quickly reset all settings including QuickPowerCycle flag + SettingsErase(3); // Quickly reset all settings including QuickPowerCycle flag EspRestart(); // And restart } else { pc_register = 0xFFA55AB0 | counter; @@ -412,8 +414,9 @@ void UpdateQuickPowerCycle(bool update) else if (pc_register != 0xFFA55ABF) { pc_register = 0xFFA55ABF; // Assume flash is default all ones and setting a bit to zero does not need an erase - ESP.flashEraseSector(pc_location); - ESP.flashWrite(pc_location * SPI_FLASH_SEC_SIZE, (uint32*)&pc_register, sizeof(pc_register)); + if (ESP.flashEraseSector(pc_location)) { + ESP.flashWrite(pc_location * SPI_FLASH_SEC_SIZE, (uint32*)&pc_register, sizeof(pc_register)); + } AddLog_P2(LOG_LEVEL_DEBUG, PSTR("QPC: Reset")); } } @@ -464,8 +467,9 @@ void SettingsSave(uint8_t rotate) Settings.cfg_crc = GetSettingsCrc(); // Keep for backward compatibility in case of fall-back just after upgrade Settings.cfg_crc32 = GetSettingsCrc32(); - ESP.flashEraseSector(settings_location); - ESP.flashWrite(settings_location * SPI_FLASH_SEC_SIZE, (uint32*)&Settings, sizeof(SYSCFG)); + if (ESP.flashEraseSector(settings_location)) { + ESP.flashWrite(settings_location * SPI_FLASH_SEC_SIZE, (uint32*)&Settings, sizeof(SYSCFG)); + } if (!stop_flash_rotate && rotate) { for (uint32_t i = 1; i < CFG_ROTATES; i++) { @@ -571,29 +575,30 @@ void SettingsErase(uint8_t type) 0 = Erase from program end until end of flash as seen by SDK 1 = Erase 16k SDK parameter area near end of flash as seen by SDK (0x0xFCxxx - 0x0xFFFFF) solving possible wifi errors - 2 = Erase Tasmota settings (0x0xF3xxx - 0x0xFBFFF) + 2 = Erase Tasmota parameter area (0x0xF3xxx - 0x0xFBFFF) + 3 = Erase Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF) */ #ifndef FIRMWARE_MINIMAL -// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SDK: Flash size 0x%08X"), flashchip->chip_size); - uint32_t _sectorStart = (ESP.getSketchSize() / SPI_FLASH_SEC_SIZE) + 1; - uint32_t _sectorEnd = ESP.getFlashChipRealSize() / SPI_FLASH_SEC_SIZE; -// uint32_t _sectorEnd = ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE; + uint32_t _sectorEnd = ESP.getFlashChipRealSize() / SPI_FLASH_SEC_SIZE; // Flash size as reported by hardware if (1 == type) { // source Esp.cpp and core_esp8266_phy.cpp - _sectorStart = (ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE) - 4; + _sectorStart = (ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE) - 4; // SDK parameter area } else if (2 == type) { - _sectorStart = SETTINGS_LOCATION - CFG_ROTATES; // Tasmota parameter area (0x0F3xxx - 0x0FBFFF) + _sectorStart = SETTINGS_LOCATION - CFG_ROTATES; // Tasmota parameter area (0x0F3xxx - 0x0FBFFF) _sectorEnd = SETTINGS_LOCATION +1; } + else if (3 == type) { + _sectorStart = SETTINGS_LOCATION - CFG_ROTATES; // Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF) + _sectorEnd = ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE; // Flash size as seen by SDK + } AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " %d " D_UNIT_SECTORS), _sectorEnd - _sectorStart); -// EspErase(_sectorStart, _sectorEnd); // Arduino core and SDK - erases flash as seen by SDK - EsptoolErase(_sectorStart, _sectorEnd); // Esptool - erases flash completely - +// EspErase(_sectorStart, _sectorEnd); // Arduino core and SDK - erases flash as seen by SDK + EsptoolErase(_sectorStart, _sectorEnd); // Esptool - erases flash completely #endif // FIRMWARE_MINIMAL } diff --git a/tasmota/support.ino b/tasmota/support.ino index 0520a04d2..55c01b71d 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -20,6 +20,10 @@ IPAddress syslog_host_addr; // Syslog host IP address uint32_t syslog_host_hash = 0; // Syslog host name hash +extern "C" { +extern struct rst_info resetInfo; +} + /*********************************************************************************************\ * Watchdog extension (https://github.com/esp8266/Arduino/issues/1532) \*********************************************************************************************/ @@ -72,6 +76,26 @@ void OsWatchLoop(void) // while(1) delay(1000); // this will trigger the os watch } +bool OsWatchBlockedLoop(void) +{ + return oswatch_blocked_loop; +} + +uint32_t ResetReason(void) +{ + /* + user_interface.h + REASON_DEFAULT_RST = 0, // "Power on" normal startup by power on + REASON_WDT_RST = 1, // "Hardware Watchdog" hardware watch dog reset + REASON_EXCEPTION_RST = 2, // "Exception" exception reset, GPIO status won’t change + REASON_SOFT_WDT_RST = 3, // "Software Watchdog" software watch dog reset, GPIO status won’t change + REASON_SOFT_RESTART = 4, // "Software/System restart" software restart ,system_restart , GPIO status won’t change + REASON_DEEP_SLEEP_AWAKE = 5, // "Deep-Sleep Wake" wake up from deep-sleep + REASON_EXT_SYS_RST = 6 // "External System" external system reset + */ + return resetInfo.reason; +} + String GetResetReason(void) { if (oswatch_blocked_loop) { @@ -83,9 +107,10 @@ String GetResetReason(void) } } -bool OsWatchBlockedLoop(void) +String GetResetReasonInfo(void) { - return oswatch_blocked_loop; + // "Fatal exception:0 flag:2 (EXCEPTION) epc1:0x704022a7 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000" + return (ResetReason() == REASON_EXCEPTION_RST) ? ESP.getResetInfo() : GetResetReason(); } /*********************************************************************************************\ @@ -371,7 +396,7 @@ char* NoAlNumToUnderscore(char* dest, const char* source) return dest; } -char IndexSeparator() +char IndexSeparator(void) { /* // 20 bytes more costly !?! @@ -394,7 +419,7 @@ void SetShortcutDefault(void) } } -uint8_t Shortcut() +uint8_t Shortcut(void) { uint8_t result = 10; @@ -496,7 +521,7 @@ char* GetPowerDevice(char* dest, uint32_t idx, size_t size) return GetPowerDevice(dest, idx, size, 0); } -String GetDeviceHardware(void) +bool IsEsp8285(void) { // esptool.py get_efuses uint32_t efuse1 = *(uint32_t*)(0x3FF00050); @@ -504,10 +529,22 @@ String GetDeviceHardware(void) // uint32_t efuse3 = *(uint32_t*)(0x3FF00058); // uint32_t efuse4 = *(uint32_t*)(0x3FF0005C); -// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FUS: efuses 0x%08X 0x%08X, name %s"), efuse1, efuse2); - bool is_8285 = ( (efuse1 & (1 << 4)) || (efuse2 & (1 << 16)) ); - return String((is_8285) ? F("ESP8285") : F("ESP8266EX")); + if (is_8285 && (ESP.getFlashChipRealSize() > 1048576)) { + is_8285 = false; // ESP8285 can only have 1M flash + } + return is_8285; +} + +String GetDeviceHardware(void) +{ + char buff[10]; + if (IsEsp8285()) { + strcpy_P(buff, PSTR("ESP8285")); + } else { + strcpy_P(buff, PSTR("ESP8266EX")); + } + return String(buff); } float ConvertTemp(float c) @@ -520,6 +557,7 @@ float ConvertTemp(float c) if (!isnan(c) && Settings.flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit result = c * 1.8 + 32; // Fahrenheit } + result = result + (0.1 * Settings.temp_comp); return result; } @@ -530,6 +568,7 @@ float ConvertTempToCelsius(float c) if (!isnan(c) && Settings.flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit result = (c - 32) / 1.8; // Celsius } + result = result + (0.1 * Settings.temp_comp); return result; } @@ -675,15 +714,15 @@ bool DecodeCommand(const char* haystack, void (* const MyCommand[])(void)) return false; } -const char kOptions[] PROGMEM = "OFF|" D_OFF "|" D_FALSE "|" D_STOP "|" D_CELSIUS "|" // 0 - "ON|" D_ON "|" D_TRUE "|" D_START "|" D_FAHRENHEIT "|" D_USER "|" // 1 - "TOGGLE|" D_TOGGLE "|" D_ADMIN "|" // 2 - "BLINK|" D_BLINK "|" // 3 - "BLINKOFF|" D_BLINKOFF "|" // 4 - "ALL" ; // 255 +const char kOptions[] PROGMEM = "OFF|" D_OFF "|FALSE|" D_FALSE "|STOP|" D_STOP "|" D_CELSIUS "|" // 0 + "ON|" D_ON "|TRUE|" D_TRUE "|START|" D_START "|" D_FAHRENHEIT "|" D_USER "|" // 1 + "TOGGLE|" D_TOGGLE "|" D_ADMIN "|" // 2 + "BLINK|" D_BLINK "|" // 3 + "BLINKOFF|" D_BLINKOFF "|" // 4 + "ALL" ; // 255 -const uint8_t sNumbers[] PROGMEM = { 0,0,0,0,0, - 1,1,1,1,1,1, +const uint8_t sNumbers[] PROGMEM = { 0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1, 2,2,2, 3,3, 4,4, @@ -899,7 +938,7 @@ int ResponseJsonEndEnd(void) * GPIO Module and Template management \*********************************************************************************************/ -uint8_t ModuleNr() +uint8_t ModuleNr(void) { // 0 = User module (255) // 1 up = Template module 0 up @@ -931,7 +970,7 @@ String AnyModuleName(uint32_t index) } } -String ModuleName() +String ModuleName(void) { return AnyModuleName(Settings.module); } @@ -963,7 +1002,7 @@ void ModuleGpios(myio *gp) // AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)gp, sizeof(myio)); } -gpio_flag ModuleFlag() +gpio_flag ModuleFlag(void) { gpio_flag flag; @@ -983,7 +1022,7 @@ void ModuleDefault(uint32_t module) memcpy_P(&Settings.user_template, &kModules[module], sizeof(mytmplt)); } -void SetModuleType() +void SetModuleType(void) { my_module_type = (USER_MODULE == Settings.module) ? Settings.user_template_base : Settings.module; } @@ -998,11 +1037,14 @@ uint8_t ValidPin(uint32_t pin, uint32_t gpio) uint8_t result = gpio; if (FlashPin(pin)) { - result = GPIO_NONE; // Disable flash pins GPIO6, GPIO7, GPIO8 and GPIO11 + result = GPIO_NONE; // Disable flash pins GPIO6, GPIO7, GPIO8 and GPIO11 } - if ((WEMOS == Settings.module) && (!Settings.flag3.user_esp8285_enable)) { // SetOption51 - Enable ESP8285 user GPIO's - if ((pin == 9) || (pin == 10)) { result = GPIO_NONE; } // Disable possible flash GPIO9 and GPIO10 + if (!IsEsp8285() && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's + if ((pin == 9) || (pin == 10)) { + result = GPIO_NONE; // Disable possible flash GPIO9 and GPIO10 + } } + return result; } @@ -1011,7 +1053,7 @@ bool ValidGPIO(uint32_t pin, uint32_t gpio) return (GPIO_USER == ValidPin(pin, gpio)); // Only allow GPIO_USER pins } -bool ValidAdc() +bool ValidAdc(void) { gpio_flag flag = ModuleFlag(); uint32_t template_adc0 = flag.data &15; @@ -1111,7 +1153,7 @@ bool JsonTemplate(const char* dataBuf) return true; } -void TemplateJson() +void TemplateJson(void) { Response_P(PSTR("{\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), Settings.user_template.name); for (uint32_t i = 0; i < sizeof(Settings.user_template.gp); i++) { diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index 939189938..fe8640045 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -26,7 +26,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SYSLOG "|" D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALDELIMITER "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|" D_CMND_WIFICONFIG "|" D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_INTERLOCK "|" D_CMND_TELEPERIOD "|" D_CMND_RESET "|" D_CMND_TIME "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|" - D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_WIFIPOWER "|" + D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_WIFIPOWER "|" D_CMND_TEMPOFFSET "|" #ifdef USE_I2C D_CMND_I2CSCAN "|" D_CMND_I2CDRIVER "|" #endif @@ -41,7 +41,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = { &CmndButtonDebounce, &CmndSwitchDebounce, &CmndSyslog, &CmndLoghost, &CmndLogport, &CmndSerialSend, &CmndBaudrate, &CmndSerialDelimiter, &CmndIpAddress, &CmndNtpServer, &CmndAp, &CmndSsid, &CmndPassword, &CmndHostname, &CmndWifiConfig, &CmndFriendlyname, &CmndSwitchMode, &CmndInterlock, &CmndTeleperiod, &CmndReset, &CmndTime, &CmndTimezone, &CmndTimeStd, - &CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, + &CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, &CmndTempOffset, #ifdef USE_I2C &CmndI2cScan, CmndI2cDriver, #endif @@ -57,6 +57,13 @@ void ResponseCmndNumber(int value) Response_P(S_JSON_COMMAND_NVALUE, XdrvMailbox.command, value); } +void ResponseCmndFloat(float value, uint32_t decimals) +{ + char stemp1[TOPSZ]; + dtostrfd(value, decimals, stemp1); + Response_P(S_JSON_COMMAND_XVALUE, XdrvMailbox.command, stemp1); // Return float value without quotes +} + void ResponseCmndIdxNumber(int value) { Response_P(S_JSON_COMMAND_INDEX_NVALUE, XdrvMailbox.command, XdrvMailbox.index, value); @@ -362,7 +369,7 @@ void CmndStatus(void) D_JSON_RESTARTREASON "\":\"%s\",\"" D_JSON_UPTIME "\":\"%s\",\"" D_JSON_STARTUPUTC "\":\"%s\",\"" D_CMND_SLEEP "\":%d,\"" D_JSON_CONFIG_HOLDER "\":%d,\"" D_JSON_BOOTCOUNT "\":%d,\"" D_JSON_SAVECOUNT "\":%d,\"" D_JSON_SAVEADDRESS "\":\"%X\"}}"), baudrate, Settings.mqtt_grptopic, Settings.ota_url, - GetResetReason().c_str(), GetUptime().c_str(), GetDateAndTime(DT_RESTART).c_str(), Settings.sleep, + GetResetReasonInfo().c_str(), GetUptime().c_str(), GetDateAndTime(DT_RESTART).c_str(), Settings.sleep, Settings.cfg_holder, Settings.bootcount, Settings.save_flag, GetSettingsAddress()); MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "1")); } @@ -496,6 +503,17 @@ void CmndState(void) #endif // USE_HOME_ASSISTANT } +void CmndTempOffset(void) +{ + if (XdrvMailbox.data_len > 0) { + int value = (int)(CharToFloat(XdrvMailbox.data) * 10); + if ((value > -127) && (value < 127)) { + Settings.temp_comp = value; + } + } + ResponseCmndFloat((float)(Settings.temp_comp) / 10, 1); +} + void CmndSleep(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 251)) { @@ -1540,9 +1558,7 @@ void CmndWifiPower(void) } WifiSetOutputPower(); } - char stemp1[TOPSZ]; - dtostrfd((float)(Settings.wifi_output_power) / 10, 1, stemp1); - Response_P(S_JSON_COMMAND_XVALUE, XdrvMailbox.command, stemp1); // Return float value without quotes + ResponseCmndFloat((float)(Settings.wifi_output_power) / 10, 1); } #ifdef USE_I2C diff --git a/tasmota/support_float.ino b/tasmota/support_float.ino index e6e788f3a..21ec2f47d 100644 --- a/tasmota/support_float.ino +++ b/tasmota/support_float.ino @@ -375,9 +375,10 @@ float sqrt1(const float x) // changeUIntScale // Change a value for range a..b to c..d, using only unsigned int math // +// New version, you don't need the "to_min < to_max" precondition anymore +// // PRE-CONDITIONS (if not satisfied, you may 'halt and catch fire') // from_min < from_max (not checked) -// to_min < to_max (not checked) // from_min <= num <= from-max (chacked) // POST-CONDITIONS // to_min <= result <= to_max @@ -385,8 +386,12 @@ float sqrt1(const float x) uint16_t changeUIntScale(uint16_t inum, uint16_t ifrom_min, uint16_t ifrom_max, uint16_t ito_min, uint16_t ito_max) { // guard-rails - if ((ito_min >= ito_max) || (ifrom_min >= ifrom_max)) { - return ito_min; // invalid input, return arbitrary value + if (ifrom_min >= ifrom_max) { + if (ito_min > ito_max) { + return ito_max; + } else { + return ito_min; // invalid input, return arbitrary value + } } // convert to uint31, it's more verbose but code is more compact uint32_t num = inum; @@ -397,6 +402,15 @@ uint16_t changeUIntScale(uint16_t inum, uint16_t ifrom_min, uint16_t ifrom_max, // check source range num = (num > from_max ? from_max : (num < from_min ? from_min : num)); + + // check to_* order + if (to_min > to_max) { + // reverse order + num = (from_max - num) + from_min; + to_min = ito_max; + to_max = ito_min; + } + uint32_t numerator = (num - from_min) * (to_max - to_min); uint32_t result; if (numerator >= 0x80000000L) { diff --git a/tasmota/support_legacy_cores.ino b/tasmota/support_legacy_cores.ino index 9a5cee2ae..a4c26e8c9 100644 --- a/tasmota/support_legacy_cores.ino +++ b/tasmota/support_legacy_cores.ino @@ -22,8 +22,6 @@ * Functions not available in core 2.3.0 \*********************************************************************************************/ -// Functions not available in 2.3.0 - // http://clc-wiki.net/wiki/C_standard_library:string.h:memchr void* memchr(const void* ptr, int value, size_t num) { @@ -137,6 +135,15 @@ unsigned long long strtoull(const char *__restrict nptr, char **__restrict endpt return acc; } +#endif // ARDUINO_ESP8266_RELEASE_2_3_0 + + + +#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_0) || defined(ARDUINO_ESP8266_RELEASE_2_4_1) || defined(ARDUINO_ESP8266_RELEASE_2_4_2) || defined(ARDUINO_ESP8266_RELEASE_2_5_0) || defined(ARDUINO_ESP8266_RELEASE_2_5_1) || defined(ARDUINO_ESP8266_RELEASE_2_5_2) +/*********************************************************************************************\ + * Functions not available in core before 2.6.0 +\*********************************************************************************************/ + // https://github.com/arendst/Tasmota/issues/6856#issuecomment-554258914 void* memmove_P(void *dest, const void *src, size_t n) { @@ -147,7 +154,4 @@ void* memmove_P(void *dest, const void *src, size_t n) } } -#endif // ARDUINO_ESP8266_RELEASE_2_3_0 -/*********************************************************************************************\ - * -\*********************************************************************************************/ +#endif // ARDUINO_ESP8266_RELEASE < 2_6_0 diff --git a/tasmota/support_rtc.ino b/tasmota/support_rtc.ino index 1ef84c027..ffb7239a6 100644 --- a/tasmota/support_rtc.ino +++ b/tasmota/support_rtc.ino @@ -373,10 +373,13 @@ void RtcSecond(void) { TIME_T tmpTime; - if (!Rtc.user_time_entry) { - if ((Rtc.ntp_sync_minute > 59) && (RtcTime.minute > 2)) Rtc.ntp_sync_minute = 1; // If sync prepare for a new cycle + if (!Rtc.user_time_entry && !global_state.wifi_down) { + uint8_t uptime_minute = (uptime / 60) % 60; // 0 .. 59 + if ((Rtc.ntp_sync_minute > 59) && (uptime_minute > 2)) { + Rtc.ntp_sync_minute = 1; // If sync prepare for a new cycle + } uint8_t offset = (uptime < 30) ? RtcTime.second : (((ESP.getChipId() & 0xF) * 3) + 3) ; // First try ASAP to sync. If fails try once every 60 seconds based on chip id - if (!global_state.wifi_down && (((offset == RtcTime.second) && ((RtcTime.year < 2016) || (Rtc.ntp_sync_minute == RtcTime.minute))) || ntp_force_sync)) { + if ( (((offset == RtcTime.second) && ( (RtcTime.year < 2016) || (Rtc.ntp_sync_minute == uptime_minute))) || ntp_force_sync ) ) { Rtc.ntp_time = sntp_get_current_timestamp(); if (Rtc.ntp_time > START_VALID_TIME) { // Fix NTP bug in core 2.4.1/SDK 2.2.1 (returns Thu Jan 01 08:00:10 1970 after power on) ntp_force_sync = false; @@ -405,7 +408,8 @@ void RtcSecond(void) } } } - Rtc.utc_time++; + + Rtc.utc_time++; // Increment every second Rtc.local_time = Rtc.utc_time; if (Rtc.local_time > START_VALID_TIME) { // 2016-01-01 int16_t timezone_minutes = Settings.timezone_minutes; @@ -434,8 +438,8 @@ void RtcSecond(void) Rtc.time_timezone /= 60; if (!Settings.energy_kWhtotal_time) { Settings.energy_kWhtotal_time = Rtc.local_time; } } - BreakTime(Rtc.local_time, RtcTime); + BreakTime(Rtc.local_time, RtcTime); if (RtcTime.valid) { if (!Rtc.midnight) { Rtc.midnight = Rtc.local_time - (RtcTime.hour * 3600) - (RtcTime.minute * 60) - RtcTime.second; diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino index 4451047bd..c920c8a63 100644 --- a/tasmota/support_wifi.ino +++ b/tasmota/support_wifi.ino @@ -217,7 +217,7 @@ void WifiBegin(uint8_t flag, uint8_t channel) #endif // LWIP_IPV6=1 } -void WifiBeginAfterScan() +void WifiBeginAfterScan(void) { static int8_t best_network_db; @@ -314,12 +314,12 @@ void WifiBeginAfterScan() } } -uint16_t WifiLinkCount() +uint16_t WifiLinkCount(void) { return Wifi.link_count; } -String WifiDowntime() +String WifiDowntime(void) { return GetDuration(Wifi.downtime); } @@ -615,7 +615,6 @@ void WifiShutdown(void) void EspRestart(void) { WifiShutdown(); - RtcRebootReset(); // ESP.restart(); // This results in exception 3 on restarts on core 2.3.0 ESP.reset(); } diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index cbacfbff2..d9e55bd15 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -100,7 +100,6 @@ const uint16_t PWM_MAX = 4000; // [PWM_MAX] Maximum frequency - Def const uint16_t PWM_MIN = 100; // [PWM_MIN] Minimum frequency - Default: 100 // For Dimmers use double of your mains AC frequecy (100 for 50Hz and 120 for 60Hz) // For Controlling Servos use 50 and also set PWM_FREQ as 50 (DO NOT USE THESE VALUES FOR DIMMERS) -//#define PWM_LIGHTSCHEME0_IGNORE_SLEEP // Do not change sleep value for LightAnimate() scheme 0 const uint16_t MAX_POWER_HOLD = 10; // Time in SECONDS to allow max agreed power const uint16_t MAX_POWER_WINDOW = 30; // Time in SECONDS to disable allow max agreed power diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 4d50d9cf7..64a1125c6 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -1500,10 +1500,6 @@ void GpioInit(void) XdrvCall(FUNC_PRE_INIT); } -extern "C" { -extern struct rst_info resetInfo; -} - void setup(void) { global_state.data = 3; // Init global state (wifi_down, mqtt_down) to solve possible network issues @@ -1582,7 +1578,7 @@ void setup(void) Settings.module = SONOFF_BASIC; // Reset module to Sonoff Basic // Settings.last_module = SONOFF_BASIC; } - AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_LOG_SOME_SETTINGS_RESET " (%d)"), RtcReboot.fast_reboot_count); + AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_LOG_SOME_SETTINGS_RESET " (%d)"), RtcReboot.fast_reboot_count); } } @@ -1605,7 +1601,7 @@ void setup(void) if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) { SetDevicePower(1, SRC_RESTART); } else { - if ((resetInfo.reason == REASON_DEFAULT_RST) || (resetInfo.reason == REASON_EXT_SYS_RST)) { + if ((ResetReason() == REASON_DEFAULT_RST) || (ResetReason() == REASON_EXT_SYS_RST)) { switch (Settings.poweronstate) { case POWER_ALL_OFF: case POWER_ALL_OFF_PULSETIME_ON: @@ -1665,7 +1661,7 @@ void setup(void) XsnsCall(FUNC_INIT); } -static void BacklogLoop() +void BacklogLoop(void) { if (TimeReached(backlog_delay)) { if (!BACKLOG_EMPTY && !backlog_mutex) { diff --git a/tasmota/tasmota_post.h b/tasmota/tasmota_post.h index a68e044a6..be3b503f0 100644 --- a/tasmota/tasmota_post.h +++ b/tasmota/tasmota_post.h @@ -96,7 +96,7 @@ char* ToHex_P(const unsigned char * in, size_t insz, char * out, size_t outsz, c #define USE_BUZZER // Add support for a buzzer (+0k6 code) #define USE_ARILUX_RF // Add support for Arilux RF remote controller (+0k8 code, 252 iram (non 2.3.0)) //#define USE_SHUTTER // Add Shutter support for up to 4 shutter with different motortypes (+6k code) -//#define USE_DEEPSLEEP // Add support for deepsleep (+1k code) +#define USE_DEEPSLEEP // Add support for deepsleep (+1k code) #define USE_EXS_DIMMER // Add support for EX-Store WiFi Dimmer // -- Optional light modules ---------------------- diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 3f59c2dae..5556629f9 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -628,8 +628,10 @@ const uint8_t kGpioNiceList[] PROGMEM = { #if defined(USE_I2C) && defined(USE_ADE7953) GPIO_ADE7953_IRQ, // ADE7953 IRQ #endif +#ifdef USE_CSE7766 GPIO_CSE7766_TX, // CSE7766 Serial interface (S31 and Pow R2) GPIO_CSE7766_RX, // CSE7766 Serial interface (S31 and Pow R2) +#endif #ifdef USE_MCP39F501 GPIO_MCP39F5_TX, // MCP39F501 Serial interface (Shelly2) GPIO_MCP39F5_RX, // MCP39F501 Serial interface (Shelly2) diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index 9cd601086..4e674bf6c 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x07000004; +const uint32_t VERSION = 0x07000006; #endif // _TASMOTA_VERSION_H_ diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index 64194c9c9..e5d8aecfe 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -130,7 +130,7 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "clearTimeout(lt);" "rfsh=0;" "}" - "}" + "}"; #else // USE_SCRIPT_WEB_DISPLAY "function la(p){" "var a='';" @@ -149,21 +149,17 @@ const char HTTP_SCRIPT_ROOT[] PROGMEM = "x.open('GET','.?m=1'+a,true);" // ?m related to WebServer->hasArg("m") "x.send();" "lt=setTimeout(la,%d);" // Settings.web_refresh - "}" + "}"; #endif // USE_SCRIPT_WEB_DISPLAY -#ifdef USE_JAVASCRIPT_ES6 - "lb=(v,p)=>la(`&${v}=${p}`);" - "lc=(v,i,p)=>la(`&${v}${i}=${p}`);" -#else - "function lb(v,p){" - "la('&'+v+'='+p);" - "}" +const char HTTP_SCRIPT_ROOT_PART2[] PROGMEM = "function lc(v,i,p){" + "if(v=='h'||v=='d'){" // Hue or Brightness changed so change Saturation colors too + "var sl=eb('sl4').value;" + "eb('s').style.background='linear-gradient(to right,rgb('+sl+'%%,'+sl+'%%,'+sl+'%%),hsl('+eb('sl2').value+',100%%,50%%))';" + "}" "la('&'+v+i+'='+p);" "}" -#endif // USE_JAVASCRIPT_ES6 - "wl(la);"; const char HTTP_SCRIPT_WIFI[] PROGMEM = @@ -341,6 +337,7 @@ const char HTTP_HEAD_STYLE1[] PROGMEM = "p{margin:0.5em 0;}" "input{width:100%%;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;background:#%06x;color:#%06x;}" // COLOR_INPUT, COLOR_INPUT_TEXT "input[type=checkbox],input[type=radio]{width:1em;margin-right:6px;vertical-align:-1px;}" + "input[type=range]{width:99%%;}" "select{width:100%%;background:#%06x;color:#%06x;}" // COLOR_INPUT, COLOR_INPUT_TEXT "textarea{resize:none;width:98%%;height:318px;padding:5px;overflow:auto;background:#%06x;color:#%06x;}" // COLOR_CONSOLE, COLOR_CONSOLE_TEXT "body{text-align:center;font-family:verdana,sans-serif;background:#%06x;}" // COLOR_BACKGROUND @@ -354,7 +351,8 @@ const char HTTP_HEAD_STYLE2[] PROGMEM = ".bgrn:hover{background:#%06x;}" // COLOR_BUTTON_SAVE_HOVER "a{color:#%06x;text-decoration:none;}" // COLOR_BUTTON ".p{float:left;text-align:left;}" - ".q{float:right;text-align:right;}"; + ".q{float:right;text-align:right;}" + ".r{border-radius:0.3em;padding:2px;margin:6px 2px;}"; const char HTTP_HEAD_STYLE3[] PROGMEM = "" @@ -372,12 +370,14 @@ const char HTTP_HEAD_STYLE3[] PROGMEM = #endif "

%s

"; -const char HTTP_MSG_SLIDER1[] PROGMEM = - "
%s%s
" - "
"; -const char HTTP_MSG_SLIDER2[] PROGMEM = - "
%s%s
" - "
"; +const char HTTP_MSG_SLIDER_GRADIENT[] PROGMEM = + "
" + "" + "
"; +const char HTTP_MSG_SLIDER_SHUTTER[] PROGMEM = + "
" D_CLOSE "" D_OPEN "
" + "
"; + const char HTTP_MSG_RSTRT[] PROGMEM = "
" D_DEVICE_WILL_RESTART "

"; @@ -730,7 +730,7 @@ void _WSContentSend(const String& content) // Low level sendContent for a DEBUG_CORE_LOG(PSTR("WEB: Chunk size %d"), len); } -void WSContentFlush() +void WSContentFlush(void) { if (Web.chunk_buffer.length() > 0) { _WSContentSend(Web.chunk_buffer); // Flush chunk buffer @@ -766,9 +766,16 @@ void WSContentSend_P(const char* formatP, ...) // Content send snprintf_P ch // This uses char strings. Be aware of sending %% if % is needed va_list arg; va_start(arg, formatP); - vsnprintf_P(mqtt_data, sizeof(mqtt_data), formatP, arg); + int len = vsnprintf_P(mqtt_data, sizeof(mqtt_data), formatP, arg); va_end(arg); +#ifdef DEBUG_TASMOTA_CORE + if (len > (sizeof(mqtt_data) -1)) { + mqtt_data[33] = '\0'; + DEBUG_CORE_LOG(PSTR("ERROR: WSContentSend_P size %d > mqtt_data size %d. Start of data [%s...]"), len, sizeof(mqtt_data), mqtt_data); + } +#endif + _WSContentSendBuffer(); } @@ -780,6 +787,13 @@ void WSContentSend_PD(const char* formatP, ...) // Content send snprintf_P ch int len = vsnprintf_P(mqtt_data, sizeof(mqtt_data), formatP, arg); va_end(arg); +#ifdef DEBUG_TASMOTA_CORE + if (len > (sizeof(mqtt_data) -1)) { + mqtt_data[33] = '\0'; + DEBUG_CORE_LOG(PSTR("ERROR: WSContentSend_PD size %d > mqtt_data size %d. Start of data [%s...]"), len, sizeof(mqtt_data), mqtt_data); + } +#endif + if (D_DECIMAL_SEPARATOR[0] != '.') { for (uint32_t i = 0; i < len; i++) { if ('.' == mqtt_data[i]) { @@ -829,8 +843,16 @@ void WSContentSendStyle_P(const char* formatP, ...) // This uses char strings. Be aware of sending %% if % is needed va_list arg; va_start(arg, formatP); - vsnprintf_P(mqtt_data, sizeof(mqtt_data), formatP, arg); + int len = vsnprintf_P(mqtt_data, sizeof(mqtt_data), formatP, arg); va_end(arg); + +#ifdef DEBUG_TASMOTA_CORE + if (len > (sizeof(mqtt_data) -1)) { + mqtt_data[33] = '\0'; + DEBUG_CORE_LOG(PSTR("ERROR: WSContentSendStyle_P size %d > mqtt_data size %d. Start of data [%s...]"), len, sizeof(mqtt_data), mqtt_data); + } +#endif + _WSContentSendBuffer(); } WSContentSend_P(HTTP_HEAD_STYLE3, WebColor(COL_TEXT), @@ -982,7 +1004,7 @@ void HandleRoot(void) AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, S_MAIN_MENU); - char stemp[5]; + char stemp[10]; WSContentStart_P(S_MAIN_MENU); #ifdef USE_SCRIPT_WEB_DISPLAY @@ -990,37 +1012,83 @@ void HandleRoot(void) #else WSContentSend_P(HTTP_SCRIPT_ROOT, Settings.web_refresh); #endif + WSContentSend_P(HTTP_SCRIPT_ROOT_PART2); + WSContentSendStyle(); WSContentSend_P(PSTR("
")); if (devices_present) { #ifdef USE_LIGHT if (light_type) { + uint8_t light_subtype = light_type &7; if (!Settings.flag3.pwm_multi_channels) { // SetOption68 0 - Enable multi-channels PWM instead of Color PWM - if ((LST_COLDWARM == (light_type &7)) || (LST_RGBWC == (light_type &7))) { - // Cold - Warm &t related to lb("t", value) and WebGetArg("t", tmp, sizeof(tmp)); - WSContentSend_P(HTTP_MSG_SLIDER1, F(D_COLDLIGHT), F(D_WARMLIGHT), - 153, 500, LightGetColorTemp(), 't'); + if ((LST_COLDWARM == light_subtype) || (LST_RGBWC == light_subtype)) { + + WSContentSend_P(HTTP_MSG_SLIDER_GRADIENT, // Cold Warm + "a", // a - Unique HTML id + "#fff", "#ff0", // White to Yellow + 1, // sl1 + 153, 500, // Range color temperature + LightGetColorTemp(), + 't', 0); // t0 - Value id releated to lc("t0", value) and WebGetArg("t0", tmp, sizeof(tmp)); } - // Dark - Bright &d related to lb("d", value) and WebGetArg("d", tmp, sizeof(tmp)); - WSContentSend_P(HTTP_MSG_SLIDER1, F(D_DARKLIGHT), F(D_BRIGHTLIGHT), - 1, 100, Settings.light_dimmer, 'd'); + if (light_subtype > 2) { + uint16_t hue; + uint8_t sat; + LightGetHSB(&hue, &sat, nullptr); + + WSContentSend_P(HTTP_MSG_SLIDER_GRADIENT, // Hue + "b", // b - Unique HTML id + "#800", "#f00 5%,#ff0 20%,#0f0 35%,#0ff 50%,#00f 65%,#f0f 80%,#f00 95%,#800", // Hue colors + 2, // sl2 - Unique range HTML id - Used as source for Saturation end color + 1, 359, // Range valid Hue + hue, + 'h', 0); // h0 - Value id + + uint8_t dcolor = changeUIntScale(Settings.light_dimmer, 0, 100, 0, 255); + char scolor[8]; + snprintf_P(scolor, sizeof(scolor), PSTR("#%02X%02X%02X"), dcolor, dcolor, dcolor); // Saturation start color from Black to White + uint8_t red, green, blue; + LightHsToRgb(hue, 255, &red, &green, &blue); + snprintf_P(stemp, sizeof(stemp), PSTR("#%02X%02X%02X"), red, green, blue); // Saturation end color + + WSContentSend_P(HTTP_MSG_SLIDER_GRADIENT, // Saturation + "s", // s - Unique HTML id related to eb('s').style.background='linear-gradient(to right,rgb('+sl+'%%,'+sl+'%%,'+sl+'%%),hsl('+eb('sl2').value+',100%%,50%%))'; + scolor, stemp, // Brightness to max current color + 3, // sl3 - Unique range HTML id - Not used + 0, 100, // Range 0 to 100% + changeUIntScale(sat, 0, 255, 0, 100), + 'n', 0); // n0 - Value id + } + + WSContentSend_P(HTTP_MSG_SLIDER_GRADIENT, // Brightness - Black to White + "c", // c - Unique HTML id + "#000", "#fff", // Black to White + 4, // sl4 - Unique range HTML id - Used as source for Saturation begin color + 0, 100, // Range 0 to 100% + Settings.light_dimmer, + 'd', 0); // d0 - Value id is related to lc("d0", value) and WebGetArg("d0", tmp, sizeof(tmp)); } else { // Settings.flag3.pwm_multi_channels - SetOption68 1 - Enable multi-channels PWM instead of Color PWM - uint32_t pwm_channels = (light_type & 7) > LST_MAX ? LST_MAX : (light_type & 7); + uint32_t pwm_channels = light_subtype > LST_MAX ? LST_MAX : light_subtype; + stemp[0] = 'e'; stemp[1] = '0'; stemp[2] = '\0'; // d0 for (uint32_t i = 0; i < pwm_channels; i++) { - snprintf_P(stemp, sizeof(stemp), PSTR("c%d"), i); - WSContentSend_P(HTTP_MSG_SLIDER2, stemp, FPSTR("100%"), - 1, 100, - changeUIntScale(Settings.light_color[i], 0, 255, 0, 100), 'd', i+1); + stemp[1]++; // e1 to e5 - Make unique ids + + WSContentSend_P(HTTP_MSG_SLIDER_GRADIENT, // Channel brightness - Black to White + stemp, // e1 to e5 - Unique HTML id + "#000", "#fff", // Black to White + i+1, // sl1 to sl5 - Unique range HTML id - Not used + 1, 100, // Range 1 to 100% + changeUIntScale(Settings.light_color[i], 0, 255, 0, 100), + 'e', i+1); // e1 to e5 - Value id } } // Settings.flag3.pwm_multi_channels } -#endif +#endif // USE_LIGHT #ifdef USE_SHUTTER if (Settings.flag3.shutter_mode) { // SetOption80 - Enable shutter support for (uint32_t i = 0; i < shutters_present; i++) { - WSContentSend_P(HTTP_MSG_SLIDER2, F(D_CLOSE), F(D_OPEN), - 0, 100, Settings.shutter_position[i], 'u', i+1); + WSContentSend_P(HTTP_MSG_SLIDER_SHUTTER, Settings.shutter_position[i], i+1); } } #endif // USE_SHUTTER @@ -1117,25 +1185,35 @@ bool HandleRootStatusRefresh(void) } #endif // USE_SONOFF_IFAN } - WebGetArg("d", tmp, sizeof(tmp)); // 0 - 100 Dimmer value + WebGetArg("d0", tmp, sizeof(tmp)); // 0 - 100 Dimmer value if (strlen(tmp)) { snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_DIMMER " %s"), tmp); ExecuteWebCommand(svalue, SRC_WEBGUI); } uint32_t pwm_channels = (light_type & 7) > LST_MAX ? LST_MAX : (light_type & 7); for (uint32_t j = 1; j <= pwm_channels; j++) { - snprintf_P(webindex, sizeof(webindex), PSTR("d%d"), j); + snprintf_P(webindex, sizeof(webindex), PSTR("e%d"), j); WebGetArg(webindex, tmp, sizeof(tmp)); // 0 - 100 percent if (strlen(tmp)) { snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_CHANNEL "%d %s"), j, tmp); ExecuteWebCommand(svalue, SRC_WEBGUI); } } - WebGetArg("t", tmp, sizeof(tmp)); // 153 - 500 Color temperature + WebGetArg("t0", tmp, sizeof(tmp)); // 153 - 500 Color temperature if (strlen(tmp)) { snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_COLORTEMPERATURE " %s"), tmp); ExecuteWebCommand(svalue, SRC_WEBGUI); } + WebGetArg("h0", tmp, sizeof(tmp)); // 0 - 359 Hue value + if (strlen(tmp)) { + snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_HSBCOLOR "1 %s"), tmp); + ExecuteWebCommand(svalue, SRC_WEBGUI); + } + WebGetArg("n0", tmp, sizeof(tmp)); // 0 - 99 Saturation value + if (strlen(tmp)) { + snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_HSBCOLOR "2 %s"), tmp); + ExecuteWebCommand(svalue, SRC_WEBGUI); + } #ifdef USE_SHUTTER for (uint32_t j = 1; j <= shutters_present; j++) { snprintf_P(webindex, sizeof(webindex), PSTR("u%d"), j); diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino index c8250afbb..49f35d579 100644 --- a/tasmota/xdrv_02_mqtt.ino +++ b/tasmota/xdrv_02_mqtt.ino @@ -468,7 +468,7 @@ void MqttPublishPowerState(uint32_t device) #endif // USE_SONOFF_IFAN } -void MqttPublishAllPowerState() +void MqttPublishAllPowerState(void) { for (uint32_t i = 1; i <= devices_present; i++) { MqttPublishPowerState(i); @@ -493,7 +493,7 @@ void MqttPublishPowerBlinkState(uint32_t device) /*********************************************************************************************/ -uint16_t MqttConnectCount() +uint16_t MqttConnectCount(void) { return Mqtt.connect_count; } @@ -555,7 +555,7 @@ void MqttConnected(void) MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_INFO "2")); } #endif // USE_WEBSERVER - Response_P(PSTR("{\"" D_JSON_RESTARTREASON "\":\"%s\"}"), (GetResetReason() == "Exception") ? ESP.getResetInfo().c_str() : GetResetReason().c_str()); + Response_P(PSTR("{\"" D_JSON_RESTARTREASON "\":\"%s\"}"), GetResetReasonInfo().c_str()); MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_INFO "3")); MqttPublishAllPowerState(); if (Settings.tele_period) { @@ -1134,7 +1134,9 @@ void CmndTlsKey(void) { memcpy(spi_buffer + tls_obj_store_offset + entry->start, bin_buf, entry->len); } - TlsWriteSpiBuffer(spi_buffer); + if (ESP.flashEraseSector(tls_spi_start_sector)) { + ESP.flashWrite(tls_spi_start_sector * SPI_FLASH_SEC_SIZE, (uint32_t*) spi_buffer, SPI_FLASH_SEC_SIZE); + } free(spi_buffer); free(bin_buf); } @@ -1146,26 +1148,6 @@ void CmndTlsKey(void) { } } - -extern "C" { -#include "spi_flash.h" -} - -void TlsWriteSpiBuffer(uint8_t *buf) { - bool ret = false; - SpiFlashOpResult res; - - noInterrupts(); - res = spi_flash_erase_sector(tls_spi_start_sector); - if (SPI_FLASH_RESULT_OK == res) { - res = spi_flash_write(tls_spi_start_sector * SPI_FLASH_SEC_SIZE, (uint32_t*) buf, SPI_FLASH_SEC_SIZE); - if (SPI_FLASH_RESULT_OK == res) { - ret = true; - } - } - interrupts(); -} - #ifdef DEBUG_DUMP_TLS // Dump TLS Flash data - don't activate in production to protect your private keys uint32_t bswap32(uint32_t x) { diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 743fc82fc..6d8be5c2b 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -430,7 +430,7 @@ void EnergyMqttShow(void) } #endif // USE_ENERGY_MARGIN_DETECTION -void EnergyEverySecond() +void EnergyEverySecond(void) { // Overtemp check if (global_update) { diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index c6f6b3e33..3e06446ec 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -230,7 +230,7 @@ const uint8_t _ledTable[] = { //867,879,887,899,907,919,931,939,951,963,971,983,995,1003,1015,1023 struct LIGHT { - unsigned long strip_timer_counter = 0; // Bars and Gradient + uint32_t strip_timer_counter = 0; // Bars and Gradient power_t power = 0; // Power for each channel if SetOption68, or boolean if single light uint16_t wakeup_counter = 0; @@ -253,6 +253,16 @@ struct LIGHT { bool update = true; bool pwm_multi_channels = false; // SetOption68, treat each PWM channel as an independant dimmer + + bool fade_running = false; + uint8_t fade_start_8[LST_MAX] = {0,0,0,0,0}; + uint8_t fade_cur_8[LST_MAX]; + uint8_t fade_end_8[LST_MAX]; // 8 bits resolution target channel values + uint16_t fade_start_10[LST_MAX] = {0,0,0,0,0}; + uint16_t fade_cur_10[LST_MAX]; + uint16_t fade_end_10[LST_MAX]; // 10 bits resolution target channel values + uint16_t fade_counter = 0; // fade timer in ticks (50ms) + uint16_t fade_duration = 0; // duration of fade in ticks (50ms) } Light; power_t LightPower(void) @@ -955,11 +965,13 @@ public: } // calculate the levels for each channel - void calcLevels() { + // if no parameter, results are stored in Light.current_color + void calcLevels(uint8_t *current_color = nullptr) { uint8_t r,g,b,c,w,briRGB,briCT; + if (current_color == nullptr) { current_color = Light.current_color; } if (_pwm_multi_channels) { // if PWM multi channel, no more transformation required - _state->getChannelsRaw(Light.current_color); + _state->getChannelsRaw(current_color); return; } @@ -967,32 +979,32 @@ public: briRGB = _state->getBriRGB(); briCT = _state->getBriCT(); - Light.current_color[0] = Light.current_color[1] = Light.current_color[2] = 0; - Light.current_color[3] = Light.current_color[4] = 0; + current_color[0] = current_color[1] = current_color[2] = 0; + current_color[3] = current_color[4] = 0; switch (Light.subtype) { case LST_NONE: - Light.current_color[0] = 255; + current_color[0] = 255; break; case LST_SINGLE: - Light.current_color[0] = briRGB; + current_color[0] = briRGB; break; case LST_COLDWARM: - Light.current_color[0] = c; - Light.current_color[1] = w; + current_color[0] = c; + current_color[1] = w; break; case LST_RGBW: case LST_RGBWC: if (LST_RGBWC == Light.subtype) { - Light.current_color[3] = c; - Light.current_color[4] = w; + current_color[3] = c; + current_color[4] = w; } else { - Light.current_color[3] = briCT; + current_color[3] = briCT; } // continue case LST_RGB: - Light.current_color[0] = r; - Light.current_color[1] = g; - Light.current_color[2] = b; + current_color[0] = r; + current_color[1] = g; + current_color[2] = b; break; } } @@ -1161,7 +1173,7 @@ void LightInit(void) light_controller.setCTRGBLinked(ct_rgb_linked); } - if ((LST_SINGLE < Light.subtype) && Light.pwm_multi_channels) { + if ((LST_SINGLE <= Light.subtype) && Light.pwm_multi_channels) { // we treat each PWM channel as an independant one, hence we switch to light_controller.setPWMMultiChannel(true); Light.device = devices_present - Light.subtype + 1; // adjust if we also have relays @@ -1241,6 +1253,14 @@ void LightSetDimmer(uint8_t dimmer) { light_controller.changeDimmer(dimmer); } +uint32_t LightGetHSB(uint16_t *hue,uint8_t *sat, uint8_t *bri) { + light_state.getHSB(hue, sat, bri); +} + +void LightHsToRgb(uint16_t hue, uint8_t sat, uint8_t *r_r, uint8_t *r_g, uint8_t *r_b) { + light_state.HsToRgb(hue, sat, r_r, r_g, r_b); +} + // If SetOption68 is set, get the brightness for a specific device uint8_t LightGetBri(uint8_t device) { uint8_t bri = 254; // default value if relay @@ -1347,6 +1367,7 @@ void LightState(uint8_t append) { char scolor[LIGHT_COLOR_SIZE]; char scommand[33]; + bool unlinked = !light_controller.isCTRGBLinked() && (Light.subtype >= LST_RGBW); // there are 2 power and dimmers for RGB and White if (append) { ResponseAppend_P(PSTR(",")); @@ -1354,8 +1375,18 @@ void LightState(uint8_t append) Response_P(PSTR("{")); } if (!Light.pwm_multi_channels) { - GetPowerDevice(scommand, Light.device, sizeof(scommand), Settings.flag.device_index_enable); // SetOption26 - Switch between POWER or POWER1 - ResponseAppend_P(PSTR("\"%s\":\"%s\",\"" D_CMND_DIMMER "\":%d"), scommand, GetStateText(Light.power), light_state.getDimmer()); + if (unlinked) { + // RGB and W are unlinked, we display the second Power/Dimmer + ResponseAppend_P(PSTR("\"" D_RSLT_POWER "%d\":\"%s\",\"" D_CMND_DIMMER "%d\":%d" + ",\"" D_RSLT_POWER "%d\":\"%s\",\"" D_CMND_DIMMER "%d\":%d"), + Light.device, GetStateText(Light.power & 1), Light.device, light_state.getDimmer(1), + Light.device + 1, GetStateText(Light.power & 2 ? 1 : 0), Light.device + 1, light_state.getDimmer(2)); + } else { + GetPowerDevice(scommand, Light.device, sizeof(scommand), Settings.flag.device_index_enable); // SetOption26 - Switch between POWER or POWER1 + ResponseAppend_P(PSTR("\"%s\":\"%s\",\"" D_CMND_DIMMER "\":%d"), scommand, GetStateText(Light.power & 1), + light_state.getDimmer()); + } + if (Light.subtype > LST_SINGLE) { ResponseAppend_P(PSTR(",\"" D_CMND_COLOR "\":\"%s\""), LightGetColor(scolor)); @@ -1407,8 +1438,7 @@ void LightState(uint8_t append) } } -void LightPreparePower(void) -{ +void LightPreparePower(power_t channels = 0xFFFFFFFF) { // 1 = only RGB, 2 = only CT, 3 = both RGB and CT #ifdef DEBUG_LIGHT AddLog_P2(LOG_LEVEL_DEBUG, "LightPreparePower power=%d Light.power=%d", power, Light.power); #endif @@ -1446,20 +1476,24 @@ void LightPreparePower(void) } } else { // RGB - if (light_state.getBriRGB() && !(Light.power & 1)) { - if (!Settings.flag.not_power_linked) { // SetOption20 - Control power in relation to Dimmer/Color/Ct changes - ExecuteCommandPower(Light.device, POWER_ON_NO_STATE, SRC_LIGHT); + if (channels & 1) { + if (light_state.getBriRGB() && !(Light.power & 1)) { + if (!Settings.flag.not_power_linked) { // SetOption20 - Control power in relation to Dimmer/Color/Ct changes + ExecuteCommandPower(Light.device, POWER_ON_NO_STATE, SRC_LIGHT); + } + } else if (!light_state.getBriRGB() && (Light.power & 1)) { + ExecuteCommandPower(Light.device, POWER_OFF_NO_STATE, SRC_LIGHT); } - } else if (!light_state.getBri() && (Light.power & 1)) { - ExecuteCommandPower(Light.device, POWER_OFF_NO_STATE, SRC_LIGHT); } // White CT - if (light_state.getBriCT() && !(Light.power & 2)) { - if (!Settings.flag.not_power_linked) { // SetOption20 - Control power in relation to Dimmer/Color/Ct changes - ExecuteCommandPower(Light.device + 1, POWER_ON_NO_STATE, SRC_LIGHT); + if (channels & 2) { + if (light_state.getBriCT() && !(Light.power & 2)) { + if (!Settings.flag.not_power_linked) { // SetOption20 - Control power in relation to Dimmer/Color/Ct changes + ExecuteCommandPower(Light.device + 1, POWER_ON_NO_STATE, SRC_LIGHT); + } + } else if (!light_state.getBriCT() && (Light.power & 2)) { + ExecuteCommandPower(Light.device + 1, POWER_OFF_NO_STATE, SRC_LIGHT); } - } else if (!light_state.getBri() && (Light.power & 2)) { - ExecuteCommandPower(Light.device + 1, POWER_OFF_NO_STATE, SRC_LIGHT); } } #ifdef USE_DOMOTICZ @@ -1478,32 +1512,6 @@ void LightPreparePower(void) LightState(0); } -void LightFade(void) -{ - if (0 == Settings.light_fade) { - for (uint32_t i = 0; i < Light.subtype; i++) { - Light.new_color[i] = Light.current_color[i]; - } - } else { - uint8_t shift = Settings.light_speed; - if (Settings.light_speed > 6) { - shift = (Light.strip_timer_counter % (Settings.light_speed -6)) ? 0 : 8; - } - if (shift) { - for (uint32_t i = 0; i < Light.subtype; i++) { - if (Light.new_color[i] != Light.current_color[i]) { - if (Light.new_color[i] < Light.current_color[i]) { - Light.new_color[i] += ((Light.current_color[i] - Light.new_color[i]) >> shift) +1; - } - if (Light.new_color[i] > Light.current_color[i]) { - Light.new_color[i] -= ((Light.new_color[i] - Light.current_color[i]) >> shift) +1; - } - } - } - } - } -} - void LightWheel(uint8_t wheel_pos) { wheel_pos = 255 - wheel_pos; @@ -1554,7 +1562,8 @@ void LightRandomColor(void) LightWheel(Light.wheel); memcpy(Light.current_color, Light.entry_color, sizeof(Light.current_color)); } - LightFade(); + + memcpy(Light.new_color, Light.current_color, sizeof(Light.new_color)); } void LightSetPower(void) @@ -1588,44 +1597,29 @@ void LightSetPower(void) LightAnimate(); } +// On entry Light.new_color[5] contains the color to be displayed +// and Light.last_color[5] the color currently displayed +// Light.power tells which lights or channels (SetOption68) are on/off void LightAnimate(void) { uint8_t cur_col[LST_MAX]; uint16_t light_still_on = 0; Light.strip_timer_counter++; - if (!Light.power) { // Power Off - sleep = Settings.sleep; + if (!Light.power) { // All channels powered off Light.strip_timer_counter = 0; - for (uint32_t i = 0; i < Light.subtype; i++) { - light_still_on += Light.new_color[i]; + if (!Light.fade_running) { + sleep = Settings.sleep; } - if (light_still_on && Settings.light_fade && (Settings.light_scheme < LS_MAX)) { - uint8_t speed = Settings.light_speed; - if (speed > 6) { - speed = 6; - } - for (uint32_t i = 0; i < Light.subtype; i++) { - if (Light.new_color[i] > 0) { - Light.new_color[i] -= (Light.new_color[i] >> speed) +1; - } - } + } else { + if (Settings.sleep > PWM_MAX_SLEEP) { + sleep = PWM_MAX_SLEEP; // set a maxumum value of 50 milliseconds to ensure that animations are smooth } else { - for (uint32_t i = 0; i < Light.subtype; i++) { - Light.new_color[i] = 0; - } + sleep = Settings.sleep; // or keep the current sleep if it's lower than 50 } - } - else { -#ifdef PWM_LIGHTSCHEME0_IGNORE_SLEEP - sleep = (LS_POWER == Settings.light_scheme) ? Settings.sleep : 0; // If no animation then use sleep as is -#else - sleep = 0; -#endif // PWM_LIGHTSCHEME0_IGNORE_SLEEP switch (Settings.light_scheme) { case LS_POWER: - light_controller.calcLevels(); - LightFade(); + light_controller.calcLevels(Light.new_color); break; case LS_WAKEUP: if (2 == Light.wakeup_active) { @@ -1668,32 +1662,16 @@ void LightAnimate(void) } } - if ((Settings.light_scheme < LS_MAX) || !Light.power) { + if (Settings.light_scheme < LS_MAX) { // exclude WS281X Neopixel - // If SetOption68, multi_channels - if (Light.pwm_multi_channels) { - // if multi-channels, specifically apply the Light.power bits - for (uint32_t i = 0; i < LST_MAX; i++) { - if (0 == bitRead(Light.power,i)) { // if power down bit is zero - Light.new_color[i] = 0; // shut down this channel - } - } - // #ifdef DEBUG_LIGHT - // AddLog_P2(LOG_LEVEL_DEBUG_MORE, "Animate>> Light.power=%d Light.new_color=[%d,%d,%d,%d,%d]", - // Light.power, Light.new_color[0], Light.new_color[1], Light.new_color[2], - // Light.new_color[3], Light.new_color[4]); - // #endif - } else { - if (!light_controller.isCTRGBLinked()) { - // we have 2 power bits for RGB and White - if (0 == (Light.power & 1)) { - Light.new_color[0] = Light.new_color[1] = Light.new_color[2] = 0; - } - if (0 == (Light.power & 2)) { - Light.new_color[3] = Light.new_color[4] = 0; - } - } - } + // Apply power modifiers to Light.new_color + LightApplyPower(Light.new_color, Light.power); + + // AddLog_P2(LOG_LEVEL_INFO, PSTR("last_color (%02X%02X%02X%02X%02X) new_color (%02X%02X%02X%02X%02X) power %d"), + // Light.last_color[0], Light.last_color[1], Light.last_color[2], Light.last_color[3], Light.last_color[4], + // Light.new_color[0], Light.new_color[1], Light.new_color[2], Light.new_color[3], Light.new_color[4], + // Light.power + // ); if (memcmp(Light.last_color, Light.new_color, Light.subtype)) { Light.update = true; @@ -1724,7 +1702,8 @@ void LightAnimate(void) uint8_t min_rgb = min3(cur_col[0], cur_col[1], cur_col[2]); for (uint32_t i=0; i<3; i++) { // substract white and adjust according to rgbwwTable - cur_col_10bits[i] = changeUIntScale(cur_col_10bits[i] - min_rgb_10, 0, 255, 0, Settings.rgbwwTable[i]); + uint32_t adjust10 = changeUIntScale(Settings.rgbwwTable[i], 0, 255, 0, 1023); + cur_col_10bits[i] = changeUIntScale(cur_col_10bits[i] - min_rgb_10, 0, 1023, 0, adjust10); cur_col[i] = changeUIntScale(cur_col[i] - min_rgb, 0, 255, 0, Settings.rgbwwTable[i]); } // compute the adjusted white levels for 10 and 8 bits @@ -1768,41 +1747,151 @@ void LightAnimate(void) cur_col_10bits[i] = orig_col_10bits[Light.color_remap[i]]; } - // now apply the actual PWM values, adjusted and remapped 10-bits range - if (light_type < LT_PWM6) { // only for direct PWM lights, not for Tuya, Armtronix... - for (uint32_t i = 0; i < (Light.subtype - Light.pwm_offset); i++) { - if (pin[GPIO_PWM1 +i] < 99) { - //AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "Cur_Col%d 10 bits %d, Pwm%d %d"), i, cur_col_10bits[i], i+1, cur_col[i]); - analogWrite(pin[GPIO_PWM1 +i], bitRead(pwm_inverted, i) ? Settings.pwm_range - cur_col_10bits[(i + Light.pwm_offset)] : cur_col_10bits[(i + Light.pwm_offset)]); - } + if (!Settings.light_fade) { // no fade + // record the current value for a future Fade + memcpy(Light.fade_start_8, cur_col, sizeof(Light.fade_start_8)); + memcpy(Light.fade_start_10, cur_col_10bits, sizeof(Light.fade_start_10)); + // push the final values at 8 and 10 bits resolution to the PWMs + LightSetOutputs(cur_col, cur_col_10bits); + } else { // fade on + if (Light.fade_running) { + // if fade is running, we take the curring value as the start for the next fade + memcpy(Light.fade_start_8, Light.fade_cur_8, sizeof(Light.fade_start_8)); + memcpy(Light.fade_start_10, Light.fade_cur_10, sizeof(Light.fade_start_10)); } + memcpy(Light.fade_end_8, cur_col, sizeof(Light.fade_start_8)); + memcpy(Light.fade_end_10, cur_col_10bits, sizeof(Light.fade_start_10)); + Light.fade_running = true; + Light.fade_counter = 0; + Light.fade_duration = 0; // set the value to zero to force a recompute + // Fade will applied immediately below } + } + if (Light.fade_running) { + LightApplyFade(); + // AddLog_P2(LOG_LEVEL_INFO, PSTR("LightApplyFade %d %d %d %d %d - %d %d %d %d %d"), + // Light.fade_cur_8[0], Light.fade_cur_8[1], Light.fade_cur_8[2], Light.fade_cur_8[3], Light.fade_cur_8[4], + // Light.fade_cur_10[0], Light.fade_cur_10[1], Light.fade_cur_10[2], Light.fade_cur_10[3], Light.fade_cur_10[4]); - // Some devices need scaled RGB like Sonoff L1 - uint8_t scale_col[3]; - uint32_t max = (cur_col[0] > cur_col[1] && cur_col[0] > cur_col[2]) ? cur_col[0] : (cur_col[1] > cur_col[2]) ? cur_col[1] : cur_col[2]; // 0..255 - for (uint32_t i = 0; i < 3; i++) { - scale_col[i] = (0 == max) ? 255 : (255 > max) ? changeUIntScale(cur_col[i], 0, max, 0, 255) : cur_col[i]; - } -// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("LGT: R%d(%d) G%d(%d) B%d(%d), C%d W%d, D%d"), -// cur_col[0], scale_col[0], cur_col[1], scale_col[1], cur_col[2], scale_col[2], cur_col[3], cur_col[4], light_state.getDimmer()); - - char *tmp_data = XdrvMailbox.data; - char *tmp_topic = XdrvMailbox.topic; - XdrvMailbox.data = (char*)cur_col; - XdrvMailbox.topic = (char*)scale_col; - if (XlgtCall(FUNC_SET_CHANNELS)) { - // Serviced - } - else if (XdrvCall(FUNC_SET_CHANNELS)) { - // Serviced - } - XdrvMailbox.data = tmp_data; - XdrvMailbox.topic = tmp_topic; + LightSetOutputs(Light.fade_cur_8, Light.fade_cur_10); } } } +void LightApplyFade(void) { + + // Check if we need to calculate the duration + if (0 == Light.fade_duration) { + Light.fade_counter = 0; + // compute the distance between start and and color (max of distance for each channel) + uint32_t distance = 0; + for (uint32_t i = 0; i < Light.subtype; i++) { + int32_t channel_distance = Light.fade_end_10[i] - Light.fade_start_10[i]; + if (channel_distance < 0) { channel_distance = - channel_distance; } + if (channel_distance > distance) { distance = channel_distance; } + } + if (distance > 0) { + // compute the duration of the animation + // Note: Settings.light_speed is the number of half-seconds for a 100% fade, + // i.e. light_speed=1 means 1024 steps in 10 ticks (500ms) + Light.fade_duration = (distance * Settings.light_speed * 10) / 1024; + } else { + // no fade needed, we keep the duration at zero, it will fallback directly to end of fade + } + } + + Light.fade_counter++; + if (Light.fade_counter <= Light.fade_duration) { // fade not finished + for (uint32_t i = 0; i < Light.subtype; i++) { + Light.fade_cur_8[i] = changeUIntScale(Light.fade_counter, + 0, Light.fade_duration, + Light.fade_start_8[i], Light.fade_end_8[i]); + Light.fade_cur_10[i] = changeUIntScale(Light.fade_counter, + 0, Light.fade_duration, + Light.fade_start_10[i], Light.fade_end_10[i]); + } + } else { + // stop fade +//AddLop_P2(LOG_LEVEL_DEBUG, PSTR("Stop fade")); + Light.fade_running = false; + Light.fade_counter = 0; + Light.fade_duration = 0; + // set light to target value + memcpy(Light.fade_cur_8, Light.fade_end_8, sizeof(Light.fade_end_8)); + memcpy(Light.fade_cur_10, Light.fade_end_10, sizeof(Light.fade_end_10)); + // record the last value for next start + memcpy(Light.fade_start_8, Light.fade_end_8, sizeof(Light.fade_start_8)); + memcpy(Light.fade_start_10, Light.fade_end_10, sizeof(Light.fade_start_10)); + } + +} + +// On entry we take the 5 channels 8 bits entry, and we apply Power modifiers +// I.e. shut down channels that are powered down +void LightApplyPower(uint8_t new_color[LST_MAX], power_t power) { + // If SetOption68, multi_channels + if (Light.pwm_multi_channels) { + // if multi-channels, specifically apply the Light.power bits + for (uint32_t i = 0; i < LST_MAX; i++) { + if (0 == bitRead(power,i)) { // if power down bit is zero + new_color[i] = 0; // shut down this channel + } + } + // #ifdef DEBUG_LIGHT + // AddLog_P2(LOG_LEVEL_DEBUG_MORE, "Animate>> Light.power=%d Light.new_color=[%d,%d,%d,%d,%d]", + // Light.power, Light.new_color[0], Light.new_color[1], Light.new_color[2], + // Light.new_color[3], Light.new_color[4]); + // #endif + } else { + if (!light_controller.isCTRGBLinked()) { + // we have 2 power bits for RGB and White + if (0 == (power & 1)) { + new_color[0] = new_color[1] = new_color[2] = 0; + } + if (0 == (power & 2)) { + new_color[3] = new_color[4] = 0; + } + } else if (!power) { + for (uint32_t i = 0; i < LST_MAX; i++) { + new_color[i] = 0; + } + } + } +} + +void LightSetOutputs(const uint8_t *cur_col, const uint16_t *cur_col_10bits) { + // now apply the actual PWM values, adjusted and remapped 10-bits range + if (light_type < LT_PWM6) { // only for direct PWM lights, not for Tuya, Armtronix... + for (uint32_t i = 0; i < (Light.subtype - Light.pwm_offset); i++) { + if (pin[GPIO_PWM1 +i] < 99) { + //AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "Cur_Col%d 10 bits %d, Pwm%d %d"), i, cur_col_10bits[i], i+1, cur_col[i]); + analogWrite(pin[GPIO_PWM1 +i], bitRead(pwm_inverted, i) ? Settings.pwm_range - cur_col_10bits[(i + Light.pwm_offset)] : cur_col_10bits[(i + Light.pwm_offset)]); + } + } + } + // AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("LGT: R %02X(%d) G %02X(%d) B %02X(%d), CW %02X(%d) WW %02x(%d), D %d"), + // cur_col[0], cur_col_10bits[0], cur_col[1], cur_col_10bits[1], cur_col[2], cur_col_10bits[2], cur_col[3], cur_col_10bits[3], cur_col[4], cur_col_10bits[4], light_state.getDimmer()); + + // Some devices need scaled RGB like Sonoff L1 + // TODO, should be probably moved to the Sonoff L1 support code + uint8_t scale_col[3]; + uint32_t max = (cur_col[0] > cur_col[1] && cur_col[0] > cur_col[2]) ? cur_col[0] : (cur_col[1] > cur_col[2]) ? cur_col[1] : cur_col[2]; // 0..255 + for (uint32_t i = 0; i < 3; i++) { + scale_col[i] = (0 == max) ? 255 : (255 > max) ? changeUIntScale(cur_col[i], 0, max, 0, 255) : cur_col[i]; + } + // AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR("LGT: R%d(%d) G%d(%d) B%d(%d), C%d(%d) W%d(%d), D%d"), + // cur_col[0], scale_col[0], cur_col[1], scale_col[1], cur_col[2], scale_col[2], cur_col[3], scale_col[3], cur_col[4], scale_col[4], light_state.getDimmer()); + + char *tmp_data = XdrvMailbox.data; + char *tmp_topic = XdrvMailbox.topic; + XdrvMailbox.data = (char*)cur_col; + XdrvMailbox.topic = (char*)scale_col; + if (XlgtCall(FUNC_SET_CHANNELS)) { /* Serviced */ } + else if (XdrvCall(FUNC_SET_CHANNELS)) { /* Serviced */ } + XdrvMailbox.data = tmp_data; + XdrvMailbox.topic = tmp_topic; +} + // Do specific computation is SetOption73 is on, Color Temp is a separate PWM channel void calcGammaCTPwm(uint8_t cur_col[5], uint16_t cur_col_10bits[5]) { // Xiaomi Philips bulbs follow a different scheme: @@ -1912,7 +2001,7 @@ bool LightColorEntry(char *buffer, uint32_t buffer_length) memset(&Light.entry_color, 0x00, sizeof(Light.entry_color)); // erase all channels except if the last character is '=', #6799 while ((buffer_length > 0) && ('=' == buffer[buffer_length - 1])) { - buffer_length--; // remove all trailing '=' + buffer_length--; // remove all trailing '=' memcpy(&Light.entry_color, &Light.current_color, sizeof(Light.entry_color)); } if (strstr(buffer, ",") != nullptr) { // Decimal entry @@ -2000,7 +2089,7 @@ void CmndSupportColor(void) ResponseCmndIdxChar(scolor); } if (coldim) { - LightPreparePower(); + LightPreparePower(); // no parameter, recalculate Power for all channels } } @@ -2031,11 +2120,12 @@ void CmndWhite(void) void CmndChannel(void) { if ((XdrvMailbox.index >= Light.device) && (XdrvMailbox.index < Light.device + Light.subtype )) { - bool coldim = false; + uint32_t light_index = XdrvMailbox.index - Light.device; + power_t coldim = 0; // bit flag to update // Handle +/- special command if (1 == XdrvMailbox.data_len) { - uint8_t channel = changeUIntScale(Light.current_color[XdrvMailbox.index - Light.device],0,255,0,100); + uint8_t channel = changeUIntScale(Light.current_color[light_index],0,255,0,100); if ('+' == XdrvMailbox.data[0]) { XdrvMailbox.payload = (channel > 89) ? 100 : channel + 10; } else if ('-' == XdrvMailbox.data[0]) { @@ -2045,23 +2135,28 @@ void CmndChannel(void) // Set "Channel" directly - this allows Color and Direct PWM control to coexist if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) { - Light.current_color[XdrvMailbox.index - Light.device] = changeUIntScale(XdrvMailbox.payload,0,100,0,255); + Light.current_color[light_index] = changeUIntScale(XdrvMailbox.payload,0,100,0,255); if (Light.pwm_multi_channels) { - // if (!Settings.flag.not_power_linked) { // SetOption20 - Control power in relation to Dimmer/Color/Ct changes - // Light.power = Light.power | (1 << (XdrvMailbox.index - Light.device)); // ask to turn on channel - // } + coldim = 1 << light_index; // change the specified channel } else { - // if we change channels 1,2,3 then turn off CT mode (unless non-linked) - if ((XdrvMailbox.index <= 3) && (light_controller.isCTRGBLinked())) { - Light.current_color[3] = Light.current_color[4] = 0; + if (light_controller.isCTRGBLinked()) { + // if we change channels 1,2,3 then turn off CT mode (unless non-linked) + if ((light_index < 3) && (light_controller.isCTRGBLinked())) { + Light.current_color[3] = Light.current_color[4] = 0; + } else { + Light.current_color[0] = Light.current_color[1] = Light.current_color[2] = 0; + } + coldim = 1; + } else { + if (light_index < 3) { coldim = 1; } // RGB + else { coldim = 2; } // CT } } light_controller.changeChannels(Light.current_color); - coldim = true; } - ResponseCmndIdxNumber(changeUIntScale(Light.current_color[XdrvMailbox.index -1],0,255,0,100)); + ResponseCmndIdxNumber(changeUIntScale(Light.current_color[light_index],0,255,0,100)); if (coldim) { - LightPreparePower(); + LightPreparePower(coldim); } } } @@ -2108,7 +2203,7 @@ void CmndHsbColor(void) } if (validHSB) { light_controller.changeHSB(HSB[0], HSB[1], HSB[2]); - LightPreparePower(); + LightPreparePower(1); MqttPublishPrefixTopic_P(RESULT_OR_STAT, PSTR(D_CMND_COLOR)); } } else { @@ -2171,7 +2266,7 @@ void CmndColorTemperature(void) } if ((XdrvMailbox.payload >= 153) && (XdrvMailbox.payload <= 500)) { // https://developers.meethue.com/documentation/core-concepts light_controller.changeCTB(XdrvMailbox.payload, light_state.getBri()); - LightPreparePower(); + LightPreparePower(2); } else { ResponseCmndNumber(ct); } @@ -2201,17 +2296,19 @@ void CmndDimmer(void) if (light_controller.isCTRGBLinked()) { // normal state, linked RGB and CW light_controller.changeDimmer(XdrvMailbox.payload); + LightPreparePower(); } else { if (0 != XdrvMailbox.index) { light_controller.changeDimmer(XdrvMailbox.payload, XdrvMailbox.index); + LightPreparePower(1 << (XdrvMailbox.index - 1)); // recalculate only the target dimmer } else { // change both dimmers light_controller.changeDimmer(XdrvMailbox.payload, 1); light_controller.changeDimmer(XdrvMailbox.payload, 2); + LightPreparePower(); } } Light.update = true; - LightPreparePower(); } else { ResponseCmndNumber(dimmer); } @@ -2297,20 +2394,21 @@ void CmndFade(void) Settings.light_fade ^= 1; break; } + if (!Settings.light_fade) { Light.fade_running = false; } ResponseCmndStateText(Settings.light_fade); } void CmndSpeed(void) -{ // 1 - fast, 20 - very slow +{ // 1 - fast, 40 - very slow if (1 == XdrvMailbox.data_len) { if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) { - XdrvMailbox.payload = Settings.light_speed -1; + XdrvMailbox.payload = Settings.light_speed - 1; } - else if (('-' == XdrvMailbox.data[0]) && (Settings.light_speed < STATES)) { - XdrvMailbox.payload = Settings.light_speed +1; + else if (('-' == XdrvMailbox.data[0]) && (Settings.light_speed < 40)) { + XdrvMailbox.payload = Settings.light_speed + 1; } } - if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= STATES)) { + if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) { Settings.light_speed = XdrvMailbox.payload; } ResponseCmndNumber(Settings.light_speed); diff --git a/tasmota/xdrv_05_irremote.ino b/tasmota/xdrv_05_irremote.ino index 7ac3d0ca8..7c66c4b98 100644 --- a/tasmota/xdrv_05_irremote.ino +++ b/tasmota/xdrv_05_irremote.ino @@ -26,15 +26,16 @@ #include -enum IrErrors { IE_NO_ERROR, IE_INVALID_RAWDATA, IE_INVALID_JSON, IE_SYNTAX_IRSEND, IE_SYNTAX_IRHVAC }; +enum IrErrors { IE_NO_ERROR, IE_INVALID_RAWDATA, IE_INVALID_JSON, IE_SYNTAX_IRSEND }; const char kIrRemoteCommands[] PROGMEM = "|" D_CMND_IRSEND ; -void (* const IrRemoteCommand[])(void) PROGMEM = { &CmndIrSend }; +// Keep below IrRemoteCommand lines exactly as below as otherwise Arduino IDE prototyping will fail (#6982) +void (* const IrRemoteCommand[])(void) PROGMEM = { + &CmndIrSend }; // Based on IRremoteESP8266.h enum decode_type_t -static const uint8_t MAX_STANDARD_IR = SHARP; // this is the last code mapped to decode_type_t -enum IrVendors { IR_BASE = MAX_STANDARD_IR }; +static const uint8_t MAX_STANDARD_IR = NEC; // this is the last code mapped to decode_type_t const char kIrRemoteProtocols[] PROGMEM = "UNKNOWN|RC5|RC6|NEC"; /*********************************************************************************************\ @@ -66,7 +67,7 @@ IRrecv *irrecv = nullptr; unsigned long ir_lasttime = 0; -void IrReceiveUpdateThreshold() +void IrReceiveUpdateThreshold(void) { if (irrecv != nullptr) { if (Settings.param[P_IR_UNKNOW_THRESHOLD] < 6) { Settings.param[P_IR_UNKNOW_THRESHOLD] = 6; } @@ -86,7 +87,7 @@ void IrReceiveInit(void) void IrReceiveCheck(void) { - char sirtype[14]; // Max is AIWA_RC_T501 + char sirtype[8]; // Max is UNKNOWN int8_t iridx = 0; decode_results results; @@ -95,7 +96,7 @@ void IrReceiveCheck(void) char hvalue[65]; // Max 256 bits iridx = results.decode_type; - if ((iridx < 0) || (iridx > 14)) { iridx = 0; } // UNKNOWN + if ((iridx < 0) || (iridx > MAX_STANDARD_IR)) { iridx = 0; } // UNKNOWN if (iridx) { if (results.bits > 64) { diff --git a/tasmota/xdrv_05_irremote_full.ino b/tasmota/xdrv_05_irremote_full.ino index 5cb6d1d00..d01291c7c 100644 --- a/tasmota/xdrv_05_irremote_full.ino +++ b/tasmota/xdrv_05_irremote_full.ino @@ -33,9 +33,11 @@ enum IrErrors { IE_RESPONSE_PROVIDED, IE_NO_ERROR, IE_INVALID_RAWDATA, IE_INVALID_JSON, IE_SYNTAX_IRSEND, IE_SYNTAX_IRHVAC, IE_UNSUPPORTED_HVAC, IE_UNSUPPORTED_PROTOCOL }; -const char kIrRemoteCommands[] PROGMEM = "|" D_CMND_IRHVAC "|" D_CMND_IRSEND ; // No prefix +const char kIrRemoteCommands[] PROGMEM = "|" + D_CMND_IRHVAC "|" D_CMND_IRSEND ; // No prefix -void (* const IrRemoteCommand[])(void) PROGMEM = { &CmndIrHvac, &CmndIrSend }; +void (* const IrRemoteCommand[])(void) PROGMEM = { + &CmndIrHvac, &CmndIrSend }; /*********************************************************************************************\ * IR Send @@ -92,7 +94,7 @@ IRrecv *irrecv = nullptr; unsigned long ir_lasttime = 0; -void IrReceiveUpdateThreshold() +void IrReceiveUpdateThreshold(void) { if (irrecv != nullptr) { if (Settings.param[P_IR_UNKNOW_THRESHOLD] < 6) { Settings.param[P_IR_UNKNOW_THRESHOLD] = 6; } diff --git a/tasmota/xdrv_07_domoticz.ino b/tasmota/xdrv_07_domoticz.ino index 64f222e6e..f5e8af19c 100644 --- a/tasmota/xdrv_07_domoticz.ino +++ b/tasmota/xdrv_07_domoticz.ino @@ -80,7 +80,7 @@ int DomoticzRssiQuality(void) } #ifdef USE_SONOFF_IFAN -void MqttPublishDomoticzFanState() +void MqttPublishDomoticzFanState(void) { if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[1]) { // SetOption3 - Enable MQTT char svalue[8]; // Fanspeed value @@ -94,7 +94,7 @@ void MqttPublishDomoticzFanState() } } -void DomoticzUpdateFanState() +void DomoticzUpdateFanState(void) { if (domoticz_update_flag) { MqttPublishDomoticzFanState(); diff --git a/tasmota/xdrv_08_serial_bridge.ino b/tasmota/xdrv_08_serial_bridge.ino index df4eafdd8..2d9856186 100644 --- a/tasmota/xdrv_08_serial_bridge.ino +++ b/tasmota/xdrv_08_serial_bridge.ino @@ -29,8 +29,8 @@ const uint8_t SERIAL_BRIDGE_BUFFER_SIZE = 130; const char kSerialBridgeCommands[] PROGMEM = "|" // No prefix D_CMND_SSERIALSEND "|" D_CMND_SBAUDRATE; -void (* const SerialBridgeCommand[])(void) PROGMEM = - { &CmndSSerialSend, &CmndSBaudrate }; +void (* const SerialBridgeCommand[])(void) PROGMEM = { + &CmndSSerialSend, &CmndSBaudrate }; #include diff --git a/tasmota/xdrv_09_timers.ino b/tasmota/xdrv_09_timers.ino index 83f830379..a71960695 100644 --- a/tasmota/xdrv_09_timers.ino +++ b/tasmota/xdrv_09_timers.ino @@ -497,9 +497,7 @@ void CmndLongitude(void) if (XdrvMailbox.data_len) { Settings.longitude = (int)(CharToFloat(XdrvMailbox.data) *1000000); } - char lbuff[33]; - dtostrfd(((float)Settings.longitude) /1000000, 6, lbuff); - ResponseCmndChar(lbuff); + ResponseCmndFloat((float)(Settings.longitude) /1000000, 6); } void CmndLatitude(void) @@ -507,9 +505,7 @@ void CmndLatitude(void) if (XdrvMailbox.data_len) { Settings.latitude = (int)(CharToFloat(XdrvMailbox.data) *1000000); } - char lbuff[33]; - dtostrfd(((float)Settings.latitude) /1000000, 6, lbuff); - ResponseCmndChar(lbuff); + ResponseCmndFloat((float)(Settings.latitude) /1000000, 6); } #endif // USE_SUNRISE diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index 64ae42f1c..4025ef5d4 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -1226,7 +1226,7 @@ float evaluateExpression(const char * expression, unsigned int len) #endif // USE_EXPRESSION #ifdef SUPPORT_IF_STATEMENT -void CmndIf() +void CmndIf(void) { if (XdrvMailbox.data_len > 0) { char parameters[XdrvMailbox.data_len+1]; diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino old mode 100644 new mode 100755 index 26584d7d7..0bab141d7 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -1059,6 +1059,19 @@ char *isvar(char *lp, uint8_t *vtype,struct T_INDEX *tind,float *fp,char *sp,Jso chknext: switch (vname[0]) { + case 'a': +#ifdef USE_ANGLE_FUNC + if (!strncmp(vname,"acos(",5)) { + lp+=5; + lp=GetNumericResult(lp,OPER_EQU,&fvar,0); + fvar=acosf(fvar); + lp++; + len=0; + goto exit; + } +#endif + break; + case 'b': if (!strncmp(vname,"boot",4)) { if (rules_flag.system_boot) { @@ -1678,6 +1691,24 @@ chknext: len+=1; goto exit; } +#endif +#ifdef USE_ANGLE_FUNC + if (!strncmp(vname,"sin(",4)) { + lp+=4; + lp=GetNumericResult(lp,OPER_EQU,&fvar,0); + fvar=sinf(fvar); + lp++; + len=0; + goto exit; + } + if (!strncmp(vname,"sqrt(",5)) { + lp+=5; + lp=GetNumericResult(lp,OPER_EQU,&fvar,0); + fvar=sqrtf(fvar); + lp++; + len=0; + goto exit; + } #endif break; case 't': @@ -4730,8 +4761,8 @@ bool Xdrv10(uint8_t function) #ifdef USE_24C256 #ifndef USE_SCRIPT_FATFS - if (I2cEnabled(XI2C_37)) { - if (I2cSetDevice(EEPROM_ADDRESS)) { + if (I2cEnabled(XI2C_37)) { + if (I2cSetDevice(EEPROM_ADDRESS)) { // found 32kb eeprom char *script; script=(char*)calloc(EEP_SCRIPT_SIZE+4,1); diff --git a/tasmota/xdrv_17_rcswitch.ino b/tasmota/xdrv_17_rcswitch.ino index 88e2ebbca..dfe5dc66a 100644 --- a/tasmota/xdrv_17_rcswitch.ino +++ b/tasmota/xdrv_17_rcswitch.ino @@ -35,8 +35,8 @@ const char kRfSendCommands[] PROGMEM = "|" // No prefix D_CMND_RFSEND; -void (* const RfSendCommand[])(void) PROGMEM = - { &CmndRfSend }; +void (* const RfSendCommand[])(void) PROGMEM = { + &CmndRfSend }; #include diff --git a/tasmota/xdrv_22_sonoff_ifan.ino b/tasmota/xdrv_22_sonoff_ifan.ino index 2c1031e23..b260952f4 100644 --- a/tasmota/xdrv_22_sonoff_ifan.ino +++ b/tasmota/xdrv_22_sonoff_ifan.ino @@ -33,8 +33,8 @@ const uint8_t kIFan03Sequence[MAX_FAN_SPEED][MAX_FAN_SPEED] = {{0, 2, 2, 2}, {0, const char kSonoffIfanCommands[] PROGMEM = "|" // No prefix D_CMND_FANSPEED; -void (* const SonoffIfanCommand[])(void) PROGMEM = - { &CmndFanspeed }; +void (* const SonoffIfanCommand[])(void) PROGMEM = { + &CmndFanspeed }; uint8_t ifan_fanspeed_timer = 0; uint8_t ifan_fanspeed_goal = 0; @@ -43,7 +43,7 @@ bool ifan_restart_flag = true; /*********************************************************************************************/ -bool IsModuleIfan() +bool IsModuleIfan(void) { return ((SONOFF_IFAN02 == my_module_type) || (SONOFF_IFAN03 == my_module_type)); } diff --git a/tasmota/xdrv_23_zigbee_9_impl.ino b/tasmota/xdrv_23_zigbee_9_impl.ino index 41a73b415..1cd3955ce 100644 --- a/tasmota/xdrv_23_zigbee_9_impl.ino +++ b/tasmota/xdrv_23_zigbee_9_impl.ino @@ -36,13 +36,15 @@ TasmotaSerial *ZigbeeSerial = nullptr; #endif -const char kZigbeeCommands[] PROGMEM = "|" D_CMND_ZIGBEEZNPSEND "|" D_CMND_ZIGBEE_PERMITJOIN - "|" D_CMND_ZIGBEE_STATUS "|" D_CMND_ZIGBEE_RESET "|" D_CMND_ZIGBEE_SEND - "|" D_CMND_ZIGBEE_PROBE "|" D_CMND_ZIGBEE_READ ; +const char kZigbeeCommands[] PROGMEM = "|" + D_CMND_ZIGBEEZNPSEND "|" D_CMND_ZIGBEE_PERMITJOIN "|" + D_CMND_ZIGBEE_STATUS "|" D_CMND_ZIGBEE_RESET "|" D_CMND_ZIGBEE_SEND "|" + D_CMND_ZIGBEE_PROBE "|" D_CMND_ZIGBEE_READ ; -void (* const ZigbeeCommand[])(void) PROGMEM = { &CmndZigbeeZNPSend, &CmndZigbeePermitJoin, - &CmndZigbeeStatus, &CmndZigbeeReset, &CmndZigbeeSend, - &CmndZigbeeProbe, &CmndZigbeeRead }; +void (* const ZigbeeCommand[])(void) PROGMEM = { + &CmndZigbeeZNPSend, &CmndZigbeePermitJoin, + &CmndZigbeeStatus, &CmndZigbeeReset, &CmndZigbeeSend, + &CmndZigbeeProbe, &CmndZigbeeRead }; int32_t ZigbeeProcessInput(class SBuffer &buf) { if (!zigbee.state_machine) { return -1; } // if state machine is stopped, send 'ignore' message @@ -260,7 +262,7 @@ uint32_t strToUInt(const JsonVariant val) { return 0; // couldn't parse anything } -const unsigned char ZIGBEE_FACTORY_RESET[] PROGMEM = +const unsigned char ZIGBEE_FACTORY_RESET[] PROGMEM = { Z_SREQ | Z_SAPI, SAPI_WRITE_CONFIGURATION, CONF_STARTUP_OPTION, 0x01 /* len */, 0x01 /* STARTOPT_CLEAR_CONFIG */}; //"2605030101"; // Z_SREQ | Z_SAPI, SAPI_WRITE_CONFIGURATION, CONF_STARTUP_OPTION, 0x01 len, 0x01 STARTOPT_CLEAR_CONFIG // Do a factory reset of the CC2530 diff --git a/tasmota/xdrv_28_pcf8574.ino b/tasmota/xdrv_28_pcf8574.ino index 9448f6e6d..212217a49 100644 --- a/tasmota/xdrv_28_pcf8574.ino +++ b/tasmota/xdrv_28_pcf8574.ino @@ -72,7 +72,7 @@ void Pcf8574SwitchRelay(void) } } -void Pcf8574Init() +void Pcf8574Init(void) { uint8_t pcf8574_address = PCF8574_ADDR1; while ((Pcf8574.max_devices < MAX_PCF8574) && (pcf8574_address < PCF8574_ADDR2 +8)) { @@ -178,7 +178,7 @@ void HandlePcf8574(void) WSContentStop(); } -void Pcf8574SaveSettings() +void Pcf8574SaveSettings(void) { char stemp[7]; char tmp[100]; diff --git a/tasmota/xdrv_29_deepsleep.ino b/tasmota/xdrv_29_deepsleep.ino index 11987518c..c830a092e 100644 --- a/tasmota/xdrv_29_deepsleep.ino +++ b/tasmota/xdrv_29_deepsleep.ino @@ -30,12 +30,14 @@ #define XDRV_29 29 -#define MAX_DEEPSLEEP_CYCLE 3600 // Maximum time for a deepsleep -#define MIN_DEEPSLEEP_TIME 5 - #define D_PRFX_DEEPSLEEP "DeepSleep" #define D_CMND_DEEPSLEEP_TIME "Time" +const uint32_t DEEPSLEEP_MAX = 10 * 366 * 24 * 60 * 60; // Allow max 10 years sleep +const uint32_t DEEPSLEEP_MAX_CYCLE = 60 * 60; // Maximum time for a deepsleep as defined by chip hardware +const uint32_t DEEPSLEEP_MIN_TIME = 5; // Allow 5 seconds skew +const uint32_t DEEPSLEEP_START_COUNTDOWN = 4; // Allow 4 seconds to update web console before deepsleep + const char kDeepsleepCommands[] PROGMEM = D_PRFX_DEEPSLEEP "|" D_CMND_DEEPSLEEP_TIME ; @@ -47,28 +49,29 @@ uint8_t deepsleep_flag = 0; bool DeepSleepEnabled(void) { - if (Settings.deepsleep < 10) { - return false; + if ((Settings.deepsleep < 10) || (Settings.deepsleep > DEEPSLEEP_MAX)) { + Settings.deepsleep = 0; // Issue #6961 + return false; // Disabled } if (pin[GPIO_DEEPSLEEP] < 99) { pinMode(pin[GPIO_DEEPSLEEP], INPUT_PULLUP); - return (digitalRead(pin[GPIO_DEEPSLEEP])); // Disable DeepSleep if user holds pin GPIO_DEEPSLEEP low + return (digitalRead(pin[GPIO_DEEPSLEEP])); // Disable DeepSleep if user holds pin GPIO_DEEPSLEEP low } - return true; + return true; // Enabled } -void DeepSleepInit(void) +void DeepSleepReInit(void) { - if (DeepSleepEnabled()) { - RtcRebootReset(); - if ((RtcSettings.ultradeepsleep > MAX_DEEPSLEEP_CYCLE) && (RtcSettings.ultradeepsleep < 1700000000)) { + if ((ResetReason() == REASON_DEEP_SLEEP_AWAKE) && DeepSleepEnabled()) { + if ((RtcSettings.ultradeepsleep > DEEPSLEEP_MAX_CYCLE) && (RtcSettings.ultradeepsleep < 1700000000)) { // Go back to sleep after 60 minutes if requested deepsleep has not been reached - RtcSettings.ultradeepsleep = RtcSettings.ultradeepsleep - MAX_DEEPSLEEP_CYCLE; + RtcSettings.ultradeepsleep = RtcSettings.ultradeepsleep - DEEPSLEEP_MAX_CYCLE; AddLog_P2(LOG_LEVEL_ERROR, PSTR("DSL: Remain DeepSleep %d"), RtcSettings.ultradeepsleep); RtcSettingsSave(); - ESP.deepSleep(100 * RtcSettings.deepsleep_slip * (MAX_DEEPSLEEP_CYCLE < RtcSettings.ultradeepsleep ? MAX_DEEPSLEEP_CYCLE : RtcSettings.ultradeepsleep), WAKE_RF_DEFAULT); + RtcRebootReset(); + ESP.deepSleep(100 * RtcSettings.deepsleep_slip * (DEEPSLEEP_MAX_CYCLE < RtcSettings.ultradeepsleep ? DEEPSLEEP_MAX_CYCLE : RtcSettings.ultradeepsleep), WAKE_RF_DEFAULT); yield(); // Sleeping } @@ -77,7 +80,7 @@ void DeepSleepInit(void) RtcSettings.ultradeepsleep = 0; } -void DeepSleepCheck(void) +void DeepSleepPrepare(void) { // Deepsleep_slip is ideally 10.000 == 100% // Typically the device has up to 4% slip. Anything else is a wrong setting in the deepsleep_slip @@ -87,8 +90,7 @@ void DeepSleepCheck(void) (RtcSettings.deepsleep_slip < 9000) || (RtcSettings.deepsleep_slip > 11000) || (RtcSettings.nextwakeup > (UtcTime() + Settings.deepsleep))) { - AddLog_P2(LOG_LEVEL_ERROR, PSTR("DSL: Reset wrong settings wakeup: %ld, slip %ld"), - RtcSettings.nextwakeup, RtcSettings.deepsleep_slip ); + AddLog_P2(LOG_LEVEL_ERROR, PSTR("DSL: Reset wrong settings wakeup: %ld, slip %ld"), RtcSettings.nextwakeup, RtcSettings.deepsleep_slip ); RtcSettings.nextwakeup = 0; RtcSettings.deepsleep_slip = 10000; } @@ -109,15 +111,15 @@ void DeepSleepCheck(void) // It may happen that wakeup in just <5 seconds in future // In this case also add deepsleep to nextwakeup - if (RtcSettings.nextwakeup <= (UtcTime() - MIN_DEEPSLEEP_TIME)) { + if (RtcSettings.nextwakeup <= (UtcTime() - DEEPSLEEP_MIN_TIME)) { // ensure nextwakeup is at least in the future - RtcSettings.nextwakeup += (((UtcTime() + MIN_DEEPSLEEP_TIME - RtcSettings.nextwakeup) / Settings.deepsleep) + 1) * Settings.deepsleep; + RtcSettings.nextwakeup += (((UtcTime() + DEEPSLEEP_MIN_TIME - RtcSettings.nextwakeup) / Settings.deepsleep) + 1) * Settings.deepsleep; } String dt = GetDT(RtcSettings.nextwakeup + LocalTime() - UtcTime()); // 2017-03-07T11:08:02 - // Limit sleeptime to MAX_DEEPSLEEP_CYCLE - // uint32_t deepsleep_sleeptime = MAX_DEEPSLEEP_CYCLE < (RtcSettings.nextwakeup - UtcTime()) ? (uint32_t)MAX_DEEPSLEEP_CYCLE : RtcSettings.nextwakeup - UtcTime(); - deepsleep_sleeptime = tmin((uint32_t)MAX_DEEPSLEEP_CYCLE ,RtcSettings.nextwakeup - UtcTime()); + // Limit sleeptime to DEEPSLEEP_MAX_CYCLE + // uint32_t deepsleep_sleeptime = DEEPSLEEP_MAX_CYCLE < (RtcSettings.nextwakeup - UtcTime()) ? (uint32_t)DEEPSLEEP_MAX_CYCLE : RtcSettings.nextwakeup - UtcTime(); + deepsleep_sleeptime = tmin((uint32_t)DEEPSLEEP_MAX_CYCLE ,RtcSettings.nextwakeup - UtcTime()); // stat/tasmota/STATUS = {"DeepSleep":{"Time":"2019-11-12T21:33:45","Epoch":1573590825}} Response_P(PSTR("{\"" D_PRFX_DEEPSLEEP "\":{\"" D_JSON_TIME "\":\"%s\",\"Epoch\":%d}}"), (char*)dt.c_str(), RtcSettings.nextwakeup); @@ -144,9 +146,9 @@ void DeepSleepEverySecond(void) if (!deepsleep_flag) { return; } if (DeepSleepEnabled()) { - if (4 == deepsleep_flag) { // Allow 4 seconds to update web console before deepsleep + if (DEEPSLEEP_START_COUNTDOWN == deepsleep_flag) { // Allow 4 seconds to update web console before deepsleep SettingsSaveAll(); - DeepSleepCheck(); + DeepSleepPrepare(); } deepsleep_flag--; if (deepsleep_flag <= 0) { @@ -164,10 +166,10 @@ void DeepSleepEverySecond(void) void CmndDeepsleepTime(void) { if ((0 == XdrvMailbox.payload) || - ((XdrvMailbox.payload > 10) && (XdrvMailbox.payload < (10 * 366 * 24 * 60 * 60)))) { // Allow max 10 years sleep + ((XdrvMailbox.payload > 10) && (XdrvMailbox.payload < DEEPSLEEP_MAX))) { Settings.deepsleep = XdrvMailbox.payload; RtcSettings.nextwakeup = 0; - deepsleep_flag = (0 == XdrvMailbox.payload) ? 0 : 4; + deepsleep_flag = (0 == XdrvMailbox.payload) ? 0 : DEEPSLEEP_START_COUNTDOWN; if (deepsleep_flag) { if (!Settings.tele_period) { Settings.tele_period = TELE_PERIOD; // Need teleperiod to go back to sleep @@ -190,15 +192,15 @@ bool Xdrv29(uint8_t function) DeepSleepEverySecond(); break; case FUNC_AFTER_TELEPERIOD: - if (!deepsleep_flag) { - deepsleep_flag = 4; // Start deepsleep in 4 seconds + if (DeepSleepEnabled() && !deepsleep_flag) { + deepsleep_flag = DEEPSLEEP_START_COUNTDOWN; // Start deepsleep in 4 seconds } break; case FUNC_COMMAND: result = DecodeCommand(kDeepsleepCommands, DeepsleepCommand); break; case FUNC_PRE_INIT: - DeepSleepInit(); + DeepSleepReInit(); break; } return result; diff --git a/tasmota/xdrv_30_exs_dimmer.ino b/tasmota/xdrv_30_exs_dimmer.ino index 2f43fcff3..4945bf928 100644 --- a/tasmota/xdrv_30_exs_dimmer.ino +++ b/tasmota/xdrv_30_exs_dimmer.ino @@ -508,10 +508,10 @@ const char kExsCommands[] PROGMEM = D_PRFX_EXS "|" D_CMND_EXS_DIMMS "|" D_CMND_EXS_CH_LOCK "|" D_CMND_EXS_STATE; -void (* const ExsCommand[])(void) PROGMEM = - { &CmndExsDimm, &CmndExsDimmTbl, &CmndExsDimmVal, - &CmndExsDimms, &CmndExsChLock, - &CmndExsState }; +void (* const ExsCommand[])(void) PROGMEM = { + &CmndExsDimm, &CmndExsDimmTbl, &CmndExsDimmVal, + &CmndExsDimms, &CmndExsChLock, + &CmndExsState }; void CmndExsDimm(void) { diff --git a/tasmota/xdrv_99_debug.ino b/tasmota/xdrv_99_debug.ino index 7fbee7f3a..b347035e1 100644 --- a/tasmota/xdrv_99_debug.ino +++ b/tasmota/xdrv_99_debug.ino @@ -75,7 +75,10 @@ const char kDebugCommands[] PROGMEM = "|" // No prefix D_CMND_EXCEPTION "|" #endif D_CMND_FLASHDUMP "|" D_CMND_FLASHMODE "|" D_CMND_FREEMEM"|" D_CMND_HELP "|" D_CMND_RTCDUMP "|" D_CMND_SETSENSOR "|" - D_CMND_I2CWRITE "|" D_CMND_I2CREAD "|" D_CMND_I2CSTRETCH "|" D_CMND_I2CCLOCK ; +#ifdef USE_I2C + D_CMND_I2CWRITE "|" D_CMND_I2CREAD "|" D_CMND_I2CSTRETCH "|" D_CMND_I2CCLOCK +#endif + ; void (* const DebugCommand[])(void) PROGMEM = { &CmndCfgDump, &CmndCfgPeek, &CmndCfgPoke, @@ -90,7 +93,10 @@ void (* const DebugCommand[])(void) PROGMEM = { &CmndException, #endif &CmndFlashDump, &CmndFlashMode, &CmndFreemem, &CmndHelp, &CmndRtcDump, &CmndSetSensor, - &CmndI2cWrite, &CmndI2cRead, &CmndI2cStretch, &CmndI2cClock }; +#ifdef USE_I2C + &CmndI2cWrite, &CmndI2cRead, &CmndI2cStretch, &CmndI2cClock +#endif + }; uint32_t CPU_loops = 0; uint32_t CPU_last_millis = 0; @@ -575,6 +581,7 @@ void CmndFlashDump(void) ResponseCmndDone(); } +#ifdef USE_I2C void CmndI2cWrite(void) { // I2cWrite
,.. @@ -652,6 +659,7 @@ void CmndI2cClock(void) } ResponseCmndDone(); } +#endif // USE_I2C /*********************************************************************************************\ * Interface diff --git a/tasmota/xdsp_02_ssd1306.ino b/tasmota/xdsp_02_ssd1306.ino index 0b1fff3d0..e263901bc 100644 --- a/tasmota/xdsp_02_ssd1306.ino +++ b/tasmota/xdsp_02_ssd1306.ino @@ -47,7 +47,7 @@ extern uint8_t *buffer; /*********************************************************************************************/ -void SSD1306InitDriver() +void SSD1306InitDriver(void) { if (!Settings.display_model) { if (I2cSetDevice(OLED_ADDRESS1)) { diff --git a/tasmota/xnrg_07_ade7953.ino b/tasmota/xnrg_07_ade7953.ino index 60174d0b6..8643af065 100644 --- a/tasmota/xnrg_07_ade7953.ino +++ b/tasmota/xnrg_07_ade7953.ino @@ -185,7 +185,7 @@ void Ade7953GetData(void) } } -void Ade7953EnergyEverySecond() +void Ade7953EnergyEverySecond(void) { if (Ade7953.init_step) { if (1 == Ade7953.init_step) { diff --git a/tasmota/xnrg_12_solaxX1.ino b/tasmota/xnrg_12_solaxX1.ino index b520302d3..910ca5822 100644 --- a/tasmota/xnrg_12_solaxX1.ino +++ b/tasmota/xnrg_12_solaxX1.ino @@ -201,7 +201,7 @@ uint16_t solaxX1_calculateCRC(uint8_t *bExternTxPackage, uint8_t bLen) return wChkSum; } -void solaxX1_SendInverterAddress() +void solaxX1_SendInverterAddress(void) { source[0] = 0x00; destination[0] = 0x00; @@ -213,7 +213,7 @@ void solaxX1_SendInverterAddress() solaxX1_RS485Send(24); } -void solaxX1_QueryLiveData() +void solaxX1_QueryLiveData(void) { source[0] = 0x01; destination[0] = 0x00; diff --git a/tasmota/xsns_01_counter.ino b/tasmota/xsns_01_counter.ino index 296435579..8ed615c86 100644 --- a/tasmota/xsns_01_counter.ino +++ b/tasmota/xsns_01_counter.ino @@ -31,8 +31,8 @@ const char kCounterCommands[] PROGMEM = D_PRFX_COUNTER "|" // Prefix "|" D_CMND_COUNTERTYPE "|" D_CMND_COUNTERDEBOUNCE ; -void (* const CounterCommand[])(void) PROGMEM = - { &CmndCounter, &CmndCounterType, &CmndCounterDebounce }; +void (* const CounterCommand[])(void) PROGMEM = { + &CmndCounter, &CmndCounterType, &CmndCounterDebounce }; struct COUNTER { uint32_t timer[MAX_COUNTERS]; // Last counter time in micro seconds diff --git a/tasmota/xsns_02_analog.ino b/tasmota/xsns_02_analog.ino index b65c23ab5..1a4bc090b 100644 --- a/tasmota/xsns_02_analog.ino +++ b/tasmota/xsns_02_analog.ino @@ -101,7 +101,7 @@ void AdcEvery250ms(void) } #endif // USE_RULES -uint16_t AdcGetLux() +uint16_t AdcGetLux(void) { int adc = AdcRead(2); // Source: https://www.allaboutcircuits.com/projects/design-a-luxmeter-using-a-light-dependent-resistor/ @@ -186,8 +186,8 @@ void AdcShow(bool json) const char kAdcCommands[] PROGMEM = "|" // No prefix D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_ADCPARAM; -void (* const AdcCommand[])(void) PROGMEM = - { &CmndAdc, &CmndAdcs, &CmndAdcParam }; +void (* const AdcCommand[])(void) PROGMEM = { + &CmndAdc, &CmndAdcs, &CmndAdcParam }; void CmndAdc(void) { diff --git a/tasmota/xsns_26_lm75ad.ino b/tasmota/xsns_26_lm75ad.ino index d1dd7bb3b..78a85ad2b 100644 --- a/tasmota/xsns_26_lm75ad.ino +++ b/tasmota/xsns_26_lm75ad.ino @@ -53,7 +53,11 @@ void LM75ADDetect(void) { for (uint32_t i = 0; i < sizeof(lm75ad_addresses); i++) { lm75ad_address = lm75ad_addresses[i]; - if (I2cActive(lm75ad_address)) { continue; } + if (I2cActive(lm75ad_address)) { + continue; } + if (!I2cSetDevice(lm75ad_address)) { + break; // do not make the next step without a confirmed device on the bus + } uint16_t buffer; if (I2cValidRead16(&buffer, lm75ad_address, LM75_THYST_REGISTER)) { if (buffer == 0x4B00) { diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index 6065ad719..d9076f61d 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -90,7 +90,7 @@ bool HxIsReady(uint16_t timeout) return (digitalRead(Hx.pin_dout) == LOW); } -long HxRead() +long HxRead(void) { if (!HxIsReady(HX_TIMEOUT)) { return -1; } @@ -241,7 +241,7 @@ bool HxCommand(void) /*********************************************************************************************/ -long HxWeight() +long HxWeight(void) { return (Hx.calibrate_step < HX_CAL_FAIL) ? Hx.weight : 0; } @@ -371,7 +371,7 @@ void HxEvery100mSecond(void) } } -void HxSaveBeforeRestart() +void HxSaveBeforeRestart(void) { Settings.energy_frequency_calibration = Hx.weight; Hx.sample_count = HX_SAMPLES +1; // Stop updating Hx.weight diff --git a/tasmota/xsns_46_MLX90614.ino b/tasmota/xsns_46_MLX90614.ino index 3cc304f1f..dc5850789 100644 --- a/tasmota/xsns_46_MLX90614.ino +++ b/tasmota/xsns_46_MLX90614.ino @@ -31,58 +31,37 @@ #define MLX90614_TOBJ1 0x07 #define MLX90614_TOBJ2 0x08 -bool mlx_ready = false; -float obj_temp; -float amb_temp; +struct { + union { + uint16_t value; + uint32_t i2c_buf; + }; + float obj_temp; + float amb_temp; + bool ready = false; +} mlx90614; void MLX90614_Init(void) { if (!I2cSetDevice(I2_ADR_IRT)) { return; } - I2cSetActiveFound(I2_ADR_IRT, "MLX90614"); - mlx_ready = true; - - // not needed on tasmota - //Wire.begin(); - //delay(500); -} - -// return ir temp -// 0 = chip, 1 = object temperature -// * 0.02 - 273.15 -uint16_t read_irtmp(uint8_t flag) -{ - Wire.beginTransmission(I2_ADR_IRT); - if (!flag) { - Wire.write(MLX90614_TA); - } else { - Wire.write(MLX90614_TOBJ1); - } - Wire.endTransmission(false); - - Wire.requestFrom(I2_ADR_IRT, 3); - uint8_t low = Wire.read(); - uint8_t hig = Wire.read(); - Wire.read(); - - uint16_t val = ((uint16_t)hig << 8) | low; - return val; + mlx90614.ready = true; } void MLX90614_Every_Second(void) { - uint16_t uval = read_irtmp(1); - if (uval & 0x8000) { - obj_temp = -999; - } else { - obj_temp = ((float)uval * 0.02) - 273.15; - } - uval = read_irtmp(0); - if (uval & 0x8000) { - amb_temp = -999; - } else { - amb_temp = ((float)uval * 0.02) - 273.15; - } + mlx90614.i2c_buf = I2cRead24(I2_ADR_IRT, MLX90614_TOBJ1); + if (mlx90614.value & 0x8000) { + mlx90614.obj_temp = -999; + } else { + mlx90614.obj_temp = ((float)mlx90614.value * 0.02) - 273.15; + } + mlx90614.i2c_buf = I2cRead24(I2_ADR_IRT,MLX90614_TA); + if (mlx90614.value & 0x8000) { + mlx90614.amb_temp = -999; + } else { + mlx90614.amb_temp = ((float)mlx90614.value * 0.02) - 273.15; + } } #ifdef USE_WEBSERVER @@ -94,9 +73,9 @@ void MLX90614_Every_Second(void) void MLX90614_Show(uint8_t json) { char obj_tstr[16]; - dtostrfd(obj_temp, Settings.flag2.temperature_resolution, obj_tstr); + dtostrfd(mlx90614.obj_temp, Settings.flag2.temperature_resolution, obj_tstr); char amb_tstr[16]; - dtostrfd(amb_temp, Settings.flag2.temperature_resolution, amb_tstr); + dtostrfd(mlx90614.amb_temp, Settings.flag2.temperature_resolution, amb_tstr); if (json) { ResponseAppend_P(PSTR(",\"MLX90614\":{\"OBJTMP\":%s,\"AMBTMP\":%s}"), obj_tstr, amb_tstr); @@ -120,7 +99,7 @@ bool Xsns46(byte function) if (FUNC_INIT == function) { MLX90614_Init(); } - else if (mlx_ready) { + else if (mlx90614.ready) { switch (function) { case FUNC_EVERY_SECOND: MLX90614_Every_Second(); diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino old mode 100644 new mode 100755 index 4fa8875e2..ddc3f8db0 --- a/tasmota/xsns_53_sml.ino +++ b/tasmota/xsns_53_sml.ino @@ -51,7 +51,7 @@ //#define DWS74_BUG // max 23 chars -#if DMY_LANGUAGE==de-DE +#if MY_LANGUAGE==de-DE // german web text #define D_TPWRIN "Verbrauch" #define D_TPWROUT "Einspeisung" @@ -1207,7 +1207,7 @@ void sml_empty_receiver(uint32_t meters) { void sml_shift_in(uint32_t meters,uint32_t shard) { uint32_t count; - if (meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='p') { + if (meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='M' && meter_desc_p[meters].type!='p') { // shift in for (count=0; count=9) { @@ -1263,7 +1263,7 @@ void sml_shift_in(uint32_t meters,uint32_t shard) { } } sb_counter++; - if (meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='p') SML_Decode(meters); + if (meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='M' && meter_desc_p[meters].type!='p') SML_Decode(meters); } @@ -1523,7 +1523,7 @@ void SML_Decode(uint8_t index) { } } else { double dval; - if (meter_desc_p[mindex].type!='e' && meter_desc_p[mindex].type!='r' && meter_desc_p[mindex].type!='m' && meter_desc_p[mindex].type!='p') { + if (meter_desc_p[mindex].type!='e' && meter_desc_p[mindex].type!='r' && meter_desc_p[mindex].type!='m' && meter_desc_p[mindex].type!='M' && meter_desc_p[mindex].type!='p') { // get numeric values if (meter_desc_p[mindex].type=='o' || meter_desc_p[mindex].type=='c') { dval=CharToDouble((char*)cp); @@ -2061,7 +2061,7 @@ init10: } else { // serial input, init #ifdef SPECIAL_SS - if (meter_desc_p[meters].type=='m' || meter_desc_p[meters].type=='p') { + if (meter_desc_p[meters].type=='m' || meter_desc_p[meters].type=='M' || meter_desc_p[meters].type=='p') { meter_ss[meters] = new TasmotaSerial(meter_desc_p[meters].srcpin,meter_desc_p[meters].trxpin,1); } else { meter_ss[meters] = new TasmotaSerial(meter_desc_p[meters].srcpin,meter_desc_p[meters].trxpin,1,1); @@ -2072,7 +2072,12 @@ init10: if (meter_ss[meters]->begin(meter_desc_p[meters].params)) { meter_ss[meters]->flush(); } - if (meter_ss[meters]->hardwareSerial()) { ClaimSerial(); } + if (meter_ss[meters]->hardwareSerial()) { + if (meter_desc_p[meters].type=='M') { + Serial.begin(meter_desc_p[meters].params, SERIAL_8E1); + } + ClaimSerial(); + } } } @@ -2234,7 +2239,7 @@ void SML_Send_Seq(uint32_t meter,char *seq) { slen++; if (slen>=sizeof(sbuff)) break; } - if (script_meter_desc[meter].type=='m') { + if (script_meter_desc[meter].type=='m' || script_meter_desc[meter].type=='M') { *ucp++=0; *ucp++=2; // append crc diff --git a/tools/decode-config.html b/tools/decode-config.html deleted file mode 100644 index ccd05b514..000000000 --- a/tools/decode-config.html +++ /dev/null @@ -1,356 +0,0 @@ -

decode-config.py

-

decode-config.py is able to backup and restore Tasmota configuration.

-

In comparison with the Tasmota build-in "Backup/Restore Configuration" function decode-config.py

-
    -
  • uses human readable and editable JSON-format for backup/restore,
  • -
  • can restore previously backup and changed JSON-format files,
  • -
  • is able to create Tasmota compatible command list with related config parameter
  • -
-

Comparing backup files created by decode-config.py and *.dmp files created by Tasmota "Backup/Restore Configuration":

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 decode-config.py
*.json file
Tasmota
*.dmp file
EncryptedNoYes
ReadableYesNo
Simply editableYesNo
Simply batch processingYesNo
-

decode-config.py is compatible with Tasmota version from v5.10.0 up to now.

-

Content

- -

Prerequisite

-
    -
  • Python)
    This program is written in Python) so you need to install a working python environment (for details see Python Setup and Usage)

    -
  • -
  • Tasmota Firmware with Web-Server enabled:

    -
      -
    • To backup or restore configurations from or to a Tasmota device you need a firmare with enabled web-server in admin mode (command WebServer 2). This is the Tasmota default.
    • -
    • If using your own compiled firmware be aware to enable the web-server (#define USE_WEBSERVER and #define WEB_SERVER 2).
    • -
    -
  • -
-

File Types

-

decode-config.py can handle the following backup file types:

-

.dmp Format

-

Configuration data as used by Tasmota "Backup/Restore Configuration" web interface.
This format is binary and encrypted.

-

.json Format

-

Configuration data in JSON-format.
This format is decrypted, human readable and editable and can also be used for the --restore-file parameter.
This file will be created by decode-config.py using the --backup-file with --backup-type json parameter, this is the default.

-

.bin Format

-

Configuration data in binary format.
This format is binary decryptet, editable (e.g. using a hex editor) and can also be used for --restore-file command.
It will be created by decode-config.py using --backup-file with --backup-type bin.
Note:
The .bin file contains the same information as the original .dmp file from Tasmota "Backup/Restore Configuration" but it is decrpted and 4 byte longer than an original (it is a prefix header at the beginning). .bin file data starting at address 4 contains the same as the struct SYSCFG from Tasmota settings.h in decrypted format.

-

File extensions

-

You don't need to append exensions for your file name as decode-config.py uses auto extension as default. The extension will be choose based on file contents and --backup-type parameter. -If you do not want using auto extensions use the --no-extension parameter.

-

Usage

-

After download don't forget to set the executable flag under linux with chmod +x decode-config.py or call the program using python decode-config.py....

-

Basics

-

At least pass a source where you want to read the configuration data from using -f <filename> or -d <host>:

-

The source can be either

-
    -
  • a Tasmota device hostname or IP using the -d <host> parameter
  • -
  • a Tasmota *.dmp configuration file using -f <filename> parameter
  • -
-

Example:

-
decode-config.py -d sonoff-4281
-

will output a human readable configuration in JSON-format:

-
{
-  "altitude": 112,
-  "baudrate": 115200,
-  "blinkcount": 10,
-  "blinktime": 10,
-...
-  "ws_width": [
-    1,
-    3,
-    5
-  ]
-}
-

Save backup file

-

To save the output as backup file use --backup-file <filename>, you can use placeholder for Version, Friendlyname and Hostname:

-
decode-config.py -d sonoff-4281 --backup-file Config_@f_@v
-

If you have setup a WebPassword within Tasmota, use

-
decode-config.py -d sonoff-4281 -p <yourpassword> --backup-file Config_@f_@v
-

will create a file like Config_Sonoff_6.4.0.json (the part Sonoff and 6.4.0 will choosen related to your device configuration). Because the default backup file format is JSON, you can read and change it with any raw text editor.

-

Restore backup file

-

Reading back a saved (and possible changed) backup file use the --restore-file <filename> parameter. This will read the (changed) configuration data from this file and send it back to the source device or filename.

-

To restore the previously save backup file Config_Sonoff_6.2.1.json to device sonoff-4281 use:

-
decode-config.py -d sonoff-4281 --restore-file Config_Sonoff_6.2.1.json
-

with password set by WebPassword:

-
decode-config.py -d sonoff-4281 -p <yourpassword> --restore-file Config_Sonoff_6.2.1.json
-

Output to screen

-

To force screen output use the --output parameter.

-

Output to screen is default enabled when calling the program with a source parameter (-f or -d) but without any backup or restore parameter.

-

JSON output

-

The default output format is JSON. You can force JSON output using the --output-format json parameter.

-

Example:

-
decode-config.py -d sonoff-4281 -c my.conf -x Wifi --output-format json
-
-{
-  ...
-  "hostname": "%s-%04d",
-  "ip_address": [
-    "0.0.0.0",
-    "192.168.12.1",
-    "255.255.255.0",
-    "192.168.12.1"
-  ],
-  "ntp_server": [
-    "ntp.localnet.home",
-    "ntp2.localnet.home",
-    "192.168.12.1"
-  ],
-  "sta_active": 0,
-  "sta_config": 5,
-  "sta_pwd": [
-    "myWlAnPaszxwo!z",
-    "myWlAnPaszxwo!z2"
-  ],
-  "sta_ssid": [
-    "wlan.1",
-    "my-wlan"
-  ],
-  "web_password": "myPaszxwo!z",
-  "webserver": 2
-  ...
-}
-

Note: JSON output always contains all configuration data like the backup file except you are using --group arg.

-

Tasmota command output

-

decode-config.py is able to translate the configuration data to (most all) Tasmota commands. To output your configuration as Tasmota commands use --output-format cmnd or --output-format command.

-

Example:

-
decode-config.py -d sonoff-4281 -c my.conf -g Wifi --output-format cmnd
-
-# Wifi:
-  AP 0
-  Hostname %s-%04d
-  IPAddress1 0.0.0.0
-  IPAddress2 192.168.12.1
-  IPAddress3 255.255.255.0
-  IPAddress4 192.168.12.1
-  NtpServer1 ntp.localnet.home
-  NtpServer2 ntp2.localnet.home
-  NtpServer3 192.168.12.1
-  Password1 myWlAnPaszxwo!z
-  Password2 myWlAnPaszxwo!z2
-  SSId1 wlan.1
-  SSId2 wlan.1
-  WebPassword myPaszxwo!z
-  WebServer 2
-  WifiConfig 5
-

Note: A few very specific module commands like MPC230xx, KNX and some Display commands are not supported. These are still available by JSON output.

-

Filter data

-

The huge number of Tasmota configuration data can be overstrained and confusing, so the most of the configuration data are grouped into categories.

-

With decode-config.py the following categories are available: Display, Domoticz, Internal, KNX, Led, Logging, MCP230xx, MQTT, Main, Management, Pow, Sensor, Serial, SetOption, SonoffRF, System, Timers, Wifi

-

These are similary to the categories on https://github.com/arendst/Tasmota/wiki/Commands.

-

To filter outputs to a subset of groups use the -g or --group arg concatenating the grooup you want, e. g.

-
decode-config.py -d sonoff-4281 -c my.conf --output-format cmnd --group Main MQTT Management Wifi
-

Configuration file

-

Each argument that start with -- (eg. --file) can also be set in a config file (specified via -c). Config file syntax allows: key=value, flag=true, stuff=[a,b,c] (for details, see syntax at https://pypi.org/project/ConfigArgParse).

-

If an argument is specified in more than one place, then commandline values override config file values which override defaults. This is usefull if you always use the same argument or a basic set of arguments.

-

The http authentication credentials --username and --password is predestinated to store it in a file instead using it on your command line as argument:

-

e.g. my.conf:

-
[source]
-username = admin
-password = myPaszxwo!z
-

To make a backup file from example above you can now pass the config file instead using the password on command line:

-
decode-config.py -d sonoff-4281 -c my.conf --backup-file Config_@f_@v
-

More program arguments

-

For better reading each short written arg (minus sign -) has a corresponding long version (two minus signs --), eg. --device for -d or --file for -f (note: not even all -- arg has a corresponding - one).

-

A short list of possible program args is displayed using -h or --help.

-

For advanced help use -H or --full-help:

-
usage: decode-config.py [-f <filename>] [-d <host>] [-P <port>]
-                        [-u <username>] [-p <password>] [-i <filename>]
-                        [-o <filename>] [-t json|bin|dmp] [-E] [-e] [-F]
-                        [--json-indent <indent>] [--json-compact]
-                        [--json-hide-pw] [--json-show-pw]
-                        [--cmnd-indent <indent>] [--cmnd-groups]
-                        [--cmnd-nogroups] [--cmnd-sort] [--cmnd-unsort]
-                        [-c <filename>] [-S] [-T json|cmnd|command]
-                        [-g {Control,Devices,Display,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,Timer,Wifi} [{Control,Devices,Display,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,Timer,Wifi} ...]]
-                        [--ignore-warnings] [-h] [-H] [-v] [-V]
-
-Backup/Restore Tasmota configuration data. Args that start with '--'
-(eg. -f) can also be set in a config file (specified via -c). Config file
-syntax allows: key=value, flag=true, stuff=[a,b,c] (for details, see syntax at
-https://goo.gl/R74nmi). If an arg is specified in more than one place, then
-commandline values override config file values which override defaults.
-
-Source:
-  Read/Write Tasmota configuration from/to
-
-  -f, --file, --tasmota-file <filename>
-                        file to retrieve/write Tasmota configuration from/to
-                        (default: None)'
-  -d, --device, --host <host>
-                        hostname or IP address to retrieve/send Tasmota
-                        configuration from/to (default: None)
-  -P, --port <port>     TCP/IP port number to use for the host connection
-                        (default: 80)
-  -u, --username <username>
-                        host HTTP access username (default: admin)
-  -p, --password <password>
-                        host HTTP access password (default: None)
-
-Backup/Restore:
-  Backup & restore specification
-
-  -i, --restore-file <filename>
-                        file to restore configuration from (default: None).
-                        Replacements: @v=firmware version from config,
-                        @f=device friendly name from config, @h=device
-                        hostname from config, @H=device hostname from device
-                        (-d arg only)
-  -o, --backup-file <filename>
-                        file to backup configuration to (default: None).
-                        Replacements: @v=firmware version from config,
-                        @f=device friendly name from config, @h=device
-                        hostname from config, @H=device hostname from device
-                        (-d arg only)
-  -t, --backup-type json|bin|dmp
-                        backup filetype (default: 'json')
-  -E, --extension       append filetype extension for -i and -o filename
-                        (default)
-  -e, --no-extension    do not append filetype extension, use -i and -o
-                        filename as passed
-  -F, --force-restore   force restore even configuration is identical
-
-JSON output:
-  JSON format specification
-
-  --json-indent <indent>
-                        pretty-printed JSON output using indent level
-                        (default: 'None'). -1 disables indent.
-  --json-compact        compact JSON output by eliminate whitespace
-  --json-hide-pw        hide passwords
-  --json-show-pw, --json-unhide-pw
-                        unhide passwords (default)
-
-Tasmota command output:
-  Tasmota command output format specification
-
-  --cmnd-indent <indent>
-                        Tasmota command grouping indent level (default: '2').
-                        0 disables indent
-  --cmnd-groups         group Tasmota commands (default)
-  --cmnd-nogroups       leave Tasmota commands ungrouped
-  --cmnd-sort           sort Tasmota commands (default)
-  --cmnd-unsort         leave Tasmota commands unsorted
-
-Common:
-  Optional arguments
-
-  -c, --config <filename>
-                        program config file - can be used to set default
-                        command args (default: None)
-  -S, --output          display output regardsless of backup/restore usage
-                        (default do not output on backup or restore usage)
-  -T, --output-format json|cmnd|command
-                        display output format (default: 'json')
-  -g, --group {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi}
-                        limit data processing to command groups (default no
-                        filter)
-  --ignore-warnings     do not exit on warnings. Not recommended, used by your
-                        own responsibility!
-
-Info:
-  Extra information
-
-  -h, --help            show usage help message and exit
-  -H, --full-help       show full help message and exit
-  -v, --verbose         produce more output about what the program does
-  -V, --version         show program's version number and exit
-
-Either argument -d <host> or -f <filename> must be given.
-

Program parameter notes

-

decode-config.py

-

Examples

-

The most of the examples are for linux command line. Under Windows call the program using python decode-config.py ....

-

Config file

-

Note: The example contains .ini style sections [...]. Sections are always treated as comment and serves as clarity only. -For further details of config file syntax see https://pypi.org/project/ConfigArgParse.

-

my.conf

-
[Source]
-username = admin
-password = myPaszxwo!z
-
-[JSON]
-json-indent 2
-

Using Tasmota binary configuration files

-
    -
  1. Restore a Tasmota configuration file

    -

    decode-config.py -c my.conf -d sonoff --restore-file Config_Sonoff_6.2.1.dmp

    -
  2. -
  3. Backup device using Tasmota configuration compatible format

    -

    a) use file extension to choice the file format

    -

    decode-config.py -c my.conf -d sonoff --backup-file Config_@f_@v.dmp

    -

    b) use args to choice the file format

    -

    decode-config.py -c my.conf -d sonoff --backup-type dmp --backup-file Config_@f_@v

    -
  4. -
-

Use batch processing

-
for device in sonoff1 sonoff2 sonoff3; do ./decode-config.py -c my.conf -d $device -o Config_@f_@v
-

or under windows

-
for device in (sonoff1 sonoff2 sonoff3) do python decode-config.py -c my.conf -d %device -o Config_@f_@v
-

will produce JSON configuration files for host sonoff1, sonoff2 and sonoff3 using friendly name and Tasmota firmware version for backup filenames.

-

Notes

-

Some general notes:

-
    -
  • Filename replacement macros @h and @H:
      -
    • @h
      The @h replacement macro uses the hostname configured with the Tasomta Wifi Hostname <host> command (defaults to %s-%04d). It will not use the network hostname of your device because this is not available when working with files only (e.g. --file <filename> as source).
      To prevent having a useless % in your filename, @h will not replaced by configuration data hostname if this contains '%' characters.
    • -
    • @H
      If you want to use the network hostname within your filename, use the @H replacement macro instead - but be aware this will only replaced if you are using a network device as source (-d, --device, --host); it will not work when using a file as source (-f, --file)
    • -
    -
  • -
diff --git a/tools/decode-config.md b/tools/decode-config.md index 43fe807f3..4097638fa 100644 --- a/tools/decode-config.md +++ b/tools/decode-config.md @@ -55,14 +55,14 @@ pip install pycurl configargparse Install [Python 2.7](https://www.python.org/download/releases/2.7/) then install dependencies. For PyCurl you need to [download pycurl‑7.43.0.3‑cp27‑cp27m‑win_amd64.whl](https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl) for Windows 10 64bit. ``` -pip install pycurl-7.43.0.3-cp27-cp27m-win_amd64.whl configargparse +pip install pycurl-7.43.0.3-cp27-cp27m-win_amd64.whl // run the command from the folder where you downloaded the file pip install configargparse ``` * [Tasmota](https://github.com/arendst/Tasmota) [Firmware](https://github.com/arendst/Tasmota/releases) with Web-Server enabled: - * To backup or restore configurations from or to a Tasmota device you need a firmare with enabled web-server in admin mode (command [WebServer 2](https://github.com/arendst/Tasmota/wiki/Commands#wifi)). This is the Tasmota default. + * To backup or restore configurations from or to a Tasmota device you need a firmare with enabled web-server in admin mode (command [WebServer 2](https://tasmota.github.io/docs/#/Commands#wifi)). This is the Tasmota default. * If using your own compiled firmware be aware to enable the web-server (`#define USE_WEBSERVER` and `#define WEB_SERVER 2`). ## File Types @@ -211,9 +211,9 @@ Note: A few very specific module commands like MPC230xx, KNX and some Display co ### Filter data The huge number of Tasmota configuration data can be overstrained and confusing, so the most of the configuration data are grouped into categories. -With _decode-config.py_ the following categories are available: `Display`, `Domoticz`, `Internal`, `KNX`, `Led`, `Logging`, `MCP230xx`, `MQTT`, `Main`, `Management`, `Pow`, `Sensor`, `Serial`, `SetOption`, `SonoffRF`, `System`, `Timers`, `Wifi` +With _decode-config.py_ the following categories are available: `Display`, `Domoticz`, `Internal`, `KNX`, `Led`, `Logging`, `MCP230xx`, `MQTT`, `Main`, `Management`, `Pow`, `Sensor`, `Serial`, `SetOption`, `RF`, `System`, `Timers`, `Wifi` -These are similary to the categories on [https://github.com/arendst/Tasmota/wiki/Commands](Tasmota Command Wiki). +These are similary to the categories on [https://tasmota.github.io/docs/#/Commands](Tasmota Command Wiki). To filter outputs to a subset of groups use the `-g` or `--group` arg concatenating the grooup you want, e. g. @@ -254,7 +254,7 @@ For advanced help use `-H` or `--full-help`: [--cmnd-indent ] [--cmnd-groups] [--cmnd-nogroups] [--cmnd-sort] [--cmnd-unsort] [-c ] [-S] [-T json|cmnd|command] - [-g {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi} [{Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi} ...]] + [-g {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rf,Rules,Sensor,Serial,Setoption,Shutter,System,Timer,Wifi} [{Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rf,Rules,Sensor,Serial,Setoption,Shutter,System,Timer,Wifi} ...]] [--ignore-warnings] [-h] [-H] [-v] [-V] Backup/Restore Tasmota configuration data. Args that start with '--' @@ -334,7 +334,7 @@ For advanced help use `-H` or `--full-help`: (default do not output on backup or restore usage) -T, --output-format json|cmnd|command display output format (default: 'json') - -g, --group {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi} + -g, --group {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rf,Rules,Sensor,Serial,Setoption,Shutter,System,Timer,Wifi} limit data processing to command groups (default no filter) --ignore-warnings do not exit on warnings. Not recommended, used by your diff --git a/tools/decode-config.py b/tools/decode-config.py index 450c1d1cb..f15c696ae 100755 --- a/tools/decode-config.py +++ b/tools/decode-config.py @@ -1,6 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -VER = '2.3.0036' +from __future__ import print_function +from past.builtins import long +VER = '2.4.0039' """ decode-config.py - Backup/Restore Tasmota configuration data @@ -22,8 +24,8 @@ VER = '2.3.0036' Requirements: - - Python - - pip install json pycurl urllib2 configargparse + - Python 2.x: + pip install json requests urllib2 configargparse Instructions: @@ -43,7 +45,7 @@ Usage: decode-config.py [-f ] [-d ] [-P ] [--cmnd-indent ] [--cmnd-groups] [--cmnd-nogroups] [--cmnd-sort] [--cmnd-unsort] [-c ] [-S] [-T json|cmnd|command] - [-g {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi} [{Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi} ...]] + [-g {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Rf,System,Timer,Wifi} [{Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Rf,System,Timer,Wifi} ...]] [--ignore-warnings] [-h] [-H] [-v] [-V] Backup/Restore Tasmota configuration data. Args that start with '--' @@ -123,7 +125,7 @@ Usage: decode-config.py [-f ] [-d ] [-P ] (default do not output on backup or restore usage) -T, --output-format json|cmnd|command display output format (default: 'json') - -g, --group {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi} + -g, --group {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Rf,System,Timer,Wifi} limit data processing to command groups (default no filter) --ignore-warnings do not exit on warnings. Not recommended, used by your @@ -184,7 +186,7 @@ import io import sys, platform def ModuleImportError(module): er = str(module) - print >> sys.stderr, "{}. Try 'pip install {}' to install it".format(er,er.split(' ')[len(er.split(' '))-1]) + print('{}, try "pip install {}"'.format(er,er.split(' ')[len(er.split(' '))-1]), file=sys.stderr) sys.exit(ExitCode.MODULE_NOT_FOUND) try: from datetime import datetime @@ -197,9 +199,12 @@ try: import inspect import json import configargparse - import pycurl - import urllib2 -except ImportError, e: + import requests + if sys.version_info.major==2: + import urllib2 + else: + import urllib +except ImportError as e: ModuleImportError(e) # ====================================================================== @@ -276,7 +281,7 @@ Settings dictionary describes the config file fields definition: defines the use of data at format is defined in 'struct module format string' see - https://docs.python.org/2.7/library/struct.html#format-strings + https://docs.python.org/3.8/library/struct.html#format-strings : A dictionary describes a (sub)setting dictonary and can recursively define another @@ -556,7 +561,7 @@ Setting_5_10_0 = { 'pulse_counter_type4': ('> sys.stderr, '{styp}{sdelimiter}{sstatus}{slineno}{scolon}{smgs}'.format(\ - styp=type_ if type_ is not None else '', - sdelimiter=' ' if status is not None and status > 0 and type_ is not None else '', - sstatus=status if status is not None and status > 0 else '', - scolon=': ' if type_ is not None or line is not None else '', - smgs=msg, - slineno=' (@{:04d})'.format(line) if line is not None else '') + print('{styp}{sdelimiter}{sstatus}{slineno}{scolon}{smgs}'.format(\ + styp=type_ if type_ is not None else '', + sdelimiter=' ' if status is not None and status > 0 and type_ is not None else '', + sstatus=status if status is not None and status > 0 else '', + scolon=': ' if type_ is not None or line is not None else '', + smgs=msg, + slineno=' (@{:04d})'.format(line) if line is not None else '') + , file=sys.stderr) def exit(status=0, msg="end", type_=LogType.ERROR, src=None, doexit=True, line=None): @@ -1193,6 +1247,38 @@ def exit(status=0, msg="end", type_=LogType.ERROR, src=None, doexit=True, line=N sys.exit(exitcode) +def debug(args): + """ + Get debug level + + @param args: + configargparse.parse_args() result + + @return: + debug level + """ + return 0 if args.debug is None else args.debug + + +def instance(type_): + """ + Creates Python2/3 compatible isinstance test type(s) + + @param args: + Python3 instance type + + @return: + Python2/3 compatible isinstance type(s) + """ + newtype = type_ + if sys.version_info.major==2: + if type_==str: + newtype = (str,unicode) + elif isinstance(type_, tuple) and str in type_: + newtype = newtype + (unicode,) + return newtype + + def ShortHelp(doexit=True): """ Show short help (usage) only - ued by own -h handling @@ -1200,45 +1286,15 @@ def ShortHelp(doexit=True): @param doexit: sys.exit with OK if True """ - print parser.description + print(parser.description) print parser.print_usage() print - print "For advanced help use '{prog} -H' or '{prog} --full-help'".format(prog=os.path.basename(sys.argv[0])) + print("For advanced help use '{prog} -H' or '{prog} --full-help'".format(prog=os.path.basename(sys.argv[0]))) if doexit: sys.exit(ExitCode.OK) -class HTTPHeader: - """ - pycurl helper class retrieving the request header - """ - def __init__(self): - self.contents = '' - - def clear(self): - self.contents = '' - - def store(self, _buffer): - self.contents = "{}{}".format(self.contents, _buffer) - - def response(self): - header = str(self.contents).split('\n') - if len(header) > 0: - return header[0].rstrip() - return '' - - def contenttype(self): - for item in str(self.contents).split('\n'): - ditem = item.split(":") - if ditem[0].strip().lower() == 'content-type' and len(ditem) > 1: - return ditem[1].strip() - return '' - - def __str__(self): - return self.contents - - class CustomHelpFormatter(configargparse.HelpFormatter): """ Class for customizing the help output @@ -1284,9 +1340,6 @@ def GetTemplateSizes(): """ Get all possible template sizes as list - @param version: - version number from read binary data to search for - @return: template sizes as list [] """ @@ -1419,7 +1472,7 @@ def GetVersionStr(version): @return: version string """ - if isinstance(version, (unicode,str)): + if isinstance(version, instance(str)): version = int(version, 0) major = ((version>>24) & 0xff) minor = ((version>>16) & 0xff) @@ -1554,8 +1607,8 @@ def LoadTasmotaConfig(filename): try: with open(filename, "rb") as tasmotafile: encode_cfg = tasmotafile.read() - except Exception, e: - exit(e[0], "'{}' {}".format(filename, e[1]),line=inspect.getlineno(inspect.currentframe())) + except Exception as e: + exit(e.args[0], "'{}' {}".format(filename, e[1]),line=inspect.getlineno(inspect.currentframe())) return encode_cfg @@ -1576,43 +1629,21 @@ def TasmotaGet(cmnd, host, port, username=DEFAULTS['source']['username'], passwo @return: binary config data (encrypted) or None on error """ - body = None # read config direct from device via http - c = pycurl.Curl() - buffer = io.BytesIO() - c.setopt(c.WRITEDATA, buffer) - header = HTTPHeader() - c.setopt(c.HEADERFUNCTION, header.store) - c.setopt(c.FOLLOWLOCATION, True) - c.setopt(c.URL, MakeUrl(host, port, cmnd)) + url = MakeUrl(host, port, cmnd) + auth = None if username is not None and password is not None: - c.setopt(c.HTTPAUTH, c.HTTPAUTH_BASIC) - c.setopt(c.USERPWD, username + ':' + password) - c.setopt(c.HTTPGET, True) - c.setopt(c.VERBOSE, False) + auth = (username, password) + res = requests.get(url, auth=auth) - responsecode = 200 - try: - c.perform() - responsecode = c.getinfo(c.RESPONSE_CODE) - response = header.response() - except Exception, e: - exit(e[0], e[1],line=inspect.getlineno(inspect.currentframe())) - finally: - c.close() + if not res.ok: + exit(res.status_code, "Error on http GET request for {} - {}".format(url,res.reason), line=inspect.getlineno(inspect.currentframe())) - if responsecode >= 400: - exit(responsecode, 'HTTP result: {}'.format(header.response()),line=inspect.getlineno(inspect.currentframe())) - elif contenttype is not None and header.contenttype()!=contenttype: + if contenttype is not None and res.headers['Content-Type']!=contenttype: exit(ExitCode.DOWNLOAD_CONFIG_ERROR, "Device did not response properly, may be Tasmota webserver admin mode is disabled (WebServer 2)",line=inspect.getlineno(inspect.currentframe())) - try: - body = buffer.getvalue() - except: - pass - - return responsecode, body + return res.status_code, res.content def GetTasmotaHostname(host, port, username=DEFAULTS['source']['username'], password=None): @@ -1688,7 +1719,7 @@ def PushTasmotaConfig(encode_cfg, host, port, username=DEFAULTS['source']['usern errorcode, errorstring errorcode=0 if success, otherwise http response or exception code """ - if isinstance(encode_cfg, bytearray): + if isinstance(encode_cfg, (bytes,bytearray)): encode_cfg = str(encode_cfg) # get restore config page first to set internal Tasmota vars @@ -1696,48 +1727,21 @@ def PushTasmotaConfig(encode_cfg, host, port, username=DEFAULTS['source']['usern if body is None: return responsecode, "ERROR" - # post data - c = pycurl.Curl() - header = HTTPHeader() - buffer_ = io.BytesIO() - c.setopt(c.HEADERFUNCTION, header.store) - c.setopt(c.WRITEFUNCTION, lambda x: None) - c.setopt(c.WRITEDATA, buffer_) - c.setopt(c.POST, 1) - c.setopt(c.URL, MakeUrl(host, port, 'u2')) + # ~ # post data + url = MakeUrl(host, port, "u2") + auth = None if username is not None and password is not None: - c.setopt(c.HTTPAUTH, c.HTTPAUTH_BASIC) - c.setopt(c.USERPWD, username + ':' + password) - try: - isfile = os.path.isfile(encode_cfg) - except: - isfile = False - if isfile: - c.setopt(c.HTTPPOST, [("file", (c.FORM_FILE, encode_cfg))]) - else: - # use as binary data - c.setopt(c.HTTPPOST, [ - ('fileupload', ( - c.FORM_BUFFER, '{sprog}_v{sver}.dmp'.format(sprog=os.path.basename(sys.argv[0]), sver=VER), - c.FORM_BUFFERPTR, encode_cfg - )), - ]) + auth = (username, password) + files = {'u2':('{sprog}_v{sver}.dmp'.format(sprog=os.path.basename(sys.argv[0]), sver=VER), encode_cfg)} + res = requests.post(url, auth=auth, files=files) - responsecode = 200 - try: - c.perform() - responsecode = c.getinfo(c.RESPONSE_CODE) - except Exception, e: - return e[0], e[1] + if not res.ok: + exit(res.status_code, "Error on http POST request for {} - {}".format(url,res.reason), line=inspect.getlineno(inspect.currentframe())) - c.close() + if res.headers['Content-Type']!='text/html': + exit(ExitCode.DOWNLOAD_CONFIG_ERROR, "Device did not response properly, may be Tasmota webserver admin mode is disabled (WebServer 2)",line=inspect.getlineno(inspect.currentframe())) - if responsecode >= 400: - return responsecode, header.response() - elif header.contenttype() != 'text/html': - return ExitCode.UPLOAD_CONFIG_ERROR, "Device did not response properly, may be Tasmota webserver admin mode is disabled (WebServer 2)" - - body = buffer_.getvalue() + body = res.content findUpload = body.find("Upload") if findUpload < 0: @@ -1765,7 +1769,7 @@ def DecryptEncrypt(obj): @return: decrypted configuration (if obj contains encrypted data) """ - if isinstance(obj, bytearray): + if isinstance(obj, (bytes,bytearray)): obj = str(obj) dobj = obj[0:2] for i in range(2, len(obj)): @@ -1784,7 +1788,7 @@ def GetSettingsCrc(dobj): 2 byte unsigned integer crc value """ - if isinstance(dobj, bytearray): + if isinstance(dobj, (bytes,bytearray)): dobj = str(dobj) version, size, setting = GetTemplateSetting(dobj) if version < 0x06060007 or version > 0x0606000A: @@ -1809,7 +1813,7 @@ def GetSettingsCrc32(dobj): 4 byte unsigned integer crc value """ - if isinstance(dobj, bytearray): + if isinstance(dobj, (bytes,bytearray)): dobj = str(dobj) crc = 0 for i in range(0, len(dobj)-4): @@ -1839,7 +1843,7 @@ def GetFieldDef(fielddef, fields="format_, addrdef, baseaddr, bits, bitshift, da # calling with nothing is wrong if fielddef is None: - print >> sys.stderr, ' is None' + print(' is None', file=sys.stderr) raise SyntaxError(' error') # get top level items @@ -1850,39 +1854,39 @@ def GetFieldDef(fielddef, fields="format_, addrdef, baseaddr, bits, bitshift, da # converter present format_, addrdef, datadef, converter = fielddef else: - print >> sys.stderr, 'wrong {} length ({}) in setting'.format(fielddef, len(fielddef)) + print('wrong {} length ({}) in setting'.format(fielddef, len(fielddef)), file=sys.stderr) raise SyntaxError(' error') # ignore calls with 'root' setting - if isinstance(format_, dict) and baseaddr is None and datadef is None: + if isinstance(format_, instance(dict)) and baseaddr is None and datadef is None: return eval(fields) - if not isinstance(format_, (unicode,str,dict)): - print >> sys.stderr, 'wrong {} type {} in {}'.format(format_, type(format_), fielddef) + if not isinstance(format_, instance((str,dict))): + print('wrong {} type {} in {}'.format(format_, type(format_), fielddef), file=sys.stderr) raise SyntaxError(' error') # extract addrdef items baseaddr = addrdef - if isinstance(baseaddr, (list,tuple)): + if isinstance(baseaddr, instance((list,tuple))): if len(baseaddr) == 3: # baseaddr bit definition baseaddr, bits, bitshift = baseaddr - if not isinstance(bits, int): - print >> sys.stderr, ' must be defined as integer in {}'.format(bits, fielddef) + if not isinstance(bits, instance(int)): + print(' must be defined as integer in {}'.format(bits, fielddef), file=sys.stderr) raise SyntaxError(' error') - if not isinstance(bitshift, int): - print >> sys.stderr, ' must be defined as integer in {}'.format(bitshift, fielddef) + if not isinstance(bitshift, instance(int)): + print(' must be defined as integer in {}'.format(bitshift, fielddef), file=sys.stderr) raise SyntaxError(' error') else: - print >> sys.stderr, 'wrong {} length ({}) in {}'.format(addrdef, len(addrdef), fielddef) + print('wrong {} length ({}) in {}'.format(addrdef, len(addrdef), fielddef), file=sys.stderr) raise SyntaxError(' error') - if not isinstance(baseaddr, int): - print >> sys.stderr, ' must be defined as integer in {}'.format(baseaddr, fielddef) + if not isinstance(baseaddr, instance(int)): + print(' must be defined as integer in {}'.format(baseaddr, fielddef), file=sys.stderr) raise SyntaxError(' error') # extract datadef items arraydef = datadef - if isinstance(datadef, (tuple)): + if isinstance(datadef, instance((tuple))): if len(datadef) == 2: # datadef has a validator arraydef, validate = datadef @@ -1890,54 +1894,54 @@ def GetFieldDef(fielddef, fields="format_, addrdef, baseaddr, bits, bitshift, da # datadef has a validator and cmd set arraydef, validate, cmd = datadef # cmd must be a tuple with 2 objects - if isinstance(cmd, (tuple)) and len(cmd) == 2: + if isinstance(cmd, instance((tuple))) and len(cmd) == 2: group, tasmotacmnd = cmd - if group is not None and not isinstance(group, (str, unicode)): - print >> sys.stderr, 'wrong {} in {}'.format(group, fielddef) + if group is not None and not isinstance(group, instance(str)): + print('wrong {} in {}'.format(group, fielddef), file=sys.stderr) raise SyntaxError(' error') - if tasmotacmnd is isinstance(tasmotacmnd, tuple): + if tasmotacmnd is isinstance(tasmotacmnd, instance(tuple)): tasmotacmnds = tasmotacmnd for tasmotacmnd in tasmotacmnds: - if tasmotacmnd is not None and not callable(tasmotacmnd) and not isinstance(tasmotacmnd, (str, unicode)): - print >> sys.stderr, 'wrong {} in {}'.format(tasmotacmnd, fielddef) + if tasmotacmnd is not None and not callable(tasmotacmnd) and not isinstance(tasmotacmnd, instance(str)): + print('wrong {} in {}'.format(tasmotacmnd, fielddef), file=sys.stderr) raise SyntaxError(' error') else: - if tasmotacmnd is not None and not callable(tasmotacmnd) and not isinstance(tasmotacmnd, (str, unicode)): - print >> sys.stderr, 'wrong {} in {}'.format(tasmotacmnd, fielddef) + if tasmotacmnd is not None and not callable(tasmotacmnd) and not isinstance(tasmotacmnd, instance(str)): + print('wrong {} in {}'.format(tasmotacmnd, fielddef), file=sys.stderr) raise SyntaxError(' error') else: - print >> sys.stderr, 'wrong {} length ({}) in {}'.format(cmd, len(cmd), fielddef) + print('wrong {} length ({}) in {}'.format(cmd, len(cmd), fielddef), file=sys.stderr) raise SyntaxError(' error') else: - print >> sys.stderr, 'wrong {} length ({}) in {}'.format(datadef, len(datadef), fielddef) + print('wrong {} length ({}) in {}'.format(datadef, len(datadef), fielddef), file=sys.stderr) raise SyntaxError(' error') - if validate is not None and (not isinstance(validate, (unicode,str)) and not callable(validate)): - print >> sys.stderr, 'wrong {} type {} in {}'.format(validate, type(validate), fielddef) + if validate is not None and (not isinstance(validate, instance(str)) and not callable(validate)): + print('wrong {} type {} in {}'.format(validate, type(validate), fielddef), file=sys.stderr) raise SyntaxError(' error') # convert single int into one-dimensional list - if isinstance(arraydef, int): + if isinstance(arraydef, instance(int)): arraydef = [arraydef] - if arraydef is not None and not isinstance(arraydef, (list)): - print >> sys.stderr, 'wrong {} type {} in {}'.format(arraydef, type(arraydef), fielddef) + if arraydef is not None and not isinstance(arraydef, instance((list))): + print('wrong {} type {} in {}'.format(arraydef, type(arraydef), fielddef), file=sys.stderr) raise SyntaxError(' error') # get read/write converter items readconverter = converter - if isinstance(converter, (tuple)): + if isinstance(converter, instance((tuple))): if len(converter) == 2: # converter has read/write converter readconverter, writeconverter = converter - if readconverter is not None and not isinstance(readconverter, (str,unicode)) and not callable(readconverter): - print >> sys.stderr, 'wrong {} type {} in {}'.format(readconverter, type(readconverter), fielddef) + if readconverter is not None and not isinstance(readconverter, instance(str)) and not callable(readconverter): + print('wrong {} type {} in {}'.format(readconverter, type(readconverter), fielddef), file=sys.stderr) raise SyntaxError(' error') - if writeconverter is not None and (not isinstance(writeconverter, (bool,str,unicode)) and not callable(writeconverter)): - print >> sys.stderr, 'wrong {} type {} in {}'.format(writeconverter, type(writeconverter), fielddef) + if writeconverter is not None and (not isinstance(writeconverter, instance((bool,str))) and not callable(writeconverter)): + print('wrong {} type {} in {}'.format(writeconverter, type(writeconverter), fielddef), file=sys.stderr) raise SyntaxError(' error') else: - print >> sys.stderr, 'wrong {} length ({}) in {}'.format(converter, len(converter), fielddef) + print('wrong {} length ({}) in {}'.format(converter, len(converter), fielddef), file=sys.stderr) raise SyntaxError(' error') @@ -1971,12 +1975,12 @@ def ReadWriteConverter(value, fielddef, read=True, raw=False): if not raw and converter is not None: conv = readconverter if read else writeconverter try: - if isinstance(conv, str): # evaluate strings + if isinstance(conv, instance(str)): # evaluate strings return eval(conv.replace('$','value')) elif callable(conv): # use as format function return conv(value) - except Exception, e: - exit(e[0], e[1], type_=LogType.WARNING, line=inspect.getlineno(inspect.currentframe())) + except Exception as e: + exit(e.args[0], e.args[1], type_=LogType.WARNING, line=inspect.getlineno(inspect.currentframe())) return value @@ -2008,7 +2012,7 @@ def CmndConverter(valuemapping, value, idx, fielddef): if tasmotacmnd is not None and (callable(tasmotacmnd) or len(tasmotacmnd) > 0): if idx is not None: idx += 1 - if isinstance(tasmotacmnd, str): # evaluate strings + if isinstance(tasmotacmnd, instance(str)): # evaluate strings if idx is not None: evalstr = tasmotacmnd.replace('$','value').replace('#','idx').replace('@','valuemapping') else: @@ -2047,7 +2051,7 @@ def ValidateValue(value, fielddef): valid = True try: - if isinstance(validate, str): # evaluate strings + if isinstance(validate, instance(str)): # evaluate strings valid = eval(validate.replace('$','value')) elif callable(validate): # use as format function valid = validate(value) @@ -2068,7 +2072,7 @@ def GetFormatCount(format_): prefix count or 1 if not specified """ - if isinstance(format_, str): + if isinstance(format_, instance(str)): match = re.search("\s*(\d+)", format_) if match: return int(match.group(0)) @@ -2089,7 +2093,7 @@ def GetFormatType(format_): formattype = format_ bitsize = 0 - if isinstance(format_, str): + if isinstance(format_, instance(str)): match = re.search("\s*(\D+)", format_) if match: formattype = match.group(0) @@ -2151,7 +2155,7 @@ def GetFieldLength(fielddef): format_, addrdef, arraydef = GetFieldDef(fielddef, fields='format_, addrdef, arraydef') # contains a integer list - if isinstance(arraydef, list) and len(arraydef) > 0: + if isinstance(arraydef, instance(list)) and len(arraydef) > 0: # arraydef contains a list # calc size recursive by sum of all elements for i in range(0, arraydef[0]): @@ -2162,7 +2166,7 @@ def GetFieldLength(fielddef): else: length += GetFieldLength( (format_, addrdef, None) ) - elif isinstance(format_, dict): + elif isinstance(format_, instance(dict)): # -> iterate through format addr = None setting = format_ @@ -2174,7 +2178,7 @@ def GetFieldLength(fielddef): length += _len # a simple value - elif isinstance(format_, str): + elif isinstance(format_, instance(str)): length = struct.calcsize(format_) return length @@ -2200,7 +2204,7 @@ def GetSubfieldDef(fielddef): arraydef = None # create new datadef - if isinstance(datadef, tuple): + if isinstance(datadef, instance(tuple)): if cmd is not None: datadef = (arraydef, validate, cmd) else: @@ -2293,8 +2297,8 @@ def SetFieldValue(fielddef, dobj, addr, value): format_, bits, bitshift = GetFieldDef(fielddef, fields='format_, bits, bitshift') formatcnt = GetFormatCount(format_) singletype, bitsize = GetFormatType(format_) - if args.debug >= 2: - print >> sys.stderr, "SetFieldValue(): fielddef {}, addr 0x{:04x} value {} formatcnt {} singletype {} bitsize {} ".format(fielddef,addr,value,formatcnt,singletype,bitsize) + if debug(args) >= 2: + print("SetFieldValue(): fielddef {}, addr 0x{:04x} value {} formatcnt {} singletype {} bitsize {} ".format(fielddef,addr,value,formatcnt,singletype,bitsize), file=sys.stderr) if not format_[-1:].lower() in ['s','p']: addr += (bitsize / 8) * formatcnt for _ in range(0, formatcnt): @@ -2302,10 +2306,10 @@ def SetFieldValue(fielddef, dobj, addr, value): maxunsigned = ((2**bitsize) - 1) maxsigned = ((2**bitsize)>>1)-1 val = value & maxunsigned - if isinstance(value,int) and value < 0 and val > maxsigned: + if isinstance(value,instance(int)) and value < 0 and val > maxsigned: val = ((maxunsigned+1)-val) * (-1) - if args.debug >= 3: - print >> sys.stderr, "SetFieldValue(): Single type - fielddef {}, addr 0x{:04x} value {} singletype {} bitsize {}".format(fielddef,addr,val,singletype,bitsize) + if debug(args) >= 3: + print("SetFieldValue(): Single type - fielddef {}, addr 0x{:04x} value {} singletype {} bitsize {}".format(fielddef,addr,val,singletype,bitsize), file=sys.stderr) try: struct.pack_into(singletype, dobj, addr, val) except struct.error as e: @@ -2316,8 +2320,8 @@ def SetFieldValue(fielddef, dobj, addr, value): line=inspect.getlineno(inspect.currentframe())) value >>= bitsize else: - if args.debug >= 3: - print >> sys.stderr, "SetFieldValue(): String type - fielddef {}, addr 0x{:04x} value {} format_ {}".format(fielddef,addr,value,format_) + if debug(args) >= 3: + print("SetFieldValue(): String type - fielddef {}, addr 0x{:04x} value {} format_ {}".format(fielddef,addr,value,format_), file=sys.stderr) try: struct.pack_into(format_, dobj, addr, value) except struct.error as e: @@ -2349,7 +2353,7 @@ def GetField(dobj, fieldname, fielddef, raw=False, addroffset=0): field mapping """ - if isinstance(dobj, bytearray): + if isinstance(dobj, instance((bytes,bytearray))): dobj = str(dobj) valuemapping = None @@ -2362,7 +2366,7 @@ def GetField(dobj, fieldname, fielddef, raw=False, addroffset=0): return valuemapping # contains a integer list - if isinstance(arraydef, list) and len(arraydef) > 0: + if isinstance(arraydef, instance(list)) and len(arraydef) > 0: valuemapping = [] offset = 0 for i in range(0, arraydef[0]): @@ -2374,7 +2378,7 @@ def GetField(dobj, fieldname, fielddef, raw=False, addroffset=0): offset += length # contains a dict - elif isinstance(format_, dict): + elif isinstance(format_, instance(dict)): mapping_value = {} # -> iterate through format for name in format_: @@ -2386,7 +2390,7 @@ def GetField(dobj, fieldname, fielddef, raw=False, addroffset=0): valuemapping = copy.deepcopy(mapping_value) # a simple value - elif isinstance(format_, (str, bool, int, float, long)): + elif isinstance(format_, instance((str, bool, int, float, long))): if GetFieldLength(fielddef) != 0: valuemapping = ReadWriteConverter(GetFieldValue(fielddef, dobj, baseaddr+addroffset), fielddef, read=True, raw=raw) @@ -2426,12 +2430,12 @@ def SetField(dobj, fieldname, fielddef, restore, addroffset=0, filename=""): # do not write readonly values if writeconverter is False: - if args.debug >= 2: - print >> sys.stderr, "SetField(): Readonly '{}' using '{}'/{}{} @{} skipped".format(fieldname, format_, arraydef, bits, hex(baseaddr+addroffset)) + if debug(args) >= 2: + print("SetField(): Readonly '{}' using '{}'/{}{} @{} skipped".format(fieldname, format_, arraydef, bits, hex(baseaddr+addroffset)), file=sys.stderr) return dobj # contains a list - if isinstance(arraydef, list) and len(arraydef) > 0: + if isinstance(arraydef, instance(list)) and len(arraydef) > 0: offset = 0 if len(restore) > arraydef[0]: exit(ExitCode.RESTORE_DATA_ERROR, "file '{sfile}', array '{sname}[{selem}]' exceeds max number of elements [{smax}]".format(sfile=filename, sname=fieldname, selem=len(restore), smax=arraydef[0]), type_=LogType.WARNING, doexit=not args.ignorewarning, line=inspect.getlineno(inspect.currentframe())) @@ -2446,13 +2450,13 @@ def SetField(dobj, fieldname, fielddef, restore, addroffset=0, filename=""): offset += length # contains a dict - elif isinstance(format_, dict): + elif isinstance(format_, instance(dict)): for name in format_: # -> iterate through format if name in restore: dobj = SetField(dobj, name, format_[name], restore[name], addroffset=addroffset, filename=filename) # a simple value - elif isinstance(format_, (str, bool, int, float, long)): + elif isinstance(format_, instance((str, bool, int, float, long))): valid = True err = "" errformat = "" @@ -2465,22 +2469,22 @@ def SetField(dobj, fieldname, fielddef, restore, addroffset=0, filename=""): if format_[-1:] in ['c']: try: value = ReadWriteConverter(restore.encode(STR_ENCODING)[0], fielddef, read=False) - except Exception, e: - exit(e[0], e[1], type_=LogType.WARNING, line=inspect.getlineno(inspect.currentframe())) + except Exception as e: + exit(e.args[0], e.args[1], type_=LogType.WARNING, line=inspect.getlineno(inspect.currentframe())) valid = False # bool elif format_[-1:] in ['?']: try: value = ReadWriteConverter(bool(restore), fielddef, read=False) - except Exception, e: - exit(e[0], e[1], type_=LogType.WARNING, line=inspect.getlineno(inspect.currentframe())) + except Exception as e: + exit(e.args[0], e.args[1], type_=LogType.WARNING, line=inspect.getlineno(inspect.currentframe())) valid = False # integer elif format_[-1:] in ['b','B','h','H','i','I','l','L','q','Q','P']: value = ReadWriteConverter(restore, fielddef, read=False) - if isinstance(value, (str, unicode)): + if isinstance(value, instance(str)): value = int(value, 0) else: value = int(value) @@ -2552,15 +2556,15 @@ def SetField(dobj, fieldname, fielddef, restore, addroffset=0, filename=""): # copy value before possible change below _value = value - if isinstance(_value, (str, unicode)): + if isinstance(_value, instance(str)): _value = "'{}'".format(_value) if valid: if not skip: - if args.debug >= 2: + if debug(args) >= 2: sbits = " {} bits shift {}".format(bits, bitshift) if bits else "" - strvalue = "{} [{}]".format(_value, hex(value)) if isinstance(_value, int) else _value - print >> sys.stderr, "SetField(): Set '{}' using '{}'/{}{} @{} to {}".format(fieldname, format_, arraydef, sbits, hex(baseaddr+addroffset), strvalue) + strvalue = "{} [{}]".format(_value, hex(value)) if isinstance(_value, instance(int)) else _value + print("SetField(): Set '{}' using '{}'/{}{} @{} to {}".format(fieldname, format_, arraydef, sbits, hex(baseaddr+addroffset), strvalue), file=sys.stderr) if fieldname != 'cfg_crc' and fieldname != '_': prevvalue = GetFieldValue(fielddef, dobj, baseaddr+addroffset) dobj = SetFieldValue(fielddef, dobj, baseaddr+addroffset, value) @@ -2568,8 +2572,8 @@ def SetField(dobj, fieldname, fielddef, restore, addroffset=0, filename=""): if prevvalue != curvalue and args.verbose: message("Value for '{}' changed from {} to {}".format(fieldname, prevvalue, curvalue), type_=LogType.INFO) else: - if args.debug >= 2: - print >> sys.stderr, "SetField(): Special field '{}' using '{}'/{}{} @{} skipped".format(fieldname, format_, arraydef, bits, hex(baseaddr+addroffset)) + if debug(args) >= 2: + print("SetField(): Special field '{}' using '{}'/{}{} @{} skipped".format(fieldname, format_, arraydef, bits, hex(baseaddr+addroffset)), file=sys.stderr) else: sformat = "file '{sfile}' - {{'{sname}': {svalue}}} ({serror})"+errformat exit(ExitCode.RESTORE_DATA_ERROR, sformat.format(sfile=filename, sname=fieldname, serror=err, svalue=_value, smin=min_, smax=max_), type_=LogType.WARNING, doexit=not args.ignorewarning) @@ -2609,7 +2613,7 @@ def SetCmnd(cmnds, fieldname, fielddef, valuemapping, mappedvalue, addroffset=0, return cmnds # contains a list - if isinstance(arraydef, list) and len(arraydef) > 0: + if isinstance(arraydef, instance(list)) and len(arraydef) > 0: offset = 0 if len(mappedvalue) > arraydef[0]: exit(ExitCode.RESTORE_DATA_ERROR, "array '{sname}[{selem}]' exceeds max number of elements [{smax}]".format(sname=fieldname, selem=len(mappedvalue), smax=arraydef[0]), type_=LogType.WARNING, doexit=not args.ignorewarning, line=inspect.getlineno(inspect.currentframe())) @@ -2624,23 +2628,23 @@ def SetCmnd(cmnds, fieldname, fielddef, valuemapping, mappedvalue, addroffset=0, offset += length # contains a dict - elif isinstance(format_, dict): + elif isinstance(format_, instance(dict)): for name in format_: # -> iterate through format if name in mappedvalue: cmnds = SetCmnd(cmnds, name, format_[name], valuemapping, mappedvalue[name], addroffset=addroffset, idx=idx) # a simple value - elif isinstance(format_, (str, bool, int, float, long)): + elif isinstance(format_, instance((str, bool, int, float, long))): if group is not None: group = group.title(); - if isinstance(tasmotacmnd, tuple): + if isinstance(tasmotacmnd, instance(tuple)): tasmotacmnds = tasmotacmnd for tasmotacmnd in tasmotacmnds: cmnd = CmndConverter(valuemapping, mappedvalue, idx, fielddef) if group is not None and cmnd is not None: if group not in cmnds: cmnds[group] = [] - if isinstance(cmnd, list): + if isinstance(cmnd, instance(list)): for c in cmnd: cmnds[group].append(c) else: @@ -2650,7 +2654,7 @@ def SetCmnd(cmnds, fieldname, fielddef, valuemapping, mappedvalue, addroffset=0, if group is not None and cmnd is not None: if group not in cmnds: cmnds[group] = [] - if isinstance(cmnd, list): + if isinstance(cmnd, instance(list)): for c in cmnd: cmnds[group].append(c) else: @@ -2669,7 +2673,7 @@ def Bin2Mapping(decode_cfg): @return: valuemapping data as mapping dictionary """ - if isinstance(decode_cfg, bytearray): + if isinstance(decode_cfg, instance((bytes,bytearray))): decode_cfg = str(decode_cfg) # get binary header and template to use @@ -2761,7 +2765,7 @@ def Mapping2Bin(decode_cfg, jsonconfig, filename=""): @return: changed binary config data (decrypted) or None on error """ - if isinstance(decode_cfg, str): + if isinstance(decode_cfg, instance(str)): decode_cfg = bytearray(decode_cfg) @@ -2811,7 +2815,7 @@ def Mapping2Cmnd(decode_cfg, valuemapping, filename=""): @return: Tasmota command mapping {group: [cmnd <,cmnd <,...>>]} """ - if isinstance(decode_cfg, str): + if isinstance(decode_cfg, instance(str)): decode_cfg = bytearray(decode_cfg) # get binary header data to use the correct version template from device @@ -2871,8 +2875,8 @@ def Backup(backupfile, backupfileformat, encode_cfg, decode_cfg, configmapping): try: with open(backup_filename, "wb") as backupfp: backupfp.write(encode_cfg) - except Exception, e: - exit(e[0], "'{}' {}".format(backup_filename, e[1]),line=inspect.getlineno(inspect.currentframe())) + except Exception as e: + exit(e.args[0], "'{}' {}".format(backup_filename, e[1]),line=inspect.getlineno(inspect.currentframe())) # binary format elif backupfileformat.lower() == FileType.BIN.lower(): @@ -2884,8 +2888,8 @@ def Backup(backupfile, backupfileformat, encode_cfg, decode_cfg, configmapping): with open(backup_filename, "wb") as backupfp: backupfp.write(struct.pack('= 1: - print >> sys.stderr, parser.format_values() - print >> sys.stderr, "Settings:" + if debug(args) >= 1: + print(parser.format_values(), file=sys.stderr) + print("Settings:", file=sys.stderr) for k in args.__dict__: - print >> sys.stderr, " "+str(k), "= ",eval('args.{}'.format(k)) + print(" "+str(k), "= ",eval('args.{}'.format(k)), file=sys.stderr) return args @@ -3280,7 +3284,7 @@ if __name__ == "__main__": # no config source given ShortHelp(False) print - print parser.epilog + print(parser.epilog) sys.exit(ExitCode.OK) if len(encode_cfg) == 0: @@ -3309,7 +3313,7 @@ if __name__ == "__main__": # json screen output if (args.backupfile is None and args.restorefile is None) or args.output: if args.outputformat == 'json': - print json.dumps(configmapping, sort_keys=args.jsonsort, indent=None if args.jsonindent<0 else args.jsonindent, separators=(',', ':') if args.jsoncompact else (', ', ': ') ) + print(json.dumps(configmapping, sort_keys=args.jsonsort, indent=None if args.jsonindent<0 else args.jsonindent, separators=(',', ':') if args.jsoncompact else (', ', ': ') )) if args.outputformat == 'cmnd' or args.outputformat == 'command': tasmotacmnds = Mapping2Cmnd(decode_cfg, configmapping)