Changelog - Version 1.9.0
=========================

.. seo::
    :description: Changelog for esphomelib version 1.9.0.
    :image: /_static/changelog-1.9.0.png
    :author: Otto Winter
    :author_twitter: @OttoWinter_

.. imgtable::

    Beta Releases, guides/faq.html#how-do-i-update-to-the-latest-beta-release, new-box.svg, dark-invert
    Text Sensors, components/text_sensor/index, folder-open.svg, dark-invert
    MQTT Subscribe, components/sensor/mqtt_subscribe, mqtt.png

    Stepper, components/stepper/index, stepper.svg
    CSE7766, components/sensor/cse7766, cse7766.svg
    PMSX003, components/sensor/pmsx003, pmsx003.svg

    esphomeflasher, guides/faq.html#i-can-t-get-flashing-over-usb-to-work, logo.svg
    Total Daily Energy, components/sensor/total_daily_energy, sigma.svg, dark-invert
    MY9231/MY9291 LED driver, components/output/my9231, my9231.svg


It's time for another release of esphomelib: 1.9.0. This release is quite different from the last one,
it doesn't focus that much on new integrations with a "modest" amount of 7 new integrations. No, most of the
development has been focused on improving the core architecture and making the esphomelib ecosystem easier to use.
Because that's my main goal of this project: Providing a great user-experience so that you can focus on building
awesome things with DIY hardware!

The features I'm particularly excited about are:

* :ref:`esphomeflasher <esphome-flasher>` - Experiencing problems flashing esphomelib firmwares using esphomeyaml?
  No problem, esphomeflasher is a tool designed to make that super easy. Just let esphomeyaml generate the binary and flash
  from your PC.
* :doc:`Over-the-Air Updates </components/ota>` have been completely re-written to make them a lot more
  stable.
* A lot of work has been put in to provide more context in YAML validation errors. Sometimes, esphomeyaml will even
  try to give you suggestions for how to fix a validation error!
* A new release cycle: esphomeyaml now also has a :ref:`beta release channel <faq-beta>` kind of like Home Assistant. This helps to
  iron out the most important bugs before each stable release
* And of course, lots of stability improvements and bug fixes :)

Thank you very much to everybody who contributed to this release with new code or by
:ref:`reporting bugs <faq-bug_report>`!

New Components
--------------

- There's a new base component called :doc:`text sensors </components/text_sensor/index>` for using
  text-based inputs, not just numbers like the generic :doc:`sensors </components/sensor/index>` did
  (:yamlpr:`166`, :docspr:`52`)

- The new MQTT Subscribe Sensors allow you to get external data into esphomelib's ecosystem via MQTT
  (:libpr:`193`, :yamlpr:`175`, :docspr:`50`)

- Added :doc:`CSE7766 Power Sensor </components/sensor/cse7766>` to support power measurements
  on the Sonoff Pow R2 (:libpr:`277`, :yamlpr:`190`, :docspr:`59`)

- Thanks to :ghuser:`puuu`, the LED driver in the Sonoff B1 (MY9231) is now supported!
  (:libpr:`266`, :yamlpr:`227`, :docspr:`80`)

- Added the :doc:`PMSX003 Particulate Matter Sensor </components/sensor/pmsx003>`
  (:libpr:`229`, :yamlpr:`192`, :docspr:`58`)

- Added support for :doc:`A4988 Stepper Motors </components/stepper/index>` (:libpr:`239`,
  :yamlpr:`206`, :docspr:`68`)

- Added :doc:`total daily energy sensor </components/sensor/total_daily_energy>` to accumulate the total
  power usage over one day (:libpr:`256`, :yamlpr:`220`)

New Features
------------

- Compiling for ESP32s is now possible on RPis 🎉

- esphomelib now has a new tool: `esphomeflasher <https://github.com/esphome/esphome-flasher>`__ to simplify
  flashing on Windows/MacOS machines **without having to install esphomeyaml**. So if esphomeyaml for some reason
  can't find your USB port, you now can use the esphomeflasher app. See :ref:`esphome-flasher`.

- ESP8266s now save the states of lights/switches/... internally and restores them on boot.
  Additionally, esphomelib can now operate in fully offline mode if your WiFi network goes down
  or the MQTT broker is unreachable, see :ref:`automation-networkless`
  (:libpr:`258`, :libpr:`267`, :yamlpr:`229`)

- The :doc:`Over-the-Air Update </components/ota>` process was quite buggy sometimes and the Arduino-library
  esphomelib used was doing some weird stuff. The OTA-process has now been completely re-written to be more stable
  (:libpr:`204`, :yamlpr:`177`).

- Add support for the Home Assistant device registry. If you're using `Home Assistant 0.81.0 <https://www.home-assistant.io/blog/2018/10/26/release-81/>`__
  or higher you will see a list of all components for each esphomelib node in the integrations screen
  (:libpr:`233`).

- The current esphomelib version and compilation time are now printed on each boot
  (:libpr:`189`, :yamlpr:`159`):

  .. code-block:: text

      [13:57:33][I][application:092]: You're running esphomelib v1.9.0 compiled on Nov  3 2018, 13:55:11

- Stack traces in the USB logs are now automatically decoded to make debugging easier
  (:yamlpr:`214`)

- Added :ref:`mqtt-on_json_message` and :ref:`mqtt-publish_json_action` to make using JSON for MQTT payloads easier
  (:libpr:`230`, :yamlpr:`193`, :docspr:`60`)

- The remote (IR) components have received support for Samsung's IR protocol
  (:yamlpr:`176`, :docspr:`48`)

- Added :ref:`component-update_action`, :ref:`logger-log_action` and :ref:`script-execute_action` for simplifying
  automations
  (:libpr:`232`, :yamlpr:`196`, :yamlpr:`198`, :docspr:`61`, :docspr:`63`)

- Added :ref:`binary_sensor-on_multi_click` trigger to distinguish between double, long, and single clicks.
  (:libpr:`262`, :docspr:`77`,  :yamlpr:`226`)

- Added an :ref:`pn532-on_tag` to :doc:`PN532 NFC Readers </components/binary_sensor/pn532>` so that automations
  can directly use the NFC tag ID
  (:libpr:`194`, :yamlpr:`189`, :docspr:`57`)

- Added a ``hass-config`` command which generates a Home Assistant configuration for your esphomeyaml nodes.
  Useful if you're not using MQTT discovery (:yamlpr:`208`)

- All documentation pages now have comment systems powered by `disqus <https://disqus.com/>`__
  (:docspr:`47`)

- You now have to option to have a different log level for log messages sent over MQTT (:ref:`docs <mqtt-message>`,
  :yamlpr:`167`, :docspr:`51`)

- Added a color correction option to :doc:`FastLED addressable lights </components/light/fastled>`
  (:libpr:`234`, :yamlpr:`200`, :docspr:`64`)

- Added a ``clean`` command to esphomeyaml to fix some occasional build errors
  (:yamlpr:`181`)

- Added a ``send_first_at`` option to sliding window moving average sensor filters
  (:libpr:`240`, :yamlpr:`207`, :docspr:`69`)

- You can now upload OTA firmware files with the :doc:`web server component </components/web_server>`

- Added the ability to define global variables in esphomeyaml: :ref:`config-globals`.

- Added a ``frequency`` option to the :doc:`/components/output/esp8266_pwm`.

Breaking Changes
----------------

- As part of the rewrite of Over-The-Air updates, the old OTA protocol is incompatible with the new one -
  But fear not, esphomeyaml still supports the legacy OTA update process. On your first OTA upload with 1.9.0, you will
  see esphomeyaml try with the new OTA method and fail. After that, esphomeyaml will fall back to the old OTA
  process and upload correctly (:libpr:`204`).

- esphomelib's naming convention has been made more consistent. If you're not using any :ref:`lambdas <config-lambda>`,
  everything will still work. However, if you're using the C++ API, there are a couple of breaking changes:

  For sensors and binary sensors, ``id(my_sensor).value`` has been deprecated and ``id(my_sensor).state`` should be used
  instead. Additionally, the syntax for toggling lights and switches through C++ has been changed. Please see
  the :docspr:`62` changeset for more information
  (:libpr:`231`, :docspr:`62`, :yamlpr:`197`)

Release 1.9.1 - November 19
---------------------------

- lib: Fix RDM6300 not reporting cards :libpr:`278`
- lib: Fix SNTP with less than 3 servers :libpr:`279`
- lib: Fix update interval log missing time unit :libpr:`280`
- lib: Fix CSE7766 spamming logs :libpr:`281`
- lib: Fix outdated links :libpr:`282`
- yaml: Fix SNTP servers option :yamlpr:`237`

Release 1.9.2 - November 25
---------------------------

- lib: Fix crashing when logger not being used :libpr:`285`
- lib: Fix template cover spamming logs :libpr:`287`
- lib: Improve ESP32 BLE tracker stability :libpr:`289`
- lib: Fix sensor filters using C++ undefined behavior :libpr:`293`

Release 1.9.3 - December 1
--------------------------

- docs: Fix Sonoff Basic pinouts :docspr:`88` by :ghuser:`sherbang`
- docs: Update cwww.rst :docspr:`85` by :ghuser:`Melkor82`
- lib: Fix PMSX003 :libpr:`300`
- lib: Fix issue with filters introduced in 1.9.2 :libpr:`296`
- lib: Fix BMP085 pressure value :libpr:`292`
- yaml: CSE7766 update interval :yamlpr:`250`
- docs: CSE7766 Update Interval :docspr:`91`

All changes
-----------

- docs: Clarify ESP32 BLE Tracker comment :docspr:`42`
- yaml: Add a link to Home Assistant in README :yamlpr:`152` by :ghuser:`jonnyair`
- lib: Add a link to Home Assistant in README.md :libpr:`184` by :ghuser:`jonnyair`
- docs: Fix time docs 12-hour clock strftime format :docspr:`43`
- lib: Fix ESP32 BLE Presence detection always on :libpr:`185`
- lib: Fix LCD display include :libpr:`186`
- lib: Fix template switch spamming output :libpr:`187`
- lib: Fix using HTU21D for SI7021 :libpr:`188`
- lib: Fix components sending invalid state on startup if integration not ready yet :libpr:`195`
- lib: Log esphomelib version and compilation time on boot :libpr:`189` (new-feature)
- yaml: Log esphomelib version and compilation time on boot :yamlpr:`159` (new-feature)
- yaml: Fix raw remote receiver :yamlpr:`158`
- lib: Add Code of Conduct (Contributor Covenant) :libpr:`196`
- lib: Create CONTRIBUTING.md :libpr:`197`
- lib: Create issue templates :libpr:`198`
- lib: Create pull request template :libpr:`199`
- yaml: Create Pull Request Template :yamlpr:`172`
- yaml: Create CONTRIBUTING.md :yamlpr:`169`
- yaml: Add Code of Conduct (Contributor Covenant) :yamlpr:`168`
- yaml: Create issue templates :yamlpr:`171`
- docs: Add Code of Conduct (Contributor Covenant) :docspr:`44`
- docs: Create Pull Request Template :docspr:`45`
- yaml: Fix readme broken link :yamlpr:`174`
- lib: Fix pulse counter counting inverted on ESP8266 :libpr:`200`
- yaml: Add use_build_flags removal notice :yamlpr:`173`
- docs: Highlight update_interval gotchas :docspr:`46`
- docs: Add Disqus and cleanup :docspr:`47` (new-feature)
- lib: Fix PN532 not logging discovered tags :libpr:`202`
- yaml: Add Samsung IR protocol :yamlpr:`176` by :ghuser:`escoand` (new-feature)
- docs: add samsung ir protocol :docspr:`48` by :ghuser:`escoand` (new-feature)
- lib: Bump FastLED to 3.2.0 :libpr:`203`
- yaml: Fix Wifi power_save_mode option :yamlpr:`178`
- lib: Fix application sort order :libpr:`211`
- docs: Improve pulse counter docs :docspr:`49`
- lib: Fix ESP32 BLE Controller Init :libpr:`213`
- lib: Fix Web Server Creating Infinite Print Loop :libpr:`214`
- lib: Add TOGGLE payload to more components :libpr:`212` (new-feature)
- lib: ESP8266 Pulse Counter Improve Timing :libpr:`205`
- lib: Add MQTT Subscribe Sensor :libpr:`193` (new-feature)
- docs: Add MQTT Subscribe sensor :docspr:`50` (new-feature)
- yaml: Add MQTT Subscribe sensor :yamlpr:`175` (new-feature)
- yaml: MQTT different log level :yamlpr:`167` (new-feature)
- docs: Add option to have different log level over MQTT :docspr:`51` (new-feature)
- yaml: Add clean build files command and auto-clean on version change :yamlpr:`181` (new-feature)
- lib: Add power on value to switch :libpr:`207` (new-feature)
- lib: Rework OTA to be more stable :libpr:`204` (breaking-change) (new-feature)
- yaml: Rework OTA to be more stable :yamlpr:`177` (new-feature)
- lib: Fix WiFi not working when GPIO 0 connected :libpr:`215`
- lib: Fix MiFlora illuminance reading :libpr:`220`
- lib: Remove invalid file headers :libpr:`219`
- yaml: Fix config dump time output :yamlpr:`184`
- lib: GPIO Switch Rewrite :libpr:`217`
- docs: Add power on value to GPIO Switch :docspr:`55` (new-feature)
- yaml: Decentralize Automation Generator Code :yamlpr:`182`
- lib: Add PN532 On Tag Trigger :libpr:`226` (new-feature)
- lib: Add text sensors :libpr:`194` (new-feature)
- docs: Add Text sensors :docspr:`52` (new-feature)
- lib: Fix PCF8574 assert. :libpr:`223` by :ghuser:`lobradov`
- lib: Unify Xiaomi MiJia&MiFlora Implementations :libpr:`225`
- docs: Unify xiaomi implementations :docspr:`56`
- yaml: Unify Xiaomi implementations :yamlpr:`188`
- lib: Add CSE7766 for Sonoff Pow R2 :libpr:`227` (new-feature)
- docs: Add CSE7766 for Sonoff Pow R2 :docspr:`59` (new-feature)
- docs: Add PN532 On Tag Trigger :docspr:`57` (new-feature)
- yaml: Add CSE776 for Sonoff Pow R2 :yamlpr:`190` (new-feature)
- yaml: Add Text Sensors :yamlpr:`166` (new-feature)
- yaml: Add PN532 On Tag Trigger :yamlpr:`189` (new-feature)
- lib: Add MQTT publish JSON action and subscribe JSON trigger :libpr:`230` (new-feature)
- yaml: Add MQTT publish JSON action and subscribe JSON trigger :yamlpr:`193` (new-feature)
- docs: Add MQTT publish JSON action and subscribe JSON trigger :docspr:`60` (new-feature)
- lib: Add PMSX003 Particulate Matter Sensor :libpr:`229` (new-feature)
- docs: Add PMSX003 Particulate Matter Sensor :docspr:`58` (new-feature)
- lib: Add update component action and scripts :libpr:`232` (new-feature)
- docs: Add update component action and scripts :docspr:`61` (new-feature)
- lib: Implement HASS device registry for MQTT components :libpr:`233` (new-feature)
- lib: Add FastLED color correction option :libpr:`234` (new-feature)
- docs: Add FastLED color correction option :docspr:`64` (new-feature)
- yaml: Add update component action and scripts :yamlpr:`196` (new-feature)
- yaml: Add PMSX003 Particulate Matter Sensor :yamlpr:`192` (new-feature)
- yaml: Add FastLED color correction option :yamlpr:`200` (new-feature)
- yaml: Fix triggers being interpreted as a sequence of automations :yamlpr:`199`
- yaml: Fix value range trigger :expressionless: :yamlpr:`201`
- lib: Make naming convention consistent :libpr:`231` (breaking-change)
- docs: Make naming convention consistent :docspr:`62` (breaking-change)
- docs: Fix some typos :docspr:`65`
- yaml: Improve API naming convention consistency :yamlpr:`197` (breaking-change)
- yaml: Fix some typos :yamlpr:`202`
- docs: Add logger.log action :docspr:`63` (new-feature)
- yaml: Add logger.log action :yamlpr:`198` (new-feature)
- docs: Fix template sensor docs :docspr:`66`
- docs: Fix text sensor outdated API docs :docspr:`70`
- docs: Add Stepper Support :docspr:`68` (new-feature)
- lib: Add stepper motor support :libpr:`239` (new-feature)
- lib: Add send_first_at option to sliding window sensor filter :libpr:`240` (new-feature)
- docs: Add send_first_at option to sliding window sensor filter :docspr:`69` (new-feature)
- lib: Fix display line drawing algorithm :libpr:`241`
- lib: Fix availability calculation :libpr:`242`
- yaml: Add Stepper Motor Support :yamlpr:`206` (new-feature)
- yaml: Add send_first_at option to sliding window sensor filter :yamlpr:`207` (new-feature)
- docs: Switch example to Dehumidifier, minor grammar/puncuation :docspr:`67` by :ghuser:`rorpage`
- docs: Tiny typo fix. :docspr:`73` by :ghuser:`corbanmailloux`
- yaml: Auto-Decode stacktraces :yamlpr:`214` (new-feature)
- docs: Fix a broken link to setting up a BLE tracker. :docspr:`72` by :ghuser:`corbanmailloux`
- yaml: Add generate home assistant config command :yamlpr:`208` (new-feature)
- yaml: Update Gitlab Build Script :yamlpr:`215`
- lib: Fix status binary sensor always reporting false internally :libpr:`257`
- yaml: Fix HLW8012 Voltage Divider option not being added to source :yamlpr:`224`
- lib: Fix HLW8012 Initial Value Reporting :libpr:`254`
- lib: Clean up Time API :libpr:`253`
- yaml: Better typing to components :yamlpr:`225`
- lib: Support uploading OTA updates over web server :libpr:`255` (new-feature)
- lib: Save and Restore states from RTC memory :libpr:`258` (new-feature)
- docs: Revert add power_on_value to gpio switch :docspr:`78`
- lib: Improve default log levels and log sources :libpr:`264`
- lib: OTA Read back server acknowledgement :libpr:`263`
- lib: Add Multi Click Trigger to binary sensor :libpr:`262` (new-feature)
- docs: Add binary sensor on multi click trigger :docspr:`77` (new-feature)
- lib: ESP32 BLE Release Bluetooth Classic Memory :libpr:`261`
- yaml: Add restore state option to template switch :yamlpr:`222`
- docs: Advertise esphomeflasher :docspr:`76` (new-feature)
- docs: Replace table generator with custom RST directive :docspr:`75`
- yaml: Clean up time API :yamlpr:`221`
- yaml: Revert Add power on value to GPIO switch :yamlpr:`223`
- yaml: Add binary sensor multi click trigger :yamlpr:`226` (new-feature)
- lib: Add Total Daily Energy Sensor :libpr:`256` (new-feature)
- yaml: Add total daily energy sensor :yamlpr:`220` (new-feature)
- docs: Add total daily energy sensor :docspr:`79`
- lib: Introduce new setup phase: "dump config" to allow fully-offline operation :libpr:`267`
- yaml: Let esphomeyaml know about class inheritance :yamlpr:`229`
- docs: ESP32 deep sleep wake up multiple pins :docspr:`81`
- yaml: Deep Sleep Wake Up From Multiple Pins :yamlpr:`230`
- lib: Deep Sleep Multi Wakeup :libpr:`268`
- lib: MY9231/MY9291 LED driver support :libpr:`266` by :ghuser:`puuu` (new-feature)
- yaml: Add MY9231 support :yamlpr:`227` by :ghuser:`puuu` (new-feature)
- docs: MY9231/MY9291 LED driver documentation :docspr:`80` by :ghuser:`puuu` (new-feature)
- docs: SEO Optimization :docspr:`82`

Past Changelogs
---------------

- :doc:`v1.8.0`
- :doc:`v1.7.0`
