there were several errors that all resulted in a distance value reading of 0. Added an errorState that is printed to the log and helps troubleshooting.
Max. Distance checking can be turned off by setting max distance to 0 cm. If max. distance is used, exceeding the range will return a distance of 0 cm and print this to the log.
At this moment it is just using the same static configuration as P150 from the playground.
It is not yet using the settings. This will have to be changed later on.
This should also fix #1381.
There is something strange about the handling of micros() timers in `NewPingESP8266`.
For this reason I added also a timeout based on `millis()`.
Adding an existing and proven I2C library.
Will need to test if this is working fine on ESP32 too and try to move I2C functionality to use these functions.
There is a problem with the PlatformIO builder since the last update of @mvdbro
It's an issue with the parsing of `#ifdef ESP32`.
It is very well explained here: [platformio/platformio-core#801 (comment)](https://github.com/platformio/platformio-core/issues/801#issuecomment-252447178)
In short, the event handling functions for the wifi have been moved to a separate .h file, since those files will be parsed properly by the Library Dependency Finder (LDF) in PlatformIO 3.x
Were changed to be able to test the PlatformIO feature to compile only files that are actually used.
Apparently the Arduino IDE cannot find the files anymore because that IDE needs the parent directory to be named as the main project file, not "src"
* [issue #869] Added 'LWT' to last will topic and improved CPU load
See #869 for discussion on Last Will Topic.
Also changed the way it tried to reconnect to make it return a lot faster when connection is not (yet) possible and call the PubSubClient::loop() at a much slower pace to reduce CPU usage. (See #847)
This higher CPU load was probably introduced when fixing #683.
* [MQTT] Fix error reporting success status with longer payloads
Applied PR https://github.com/knolleary/pubsubclient/pull/360/files
* made MQTT_CALLBACK_SIGNATURE for esp32 functional
Applied PR https://github.com/knolleary/pubsubclient/pull/336
* [OLED] Move font to oled lib dir
It is specific for use wth that library.
* [OLED framed] Stop reading from flash constantly and live update WiFi
See #857
The OLED Framed plugin was reading from spiffs all of the time (on every display update)
Now the data is only read from SPIFFS when needed.
Also made the WiFi strength indicator update every second (only when changed) to be able to see changes in WiFi status much easier.
* Update Library LiquidCrystal_I2C to the latest version
* Fix LCD command (when message is longer than columns) that get split into the wrong lines - issue #603
* Added a "LCD command mode" parameter to handle how exceeding message would be treated, and if the line should be first padded with space.
* [V2.0] Allow IRremoteESP8266 to be build with core 2.4.0
A partial cherrypick of #772, to make merging easier.
Just some simple patches on the use of min() and max() in the library to allow it to compile using the 2.4.0 core lib. Actual use of this core lib is still prohibited by the check in ESPEasy.ino.
* [core 2.3.0] Force PlatformIO to use the 2.3.0 core libs
This update forces the PlatformIO environment to load the 1.5.0 version of espressif8266@1.5.0, which uses Core 2.3.0
Last few days, lots of issues reported by users who installed the 2.4.0 core libraries.
e.g. #769 and #763
It appeared the default PlatformIO Espressif 8266 1.6.0 libs now include the 2.4.0 core libraries.
Now I have to find a way to get my own environment back to the 2.3.0 core libs and see how I can get PlatformIO Espressif 8266 library back to version 1.5.0
* [switch] Fixed switch behavior and default settings. (#675)
As described in #673 .
The problem was partly related to the default values stored in flash ("0"), which was not a valid value for the switch type.
When upgrading from an older version of ESPeasy, make sure to check the switch type (normal switch or dimmer) and save the settings for the switch device again, even when nothing was changed.
Default configuration and new added switches will now work like intended.
When a controller is enabled (e.g. Domoticz MQTT or -HTTP) and the button is pressed multiple times, the ESP may reboot. See issue #674.
* ABC calibration feature added (#606)
* [Flash info] Detailed flash information (#678)
Last few days a number of issues and forum topic was about the type of flash used on the ESP boards.
This is an extension of the detailed information page.
Perhaps also merge with the newer and more clear layout of pull request #624?
That pull request was only merged to the mega branch.
I kept the changes local, but perhaps they should be placed in the "Storage" section introduced with #624.
Maybe also that pull request should get merged into the v2.0 branch.
* Bugfix/v2.0 crash switch (#682)
* [crashes] Added constructors to initialize all members in structs
Numerous structs are defined, but none of them have default constructors and there is no guarantee the members will be set when used.
With these default constructors, the parameters at least have an initialized value.
* [PubSubClient] Add bound checks on the internal buffer
Not sure if this was really causing an issue, but proper bound checks are always a good thing.
* [Crash Switch] Disabled delayBackground and added yield() calls
Something really fishy is going on with the delayBackground function, which will result in crashes when pressing the switch multiple times, with Domoticz MQTT enabled as first controller.
Disabled for now and delay(1) added to give background tasks a chance to do their work and make sure the watchdog doesn't perform a reset.
* [CI build errors] Commented out some unused variables
Travis considers them as error and fails the checks.
* [CI check] Out-of-bounds check fix
* actually ignore MQTT messages that are too big.
* moved mqtt stuff outside of backgroundtasks(). fixes #683 in my test scenario
* [Adafruit MPR121] Change deprecated name setThreshholds to setThresholds (#685)
See #684
* fixed plugin id of "Communication - Kamstrup Multical 401". (accidental octal notation)
* changed devicecombobox handling to save a lot of memory on device page. fixes #654#676 and could be triggered by #683 in some cases.
* [CPPcheck] v2.0 ControllerSettingsStruct some variables not initialized (#692)
Fixing these cppcheck errors:
101.43s$ cppcheck --enable=warning src/*.ino -q --force -I src --include=src/ESPEasy.ino --error-exitcode=1
[src/ESPEasy.ino:500]: (warning) Member variable 'ControllerSettingsStruct::HostName' is not initialized in the constructor.
[src/ESPEasy.ino:500]: (warning) Member variable 'ControllerSettingsStruct::Publish' is not initialized in the constructor.
[src/ESPEasy.ino:500]: (warning) Member variable 'ControllerSettingsStruct::Subscribe' is not initialized in the constructor.
* [crashes] Added constructors to initialize all members in structs
Numerous structs are defined, but none of them have default constructors and there is no guarantee the members will be set when used.
With these default constructors, the parameters at least have an initialized value.
* [PubSubClient] Add bound checks on the internal buffer
Not sure if this was really causing an issue, but proper bound checks are always a good thing.
* [Crash Switch] Disabled delayBackground and added yield() calls
Something really fishy is going on with the delayBackground function, which will result in crashes when pressing the switch multiple times, with Domoticz MQTT enabled as first controller.
Disabled for now and delay(1) added to give background tasks a chance to do their work and make sure the watchdog doesn't perform a reset.
* [CI build errors] Commented out some unused variables
Travis considers them as error and fails the checks.
* [CI check] Out-of-bounds check fix
* [SDS011] Add send commands to sensor
In the library used to communicate to the SDS011 sensor was only support to receive data from the sensor and not query the sensor or set another mode.
This is needed for #499 , to let the sensor sleep.
N.B. code is not yet tested, only implemented while reading the datasheet "Laser Dust Sensor Control Protocol V1.3"
* [SDS011] Lessen load on ESP by polling less frequent and use SoftSerial
The default setting were to set the delay to 0 and use an own software serial implementation.
This caused frequent timeouts on the web interface, WiFi reconnects, etc.
Now the already present SoftSerial is being used. This will gather all the data from the serial port and thus there is no need to poll 50 times a second.
Now the ESP is much more responsive.
* [SDS011] Allow the sensor to sleep to extend sensor lifetime
The internal laser of the SDS011 only will last for about 1 year when ran continuously.
When the RX of the sensor is connected, it can be set to sleep for N minutes between measurements. This will extend the lifetime of the sensor and reduce power consumption.
This sleep time is stored inside the flash of the sensor, so it can be set once and then the RX on the sensor could be disconnected again to be used for other purposes.