From be07f74a3f496814bd8b4b413e9eff7ceb857db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=BCndler?= Date: Sat, 13 Jul 2019 15:04:03 +0200 Subject: [PATCH 01/73] Remove monitored conditions from syncthru (#9825) --- source/_components/syncthru.markdown | 54 ++++------------------------ 1 file changed, 7 insertions(+), 47 deletions(-) diff --git a/source/_components/syncthru.markdown b/source/_components/syncthru.markdown index d4cdfa9b77c..27da5170cba 100644 --- a/source/_components/syncthru.markdown +++ b/source/_components/syncthru.markdown @@ -23,9 +23,6 @@ sensor: - platform: syncthru resource: http://my-printer.address name: My Awesome Printer - monitored_conditions: - - toner_black - - output_tray_0 ``` {% configuration %} @@ -39,48 +36,11 @@ sensor: required: false default: Samsung Printer type: string - monitored_conditions: - description: Conditions to display in the frontend. - required: false - default: all values - type: list - keys: - toner_black: - description: Black toner fill level - toner_cyan: - description: Cyan toner fill level - toner_magenta: - description: Magenta toner fill level - toner_yellow: - description: Yellow toner fill level - drum_black: - description: Black drum state - drum_cyan: - description: Cyan drum state - drum_magenta: - description: Magenta drum state - drum_yellow: - description: Yellow drum state - tray_1: - description: First paper input tray state - tray_2: - description: Second paper input tray state - tray_3: - description: Third paper input tray state - tray_4: - description: Fourth paper input tray state - tray_5: - description: Fifth paper input tray state - output_tray_0: - description: First paper output tray state - output_tray_1: - description: Second paper output tray state - output_tray_2: - description: Third paper output tray state - output_tray_3: - description: Fourth paper output tray state - output_tray_4: - description: Fifth paper output tray state - output_tray_5: - description: Sixth paper output tray state {% endconfiguration %} + +The following information is displayed in separate sensors, if it is available: + + - Black, cyan, magenta and yellow toner fill level + - Black, cyan, magenta and yellow drum state + - First to fifth paper input tray state + - First to sixth paper output tray state From 47c6f9561b95805d8abc8b33b81fe56b07b0a164 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sat, 13 Jul 2019 07:10:30 -0600 Subject: [PATCH 02/73] Add Apache Kafka docs (#9836) * Add Apache Kafka docs * :penil2: Cleaned up front matter --- source/_components/apache_kafka.markdown | 60 ++++++++++++++++++ .../images/supported_brands/apache_kafka.png | Bin 0 -> 8153 bytes 2 files changed, 60 insertions(+) create mode 100644 source/_components/apache_kafka.markdown create mode 100644 source/images/supported_brands/apache_kafka.png diff --git a/source/_components/apache_kafka.markdown b/source/_components/apache_kafka.markdown new file mode 100644 index 00000000000..7169c51bd3e --- /dev/null +++ b/source/_components/apache_kafka.markdown @@ -0,0 +1,60 @@ +--- +title: "Apache Kafka" +description: "Send data and events to Apache Kafka." +logo: apache_kafka.png +ha_category: + - History +ha_release: 0.97 +--- + +The `apache_kafka` integration sends all state changes to a +[Apache Kafka](https://kafka.apache.org/) topic. + +Apache Kafka is a real-time data pipeline that can read and write streams of data. It +stores its data safely in a distributed, replicated, fault-tolerant cluster. + +To use the `apache_kafka` integration in your installation, add the following to your +`configuration.yaml` file: + +```yaml +apache_kafka: + ip_address: localhost + port: 9092 + topic: home_assistant_1 +``` + +{% configuration %} +host: + description: The IP address or hostname of an Apache Kafka cluster. + required: true + type: string +port: + description: The port to use. + required: true + type: integer +topic: + description: The Kafka topic to send data to. + required: true + type: string +filter: + description: Filters for entities to be included/excluded. + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list +{% endconfiguration %} diff --git a/source/images/supported_brands/apache_kafka.png b/source/images/supported_brands/apache_kafka.png new file mode 100644 index 0000000000000000000000000000000000000000..6e22be0279c1615be35e363f555a6fc648b6275c GIT binary patch literal 8153 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 Ys<3&>3Ty$i8UneiX>g}Z-TvwS0JO? Date: Sat, 13 Jul 2019 15:12:46 +0200 Subject: [PATCH 03/73] Added config for multiple accounts - N26 (#9577) * Added config for multiple accounts * :pencil2: Tweak --- source/_components/n26.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/n26.markdown b/source/_components/n26.markdown index 264cf0c8d3c..4842c2529c2 100644 --- a/source/_components/n26.markdown +++ b/source/_components/n26.markdown @@ -25,6 +25,17 @@ n26: password: YOUR_PASSWORD ``` +It is possible to add more than one account: + +```yaml +# Example configuration.yaml entry +n26: + - username: YOUR_EMAIL1 + password: YOUR_PASSWORD1 + - username: YOUR_EMAIL2 + password: YOUR_PASSWORD2 +``` + {% configuration %} username: description: The account username. From 6c0dd968cd040e1c02cf8da3e5a957ed0e177873 Mon Sep 17 00:00:00 2001 From: Alex S Date: Sat, 13 Jul 2019 06:23:04 -0700 Subject: [PATCH 04/73] Add documentation for Splunk Component entity filter support (#9831) * Adding documentation for Splunk Component entity filter support. * Applying recommended cleanup suggestion Co-Authored-By: Klaas Schoute * :pencil2: Tweaks --- source/_components/splunk.markdown | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/source/_components/splunk.markdown b/source/_components/splunk.markdown index ddb057ee181..9aa909d2f16 100644 --- a/source/_components/splunk.markdown +++ b/source/_components/splunk.markdown @@ -3,7 +3,7 @@ title: "Splunk" description: "Record events in Splunk." logo: splunk.png ha_category: - - "History" + - History ha_release: 0.13 --- @@ -49,4 +49,25 @@ name: required: false default: HASS type: string +filter: + description: Filters for entities to be included/excluded from Splunk. Default is to include all entities. + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list {% endconfiguration %} From 8c09033c14ba03beceb55e4de17262491e5d0599 Mon Sep 17 00:00:00 2001 From: Markus Jankowski Date: Sat, 13 Jul 2019 15:36:16 +0200 Subject: [PATCH 05/73] Add climate services to Homematic IP Cloud (#9832) * Add climate services * :pencil2: Tweak --- source/_components/homematicip_cloud.markdown | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 6d817784386..93b3c972e07 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -144,7 +144,74 @@ authtoken: * Weather Sensor – plus (*HmIP-SWO-PL*) * Weather Sensor – pro (*HmIP-SWO-PR*) -Additional info: +## Services + +- `homematicip_cloud.activate_eco_mode_with_duration`: Activate eco mode with duration. +- `homematicip_cloud.activate_eco_mode_with_period`: Activate eco mode with period. +- `homematicip_cloud.activate_vacation`: Activates the vacation mode until the given time. +- `homematicip_cloud.deactivate_eco_mode`: Deactivates the eco mode immediately. +- `homematicip_cloud.deactivate_vacation`: Deactivates the vacation mode immediately. + +### Service Examples + +`accesspoint_id` (SGTIN) is optional for all services and only relevant if you have multiple Homematic IP Accesspoints connected to HA. If empty, service will be called for all configured Homematic IP Access Points. +The `accesspoint_id` (SGTIN) can be found on top of the integration page, or on the back of your Homematic IP Accesspoint. + +Activate eco mode with duration. + +```yaml +... +action: + service: homematicip_cloud.activate_eco_mode_with_duration + data: + duration: 60 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Activate eco mode with period. + +```yaml +... +action: + service: homematicip_cloud.activate_eco_mode_with_period + data: + endtime: 2019-09-17 18:00 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Activates the vacation mode until the given time. + +```yaml +... +action: + service: homematicip_cloud.activate_vacation + data: + endtime: 2019-09-17 18:00 + temperature: 18.5 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Deactivates the eco mode immediately. + +```yaml +... +action: + service: homematicip_cloud.deactivate_eco_mode + data: + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Deactivates the vacation mode immediately. + +```yaml +... +action: + service: homematicip_cloud.deactivate_vacation_mode + data: + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +## Additional info Push button devices are only available with a battery sensor. This is due to a limitation of the vendor API (eq3). It's not possible to detect a key press event on these devices at the moment. From 9e11620ed5e45bdd889185347c09b33b5eeef8d2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 14 Jul 2019 12:41:53 +0200 Subject: [PATCH 06/73] Add Twente Milieu integration (#9851) * Add Twente Milieu integration * Update source/_components/twentemilieu.markdown Co-Authored-By: Martin Hjelmare * Update source/_components/twentemilieu.markdown Co-Authored-By: Martin Hjelmare --- source/_components/twentemilieu.markdown | 44 ++++++++++++++++++ .../images/supported_brands/twentemilieu.png | Bin 0 -> 22403 bytes 2 files changed, 44 insertions(+) create mode 100644 source/_components/twentemilieu.markdown create mode 100644 source/images/supported_brands/twentemilieu.png diff --git a/source/_components/twentemilieu.markdown b/source/_components/twentemilieu.markdown new file mode 100644 index 00000000000..df54c4ab44f --- /dev/null +++ b/source/_components/twentemilieu.markdown @@ -0,0 +1,44 @@ +--- +title: "Twente Milieu" +description: "Instructions on how to integrate Twente Milieu with Home Assistant." +logo: twentemilieu.png +ha_category: + - Sensor + - Environment +ha_release: 0.97 +ha_iot_class: Cloud Polling +ha_config_flow: true +--- + +The Twente Milieu integration allows you to track the next scheduled waste +pickups by Twente Milieu for each of the different waste types. + +## Configuration via the frontend + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **Twente Milieu**. +Follow the configuration flow, after finishing, the Twente Milieu +integration will be available. + +## Sensors + +This integration provides sensors for the following waste pickup dates from Twente Milieu: + +- Next plastic waste pickup date. +- Next organic waste pickup date. +- Next paper waste pickup date. +- Next non-recyclable waste pickup date. + +## Services + +The Twente Milieu integration exposes a service that allows you to manually update +the pickup date from Twente Milieu. + +### Service `update` + +Update pickup dates from Twente Milieu + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------ | +| `id` | Yes | The unique address ID to update. | diff --git a/source/images/supported_brands/twentemilieu.png b/source/images/supported_brands/twentemilieu.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0124dec3abb7b9d3b63b02cb033e1f52cdf82f GIT binary patch literal 22403 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 Date: Tue, 16 Jul 2019 08:10:48 +0100 Subject: [PATCH 07/73] Added Hive Water Heater (#9856) * Added Hive Water Heater * Updated Climate * Merged into one hive.markdown * removed _ * Capitalised * :pencil2: Tweak --- source/_components/hive.markdown | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index ac475fd8bd1..f1532ff16f5 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -25,11 +25,12 @@ This integration uses the unofficial API used in the official Hive website [http There is currently support for the following device types within Home Assistant: -- [Binary Sensor](#binary-sensor) -- [Climate](#climate) -- [Light](#light) -- [Sensor](#sensor) -- [Switch](#switch) +- [Binary Sensor](#Binary-Sensor) +- [Climate](#Climate) +- [Light](#Light) +- [Sensor](#Sensor) +- [Switch](#Switch) +- [Water Heater](#Water-Heater) To add your Hive devices into your Home Assistant installation, add the following to your `configuration.yaml` file: @@ -102,3 +103,11 @@ The `hive` switch platform integrates your Hive plugs into Home Assistant, enabl The platform supports the following Hive products: - Hive Active Plug + +## Water Heater + +The `hive` water heater platform integrates your Hive hot water into Home Assistant, enabling control of setting the **mode**. + +The platform supports the following Hive products: + +- Hot Water Control From 1f1e40af483d1210200012fe57dc6329d25dd3c3 Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Tue, 16 Jul 2019 03:16:49 -0400 Subject: [PATCH 08/73] Add homekit reset accessory (#9860) * add homekit reset accessory * removed linkable title * :pencil2: Tweak --- source/_components/homekit.markdown | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 4717a5c62a6..64ef560e215 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -114,11 +114,11 @@ homekit: type: map keys: name: - description: Name of the entity to show in HomeKit. HomeKit will cache the name on the first run so a device must be removed and then re-added for any change to take effect. + description: Name of the entity to show in HomeKit. HomeKit will cache the name on the first run so the accessory must be [reset](#resetting-accessories) for any change to take effect. required: false type: string linked_battery_sensor: - description: The `entity_id` of a `sensor` entity to use as the battery of the accessory. HomeKit will cache an accessory's feature set on the first run so a device must be removed and then re-added for any change to take effect. + description: The `entity_id` of a `sensor` entity to use as the battery of the accessory. HomeKit will cache an accessory's feature set on the first run so a device must be [reset](#resetting-accessories) for any change to take effect. required: false type: string low_battery_threshold: @@ -141,7 +141,7 @@ homekit: required: true type: string type: - description: Only for `switch` entities. Type of accessory to be created within HomeKit. Valid types are `faucet`, `outlet`, `shower`, `sprinkler`, `switch` and `valve`. HomeKit will cache the type on the first run so a device must be removed and then re-added for any change to take effect. + description: Only for `switch` entities. Type of accessory to be created within HomeKit. Valid types are `faucet`, `outlet`, `shower`, `sprinkler`, `switch` and `valve`. HomeKit will cache the type on the first run so a device must be [reset](#resetting-accessories) for any change to take effect. required: false type: string default: '`switch`' @@ -460,12 +460,20 @@ To fix this, you need to unpair the `Home Assistant Bridge`, delete the `.homeki #### The linked battery sensor isn't recognized -Try removing the entity from HomeKit and then adding it again. If you are adding this config option to an existing entity in HomeKit, any changes you make to this entity's config options won't appear until the accessory is removed from HomeKit and then re-added. +Try removing the entity from HomeKit and then adding it again. If you are adding this config option to an existing entity in HomeKit, any changes you make to this entity's config options won't appear until the accessory is removed from HomeKit and then re-added. See [resetting accessories](#resetting-accessories). #### My media player is not showing up as a television accessory -Media Player entities with `device_class: tv` will show up as Television accessories on devices running iOS 12.2/macOS 10.14.4 or later. If needed, try removing the entity from HomeKit and then adding it again, especially if the `media_player` was previously exposed as a series of switches. Any changes, including changed supported features, made to an existing accessory won't appear until the accessory is removed from HomeKit and then re-added. +Media Player entities with `device_class: tv` will show up as Television accessories on devices running iOS 12.2/macOS 10.14.4 or later. If needed, try removing the entity from HomeKit and then adding it again, especially if the `media_player` was previously exposed as a series of switches. Any changes, including changed supported features, made to an existing accessory won't appear until the accessory is removed from HomeKit and then re-added. See [resetting accessories](#resetting-accessories). #### Can't control volume of your TV media player? The volume and play/pause controls will show up on the Remote app or Control Center. If your TV supports volume control through Home Assistant, you will be able to control the volume using the side volume buttons on the device while having the remote selected on screen. + +#### Resetting accessories + +On Home Assistant `0.97.x` or later, you may use the service `homekit.reset_accessory` with one or more entity_ids to reset accessories whose configuration may have changed. This can be useful when changing a media_player's device class to `tv`, linking a battery, or whenever HomeAssistant add supports for new HomeKit features to existing entities. + +On earlier versions of Home Assistant, you can reset accessories by removing the entity from HomeKit (via [filter](#configure-filter)) and then re-adding the accessory. + +With either strategy, the accessory will behave as if it's the first time the accessory has been set up, so you will need to restore the name, group, room, scene, and/or automation settings. From 75aaa5341cee2e466f2aaca65526c51474f9e1eb Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Tue, 16 Jul 2019 09:19:24 +0200 Subject: [PATCH 09/73] UniFi device tracker part of config entry (#9847) * Change * Additional changes * Declare what host and site are required for * Clarify that old device tracker configuration will still be imported and set up --- source/_components/unifi.markdown | 170 +++++++----------------------- 1 file changed, 39 insertions(+), 131 deletions(-) diff --git a/source/_components/unifi.markdown b/source/_components/unifi.markdown index dbf3bf8684b..07fb8be98f6 100644 --- a/source/_components/unifi.markdown +++ b/source/_components/unifi.markdown @@ -8,6 +8,7 @@ ha_category: - Switch ha_release: 0.81 ha_iot_class: Local Polling +ha_qa_scale: platinum redirect_from: - /components/device_tracker.unifi/ - /components/switch.unifi/ @@ -20,74 +21,38 @@ There is currently support for the following device types within Home Assistant: - [Presence Detection](#presence-detection) - [Switch](#switch) -Currently this implementation only exposes POE control for networked devices. Device tracker implementation is not using the same code base. - ## Configuration -Home Assistant offers UniFi integration through **Configuration** -> **Integrations** -> **UniFi Controller**. +Home Assistant offers UniFi integration through **Configuration** -> **Integrations** -> **UniFi Controller**. For legacy support old device_tracker configurations are imported and set up as new integrations. -Enter `host address`, `user name` and `password` and then continue to select which `site` you want to connect to Home Assistant. The user must have administrator privileges. +Enter `host address`, `user name` and `password` and then continue to select which `site` you want to connect to Home Assistant. The user needs administrator privileges in order to control POE switches. -## Debugging integration +### Extra configuration for device tracker -If you have problems with UniFi or the integration you can add debug prints to the log. - -```yaml -logger: - default: info - logs: - aiounifi: debug -    homeassistant.components.unifi: debug -    homeassistant.components.switch.unifi: debug -``` - -## Presence detection - -This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](http://ubnt.com/) [Unifi](https://www.ubnt.com/enterprise/#unifi) controller. - -To use this device tracker in your installation, add the following to your `configuration.yaml` file: +You can augment the behavior of UniFi device tracker by adding ```yaml # Example configuration.yaml entry -device_tracker: - - platform: unifi - host: unifi - username: username - password: password - ssid_filter: - - 'HomeSSID' - - 'IoTSSID' +unifi: + controllers: + - host: unifi + site: My site + ssid_filter: + - 'HomeSSID' + 'IoTSSID' ``` {% configuration %} -username: - description: A user on the controller - type: string - required: true -password: - description: The password for the account - type: string - required: true host: - description: The hostname or IP address of your controller - default: localhost + description: Same address as relevant config entry, needed to identify config entry type: string - required: false -port: - description: The port of your controller's web interface - default: 8443 - type: integer - required: false -site_id: - description: For multisite installations, you can specify `site_id` to specify which is used + required: true + default: None +site: + description: Same site as relevant config entry, needed to identify config entry type: string - required: false - default: default -verify_ssl: - description: Whether to do strict validation on SSL certificates of the Unifi controller. This can be true/false or the path to a locally trusted certificate to use for verification (i.e. "/path/to/custom_cert.pm") - type: boolean or filename - required: false - default: true + required: true + default: None detection_time: description: How long since the last seen time before the device is marked away, specified in seconds. type: integer @@ -98,103 +63,46 @@ ssid_filter: type: list of strings required: false default: None -monitored_conditions: - description: A list of extra attributes to pull from the Unifi controller. - type: list - required: false - default: None - {% endconfiguration %} -See the [device tracker integration page](/components/device_tracker/) for instructions how to configure the people to be tracked. - ### Configuring Users -The Unifi controller allows you to create multiple users on it besides the main administrator. It is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. +The UniFi controller allows you to create multiple users on it besides the main administrator. If all you want to use is the device tracker then it is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. If you want POE control as well you would need to have 'admin' permissions. ### Conflicts with MQTT -The Unifi controller can either be a dedicated hardware device (Unifi's cloud key), or as software any Linux system. If you run the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT integration as well. +The Unifi controller can either be a dedicated hardware device (UniFi's cloud key), or as software any Linux system. If you run the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT integration as well. It is recommended that you run the Unifi controller in a dedicated virtual machine to avoid that situation. -### Correctly specifying the Site ID +## Presence detection -For environments where there are multiple sites setup on the controller, or the default site is not being used you can use the `site_id` parameter to specify which site you would like to target. - -Please note that the value that is to be specificed here is not the name of the site as you would see it in controller interface, but a site ID value assigned from the software itself. - -To obtain this value for your configuration file, you can take it from the URL of your browser when on the controller webpage. - -For example, this is what would be seen in the URL bar when inside the dashboard page of a site: - -`https://127.0.0.1:8443/manage/s/ceb1m27d/dashboard` - -And your `site_id` value would be `ceb1m27d`. +This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](http://ubnt.com/) [UniFi](https://www.ubnt.com/enterprise/#unifi) controller. ### Troubleshooting and Time Synchronization -Presence detection depends on accurate time configuration between Home Assistant and the Unifi controller. +Presence detection depends on accurate time configuration between Home Assistant and the UniFi controller. -If Home Assistant and the Unifi controller are running on separate machines or VMs ensure that all clocks are synchronized. Failing to have synchronized clocks will lead to Home Assistant failing to mark a device as home. +If Home Assistant and the UniFi controller are running on separate machines or VMs ensure that all clocks are synchronized. Failing to have synchronized clocks will lead to Home Assistant failing to mark a device as home. [Related Issue](https://github.com/home-assistant/home-assistant/issues/10507) -### Monitored Conditions - -The Unifi controller returns a number of additional attributes that can be used for tracking devices, including signal strength, rx/tx rates, and which AP it is connected to. The list of possible options may vary depending on your Unifi controller version and if a device is wired or wireless. - -Unifi Controller version 5.6.29 has the following options: - -- _id -- _is_guest_by_uap -- _last_seen_by_uap -- _uptime_by_uap -- ap_mac -- assoc_time -- authorized -- bssid -- bytes-r -- ccq -- channel -- essid -- first_seen -- hostname -- idletime -- ip -- is_11r -- is_guest -- is_wired -- last_seen -- latest_assoc_time -- mac -- name -- noise -- noted -- oui -- powersave_enabled -- qos_policy_applied -- radio -- radio_proto -- rssi -- rx_bytes -- rx_bytes-r -- rx_packets -- rx_rate -- signal -- site_id -- tx_bytes -- tx_bytes-r -- tx_packets -- tx_power -- tx_rate -- uptime -- user_id -- usergroup_id -- vlan - ## Switch Switches are network devices that are powered by POE switches from Ubuiqitis UniFi line of networking gear. Note that POE control actually configures the network port of the switch which the device is connected to. + +## Debugging integration + +If you have problems with UniFi or the integration you can add debug prints to the log. + +```yaml +logger: + default: info + logs: + aiounifi: debug + homeassistant.components.unifi: debug + homeassistant.components.device_tracker.unifi: debug + homeassistant.components.switch.unifi: debug +``` From 39de364172b12022c3eec5681abd4a9a3e491f29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=BCndler?= Date: Tue, 16 Jul 2019 09:19:47 +0200 Subject: [PATCH 10/73] Fronius component documentation (#9283) * Documentation for Fronius sensor component * Update fronius description * Fix templating error * Update doc according to new implementation * Update configuration description * Fixes * Update source/_components/fronius.markdown Co-Authored-By: nielstron * Update source/_components/fronius.markdown Co-Authored-By: nielstron * Remove last line * Simplify example * Escape yaml templates * Remove "token" that cannot start any token according to deploy * Rework description * Fix configuration strings * Fix configuration look * :pencil2: Tweaks * :pencil2: Tweak * Correct documentation * Change fronius ip to fronius url * :pencil2: Tweak * :pencil2: Use `state_attr()` --- source/_components/fronius.markdown | 98 +++++++++++++++++++++ source/images/supported_brands/fronius.png | Bin 0 -> 20670 bytes 2 files changed, 98 insertions(+) create mode 100644 source/_components/fronius.markdown create mode 100644 source/images/supported_brands/fronius.png diff --git a/source/_components/fronius.markdown b/source/_components/fronius.markdown new file mode 100644 index 00000000000..fb23ba7b51c --- /dev/null +++ b/source/_components/fronius.markdown @@ -0,0 +1,98 @@ +--- +title: "Fronius" +description: "Instructions on how to connect your Fronius Inverter to Home Assistant." +ha_category: + - Energy + - Sensor +logo: fronius.png +ha_iot_class: Local Polling +ha_release: 0.96 +--- + +The `fronius` sensor will poll a [Fronius](http://www.fronius.com/) solar inverter, battery system or smart meter and present the values as sensors (or attributes of sensors) in Home Assistant. + +## Configuration + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +sensor: + - platform: fronius + resource: FRONIUS_URL + monitored_conditions: + - sensor_type: inverter +``` + +{% configuration %} +resource: + description: "The IP address of the Fronius device" + required: true + type: string +monitored_conditions: + description: "Conditions to display in the frontend" + required: true + type: list + keys: + type: + description: "The kind of device, can be one of \"inverter\", \"storage\", \"meter\", or \"power_flow\"" + required: true + type: string + scope: + description: "The device type for storage and inverter, can be either \"device\" or \"system\"" + required: false + type: string + default: "device" + device: + description: "The id of the device to poll" + required: false + default: "\"1\" for inverters and \"0\" for other devices such as storages in compliance with Fronius Specs" +{% endconfiguration %} + +## Examples + +When including more of the components that one Fronius device offers, +a list of sensors that are to be integrated can be given like below. + +```yaml +sensor: + - platform: fronius + resource: FRONIUS_IP_ADDRESS + monitored_conditions: + - sensor_type: inverter + device: 1 + - sensor_type: meter + scope: system + - sensor_type: meter + device: 3 + - sensor_type: storage + device: 0 + - sensor_type: power_flow +``` + +## Sensors configuration + +To extract more detailed values from the state of each integrated sensor and to circumvent undefined values, +it is recommended to use template sensors as an interface: + +{% raw %} +```yaml +- platform: template + sensors: + electricity_inverter1_power_netto: + unit_of_measurement: 'W' + value_template: >- + {% if states.sensor.fronius_1921684247_inverter_1.attributes.power_ac is defined -%} + {{ states_attr('sensor.fronius_1921684247_inverter_1', 'power_ac') | float | round(2) }} + {%- else -%} + 0 + {%- endif %} + electricity_autonomy: + unit_of_measurement: '%' + value_template: >- + {% if states.sensor.fronius_1921684247_power_flow.attributes.relative_autonomy is defined -%} + {{ states_attr('sensor.fronius_1921684247_power_flow', 'relative_autonomy') | float | round(2) }} + {%- else -%} + 0 + {%- endif %} +``` +{% endraw %} diff --git a/source/images/supported_brands/fronius.png b/source/images/supported_brands/fronius.png new file mode 100644 index 0000000000000000000000000000000000000000..6b44d1cb351c937098b33c4513c77be81e463f83 GIT binary patch literal 20670 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 SfI{JxEvGDSm@>0VxBdgHeas2~ literal 0 HcmV?d00001 From f7d31811ab63ef7f6ba4e81e3f8893a884993612 Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Tue, 16 Jul 2019 03:26:05 -0400 Subject: [PATCH 11/73] Add French support and two sensors to Environment Canada. (#9747) * Add French support and two sensors to Environment Canada. * Clarify name parameters, add wind bearing sensor type * Remove `monitored_conditions` config parameter * Remove `name` config parameter, add example TTS script * :pencil2: Tweak * :pencil2: Tweak * :pencil2: Jinja2 escaping --- .../_components/environment_canada.markdown | 102 ++++++++---------- 1 file changed, 47 insertions(+), 55 deletions(-) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index 3c229dd4594..ce13f3edc20 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -40,10 +40,10 @@ weather: - platform: environment_canada ``` -- The sensor checks for new data every 10 minutes, and the source data is typically updated hourly within 10 minutes after the hour. +- The platform checks for new data every 10 minutes, and the source data is typically updated hourly within 10 minutes after the hour. - If no name is given, the weather entity will be named `weather.`. - The platform automatically determines which weather station to use based on the system's latitude/longitude settings. For greater precision, it is also possible to specify either: - - A specific station code based on [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or + - A specific station code of the form `AB/s0000123` based on those listed in [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or - A specific latitude/longitude {% configuration %} @@ -60,7 +60,7 @@ station: required: false type: string name: - description: Name to be used for the weather entity. + description: Name to be used for the entity ID, e.g. `weather.`. required: false type: string forecast: @@ -82,11 +82,34 @@ sensor: - platform: environment_canada ``` -- By default, a sensor entity is created for each monitored condition and each category of alert. Each sensor entity will be given the `device_id` of `sensor.`. -- The sensor checks for new data every 10 minutes, and the source data is typically updated hourly within 10 minutes after the hour. +- A sensor will be created for each of the following conditions, with a default name like `sensor.temperature`: + - `temperature` - The current temperature, in ºC. + - `dewpoint` - The current dewpoint, in ºC. + - `wind_chill` - The current wind chill, in ºC. + - `humidex` - The current humidex, in ºC. + - `pressure` - The current air pressure, in kPa. + - `tendency` - The current air pressure tendency, e.g. "Rising". + - `humidity` - The current humidity, in %. + - `visibility` - The current visibility, in km. + - `condition` - A brief text statement of the current weather conditions, e.g. "Sunny". + - `wind_speed` - The current sustained wind speed, in km/h. + - `wind_gust` - The current wind gust, in km/h. + - `wind_dir` - The current cardinal wind direction, e.g. "SSW". + - `wind_bearing` - The current wind direction in degrees. + - `high_temp` - The next forecast high temperature, in ºC. + - `low_temp` - The next forecast low temperature, in ºC. + - `pop` - The next forecast probability of precipitation, in %. + - `text_summary` - A textual description of the next forecast period, e.g. "Tonight. Mainly cloudy. Low -12." + - `warnings` - Current warning alerts. + - `watches` - Current watch alerts. + - `advisories` - Current advisory alerts. + - `statements` - Current special weather statements. + - `endings` - Alerts that have recently ended. +- The platform refreshes the data every minute (primarily to update alerts), and the source data is typically updated hourly within 10 minutes after the hour. - The platform automatically determines which weather station to use based on the system's latitude/longitude settings. For greater precision, it is also possible to specify either: - - A specific station code based on [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or + - A specific station code of the form `AB/s0000123` based on those listed in [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or - A specific latitude/longitude +- In the case of multiple alerts in the same category, the titles and details of each are concatenated together with a pipe (`|`) separator. {% configuration %} latitude: @@ -101,58 +124,27 @@ station: description: The station code of a specific weather station to use. If provided, this station will be used and any latitude/longitude coordinates provided will be ignored. Station codes must be in the form of `AB/s0000123`, where `AB`is a provincial abbreviation and `s0000123` is a numeric station code. required: false type: string -name: - description: Name to be used for the sensor entities. +language: + description: Language to use for entity display names and textual data (English or French). required: false type: string -monitored_conditions: - description: The conditions to monitor. A sensor will be created for each condition. - required: true - type: list - default: All keys - keys: - temperature: - description: The current temperature, in ºC. - dewpoint: - description: The current dewpoint, in ºC. - wind_chill: - description: The current wind chill, in ºC. - humidex: - description: The current humidex, in ºC. - pressure: - description: The current air pressure, in kPa. - tendency: - description: The current air pressure tendency, e.g. "Rising" or "Falling". - humidity: - description: The current humidity, in %. - visibility: - description: The current visibility, in km. - condition: - description: A brief text statement of the current weather conditions, e.g. "Sunny". - wind_speed: - description: The current sustained wind speed, in km/h. - wind_gust: - description: The current wind gust, in km/h. - wind_dir: - description: The current cardinal wind direction, e.g. "SSW". - high_temp: - description: The next forecast high temperature, in ºC. - low_temp: - description: The next forecast low temperature, in ºC. - pop: - description: The next forecast probability of precipitation, in %. - warnings: - description: Current warning alerts. - watches: - description: Current watch alerts. - advisories: - description: Current advisory alerts. - statements: - description: Current special weather statements. - endings: - description: Alerts that have recently ended. + default: english {% endconfiguration %} +###Alert TTS Script + +If you would like to have alerts announced via a text-to-speech service, you can use a script similar to the following: + +{% raw %} +```yaml +weather_alert_tts: + sequence: + - service: tts.amazon_polly_say + data_template: + message: "{{ states('sensor.warnings') }} in effect. {{ state_attr('sensor.warnings', 'alert detail') }}" +``` +{% endraw %} + ## Camera The `environment_canada` camera platform displays Environment Canada meteorological [radar imagery](https://weather.gc.ca/radar/index_e.html). @@ -184,7 +176,7 @@ station: required: false type: string name: - description: Name to be used for the camera entity. + description: Name to be used for the entity ID, e.g. `camera.`. required: false type: string loop: From d07d64511d3438b69263337af9f2495fecc7b31d Mon Sep 17 00:00:00 2001 From: Thomas Le Gentil Date: Tue, 16 Jul 2019 11:18:50 +0200 Subject: [PATCH 12/73] Added the Fortigate component documentation (#9807) * Added the Fortigate component documentation * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Klaas Schoute * Update source/_components/fortigate.markdown Co-Authored-By: Klaas Schoute * Update source/_components/fortigate.markdown Co-Authored-By: Klaas Schoute * fixed some remaks * rewording * Move setup up --- source/_components/fortigate.markdown | 81 ++++++++++++++++++++ source/images/supported_brands/fortinet.jpg | Bin 0 -> 12302 bytes 2 files changed, 81 insertions(+) create mode 100644 source/_components/fortigate.markdown create mode 100644 source/images/supported_brands/fortinet.jpg diff --git a/source/_components/fortigate.markdown b/source/_components/fortigate.markdown new file mode 100644 index 00000000000..68a1c761852 --- /dev/null +++ b/source/_components/fortigate.markdown @@ -0,0 +1,81 @@ +--- +layout: page +title: "Fortigate" +description: "Instructions on how to integrate Fortigate Firewalls into Home Assistant." +date: 2019-07-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: fortinet.jpg +ha_category: + - Presence Detection +ha_release: 0.96 +ha_iot_class: Local Polling +--- + +This is a Fortigate presence sensor based on device detection of the Fortigate API + +## Fortigate setup + +Configure the Fortigate with a USERNAME API user and assign its minimum rights profile : + +```text +config system accprofile + edit "homeassistant_profile" + set authgrp read + next +end + +config system api-user + edit "USERNAME" + set api-key API_KEY + set accprofile "homeassistant_profile" + set vdom "root" + config trusthost + edit 1 + set ipv4-trusthost + next + end + next +end +``` + +## Configuration + +Add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +fortigate: + host: HOST_IP + username: YPUR_USERNAME + api_key: YOUR_API_KEY +``` + +{% configuration %} +host: + description: The IP address of the Fortigate device. + required: true + type: string +username: + description: The username of the user that will connect to the Fortigate device. + required: true + type: string +api_key: + description: The API key associated with the user. + required: true + type: string +devices: + description: The MAC addresses of the devices to monitor. + required: false + type: string +{% endconfiguration %} + +### Errors + +If the rights of the profile are not sufficient, you will get the following error: + +```txt +ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved +``` diff --git a/source/images/supported_brands/fortinet.jpg b/source/images/supported_brands/fortinet.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b764105fc003a910c81825be00e94dd1b40e8fc8 GIT binary patch literal 12302 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 B_4NP% literal 0 HcmV?d00001 From 68ab558422caad0c89f3a74f49ca6b8391f90b25 Mon Sep 17 00:00:00 2001 From: Ryan Claussen Date: Tue, 16 Jul 2019 11:05:22 -0500 Subject: [PATCH 13/73] Add severe weather sensor to Dark Sky (#9129) * Add severe weather sensor to Dark Sky * :pencil2: full stop. --- source/_components/darksky.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/darksky.markdown b/source/_components/darksky.markdown index 759306b4407..c7ae5bca389 100644 --- a/source/_components/darksky.markdown +++ b/source/_components/darksky.markdown @@ -143,6 +143,8 @@ monitored_conditions: description: The approximate distance to the nearest storm in miles. nearest_storm_bearing: description: The approximate direction of the nearest storm in degrees, with true north at 0° and progressing clockwise. + alerts: + description: Current severe weather advisories. units: description: Specify the unit system. Valid options are `auto`, `us`, `si`, `ca` and `uk2`. `auto` will let Dark Sky decide the unit system based on location. required: false From d77314e682ca8baaf617634c8d97a67e59d610a6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 17 Jul 2019 08:52:58 +0200 Subject: [PATCH 14/73] FortiGate: Fixes release, spelling & front matter (#9872) --- source/_components/fortigate.markdown | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/source/_components/fortigate.markdown b/source/_components/fortigate.markdown index 68a1c761852..3d063e675d4 100644 --- a/source/_components/fortigate.markdown +++ b/source/_components/fortigate.markdown @@ -1,24 +1,18 @@ --- -layout: page title: "Fortigate" -description: "Instructions on how to integrate Fortigate Firewalls into Home Assistant." -date: 2019-07-07 22:00 -sidebar: true -comments: false -sharing: true -footer: true +description: "Instructions on how to integrate FortiGate Firewalls into Home Assistant." logo: fortinet.jpg ha_category: - Presence Detection -ha_release: 0.96 +ha_release: 0.97 ha_iot_class: Local Polling --- -This is a Fortigate presence sensor based on device detection of the Fortigate API +This is a FortiGate presence sensor based on device detection of the FortiGate API -## Fortigate setup +## FortiGate set up -Configure the Fortigate with a USERNAME API user and assign its minimum rights profile : +Configure the FortiGate with a USERNAME API user and assign its minimum rights profile: ```text config system accprofile @@ -55,11 +49,11 @@ fortigate: {% configuration %} host: - description: The IP address of the Fortigate device. + description: The IP address of the FortiGate device. required: true type: string username: - description: The username of the user that will connect to the Fortigate device. + description: The username of the user that will connect to the FortiGate device. required: true type: string api_key: @@ -72,7 +66,7 @@ devices: type: string {% endconfiguration %} -### Errors +## Errors If the rights of the profile are not sufficient, you will get the following error: From 8c71761087a2ce5cbc7db221f077bce0ebb4fbc5 Mon Sep 17 00:00:00 2001 From: Leandro Loureiro Date: Wed, 17 Jul 2019 12:30:53 +0200 Subject: [PATCH 15/73] Add documentation for custom spotify service play_playlist (#9798) * adding documentation for custom service play_playlist_random_music * aligning documentation * improve description --- source/_components/spotify.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_components/spotify.markdown b/source/_components/spotify.markdown index 526a2e39353..6ed840a6ad5 100644 --- a/source/_components/spotify.markdown +++ b/source/_components/spotify.markdown @@ -117,6 +117,19 @@ which are part of the service. You can test this from the services control panel in the Home Assistant frontend. +## Services +Extra services besides the default ones in component [Media Player component](/components/media_player/). + +### Service `play_playlist` + +Play a Spotify playlist with an option to start on a random position of the playlist. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `media_content_id` | no | Spotify URI of playlist. Must be playlist kind of URI. +| `random_song` | yes | True to select random song at start, False to start from beginning. + + The above playlist example is a URI link to the "Reggae Infusions" playlist. [This support document from Spotify](https://support.spotify.com/us/article/sharing-music/) explains how to get this URI value to use for playlists in the Spotify component. From 583d685ea6aca31a49d515deb7ccc58310a34689 Mon Sep 17 00:00:00 2001 From: bouni Date: Wed, 17 Jul 2019 20:49:48 +0200 Subject: [PATCH 16/73] Add documentation of new login_method config option (#9881) * Add documentation of new login_method config option * :pencil2: Tweaks --- source/_components/mikrotik.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/mikrotik.markdown b/source/_components/mikrotik.markdown index 49199b8c8b2..1ab056dc995 100644 --- a/source/_components/mikrotik.markdown +++ b/source/_components/mikrotik.markdown @@ -53,6 +53,12 @@ password: description: The password of the given user account on the MikroTik device. required: true type: string +login_method: + description: The login method to use on the MikroTik device. The `plain` method is used by default, if you have an older RouterOS Version than 6.43, use `token` as the login method. + required: false + type: string + options: plain, token + default: plain port: description: RouterOS API port. required: false @@ -69,6 +75,15 @@ method: type: string {% endconfiguration %} +
+ + As of version 6.43 of RouterOS Mikrotik introduced a new login method (plain) in addition to the old login method (token). With Version 6.45.1 the old token login method got deprecated. + In order to support both login mechanisms, the new config option `login_method` has been introduced. If this option is not set, the component will try to login with the plain method first and the token method if that fails. + That can cause log entries on the router like `login failure for user homeassistant from 192.168.23.10 via api` but doesn't keep the component from working. + To get rid of these entries, set the `login_method` to `plain` for Routers with OS versions > 6.43 or `token` for routers with OS versions < 6.43. + +
+ ## Use a certificate To use SSL to connect to the API (via `api-ssl` instead of `api` service) further configuration is required at RouterOS side. You have to upload or generate a certificate and configure `api-ssl` service to use it. Here is an example of a self-signed certificate: From ce35c5a735a2dc0e109823118e06333c152b6c6d Mon Sep 17 00:00:00 2001 From: Markus Jankowski Date: Wed, 17 Jul 2019 21:42:58 +0200 Subject: [PATCH 17/73] Add HmIP-PCBS, HmIP-PCBS2, HmIP-PCBS-Bat to Homematic IP Cloud (#9883) * Add HmIP-PCBS, HmIP-PCBS2, HmIP-PCBS-Bat * :pencil2: Tweak --- source/_components/homematicip_cloud.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 93b3c972e07..61cd819e32d 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -138,6 +138,9 @@ authtoken: * Switch Actuator and Meter – flush-mount (*HmIP-FSM, -FSM16*) * Open Collector Module Receiver - 8x (*HmIP-MOD-OC8*) * Multi IO Box - 2x (*HmIP-MIOB*) + * Switch Circuit Board - 1x channels (*HmIP-PCBS*) + * Switch Circuit Board - 2x channels (*HmIP-PCBS2*) + * Printed Circuit Board Switch Battery (*HmIP-PCBS-BAT*) * homematicip_cloud.weather * Weather Sensor – basic (*HmIP-SWO-B*) From 2b7cf67945e374aad0f8fe33672fde8907184748 Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Thu, 18 Jul 2019 16:22:09 -0600 Subject: [PATCH 18/73] Add MQTT climate precision (#9896) * Add MQTT climate precision * Document default values * Add example config * Fix generate error --- source/_components/climate.mqtt.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index a5f38468a43..4da6ff8fc70 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -139,6 +139,11 @@ temperature_high_state_topic: description: The MQTT topic to subscribe for changes in the target high temperature. If this is not set, the target high temperature works in optimistic mode (see below). required: false type: string +precision: + description: The desired precision for this device. Can be used to match your actual thermostat's precision. Supported values are `0.1`, `0.5` and `1.0`. + required: false + type: float + default: 0.1 for Celsius and 1.0 for Fahrenheit. fan_mode_command_topic: description: The MQTT topic to publish commands to change the fan mode. required: false @@ -318,4 +323,5 @@ climate: temperature_command_topic: "study/ac/temperature/set" fan_mode_command_topic: "study/ac/fan/set" swing_mode_command_topic: "study/ac/swing/set" + precision: 1.0 ``` From 474632f8d72dd8149784f0e215a5fc1ec5b502c9 Mon Sep 17 00:00:00 2001 From: Greg <34967045+gtdiehl@users.noreply.github.com> Date: Thu, 18 Jul 2019 15:29:53 -0700 Subject: [PATCH 19/73] Add documentation for new Rainforest Eagle-200 platform (#9761) * Add doc for new component Rainforest Eagle-200 * Added Rainforest Logo and Examples to documentation * Fixed requested changes * :pencil2: Tweak * Removed Examples and Variable selectors * Fixed merge issue * :pencil2: Removal of obsolete code --- source/_components/rainforest_eagle.markdown | 40 ++++++++++++++++++ .../rainforest_automation_logo.png | Bin 0 -> 22510 bytes 2 files changed, 40 insertions(+) create mode 100644 source/_components/rainforest_eagle.markdown create mode 100644 source/images/supported_brands/rainforest_automation_logo.png diff --git a/source/_components/rainforest_eagle.markdown b/source/_components/rainforest_eagle.markdown new file mode 100644 index 00000000000..99414c1e55b --- /dev/null +++ b/source/_components/rainforest_eagle.markdown @@ -0,0 +1,40 @@ +--- +title: "Rainforest Eagle-200" +description: "Instructions on how to setup the Rainforest Eagle-200 with Home Assistant." +logo: rainforest_automation_logo.png +ha_category: + - Energy + - Sensor +ha_release: 0.96 +ha_iot_class: Local Polling +--- + +A `sensor` platform for the [Rainforest Eagle-200](https://rainforestautomation.com/rfa-z114-eagle-200/) energy gateway. + +## Configuration + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: rainforest_eagle + ip_address: IP_FOR_EAGLE + cloud_id: CLOUD_ID_FROM_EAGLE + install_code: INSTALL_CODE_FROM_EAGLE +``` + +{% configuration %} +ip_address: + description: The local IP address of your Eagle-200 device. + required: true + type: string +cloud_id: + description: The Cloud ID that is printed on the bottom of the Eagle-200 + required: true + type: string +install_code: + description: The Install Code that is printed on the bottom of the Eagle-200 + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/rainforest_automation_logo.png b/source/images/supported_brands/rainforest_automation_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..26bce1cc86a7722da20870281ac4acab4787ae6e GIT binary patch literal 22510 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 literal 0 HcmV?d00001 From 5fa4cfaacb71e1c1baf9a27af28c3d05eae5c201 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Thu, 18 Jul 2019 15:34:22 -0700 Subject: [PATCH 20/73] Update neato configuration to include vendor support (#9882) * Update configuration for vendor support The neato integration is being updated to include vendor support * :pencil2: Tweak --- source/_components/neato.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 51a18b1c63f..e7e5505f2bc 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -33,6 +33,11 @@ password: description: Password for the Neato account. required: true type: string +vendor: + description: Support for additional vendors. Set to `vorwerk` for Vorwerk robots. + required: false + type: string + default: neato {% endconfiguration %}
From 796c7fc0bbffa1a41bdd6283fcf1cd2373af8fc6 Mon Sep 17 00:00:00 2001 From: Markus Jankowski Date: Fri, 19 Jul 2019 00:37:04 +0200 Subject: [PATCH 21/73] add HmIP-FCI1, HmIP-BBL, HmIP-FBL to Homematic IP Cloud (#9873) * add HmIP-FCI1 * Add HmIP-BBL, HmIP-FBL --- source/_components/homematicip_cloud.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 61cd819e32d..8d16d1f54b5 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -86,6 +86,7 @@ authtoken: * homematicip_cloud.binary_sensor * Window and door contact (*HmIP-SWDO, -I*) + * Contact Interface flush-mount – 1 channel (*HmIP-FCI1*) * Window Rotary Handle Sensor (*HmIP-SRH*) * Smoke sensor and alarm (*HmIP-SWSD*) * Motion Detector with Brightness Sensor - indoor (*HmIP-SMI*) @@ -110,8 +111,10 @@ authtoken: * Temperature and humidity Sensor with display (*HmIP-STHD*) * homematicip_cloud.cover - * Shutter actuator brand-mount (*HmIP-BROLL*) - * Shutter actuator flush-mount (*HmIP-FROLL*) + * Shutter actuator for brand-mount (*HmIP-BROLL*) + * Shutter actuator for flush-mount (*HmIP-FROLL*) + * Blind Actuator for brand switches (*HmIP-BBL*) + * Blind Actuator for flush-mount (*HmIP-FBL*) * homematicip_cloud.light * Switch actuator and meter for brand switches (*HmIP-BSM*) From 08d0a52b7ab4393d71d13efba521bfd16d207a12 Mon Sep 17 00:00:00 2001 From: Austin Mroczek Date: Thu, 18 Jul 2019 16:14:41 -0700 Subject: [PATCH 22/73] Update totalconnect.markdown (#9589) * Update totalconnect.markdown * Update source/_components/totalconnect.markdown Co-Authored-By: Franck Nijhof * Update source/_components/totalconnect.markdown Co-Authored-By: Franck Nijhof * Removed previous instructions per recommendation --- source/_components/totalconnect.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/totalconnect.markdown b/source/_components/totalconnect.markdown index 9defa1969d8..8cadb20b75c 100644 --- a/source/_components/totalconnect.markdown +++ b/source/_components/totalconnect.markdown @@ -25,9 +25,7 @@ If you have issues running this component, you may require `libxml2-dev` and `li To enable this, add the following lines to your `configuration.yaml`: ```yaml -# Example configuration.yaml entry -alarm_control_panel: - - platform: totalconnect +totalconnect: username: YOUR_USERNAME password: YOUR_PASSWORD ``` @@ -47,6 +45,8 @@ password: type: string {% endconfiguration %} +You are highly encouraged to create a Total Connect user account specifically for Home Assistant. It should not have full administrative privileges. + ## Automation example ```yaml From e7644eb5b8a9bf15e70ef5cc3a9fe36df200513e Mon Sep 17 00:00:00 2001 From: lyghtnox <33329184+lyghtnox@users.noreply.github.com> Date: Sat, 20 Jul 2019 12:18:33 +0200 Subject: [PATCH 23/73] Updating snapcast documentation (#9505) * Update snapcast.markdown * :pencil2: Removes linkable_title --- source/_components/snapcast.markdown | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/source/_components/snapcast.markdown b/source/_components/snapcast.markdown index 14eec149b0d..a272fdd5ca8 100644 --- a/source/_components/snapcast.markdown +++ b/source/_components/snapcast.markdown @@ -32,3 +32,40 @@ port: default: 1705 type: integer {% endconfiguration %} + +## Services + +The snapcast components provides a few services registered under the media_player component. + +### Service `media_player.snapcast_snapshot` + +Take a snapshot of what is currently playing on one or more speakers. This service, and the following one, are useful if you want to play a doorbell or notification sound and resume playback afterwards. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | The speakers to snapshot. + +### Service `media_player.snapcast_restore` + +Restore a previously taken snapshot of one or more speakers. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that should have their snapshot restored. + +### Service `media_player.snapcast_join` + +Group players together under a single group. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `master` | no | Entity ID of the player to synchronize to. +| `entity_id` | yes | String or list of `entity_id`s to join to the master. + +### Service `media_player.snapcast_unjoin` + +Remove one or more speakers from their group of speakers. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s to separate from their coordinator speaker. From 99f8b897f8250bfa70e43506d16225f6f4171131 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sat, 20 Jul 2019 05:58:47 -0600 Subject: [PATCH 24/73] Add docs for new SimpliSafe PIN services (#9887) --- source/_components/simplisafe.markdown | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/_components/simplisafe.markdown b/source/_components/simplisafe.markdown index 2922d60cfdf..d69cf12385d 100644 --- a/source/_components/simplisafe.markdown +++ b/source/_components/simplisafe.markdown @@ -15,6 +15,8 @@ There is currently support for the following device types within Home Assistant: - Alarm +## Configuration + To enable this component, add the following lines to your `configuration.yaml`: ```yaml @@ -39,3 +41,28 @@ code: required: false type: string {% endconfiguration %} + +## Services + +Note that the `system_id` parameter required by the below service calls can be discovered +by looking at the device state attributes for the integration's `alarm_control_panel` +entity. + +### `simplisafe.remove_pin` + +Remove a SimpliSafe PIN (by label or PIN value). + +| Service Data Attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `system_id` | no | The ID of the system to remove the PIN from | +| `label_or_pin` | no | The PIN label or value to remove | + +### `simplisafe.set_pin` + +Set a SimpliSafe PIN. + +| Service Data Attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `system_id` | no | The ID of the system to remove the PIN from | +| `label` | no | The label to show in the SimpliSafe UI | +| `pin` | no | The PIN value to use | From ce3f21415e8cad4f1b2bd0fc74d008622ccbf4e2 Mon Sep 17 00:00:00 2001 From: 9R Date: Sat, 20 Jul 2019 14:02:23 +0200 Subject: [PATCH 25/73] Add Nachteule to documentation (#9925) --- source/_components/mvglive.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mvglive.markdown b/source/_components/mvglive.markdown index 8b1d94d075e..ddf7697aad2 100644 --- a/source/_components/mvglive.markdown +++ b/source/_components/mvglive.markdown @@ -44,7 +44,7 @@ lines: products: description: One or more modes of transport. required: false - default: all 4 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn'] + default: all 5 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn', 'Nachteule'] type: list timeoffset: description: Do not display departures leaving sooner than this number of minutes. Useful if you are a couple of minutes away from the stop. From 62febfc1750fb617cb4736d88a6b76b6cc65b3d8 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sat, 20 Jul 2019 10:43:34 -0600 Subject: [PATCH 26/73] Remove CONF_MONITORED_CONDITIONS from Ambient PWS docs (#9928) * Add updated docs for Ambient PWS brightness sensor * Removing backticks * Removed CONF_MONITORED_CONDITIONS (per PR update) * Removed ctags --- source/_components/ambient_station.markdown | 185 -------------------- 1 file changed, 185 deletions(-) diff --git a/source/_components/ambient_station.markdown b/source/_components/ambient_station.markdown index 4529897565d..4be61d78c31 100644 --- a/source/_components/ambient_station.markdown +++ b/source/_components/ambient_station.markdown @@ -40,189 +40,4 @@ app_key: description: The Application key to access the service. required: true type: string -monitored_conditions: - description: Weather conditions to track. - required: false - type: list - keys: - 24hourrainin: - description: 24h rain accumulation - baromabsin: - description: Absolute atmospheric pressure - baromrelin: - description: Relative atmospheric pressure - battout: - description: Weather station battery health - batt1: - description: Sensor 1 battery health - batt2: - description: Sensor 2 battery health - batt3: - description: Sensor 3 battery health - batt4: - description: Sensor 4 battery health - batt5: - description: Sensor 5 battery health - batt6: - description: Sensor 6 battery health - batt7: - description: Sensor 7 battery health - batt8: - description: Sensor 8 battery health - batt9: - description: Sensor 9 battery health - batt10: - description: Sensor 10 battery health - co2: - description: CO2 level - dailyrainin: - description: Daily rain accumulation - dewPoint: - description: Dewpoint temperature - eventrainin: - description: Event Rain accumulation - feelsLike: - description: Feels Like temperature - hourlyrainin: - description: Hourly rain accumulation - humidity: - description: Outdoor humidity - humidity1: - description: Sensor 1 humidity - humidity2: - description: Sensor 2 humidity - humidity3: - description: Sensor 3 humidity - humidity4: - description: Sensor 4 humidity - humidity5: - description: Sensor 5 humidity - humidity6: - description: Sensor 6 humidity - humidity7: - description: Sensor 7 humidity - humidity8: - description: Sensor 8 humidity - humidity9: - description: Sensor 9 humidity - humidity10: - description: Sensor 10 humidity - humidityin: - description: Indoor humidity - lastRain: - description: Datetime of last rain event - maxdailygust: - description: Max daily wind gust - monthlyrainin: - description: Monthly rain accumulation - relay1: - description: Sensor 1 relay status - relay2: - description: Sensor 2 relay status - relay3: - description: Sensor 3 relay status - relay4: - description: Sensor 4 relay status - relay5: - description: Sensor 5 relay status - relay6: - description: Sensor 6 relay status - relay7: - description: Sensor 7 relay status - relay8: - description: Sensor 8 relay status - relay9: - description: Sensor 9 relay status - relay10: - description: Sensor 10 relay status - soilhum1: - description: Sensor 1 soil humidity - soilhum2: - description: Sensor 2 soil humidity - soilhum3: - description: Sensor 3 soil humidity - soilhum4: - description: Sensor 4 soil humidity - soilhum5: - description: Sensor 5 soil humidity - soilhum6: - description: Sensor 6 soil humidity - soilhum7: - description: Sensor 7 soil humidity - soilhum8: - description: Sensor 8 soil humidity - soilhum9: - description: Sensor 9 soil humidity - soilhum10: - description: Sensor 10 soil humidity - soiltemp1f: - description: Sensor 1 soil temperature - soiltemp2f: - description: Sensor 2 soil temperature - soiltemp3f: - description: Sensor 3 soil temperature - soiltemp4f: - description: Sensor 4 soil temperature - soiltemp5f: - description: Sensor 5 soil temperature - soiltemp6f: - description: Sensor 6 soil temperature - soiltemp7f: - description: Sensor 7 soil temperature - soiltemp8f: - description: Sensor 8 soil temperature - soiltemp9f: - description: Sensor 9 soil temperature - soiltemp10f: - description: Sensor 10 soil temperature - solarradiation: - description: Solar radiation - temp1f: - description: Sensor 1 temperature - temp2f: - description: Sensor 2 temperature - temp3f: - description: Sensor 3 temperature - temp4f: - description: Sensor 4 temperature - temp5f: - description: Sensor 5 temperature - temp6f: - description: Sensor 6 temperature - temp7f: - description: Sensor 7 temperature - temp8f: - description: Sensor 8 temperature - temp9f: - description: Sensor 9 temperature - temp10f: - description: Sensor 10 temperature - tempf: - description: Outdoor temperature - tempinf: - description: Indoor temperature - totalrainin: - description: Lifetime rain accumulation (since last reset) - uv: - description: UV index - weeklyrainin: - description: Weekly rain accumulation - winddir: - description: Wind direction - winddir_avg10m: - description: Wind direction, 10m moving average - winddir_avg2m: - description: Wind direction, 2m moving average - windgustdir: - description: Wind gust direction - windgustmph: - description: Wind gust - windspdmph_avg10m: - description: Wind speed, 10m moving average - windspdmph_avg2m: - description: Wind speed, 2m moving average - windspeedmph: - description: Windspeed - yearlyrainin: - description: Yearly rain accumulation {% endconfiguration %} From be86e84c4ee8eb8e489beabfeaa54de0647b1575 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sun, 21 Jul 2019 01:40:52 -0600 Subject: [PATCH 27/73] Add window update docs to WWLLN (#9932) * Add window update docs to WWLLN * :pencil2: Tweak --- source/_components/wwlln.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/wwlln.markdown b/source/_components/wwlln.markdown index b7f083447f9..d6ed429d14f 100644 --- a/source/_components/wwlln.markdown +++ b/source/_components/wwlln.markdown @@ -21,7 +21,9 @@ is available as the state of each entity.

-New data is returned every 5 minutes. +New data is fetched every 10 minutes. Because data from the WWLLN may vary in terms +of how real-time it is, the default `window` parameter is set to 1 hour to ensure that as +many strikes are caught as possible. ## Configuration @@ -46,7 +48,7 @@ radius: required: false type: integer window: - description: The amount of time before now for which strikes should be considered "active" and shown in the UI. + description: The amount of time before now for which strikes should be considered "active" and shown in the UI. Note that a window of less than 1 hour may cause Home Assistant to miss events. required: false type: time {% endconfiguration %} From 1226dc7fb5b0d784835f8c683700de0dddfb6c64 Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Sun, 21 Jul 2019 03:41:47 -0400 Subject: [PATCH 28/73] Add note about manually installing prerequisites (#9933) --- source/_components/environment_canada.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index ce13f3edc20..50bda08f215 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -157,6 +157,11 @@ camera: - platform: environment_canada ``` +

+ On Raspbian or Hassbian, you may need to manually install additional prerequisites with the following command: + `sudo apt-get install libatlas-base-dev libopenjp2-7` +

+ - If no name is given, the camera entity will be named `camera._radar`. - The platform automatically determines which radar station to use based on the system's latitude/longitude settings. For greater precision, it is also possible to specify either: - A specific station ID from [this table](https://en.wikipedia.org/wiki/Canadian_weather_radar_network#List_of_radars) (remove the leading `C`, e.g. `XFT` or `ASBV`), or From 6fb20a1493a4e62d7c35fbd67d8737b90f341fcb Mon Sep 17 00:00:00 2001 From: Wim Haanstra Date: Tue, 23 Jul 2019 12:20:27 +0200 Subject: [PATCH 29/73] Rename RitAssist component to FleetGO (#9591) * Rename RitAssist component to FleetGO The company has been renamed from RitAssist to FleetGO, so this component needed to get renamed. * Update source/_components/fleetgo.markdown Co-Authored-By: Klaas Schoute * :pencil2: Removes obsolete front matter --- source/_components/fleetgo.markdown | 85 +++++++++++++++++++ source/_components/ritassist.markdown | 84 ------------------ source/images/supported_brands/fleetgo.png | Bin 0 -> 16440 bytes source/images/supported_brands/ritassist.png | Bin 3437 -> 0 bytes 4 files changed, 85 insertions(+), 84 deletions(-) create mode 100644 source/_components/fleetgo.markdown delete mode 100644 source/_components/ritassist.markdown create mode 100644 source/images/supported_brands/fleetgo.png delete mode 100644 source/images/supported_brands/ritassist.png diff --git a/source/_components/fleetgo.markdown b/source/_components/fleetgo.markdown new file mode 100644 index 00000000000..b7c87e09aa4 --- /dev/null +++ b/source/_components/fleetgo.markdown @@ -0,0 +1,85 @@ +--- +title: "FleetGO" +description: "Instructions on how to use a FleetGO as a device tracker." +logo: fleetgo.png +ha_category: + - Car +ha_iot_class: Cloud Polling +ha_release: 0.76 +redirect_from: + - /components/device_tracker.ritassist/ + - /components/ritassist +--- + +The `fleetgo` device tracker platform allows you to integrate your vehicles equipped with [FleetGO](https://fleetgo.com) hardware into Home Assistant. It allows you to see certain details about your vehicle, but also shows your vehicle on the map. + +## Setup + +To use this component, you need an **API key** and **API secret**, which can be requested by contacting [info@fleetgo.com](mailto:info@fleetgo.com?subject=API%20Key). + +## Configuration + +To use this device tracker in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: fleetgo + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_FLEETGO_USERNAME + password: YOUR_FLEETGO_PASSWORD + include: + - LICENSE_PLATE +``` + +{% configuration %} +client_id: + description: The client ID used to connect to the FleetGO API. + required: true + type: string +client_secret: + description: The client secret used to connect to the FleetGO API. + required: true + type: string +username: + description: Your FleetGO username. + required: true + type: string +password: + description: Your FleetGO password. + required: true + type: string +include: + description: A list of license plates to include, if this is not specified, all vehicles will be added. + required: false + type: list +{% endconfiguration %} + +See the [device tracker integration page](/components/device_tracker/) for instructions on how to configure the people to be tracked. + +## Available attributes + +| Attribute | Description | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| latitude | The latitude of your vehicle | +| longitude | The longitude of your vehicle | +| altitude | Altitude of your vehicle | +| id | Identifier used to identify your vehicle | +| make | The make of the vehicle | +| model | Model of your vehicle | +| license_plate | License plate number | +| active | If the engine is currently active or not | +| odo | The odometer in kilometers | +| speed | The current speed of your vehicle, in KM/h | +| last_seen | The date and time when your vehicle last communicated with the API | +| fuel_level | Fuel level of the vehicle [1] | +| malfunction_light | Are any malfunction lights burning [1] | +| coolant_temperature | Temperature of the coolant [1] | +| power_voltage | Power voltage measured by the hardware [1] | +| distance_from_home | How far is your vehicle located from your Home Assistant Home location | +| current_max_speed | The maximum speed on the road the device is currently on (if available) | +| current_address | Object with address information the device is currently on. This resolves to the closest address to the coordinates of the device. | + + +[1] Only available on certain cars and hardware revisions. diff --git a/source/_components/ritassist.markdown b/source/_components/ritassist.markdown deleted file mode 100644 index d6d050fd279..00000000000 --- a/source/_components/ritassist.markdown +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "RitAssist" -description: "Instructions on how to use a RitAssist as a device tracker." -logo: ritassist.png -ha_category: - - Car -ha_iot_class: Cloud Polling -ha_release: 0.76 -redirect_from: - - /components/device_tracker.ritassist/ ---- - -The `ritassist` device tracker platform allows you to integrate your vehicles equipped with [RitAssist](https://ritassist.nl/) or [FleetGO](https://fleetgo.com) hardware into Home Assistant. It allows you to see certain details about your vehicle, but also shows your vehicle on the map. - -## Setup - -To use this component, you need an **API key** and **API secret**, which can be requested by contacting [info@fleetgo.com](mailto:info@fleetgo.com?subject=API%20Key). - -## Configuration - -To use this device tracker in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: ritassist - client_id: YOUR_CLIENT_ID - client_secret: YOUR_CLIENT_SECRET - username: YOUR_RITASSIST_USERNAME - password: YOUR_RITASSIST_PASSWORD - include: - - LICENSE_PLATE -``` - -{% configuration %} -client_id: - description: The client ID used to connect to the RitAssist API. - required: true - type: string -client_secret: - description: The client secret used to connect to the RitAssist API. - required: true - type: string -username: - description: Your RitAssist username. - required: true - type: string -password: - description: Your RitAssist password. - required: true - type: string -include: - description: A list of license plates to include, if this is not specified, all vehicles will be added. - required: false - type: list -{% endconfiguration %} - -See the [device tracker integration page](/components/device_tracker/) for instructions on how to configure the people to be tracked. - -## Available attributes - -| Attribute | Description | -|---|---| -| latitude | The latitude of your vehicle | -| longitude | The longitude of your vehicle | -| altitude | Altitude of your vehicle | -| id | Identifier used to identify your vehicle | -| make | The make of the vehicle | -| model | Model of your vehicle | -| license_plate | License plate number | -| active | If the engine is currently active or not | -| odo | The odometer in kilometers | -| speed | The current speed of your vehicle, in KM/h | -| last_seen | The date and time when your vehicle last communicated with the API | -| fuel_level | Fuel level of the vehicle [1] | -| malfunction_light | Are any malfunction lights burning [1] | -| coolant_temperature | Temperature of the coolant [1] | -| power_voltage | Power voltage measured by the hardware [1] | -| distance_from_home | How far is your vehicle located from your Home Assistant Home location | -| current_max_speed | The maximum speed on the road the device is currently on (if available) | -| current_address | Object with address information the device is currently on. This resolves to the closest address to the coordinates of the device. | - - -[1] Only available on certain cars and hardware revisions. \ No newline at end of file diff --git a/source/images/supported_brands/fleetgo.png b/source/images/supported_brands/fleetgo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7355ef0946cc96ed9f831df1ffab8dfd93c159 GIT binary patch literal 16440 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 literal 0 HcmV?d00001 diff --git a/source/images/supported_brands/ritassist.png b/source/images/supported_brands/ritassist.png deleted file mode 100644 index e29464a4938519a369101c4b89e2bbf5907aff9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3437 zcmV-z4U+PSP)Px#7*I@9MgRZ*l))p6yc4_EbkE|Pqsc?`_~_&A#VbLC zIRF3*^GQTORCwC$UC&<{y%S!(;&L?+$~lYFYh8czsz~j%tkPZ=fAtDl%fJ6Z7r%nC zn@KX01U`8_9^Trws}GZzc``G}Mo~aOKtMo1KtMo1KtMo1KtMo1KtMo1KtMo1fbWPO zA0Pi5pALt^>+9q1vp?jU$YMJEGhhWok`({3|9v{$EEbLaC4c?xmoWRDIO&f!hQ`kI zU=51}lB9L|WfNFD-VazJSOs{(T33(Wuc@q>#VePt-z)6-C}BV(`(M4K@q5Sx1A~j< zUq4sXGviDNoPG5$v(ztyV5&%(=iYforcPsSl&)W%5`W`bJm#KqZcr1aRj}o;gE-aLnWZiN}n|FQ@hp3=a-% za>o&QFmdK=Czvr*xQfDcWF9lQ;zU9=Qicu}Y9&quJ`uieUqMa?c+8ks55f;5JZ4OO zZn&erg)X}epHlIdiF%tnE(D`v(zeIro{-0k$(6MXk}*B1fn zPHB>qv8^zPO@okzV5ZtBMVvd32?l#KrR(6WJ!Zi{81E=%JoTG_S?qwbTqpLWAtgIyA zOlW*1z=_CDcIwu=dwhI(dD%Zv{W>{5g+-DBD@lYO7<9(_nWa=BPa?djzk=iWJi3*& z6-$4NapN)`0KBk6zOoQz#UO1kY&)F8wqN%0dsa zC+8SFxujTJ6T%uq3W-^S`oBC^FO+FQYRk~NyE~d!J zC!b-_1{%1I$ciZ$B#WT*vT|4^>Bb~Nu2|X_gB?X+eE>QW`s_(j$i%4B7mHuMNHxcW zo+DZ(xQ;?(DeX8F>-Q2lS!mS_;b8AY2n54vcFa) zkyhq_>Kk521Vr*SfzaB=>^b}^B*r9lx`xcxKVvqo+o15GRqT+a!!yk0Nf#9GwNl~; zYgsE083ETIYC2?S0_9Dl0IFMu=;^S7rQzR*#DJuvym6OCkR~dT!rLL6P1V}JZ1ESV zDHd2npu$bL0wG=e&_xaP_8jJN%0*h)n&F_$Fuq7pF4M`3T*$l;8j-@nfV8BT+Z(Vj zh&PbNi;fi3ba-X>LL4DZ)G^!K}1lefyclns)-btI&VQg zKgHY*u(4WkOZK#VbRtEG8sK$GB1P61DZ1X$|4Rw~;$V&}QeXn5f$1WP1TlfFK{O&c zZeD+TW(`0@!6Yvr^CF+ohemXT0)({djaX!S?{~Ors|Wf}kcmLIBnNmwi$fKjMsDw6 zhAnBe6q>x$>ZZUd0LLQ&u6dA@8x>^ZE@%-vVH1H?%HXnb1oHI(G7<0|XAh0Y9&X`b zH5|#S$#DI91X|1t9shp#{}6Y(8N}NN4l$g=CPL7NbfEnuRc{AM(JofyfkdFZZAqj- zq%}s;zCS_z6Ky3g&F$b3T?r9zr+{Qz~s$9FJfgd1Xct=w#bsu)?Qq1#nBH% z%n6x~{48axf7$3#2jTs1HzKphk8)L~UGQ4o2ab`6WWYk@$`(#@Z8a(i30xr@A?Odgr$kx}LBMo9%tlgLv=aif9= zY-d!1S)`6pO-(DBwIkEMSq(P0wptv}+XlazU;F|k0!v%FT10aHhyX3(aA`4AA~8lU ztEc7cxJ%1n)B+MI8-#tIM+OK)CKbK!kz|NZu73pVpFf!w>SIlb0#kM|%p$Au!men{ zQHd-sLGAi>RxUirhtxLv9SUk7c1@6|Df3Fmg|lYGp(lgfP41;Uz2WfGxo*n zr}5#UrjhXg#uKz0beEXV487VvIfIvj4v{SqMc?L3c=tKz3lE~@d+N=LjcL`siT zG&hY%*&}@E>cXRa=EJ~117U2;2O@F#Ywdxb zQL<}Sx+BIIPYCmG4dLD*<%gdTZs9nzxwJ5dlqu)~i#*Ebeie2BB1b6G$7Mo(-vjN-&JiBdwdN#u2$FG*L5W$< zY!NZ9&Q|@45M*P*B+TxM!{<2FSr15v^Tnohif( zlS@rMD(cEJq3R1;g-8vRNc9CD${v@hSVUMOqCWF->&zmR7g>HrjDb!qqCPuW7e4xk z#`*0y^U)$Y8=}-lAJHjD)r5Z*(Ha%0d*~xtWt`YUi?B!sJ^y?}uV(w=pGEW<QEq|0>clSMuo5Lv5I91$_<#I98-$VA3KB4*QK6HxRpA@X73zHC~- zs57&EjO{?J$SJ{l-BI$oA;XED7*y>udM#oT*kdwmC_k-T)-kM42g3W#&4{KAyEeHW ztT<@H>^5e;I^JK;@aiWkYinIjRXtUVuiV2qB`Jy=^P6K|Mr0oDc1c-6!`5u6E_hWoXJG?SFN=7Dw3 z@PlKMpj}oU^KEeT3PEZMc&F{$x;x_7bewL3tGjl0+*2#rb{K@@b(Bzp{6Hmw`zm%N z!`+zpXp!sehlZulJVOx35pnqs>9w@1M@ku&tURNp9BM%ji9q>GaR#V2Q}d zbUNKQ7Ex6E%8yG}`gTA-KtMo1KtMo1KtMo1KtMo1KtMo1KtMo1fT#EmAnD5%%wTU^ P00000NkvXXu0mjfmPKAu From 1c8bd43cb40b45cfa9cd53dba3949e40504668b3 Mon Sep 17 00:00:00 2001 From: Farid Date: Wed, 24 Jul 2019 01:50:49 +0200 Subject: [PATCH 30/73] Suez Water sensor documentation (#9576) * added suez doc * update of suez doc * Update source/_components/suez.markdown Co-Authored-By: Klaas Schoute * remove redirect from * remove water category * :pencil2: Tweak * :pencil2: Tweak * update ha first release * :pencil2: Tweaks --- source/_components/suez.markdown | 50 ++++++++++++++++++++++++ source/images/supported_brands/suez.png | Bin 0 -> 48521 bytes 2 files changed, 50 insertions(+) create mode 100644 source/_components/suez.markdown create mode 100644 source/images/supported_brands/suez.png diff --git a/source/_components/suez.markdown b/source/_components/suez.markdown new file mode 100644 index 00000000000..3b1add6172f --- /dev/null +++ b/source/_components/suez.markdown @@ -0,0 +1,50 @@ +--- +title: "Suez Water Sensor" +description: "Instructions on how to integrate Suez Water daily data within Home Assistant." +logo: suez.png +ha_release: 0.97 +ha_category: + - Sensor +ha_iot_class: Cloud Polling +--- + +The `suez_water` sensor platform fetches your last day consumption of water from the French water provider [Tout Sur Mon Eau](https://www.toutsurmoneau.fr) website. + +It also gets the following data: + +- Daily consumption for the current month +- Daily consumption for the previous month +- Monthly consumption for the last 26 months +- Highest monthly consumption +- Last year total consumption +- Current year total consumption + +## Configuration + +To add the Suez Water sensor to your installation, add your _Tout Sur Mon Eau_ account credentials and your `counter_id` to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: suez_water + username: YOUR_SUEZ_USERNAME + password: YOUR_SUEZ_PASSWORD + counter_id: YOUR_SUEZ_COUNTER_ID +``` + +{% configuration %} +username: + description: The Tout Sur Mon Eau account username. + required: true + type: string +password: + description: The Tout Sur Mon Eau account password. + required: true + type: string +counter_id: + description: The Tout Sur Mon Eau counter id. + required: true + type: integer +{% endconfiguration %} + +`counter_id` is the water counter id. It can be found on your _Tout Sur Mon Eau_ [user account](https://www.toutsurmoneau.fr/mon-compte-en-ligne/historique-de-consommation-tr). Look in the source code of the page for something similar to `url: '/mon-compte-en-ligne/statMData' + '/123456789'`. The `counter_id` in this case is `123456789`. diff --git a/source/images/supported_brands/suez.png b/source/images/supported_brands/suez.png new file mode 100644 index 0000000000000000000000000000000000000000..57c8d53c06d39ebf72a653cfd7599ac3bb797681 GIT binary patch literal 48521 zcmeFY1#nxoET#}j#v5a zdv)*Iy6?aL+IqEHwY4oceP(*5d*@*gn(H~jO56kS|w9IXHVBmf{D4S)Fyd2xh(+aK&^Uu75d3*e6i}h#x#1^j5KYR$B7qPH4gUeub!g
`%@+t&Qm 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 c_->cOU&ej;pX+~C;D1)&|ML~_{W Date: Wed, 24 Jul 2019 02:02:40 +0200 Subject: [PATCH 31/73] Create fortios.markdown (#9044) * Create device_tracker.fortios.markdown this is documentation for the initial version of a new device_tracker component named Fortios from Fortinet. * Update device_tracker.fortios.markdown * Update device_tracker.fortios.markdown * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update source/_components/device_tracker.fortios.markdown Co-Authored-By: Franck Nijhof * Update device_tracker.fortios.markdown Added title and description * Update device_tracker.fortios.markdown added title * Update device_tracker.fortios.markdown added header and removed optional configurations * :pencil2: Tweaks * :fire: Removed some obsolete code * filename changed as requested * :pencil2: Tweaks * :pencil2: Fixing build * :pencil2: Fixes configuration block --- source/_components/fortios.markdown | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 source/_components/fortios.markdown diff --git a/source/_components/fortios.markdown b/source/_components/fortios.markdown new file mode 100644 index 00000000000..e74f7c3a6cc --- /dev/null +++ b/source/_components/fortios.markdown @@ -0,0 +1,42 @@ +--- +title: "Device Tracker FortiOS" +description: "Instructions on how to use Fortinet FortiOS to track devices in Home Assistant." +logo: fortinet.png +ha_category: + - Presence Detection +ha_release: 0.97 +ha_iot_class: Local Polling +--- + +This integration enables Home Assistant to do device tracking of devices with a MAC address connected to a FortiGate from [Fortinet](https://www.fortinet.com). + +The integration relies on the [fortiosapi](https://pypi.org/project/fortiosapi/). +The integration has been tested both on FortiGate appliance and FortiGate VM running SW FortiOS v. 6.0.x and 6.2.0. + +All devices with a MAC address identified by FortiGate would be tracked, this covers both Ethernet and WiFi devices, including devices detected by LLDP. + +The integration is based on the Home Assistant `device_tracker` platform. + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: fortios + host: YOUR_HOST + token: YOUR_API_USER_KEY +``` + +{% configuration %} +host: + description: Hostname or IP address of the FortiGate. + required: true + type: string +token: + description: "See [Fortinet Developer Network](https://fndn.fortinet.com) for how to create an API token. Remember this integration only needs read access to a FortiGate, so configure the API user to only to have limited and read-only access." + required: true + type: string +verify_ssl: + description: If the SSL certificate should be verified. In most home cases users do not have a verified certificate. + required: false + type: boolean + default: false +{% endconfiguration %} From cc5cc274c88e0e30c6ee01734d4e013efb5e952b Mon Sep 17 00:00:00 2001 From: David Radcliffe Date: Tue, 23 Jul 2019 20:03:48 -0400 Subject: [PATCH 32/73] add contact sensor to homekit_controller docs (#9931) --- source/_components/homekit_controller.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index c595c781d09..7981213cb5f 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -34,7 +34,7 @@ There is currently support for the following device types within Home Assistant: - Light (HomeKit lights) - Lock (HomeKit lock) - Switch (HomeKit switches) -- Binary Sensor (HomeKit motion sensors) +- Binary Sensor (HomeKit motion sensors and contact sensors) - Sensor (HomeKit humidity, temperature, and light level sensors) The integration will be automatically configured if the [`discovery`](/components/discovery/) integration is enabled. From 6a9b314aa9349d0f00d1352eb4ed53267af74f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Wed, 24 Jul 2019 02:09:57 +0200 Subject: [PATCH 33/73] Add add_torrent service to Transmission (#9854) * Add add_torrent service to Transmission * Re-word to not include base64 --- source/_components/transmission.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/transmission.markdown b/source/_components/transmission.markdown index 68b10f9377b..9d4c4ff6ccb 100644 --- a/source/_components/transmission.markdown +++ b/source/_components/transmission.markdown @@ -117,3 +117,13 @@ Example of configuration of an automation with completed torrents: title: "Torrent completed!" message: "{{trigger.event.data.name}}" ``` + +## Services + +### Service `add_torrent` + +Adds a new torrent to download. It can either be a URL (http, https or ftp), magnet link or a local file (make sure that the path is white listed). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `torrent` | no | Torrent to download From ee80b633382951b4d8045ae69f6462504ee8d6c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren?= Date: Wed, 24 Jul 2019 02:13:55 +0200 Subject: [PATCH 34/73] Adds Elgato Avea integration (#9559) * Adds Elgato Avea integration * :pencil2: Tweak * Update source/_components/avea.markdown Co-Authored-By: Klaas Schoute * Update avea.markdown * :pencil2: Tweaks --- source/_components/avea.markdown | 21 +++++++++++++++++++++ source/images/supported_brands/avea.png | Bin 0 -> 29336 bytes 2 files changed, 21 insertions(+) create mode 100644 source/_components/avea.markdown create mode 100644 source/images/supported_brands/avea.png diff --git a/source/_components/avea.markdown b/source/_components/avea.markdown new file mode 100644 index 00000000000..89f62e5a73f --- /dev/null +++ b/source/_components/avea.markdown @@ -0,0 +1,21 @@ +--- +title: "Elgato Avea" +description: "Instructions on how to integrate Elgato Avea with Home Assistant." +logo: avea.png +ha_category: + - Light +ha_release: 0.97 +ha_iot_class: Local Polling +--- + +[Elgato Avea](http://web.archive.org/web/20170930210431/https://www.elgato.com/avea) is a Bluetooth light bulb that is no longer supported by the manufacturer. The `avea` integration allows you to control all your Avea bulbs with Home Assistant. + +### Configuration + +To enable Avea, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: avea +``` diff --git a/source/images/supported_brands/avea.png b/source/images/supported_brands/avea.png new file mode 100644 index 0000000000000000000000000000000000000000..a77b8fe2d5e10f36203b1a14f2625569dd2d1d2d GIT binary patch literal 29336 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�Mh-huarHHVVr3ewQ=9Jb)4+?^F`P<%j%la7%QGD(?9nUTDw&lJL>6;p zDO?6?8gPWxwqXjoo=+|=HtOKVAg63QjTS11rDk_6A!TMkZIuD(I)9_=B`CKzR?jIl zj}r5(-3=-06Nxo$zDoLAO0a?B&K?(BJGZhxZMt5$CN?O*;)-4`-9(G>n~D57(jQxu zIbn^KuM@cE2D>*VAH&HSWd}Fp-?2IE0rA9Gb6cj}Ec#ASq`k=p#v-JrYg9m(fb>*8 zWDHf%^J~&MT7QoqGnd&Wi&rf0)WlDzXzGqRFFV|jJaCr*)BakZ zZ#AAc+G*??*Gk1A{$N$E&G99x!WW~=GEh%CSU4|m|4~Nnk*2LdMa0h{<~b1Gs2Ne4 z^kKHY3V`}ul|G+*1e+JJikjrRb*W!o=&WV>$17bDebZPkm9lzEpC1Ar!x92MdkC;@ z7Be^HXJ>6=k}zLWon&n!S3h-nuCII&vn&XuPTSeWqPW<9eIso-FnS&F4)b%SG-j=V zk8F{oA=>#$7rh-8=3B|)eo?e0DRBE_j4Tgg86yh)fOg zj4(7uQnhSK%>{B?geH%~HsJ{`l}%K&z)JA$+82qqID)%roto``Z8}6q1?&_+*M^>p z-WeW)1H-{{CfJuBtJP_b9sPn9mLSfZDS=`tXaUoZn>{Y2CvxXm_005_+&w)7r3HNC zQYty4;H2!k=Z~r|Ko$he_3~fk`!Ic1u1_%AD7Da*CJ_O{Q_TFpVnO{OCr zV__FD^dL*F~UpLS0g}x6K7HgZo4ey;Lq>Hqohe$K_^C`B*uAO z?isA4{l!cb=EE}1b3HE>rDiK%Akpr$q(?A;-B4Sen89b$!-0%X*N-IMFR|9{a_q~bv5iG^u1NtmRyr3-TF(>lBGC+K>%tSx?Ny=9c3DyEV)kls-KqU z9s6rTM42P~5v$Os2A1O8!RTq~iS$~koXK6Z&xb0%@72#zamlH@SZ1(!O)cdN75l#G=OaI@Xa3^PzJkXoUiF>=FE^3goo=YRG zDZN44$7@HIP+~vINBS1BG0u3iTQkh-4~+Ftd%WJkq^CSQATXags%2 zi^lFJyDUxSZ?=0vZ&k8Q+_FnVs-zTDGp&XV*)UyOlh;-!#f!7Amfu|}Wu}pup5mtQ zOU|Pt?dFkwI(zrT&O^9G3G<1q3n)!HXzKo!0?AbpEQK=fs*ol=L&L}TIJ6z|Urbi_ zeRF%6w0!id%N7+3F9xtaUZ2_GmR^jN7~yosg8dD)wT4mAETRiZdUm)+4ea-G?>-Sv zcKqx@YhH|^mUvDX7Zrs5`e%QooC*&#MMmFGxZI+NLZUfoJ`Z^*NG>!p8SH}99Rt+X*vRpvC>;ccw7Spi0Yxwzl z(9RM7WbYFO)#jrGf~axQo{Not`39pEel53hu`W5 zHi!|4rp?=x8mOvh6ZixHb9Mtm@_c9;{b|>1nAx_md+;*uRdeSv zLuZMTiKp^%BhSv5o4dWNyEayfMYANW@1PU?DS<^T#RJ~2;XMYMUyw3y=DqqgF^28~ zThn-LkVVc->rv(Ky|@>W7Hh0^3W2C^Ed%#rfaaIUaG2!=(;XV5OfcQX;i}wKh>{<( z`R=T0cqk>OFJR+o2dm7OcI@=6eD)~96r14edi{L*s6_HqARPbnhkVfTxuoJiUd{uaxHb^e;y)AnMn)H#~t45a!JPo7%3N--SvtUE`Pmx z+B<*oIWD0EQ>s5;TP6Sgp{DI!fMw=}xGqF@nIz~mSAsOz)l@6eP!mhhtde1Np%7G1 zMy!kVlrm}CrbXVQ=gWLiJ*_Z;uD`hIvZb12zrT|1o7U7j%Jv=$6E!PH-6RQbLQAbP zbt-w(X9$DkwOT+kQYJ1kWJe!~m;C1~=9dg#{E2>~C)TFSjyzPs`_EuQ*>jKG+b|90 zl@y|icNC3XwkZv=U8p|2Crl3Oq2Jb@XNVE+d>jsYMhDxNQ-@JWyi9yQce=K;sLVf} zKq{%N#8^T(MSVj8uI2+51>nwg7@K)eAHn<2^wt;t$IJ4Mt(r%2PrzI? zRX!dDIESG4kxwO!IiJm6O(drP_sF=)of(?0t2$D-tI&=JOd?_kizxO(Ml<4~jRIA2 z9y?CqB@e}1#HIoSwC*xZxZWMTX&a5L7kw%_PtvTjti?=r=>h^aXf&idEF=fIE@Z|> z>>_q#KN=DAJDJXpFSJV9;3 z8oYomfecz%H?9v({ae`Iz8LERz+e0gp$M{G@RajgGXi}9pGNF{=hn-k8VgT)rSo2f zof)ngcVQTl4^hnaP|KcAT#quq_-ub4Mw$3Bte~ghgrHJS`Sp(ao={)+3%Pz283;FS zv|%?ys?Y3BqhzaCO0dgrj>E-A%r*I58QwD~>}rhFid}a}IyXGCE6qK2%G+A^QZGZIWv#kNWMh6Ok}Hq!vEd7Y3hgMmo#FO4)G zZa?d&?V1`R(3(Am(Ll49z*nR-c80Q+ufY4sTh;Kr;CH{8H&$_I6J4A}*v{TA^*{09 zN^=Zg19=B-=BC6gcBC+ttMKkO4L(#UHtqlye^6?8CpnwuPkxPV|5JYP!6u4zQM!#PncZ&LM=xqh*E#{{>%`G zyD7d|G(t!izMLU=x*RO6$PjVulcM?bIPi-$SQmH1GkPY>YRlBhb&UjJZ)t&=lYN*E z`&kLS3G?d~b}HCz1C+;BG*6+(T0-pF>UTp}`^_LyW%GqDp_eQB9?vwrK7o$Bbc@CD zxc#zBob{GohsV61W2K45lHDqux92q6!1_n#3VBy-Pw%HmL#|j;W}1}#TvIwb?^j{K zCkGw!b%lLsHF#VJM3(@2UgN?`u2H?|b%=Yk^7e%jS<_8f#ey%!^>)sb5yzzKFS{|G zbZ6SPp%)u)`dEXyoBkOs`@80yq>)?#jBJTY<&f@aX4#Js@v+tS{p2NjmqSu-82_COgSv0E z3KzHJ`$v5kKZVCpCemDeO^hUvW{dbp;25!45Mnn27#R5jy5e?@8gy!o2UbYl|9m8- ziGd6rU9m32E(WJSsz!>r3K8^)S=*Q~715;#m4i z(wGer(rxdR^qHWh4v|K8UGD2&Ui!W09$A3-20_w>qnu2|;bc!{-%Q5Iqvlx)r0-nW!zyHokJsqr+k zkMW&6da_ada_(lA-bH@AzW!=+7qR^>W?HYTY}o{G6>&P>>>0s61kUlFzzu^YUKP;r zW=Hjw7GBobeBL%L_b$2S(PwdbT^{T`?ybS|!77TN*Oy((o&DtLrAs*Eyw+c3hcDN6 zQ1V|s9S5+bnG(`NQ8m@^^W*v;pTKECSl(zxKDppB6hq5XAza`cbI83HoYOi4=h&uZwwAmiATZrbTgsu2s5g5aJ(XFhN;^m2@ds{cJ|UGmD~1|p07u0 zOVaIC3@lIx$S$HmS1%@y-#c-Op-VN0NT%>i$vd~5v65)uy|ZR^kJ*vIps)Gg0yQJf z8u=ko{W>68QI*+zb^t|hYSDc5#cY>@&z|zt}e2EF9TG_3ZgH&tog;_vKRw zqKkFU-?F0nUbS1p<8wORz!lo(qFT_dcdH51TsB&Bf!fOHncPq_fTkuG`gW%-NA z6YOn8VYn_MB^x!rAiA$s%F4n`{Q3Zj8SPZ|B?;9%wlD#wFyciqqFZCXewmk1cL|b) ze-&e5n(nI~dJE_JoaE7->{UB?E7wld1nxG$INV!vmy_3en91ry7=m**JFb!4u241U z2c`{DT3O>lkDfzb^V%2r5?&~EMh80R*wUS(C?f0$2D3aF4cS_Z>zb`cEH#2(M2YPD zNk!}B{7ECig_u%ZO$zA$^PV+T&r95i!N5TYt@dWdupN7o(6HV3x-6^BemS0@T2xX# z&6P0mPJ=+cP7|}D5zEw*tj${*O*Q7yF435mTFr}p{clu|PnVsZg4$0QHzTMZmAfJI zv0_@r(gXTVSE4C)SKNi%z2C;unpKL~@73kr9*S-$FHZsBmPB##N@|HvvmLjxyG#*z ziNjaP{uMHI>(R~hQ@IN5AB@pI?b=wqtvkLo2RcWeuYVL;5IK9fm!TpJ<&K!LO{_Mq zm)})1LA(-c?-X$g3_mVN(X2;V1ffC_3t!bCvWzV9Vunr&q_$nPRSa9Rb@nVIqF)L9 zP8BmcJP^nK5|~Hx=p%lGcxQg!3^Z=i*5_%dHGo4>x-O zXY=+EA4Ysz`)I@?7o&n(hb=??D#7L=O5ZNSaWPVod#ifLrZ#N3jLJ-qj3$bf#Dkp>Bl9;Z?M4PXWTHIZpUc z3<8$UwWZzdXpcpYqQhyVkyA)E@C$`t*5norhBYXY~}`w4wa% z2G`dWXdj8~7Llk~|56^|E=0!=AmaaQR1uInE@pp0a>97Sqo(9Kz-@6(KiQO)+F`PQ z`O=I#)x&dZR9DdZVk~cmWTAGMEaWmT<4Xms*UPXiJM{GEUjXpd$1ApC`nOU&-N1{( zkAtR>abr(OdSBpUB;p zWvY-Y1#&CsC~bpPjtC300v_kCuq4r&%RbB*;1yhEHk|nLE!9?Ly}2~ilWk$qVV@dB zs5#L;$fJzuIi2e8AS~wekK(iY=^3ab(Q`Lm%ebO2@-Ou_h39F5I~=gR0|Yfr)s#Yt zLpOPoCJ3EzT@E_ZiflG$rgCN)=Rx@9+&BxFc#GL_)6wTe-p@8iD5~aTzVAK}ec;Tk zKUePrZ`h<@=6;*CUre5GL9+2(B#ER{VE^)o;Ehxz=E1WWp3hV&8Oz?7Q<&r=-#up zsc!@`9lR;`J>M|ge10FZbCFh1qgiCVds5j{^QW9VtQATjHuhcY@u^t69r#;Z>MwJU zg&SK{4uZW%^$H+pb(<^Pfra>%4KYSxh9hTOpCrG5(n^f!FFZ2M8qXjSq5ODXTz@Ja z22F(!>fU++6VJMMt|gaAkLLq_KAOZ>hFV?PqpOc1vG82^M5H*2@RX+E&(M8=C~8ClgLQjbX+Pk-OjKb%7AEyYI~`3dFwApY{atP&=yGqJIsk;)xwZinonTFNAeX z$Z+fL$s55yi(YG}j6RV6jKz=9V;P@!oFK5OAJGj0)E|;L2|u32cw1cSAg-~dKX=a- z*n!@G4s_r|_sVpbmE7h(0(g_AO>AO>|bLS;uu0+Af@bjydGp@rBP95FbCYYZDc<@wS1T zSpPehxgaMELQJuSNSLv-cV+34t>yG#jf%YR28l)>JGg*q(<{%m-<5^nbW?Tg+gbV2 zDl+;kBwI=4B)>`X!jLTRhY3uk(Z&0hbZwM&^unCWgEh_++C^NJ19hiQ@)2S>TxcR&2v%M z+707)-?iZB%v;m63N}~llS&c+yaBzHO?H9po5x3FEN=HCWVoYMA=lI$o%=Aoz-e}q zx51)USIyRoeWghG9^k2P{75MFrFp zb3{@W3{T%w5ILK3m}a&K=%lajbGgT>pu^F<{S0cy^GkCPHEYC|*!Ikhk$p{9P=6?Y z7U4P17hNS6}5TxvWo z!Z|)_a_7gYq&1DwjcDjtOfYZm0Gk6T`_f_4xL4@Yrq27$k=}9iN z{=`g<{WPOb%pZOAtK>Z=)ch;*8x3cGb-??VzKOlw&jk3X`3hQBv(0io#Ip3c%W&Vl zlek>i@jlrRw^$50WhCFmPj3j89CrM@H-B9+Gc|jb_wFTIMu` zS8OZUw&a#Pi=M>k4p&RSrhYa$ki61~LGZe2z5>x12kjpYdB)VOPP*~7Dx-UP_KyKn zz=dRJg=}anXTVia=8x?XMSLiAX@BI?C^;&TWmQJ$zE%6^pEMGq^G?7vSyz9+Kw25l zZ&L=5dW(ZLVnD=;%Fcm^NC*sUUuWW^fC#^m;_P*m5J=?(FEXFv_NtvTqq%hWwxU9r%{|9;W7U@EJno%QN@F}cFUycBSHEVUHI(^na;rUD!IyYoJ#u37JbtS zwP;0_Qe3Atu1a2&V8P1tV8v^}o*FD)K}fF*><2Y;+|6Rw%mRUyzgK6j&QvHnZYVRt zReY6!D@pjp>^mb;;sEisg5wQwR;3&JM)EMUX}o48G1!5z3o=YfCrg5PX8ts@S>kGh z2luuW*VIAKEh-I440+^q_oT8%?ou&!ydB0z2B=@fap;A$(E)wzNGp#@n2qPALtTrM3 z;hrFO-Ze>yyQ+67rG4P^85XG!F3LX8@$NB$zWnjGB7MdKSp2*RoyB$I$i(}qmxkG| z4W>{k>3EN189T1KsbXFZM$qEer1CBZ+|963q~t(1xE?f~*n$DczN9nk=Z`hz9_&i) zZK=$;h4S#>D_q-K2;b4tO^3MF%kL2QPY8@r1!n~=ZbxQmkeTh;c6g_6(DyQv7!)E+ zIDkHlWD=U@{j`rg5QOuU#_|B(XKjzqslIe^P`d(&z*K#}2U#W*DFm zx>vxzLg2wH53<(?QVb{738o}Sh;em$e`wI%ND&?G$c=A$Zikd-UK8(uV0b3XH&Ec@* zt-nNu)j?kw2u6O|HjhKh19jxNOT*>c$SUVzyVi^4zyAqxd`zp2)$WlBP+0XW=S)nk z-u;#p@0W>6G=pbl@k>rgulX}M5fcQ(gxs~Xc*#*6DNW(kbAY36o0jK(Grew=P&k(0 zc9R{|#m=@-GB-%%Wk%ccF==nc#I+qOt|gZ%@96myNlRJ!@O0Vj7QN-icw2X^U^v`x z82^6axJs85d1+0W{+%TlgQML8&x!QGBRggP&o%a+$Y^k7%LLqAvSVf2!O77CT9{0E!II0Lcy6iD?8LgHaHS?gHF zhlEVw@dqE6@G=+X1_aW7KSn%au2P;KVJ!Xi&yc;o`<&k@o8O@t_AbT9*Y^Gc>VAmHYnlZ%Gi*c$n?9~0EA78P?uGT zue|2$3%D?daL`+o%@HYzQzb|VEiZ1l?{_=~`St>HNvhMQepjw9v2sx?EZIl}+MHOA zHHnGiV)pZg{2q8dm6Ff0Gbs5;q=_h7lc{1>0Np;?m8gQVn3{64Ob^WCrMDL(u?-KU zPkn9@9{N%0h=$H{dI=Fot`aD5i-#8xz-l{iHPhL9)uY5j%^Kv@4c0LqT7^xaZH^E7 z)3A>LyaVHyWDm(3{SuZRq8#PIcWH}h`&&_Zy#2Bj+HUNXV{w6!AI=&wG%ZWWVxWk`< zplx7e9vJ>%ce9TH#BlMx17Pc;%Z5e6leA-?d9VAOf(WVo6steQwpzli@vd~AnyDtS zG41aKF;GY_YJ_7q@Lo7&3q3l}w;B`63d}sn`qxOj(Vj*%4Oau6C%V?g9HmG_Hl%#}E(>qH z4MA^O1iB#!G>|8E%ON+j@%!w5M8>2R@!|zQK-8;u01Z)&P`$ms+0SJz6JM$JDjINT zFc5o#spW#c6s!LefvmykQgxG%df~A|{7lyL5s?nV7<2SSwOt905q6;Yugj#I1DlKg z-c-Lh`!NYuLz}6H8)pQ4G?=^hDp(IUV<0eJ1OI*Xpf;|EZj*Ca>%%S8KJ9(DeCF+X zN^hv#09MKq7aV&ggOLKyE&Qw2H;^fAkFnou(0AkHhQU@_5Nn-Xw~;@|B;6F4b`s30 zM+ZiX!FgOwV}sp{M4#Xe@(=aoR!IA)J_4V@o1u@;bkra1B~=YPawNZGnz}RY^y_?$ zBbd=Nd~{ETiQk5TeDL>l46?(5;~(D$zu{7o2$UF@c3ZLVKc9M+Q*0uSEeq?B&{84` z!S&hf=Q|+I-0tT*lfA-m>5B^OcHjEj8g8dPy#3m+uEd!d*y`f9t2LN)JLO@P&vpFx z`r2lik#zFyPmvc*u{@;8%5Z@b9+%k`Ctzj}HC&v#M~&n#k&0z~TR|mfA-@&YN)n$aXY``OOW?~j+&dwd7vJs)|7)8W{@&xthG*8_8Z3KYR6 zGq2H8B5FJzR^0S{K*&MjKCtNuLI~X#Zcfcfj)ISC2ZnY$a{R@}HQ~WxA-gHAC8Y*u zFP|s-GU#oGr#PjFYo$amGkU6D|0}d9p=e2h<)BM$et562G|C7WIKv`lZtAo&Szq5b zWRv15`q*?`@B6lTOE63kbwBpOxX+fVYe?nzanlZ)y-f7S4w}B4sT%|rlh8og68X2K zlEoWitdyb9E7z|==T~UXKeuOl=wr2C(6ul`yup{7H4VLwS#=c6)|BWS!PmnbXUz$p zdLGXsz@FrdRL|?QRrv%1h)*wKvzop`K7GcKgBmb8CM}-uKbP#?Ww({pR!4v@UNGT+T14$1Ah6nCB~ev@ys^G z*JiKyZj(1vEcfL$C=-~OTrZE|ToltA{3G%pY*CC;Qe!3xK>XFj31ue z*zpu5PcYO#nHX(%+MfrBkPc0}(Td+rxgYW9_uYI`cw?hsu|xbe(wRwf*VKruwc~fs z`=if4#|ht}Cz~qm)3@$oBk?p}d?Q<>Zh03~p%b|?;9ljeVkRRrk|TciLihFIZ}1o@ zy7pyN550@lTY%|Z6g&st6uTDc)Lq{fQi7FWdC)Dl8++v;srz=%fPUhw{$}2T&R1Si zPnhQ_0jqQM!F={Jamx{=>#r__z;{o0+50@@wp0?(mPfYS6;=G&B<@Oby17nNi18u{Vi}n z?do+O)@-1CwgM=t)B0d~^S6iV&~yD+f|}Xs^FJIUOQd@Z;o(PfX1X>!;BLVa>HvTz z=w-0F#Sq{RK$?zu5Y5y0@N~5o!7&rM!Po<_m3=;yK(JxalvdD~%6DJt*kN#k|9wWS z_Bcev7vO5d0v189_ai0zpvO?I`Q6ATe&{x)97O=vi!$lE*o zMl4X@OV3Lzp~H$_Hour)?+;${Y1)@RYdp}fGiX{Vv9!H)_LgOr-_OCK~cUo(l4IDl&y&s z#1!hu0&;lx--6-4Z9UGUbesafjd`;yX|bz9 zz~|1hJo%>LQIuEO_(sF@-_NYD|7o1ybJr3&nDy3=t~x1gViwT&;(UrXx9!`1J@8ey z-{$EUg&SGDvw47e%Fqqc001z|Nkl@i#O znV(u7PP9DG&7L+w7oF170)NQ@x>$G%xfI$1%hv@S=MH`W=Vd$r@n7}?Ua0vE8Wav> zpq$8km@I{wwt)Ik`7WjaaTbS54wgHi?|*^FDtat57frXL4@JFk6(R1LHJOE}+1W*21gRcnKR4J=53uqmXBg>3SSGf}Mj_XQ1 z{}Un><}={!hB-xdg1>((;y->H7~cUbZpC!1h$+;q1!Q+O5bCxP4X`wwJh*Vh%iB5* z`={l>hTsL>gtT4?d?Sr-sz;R!D1R-e6xSN498Ubm-Pmk&JW7svGR}T%YcjI8$39VYnQVY!90$PW8Q&qals_ogu z^5V(hF>layb9L7>Rxf`ld0S%YU|9pzG|Mo zcon-Duj<8v7m^SHnutzZ<5Uh7GcJB-OW61*%fnHY4|~e;;AV1-lbnlhY?L>Ys&?@i zg@`*?9@DXk##(vuBd<=J($oTTWq~Sag>;;XBfytj1=w#IF!?+p3H=_phc{Oh7eSuc zn(=b1ezW>1t6>Xhf7QY37v!&>BwFZgTV8mz<^TPy6)V`Bj+LZ^`w1kqODr6;M!chzjFM#!9lRdE;F!2S+r z+BQWUz$15q5G-Q#QkGg^t}KwDmNwkCZK{o~vs^E|OZpDq?R;-3Nr1&g$y-}_%4*pH z{cQeaeZb4ys}{i;Rxi21TKaxOEKA2pYVofM0bl56dEgeZzU6oTKOj2s3i^gvblH=C!v}R$iZT+p_`urHnqhS zcylG`@aGf)hL4d?C;F3`Rc}1(Zd=tEY*&5{$isiy_?CR7q3k9r4>oZ;rKttx#sYG% z?t^l{t23|rFyZn>wGhi?B!9IWN(X_udg z1O+|0 zWeDWI>;{a6(?rV>37hC$2=Y8{4uiufsO_7ebx}@!D$67EU(xdN)4@y217GZF<4b=h z*ZlPks8w(Hj1Fjt>y|1!vok_@z7rFWE52+qgj(z;2~iuG#*K?kX=;JlS|A5$ILXF# zSOI+L=d3(B+w#{QvOMsQ@EiL)b2RI=)6%Rk`; z6Y<%w(goUB+{rqLPXo1Tfy@#%`+fNGr1~-UIO4^N-N0AlhN9HboeC`=s2iphXm7*= zg9B($nt3F12kB^iB7}1fj(i&u(XW^GN&u*uJ&lnF>J%u08u?pS79$d_P zB4T3)+2YrO12TlI>)z^8Sv z^3t2&&GrSho?zpHqa9CaYJqvMfIkRz=K)w*6m;WF!9?DCecMVJz|!aBWmcZDTDE|0 zt{=4Jw0i}-jDAyz2e|M^tCu_??BY5;&{aD1$M>@dBQDrhnzCBAfZGU5d0XP*a(E>k zsX&Ux0-89qXVE=cdy!Z2i9^DLuQb@?5^P3?M$+Q54C!UZW{UZXsCPP)&Akc$H*R5h z_?zX!-mpC2Nh^`c;Ywr~DSxs5M_oG`+I_zKzD!oqL*~$|KtMhg? zB0SLY@2<7HG}`j?-$k80YKyAlTeE;|Z9$8>M_s`(Ha=y}0xiLd8(8^=ywQ5!zf8KJ z)$8*Ncw0U))FariC-u}{Hrc#0Inpm8X@QRr%I^W+@FkmN`I+FqOas2|94_5N2RbRs z;k4N_UUn|4{sl0{{`}23$VKOPwtd<*IXuhq^hcqcJyQDT7FfYXcW7&QiSt>~@7?+x zwPDO{#HKb+)$oRnm)Q!o|IG3d9phjnD^DD(wk>Q#=-%y_%}v+S%V}r*uKLfL;;cO;gFOCyPAl3^d*HpPO4A@PLr~IJtXu!D*+orYxX-RDN#W zclkjPz>*x}PF5Zim{D8TaS>m7m-?@NSBQ9v<0-8h3&bqu3}9&-uxv1})6a}2gzs6N zGG_sIA}qOo%OC1apb;Ih;;S~FP5W9NUSaus-+Z`<9&Kv#?RT{0IoIFAFR<}ZfAa5$ zP36&`nyH0wDg@D@iU9t2s^z7{EpLCi<$>$}`R+%TZA$;51vD?T9(q*#Uo2*xldIe{ zk+Q@aWaYESuL=>Dw)_|OWGK`|{wejE+I+RmZ#Yc-s2b@&O5S~g98c-&Ex?mwajcDgqZRlh+BK3R zHOT61te4JzggmdCkr%1Qd~B+@V7jp!2;G7fTqfOkfX$=qN%B1Kg+pw7aaYTm`pt9L z#kP0C4wjeP!nlMSP^sxryto`V@f7RE0&<{K+BpnpKIrCAT#tyQ@6$_O)2Q*$f*HH@ zS3k*=6s!7DP;o{Q^LrpXj$H3Vmu!5>YS{uyAphduY&l&nv^@Db^BB<^ z7!J3J6^>H0f96!BwE z0e+y3hXoebW1(^9T1S^gL8WbNfvwzl3%0TG#g#1&+zptEO=)defCtooPa;a?C@8ZI zu(NltHeyBON0GK{uZ>m%RvR)sH|hm}%P{@M_QW!E6VSwEX`$N)me&UUJrs(~f#LP8 zdeUp_9~!=d2$3d;Kf2Wp~G96iT?!1bfVbHb>T)mUd!@OB-5 zSr`A(Q;_E;0^{d_L094oVp9X>U2S-fhscyzA_er?i$V z!0{CFAgfY3zKBp4y<^LWXh#G}=SmaU;s!cc1#S=lHxB>oxP{9w7;H02-%W7#sAU>D z2cWlZN?2}D8^dn4BKmKK(m$;{$T_}%)1qtth|M9$^##T{h>Wy~n=WN}aVj})p7h(F zR%=tfJqFslBgJrn{?Jl67MMPK0C7dZ1QWcj*RfiJNius8x3>ZXMGL;5G5+7OJOW;ec3|xhJOWq3Jg$_=V%Jp+1ujzosM5q4R@Q+RqkL(vySbDE9}~9XK#6`q+fU-7Q~?8*?H(BnhQ~ zy08E@jF25zwu;i8=C7C z*4yL@jc=r$zj5rxg=oT9n^E#bgcNsO#Kwp2kwyB5(AuZQ88>kM()!AqqNJt!v&7Ya zkxoh*Q$C$YD7mZ8^bsKq;~oL&rE*zs*!2nl_2{8=pOp{3)bd%b`Z@2M)+{u7#fmoK z4Oui4^6cR@e)s^($Y3KIUu#Sb79GCuLtD}hikEl`1%Mr& zu)Oph`Rc@sjZaw(TR{Eu7V<5;4s5w-%Bi(jBu{)SB-yhiT&HPO-nx-=w_d(`ppB9N;b|0C3E(ScBY z5&K_!fkEd0#XO*>{g<4KknC9Tj^)?%mL@Phi+o{XnT=0b4O^fk^Q-33-aEX3RR2}c zQ4v4VT>xa9LtVqQ{UbX+?zCZ3<8a2So>gBULj1$8!DAkvl8iNv({(yANo@xFk94oS zGfGoG38xN(T<_Ku*x!mj^%K_evXg8EmCsl{iW>{ngRlcbdd6JchM@#0&YuNzCCrUA zbdK$_eDtRdE%HX|k(*ImB?mx>8;tY@s{dH4c3=v5DIrpB)Zj;SK34N%dUWU@wYy=`U$&^Aw5b+BGN#OT7dQq54X9t<2v}`wUDd7^1oTW;Z`J2u#5R4#IatR{M!fn(_yKP$`nN@VQ47&hR)5PMZ2s{rmZyvs z;LWW6V%M%bXv{bhda{3xb`^hF^Ml!iD>A^1J-JzO3x7uOR6lPaTTbQqmha4sh3bL6 zCrEsO#g=UOch&-#O~5~V7^wcrUTpbJV{E$EIb1e2Wi@Sq_(PlHj@$^7{u+XK@ejBW zhP=^DQoq6wZ-^6lZ3TF9?O$?l&T%;IaTKh2SG{Zbsms}lWtOo#Wwm30=xdwrTAPBa zpY-ms_$Ivh9?NxIa^dy;m|t6-a3^wOmqK<`TfjfMFaaUc)$;02~Wu=7A^0z;mZt#koo?w}HLW0NIra0_E4 zZ~SEE``GW&k7h8`i`YytDb|Pu{6S+$o9jQh->82orXXJY!JDjpBnNqI%Im7XRLeA>oGU(s=6ay?Rbs{IHd}oW{5Y}K?}vC_?Ik@v8gjhTYl+U;OZCQCw%nVZg0eY z&6_I43vY1aH+bAVim2*g3wW8HxvCK!#n5s@IR;Wlao#N87MOT5n|xqraCKmg6H$Ed zGl=iWj+H#$-=^E08@6&!9V}VGp&TrVGfUg})4m0lopY~(=l@~ld!J|1#WO9}f*Izm zd?}u|E4GEa$as}E@&>CP_9I`7=oS#Gz2LF<3ESrFc(WmU<~~Ne_)k;87k7_r!%LV? zy53oX{#7Q&Cfvukz0VzMtdZWS-QQwK6-f27-p za~mN>3G`b@z1)d8;)GB>DbA+_S~49s^5_hk&lB{p)gQu%oN#3?LVsoNU~%J@{$Ur| zeB(;X>ue!%#Wq;Vn~>zU1zFK`_y|LGEzu#$Jq!iO?;mYj7PljJC!AT{_2NlY`BWZf z^Zkc&z%wqt^hTL>X8(n5+_&dOIQdFz*PNR_yKTdK2pRRC6{qa4T7dJ%|CoKJb&&DY z&4HQ^{@tZM-`fhrOIcoDEOM`4tok$CF_l;X=3ch^P|kNq|N9F(JrzpvFIm7lz!%xv zj$IjC<1E|J@{M@Wp;VtbM_=jgohS`r&#e&1{Ros|*1hC)?!Go*=6K74a>r9TPZo&j zSu4?+Tqx8Zx%ChuehnW1N`GZKX4wId6z;S7NBKv+N+@&#P~rs^b+YC=Zn8u9nFxLU zAE5dp-`w&EJQ1~N4Y@u;*AMZbiUHpKCQ$iiKd^lLK2|?@Co=6nYZ&!kZ-^s4T9VRz z%OWH@SAJ>v3#UmF7#>W%H_^>ktDUlWwLnYp*F(E z%Il2jhVx-tVn~PU9d~1z<-3<^*UKxobX@m?{*==pwOT2gqXibB#@AM}{7CR|9f0Zw z;d^UZeceoc^3Ck^AJHS-h#4yRFmBMwIQx#xU;;B-xV=&UL*96$CueJyIWl#4cW6d# zfq8@{GxbM)Kj;;&2ClIRP@lc45X$oAq;Lqh(x2cQvdp4NNlZ6rYY=CT`vYL6xuYtM?J#g8k22g5W2H>T5$uD$=k6@pZO- zLkkPj(j`hUqpQFUqIRY z;(j(=raO2v!phesSGwGmh!?+eYpWk0WO;hParO|^hWCX8z%nkRpE`%w|998FAF=7; z<17!jPC98y=VSreE&RwT>K8<2tOL2me~$0KiSPQWO&5P)c|&2*61FBijs>sU6R7s& zPPF{73Y#vusg^h$ce2Fn(H)RO-gruR(T@?D%$sWUgYet+5#Q<*rLZ_=D{$!xhjU#C z!j3jUi%-D6;t5R&@*E)I6Ca0OJ9^y8C3IKtlBYO(3;2I4){pm&b&o3Yy^&t_U+=-$ z=hx#T$Y=5qQ?ad0cV<7EEh%Bije@;*-XJFLHuS7Y?z!-kHW7FC3x~wnleP16RA` zU==U2@=bQO>HOFCq_5^!`y|Xcp#GN~Zhza_c_tk$^~XtkVyFDd_D~2ox{FP(bYq5D zy&$u{6&$Grh6_uMkEU`gP#N98c%{zVpb*hLN_4Rc9@WhiU#88pwkEiqj|^qsispzH zzl{!)Qe|FO2-s-^@V8@tdih%EFLgIx8C_*UJxDhQ8Ny*XIj@Q%PAq8+eHS6wIY$Rq zyf6UqD=woHz|6Lm4}TwA>58v_&-^#A+jOfRR*=&Hw6Q6x&H^D%tcq`cJ3>Eg50w40 zw72-sOOyf_wIg4X=oWOVowCFNIf%4mW@O0qHhtOEmItoE zF1G1Y_sF#DP}}7FT!-iGM!f7k1- zQ7yYYC*P@67u6S?+px6fGZ1%TID9sjre7o!DjAcUN{x;g)42w zznuc!Wui@=dDQX+#?cDdZa1;YcmpD<^t}+F(i%j1$l2>G-}ecn0A>~khL>A;mutbN zQeIjYTpfRtdj=hI14+g~Z1YRm>@5&!VPo_vRS3w=r5WJ453T%3cLHVdV4Gd6Ugh(a zpY^FUfwTOGt;U;GOIdXm;Jgg?v=;kl?Px^IS z{Wq2wzv6R4qW&mdg4DKif$HbcKsjHu9 z;vki?a;cf^H7d;_1W!%d(y=4IrUU3!4a&*}-TYtTxmBJNcWm<2!7 zxU#UptC7%nMD$k?$4~NwDcFVF*f4v-U#=9fc%p@l;Ks!NjoUvj3P~?DxiM2eME`(1%YaPs)Qymz{tGvM$&)URnW;CHAE*h9 zv)RCe8TW?jyb8YfCZPJS>@1frzX!bLw}HBPGniuk`DQ~kgXODS;b#oUR8BecI=iCq z9q>gj0aZ|jfkS4SD_=YZygpA*z!HfPE+mN&k`VckmXTI}s)07`_vmOnh<7(=vo(99Dp() z4Y=`8&x|%3k<4glvb}*Chu)Vc2XN^MS1-GdyFp&ZJdg3q){6_b+mU<9)PFodw9nJb zW8HDd@B}~ewkx03vEqsYJy%jURN^2<-`pQJ+$FcW@}D0KuK6B~2hZ^NlKg2tKgu0& zyu|GRK`gJX2`%KD4}Rn}bj*?9y8rYqz_VAn^0J?ScQ706@RyK#i-GY~_1f`?4XSy< zth0%S&|W*Qnq(ng%D_qem~08Tc#59{{h+mb-@%_;o}eG_O+YvE7PmZ=yJ?uoA5*iy zS_jdbJMYbd+=BI;lT5~yuelMtUAwr39SLtXc<>_SO<#aLr z->2WZa=T$P+OLo5xu|8Dz~?4-6mpLT6S6vWAW~~D1*(6NKXJL_-8w<8Yk0j<#QH=A zVm`-1Rm~)TJ|DpUxgT8R3!gU+nBNI@2_BhNn_u6sS=Al9E8G?~JOX_E z6F~KQbg0Y!_96I97r62i$6NWX=KO-y_Adn=uT&AMvz=5Ri1z~Z(WIw! zUF)DRk6%V_*Tu@NuhvfMY6&Y6+Iq!*hD6Yp_!B8y9L92W|H87VuoD+v#Qsw$`cG-bCm-)<;QOMxeef3O+Gi*|7T`F57}Uuw0jV#O^n!d1Nw4e)CGFUg|Bm9Ph&u) z@+^iwgd}JO^g7VuC~H~8{94xc5-{M2Qm}5<_4I2G{Tl9kb-x(~r0IIlOa5*dc-jQ@31SCnB9F-`#|Fvww4$9ODnr1^%6GSG;Hz zip)mnH4b0oz*n1-E$LIepl`|fq0;^1lq%vr=>eWJtL%{DAU^O>q%=;#>{iu4)clg8*21I(%a~U=RXw(TwZl~C&4M6YY!sxooQ{P0OPKv0n0cF5^<0tPLCVQXN*Y;-71oOBOTuWtpaKZIpG&=F7b`RdAzuF5HQ zVx{?R=RY&}W`0ke;MN~8pXyaTyGJvj!x!BwNB$ao-c+C}$bA5w;ldDgclENH#(<_X zcY^kRYLIK^)#F49MnV=u#4m|ch#ZJO$Ot~5UN6xMR??o1!0yPP-FdC`OQbL1#Gf-8 zT=yd^>sPUS$~eet^1%SxenMdjc`~wd7(Lk`uZTX{|IX8d}B_bI*qrc%Hu6M?EP z;`5zf?b=nI@xf4ru%l8ypB?tlo#3iisF&fUUV%QhqGG#u)b``jX^`8OGV71>Zax`$dky4JrOCq{Cjiwh z;dDNLvX9?huLpTI4p#Y!==Ok5hbHNFKSU~8162R#xsk{-K+i3OKJ%$-H|jQUUE>{{ z1R8(wB35k=*#6~4B+$;DwO!5~cz!Dc8s~HlJR0iCrC)e9k(XF@8$h|c{40^zY#wP z$ZVmU0iE>Y)J{`@#|11FD{zbj2Wi5rvp!E`?A=~Vzq5@SWc6pR6D(6HpnVgI?AFrm zkMvW$IB!e4Am9GFHkgi@I0iONA7G49il_~T z5y#Z{0pF~*lS*M3w~O;LZ|vgoDxEL^K%gCxDd5Z|5a^#x)evFyIP^*G+#&{0(py}| zfM+%Xg0VcoxuZAAxtamSWm)ix=y)!=5WLSo;AN)+Z&(5xMF%peKKMco#5UGr+aaF3 z0rr_WK*@zKFN3_*TR>gCza!->mxRdrjkG+~z{{c1q6X{v@B#?b4&iIxaf|XUCBL4i z9j$9tWQBS_^Ii+rp|0UV_OJRs>p`DiNqiZYM#S^{z(BXFwu(DFfI^ zH$$TSjq%?gPyPv*zN3I$9`dcMXa4uVpJBd{)DPymenofa``ik=kn_FI{owsZ0*BlV z9KnESEdASG{{!-M9|Pm|vL5j?1EpkCvE93mLEfDKKG@D{pbdva=A=;Ka%i4^`!3o? zpGOY0GsFALo4~GIxs?`}NIQ{3&R{{sC0yAB@YwY|+>)jU-j z^{3w4bvtHp0(JfbcJ>_CFxvp~)No)#2QIxZcQ^ElIG-Nr2|k3+XQy`H$4mw`Xbr6KI&gQ_fD2Ns z7O-qQ71)MHYUi&4|JUPzQ{M)D#syUEw3uRlq#1}>{mSp7oUgwH#ly{RPMB}fF z_M1aX%&l_W4bL)i(vCkwV%o2Pb{xbbt+V4`ms+%Id*$0#nC7~eWMEdPo@H&(&g-~t zdL~fUN2}g7u#2yiJ-|=~8(=XYl=|WENU5F4t>D>{Wl>caupr}zf?m6>px0dJCzb*? zGN4j}3t_eq>{Gm`&oB z3bym=)1mroSFB+@d%a-lftwYVxFg{Y0AJP=sP+oyzT(<@YS#^v(}BBIMON7!2s*o# z=UfS{{@)!wf1R5@&`zrv<#Z^nRgvxY9xw}k@Ry2PaQ4%X&n*y0X+ESbhh6eSVD2lR z^o1}r3U;5r2V8M3aLEI}`CPE(cL)FbOrZXEZRMNbo4*CjF<+tjB+uLf`?5a+Bl=b8 zg`4I>e|tY*4Q>Fzwtr+JKX|t!#G)TE9b#x*m+RfAJ_99Jn@F@j7Lo^l3taIsP~%hx zb63DF&3TgKI-2A`N%B+ZQ$2_b(6!E{+C!dfPCe&Y<`VEi^-8{NIP9iz!+9a=DLDah zdkscg3AxtG0_uWdKDW{b+mr%MpkG#dExOiK$!eOyIPgK%$PH~wN7I*q!-JQ>VD4n# z20DyF-`%n|xVQZCrKs<(?BL)05xi>|u-;FB_Uh3=1-DRhim|Aw1yX_RNv3@6G|!;p zJMSatdvao&%$-l1YcNwK*XB$6$_)3bp&E^vkN z@2Nc76y>JI0?QaUrhX5ee~Or|7?&Lb`K|8*8)ty_s$Z>HdHmy@a*Cp$!XB`JXbV{B zM+p9i3UeiDFyQFIlb;a`=x1=9`{V-T%bW<@(|J@``_1>E`~@lC6AaugzZU$6e*gol202&U1q6q_sBN@mvYYcf^M(A}e1+Pg56>y7SIy(QmC}IfH2TL?!KuW_#8HLumfUo@JA@ z$G|+#=OX?!OHLL=tX4gsjgy{p`n`buC`-SSFdL#{+TbpFO$Byq3p{ZZu!$BB&`Mu( z(_orcfX)*SuRrAeGnFpNG1QMSmUCXe$^h||WiXq~1t-lwOqoNTgk;}?B+msYp_3SH z0A*jqz3c%y4^Klm{=XA>q8@R)3e{4F8^0#4U{U(tz~-Evhw|jKHrJ6__d@?Iu9vC% z!F4jbk?ZSc!y#Xr2CnH1{QMnYp{xHpXuOkw*`sOMl*sZET3>f_ki%S+2gNTc_hV)~ zs!$R8E5Ne#tKM2vd`Ub6=sgDXTaaH5jHUw<1#gJ@Dh6)=3JhKa<{3!kwvaz>Dy&2P zg^}+oY6qSHozESl_ZlmvBg?bhxoarrP9_nNYl7~p_8#ozS_gL@ZaDsK*5T}c6jAep zAEoCSL7s0-eLZ4j1815S;cM;zJ8pNPJpsoxzW_YPg~PU1Z)9loBs6UqC>_Uzt2yUS z3u2>*u&Xy3*ns}kZw{`j9`7wZAj!4|ZsNkXnhWdNt07-G2)K}b`UCpA6|*4Enerjs z{?Xq+q~cdZ^`S=oO6!39jxrXpYI{KI>{o8F`u{|q0h33}y#YJ@GrXH?AF@s;JK%Go zSJTAn>{YCL5mEQ04bA@Ac$y7?e>B?Tjc2 Date: Thu, 25 Jul 2019 00:32:08 +0300 Subject: [PATCH 35/73] Rename huawei_lte traffic_statistics to monitoring_traffic_statistics (#9943) --- source/_components/huawei_lte.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/huawei_lte.markdown b/source/_components/huawei_lte.markdown index b8b05e1dea3..09d4dff41f9 100644 --- a/source/_components/huawei_lte.markdown +++ b/source/_components/huawei_lte.markdown @@ -122,8 +122,8 @@ sensor: monitored_conditions: - device_information.SoftwareVersion - device_signal.rssi - - traffic_statistics.CurrentDownloadRate - - traffic_statistics.TotalConnectTime + - monitoring_traffic_statistics.CurrentDownloadRate + - monitoring_traffic_statistics.TotalConnectTime ``` {% configuration %} @@ -152,14 +152,14 @@ monitored_conditions: device_signal.sinr: description: The signal SINR value. default: default - traffic_statistics.CurrentDownloadRate: + monitoring_traffic_statistics.CurrentDownloadRate: description: Current download rate, bytes/sec. - traffic_statistics.CurrentUploadRate: + monitoring_traffic_statistics.CurrentUploadRate: description: Current upload rate, bytes/sec. - traffic_statistics.TotalUpload: + monitoring_traffic_statistics.TotalUpload: description: Total bytes uploaded since last reset. - traffic_statistics.TotalDownload: + monitoring_traffic_statistics.TotalDownload: description: Total bytes downloaded since last reset. - traffic_statistics.TotalConnectTime: + monitoring_traffic_statistics.TotalConnectTime: description: Total time connected since last reset. {% endconfiguration %} From d070e102180fd91b94df9eb3789cf30ade2f4a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?plaf=C3=BC?= Date: Wed, 24 Jul 2019 23:34:05 +0200 Subject: [PATCH 36/73] Add documentation related to new sources configuration option in pioneer component (#9937) * Add documentation related to new sources configuration option in pioneer component * Apply suggestions from code review Co-Authored-By: Franck Nijhof * Revert sample yaml or pioneer component to display only required fields --- source/_components/pioneer.markdown | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/source/_components/pioneer.markdown b/source/_components/pioneer.markdown index 737cc1adadc..53143264192 100644 --- a/source/_components/pioneer.markdown +++ b/source/_components/pioneer.markdown @@ -40,9 +40,86 @@ timeout: description: Number of seconds (float) to wait for blocking operations like connect, write and read. required: false type: float +sources: + description: A list of mappings from source friendly name to the source code (e.g. `TV:'05'`). Valid source codes depend on the receiver (some known codes can be found below). Codes must be defined as strings (between single or double quotation marks) so that `05` is not implicitly transformed to `5`, which wouldn't be valid source code. + required: false + default: Empty list (i.e. no source selection will be possible) + type: list {% endconfiguration %} Notes: - Some Pioneer AVRs use the port 23 default and some are reported to use 8102. - `timeout` is a socket level option and should only be configured if you know what you are doing. + +### Source codes + +Under these lines, you can find some sample `sources` lists per receiver model. Here we use the source names as shown on the remote as key for each code. However these are for display purposes only, so you could rename inputs to better match your set-up (e.g. `HDMI: '19'` to `Kodi: '19'`. + +Codes must be defined as strings (between single or double quotation marks) so that `05` is not implicitly transformed to `5`, which wouldn't be valid source code. + +#### VSX-921 + +```yaml +sources: + 'PHONO': '00' + 'CD': '01' + 'CD-R/TAPE': '03' + 'DVD': '04' + 'TV/SAT': '05' + 'VIDEO 1(VIDEO)': '10' + 'VIDEO 2': '14' + 'DVR/BDR': '15' + 'iPod/USB': '17' + 'HDMI1': '19' + 'HDMI2': '20' + 'HDMI3': '21' + 'HDMI4': '22' + 'HDMI5': '23' + 'HDMI6': '24' + 'BD': '25' + 'HOME MEDIA GALLERY(Internet Radio)': '26' +``` + +#### VSX-822-K + +```yaml +sources: + 'CD': '01' + 'Tuner': '02' + 'DVD': '04' + 'TV': '05' + 'Sat/Cbl': '06' + 'Video': '10' + 'DVR/BDR': '15' + 'iPod/USB': '17' + 'BD': '25' + 'Adapter': '33' + 'Netradio': '38' + 'Pandora': '41' + 'Media Server': '44' + 'Favorites': '45' + 'Game': '49' +``` + +#### VSX-824 + +```yaml +sources: + 'CD': '01' + 'Tuner': '02' + 'DVD': '04' + 'TV': '05' + 'Sat/Cbl': '06' + 'Video': '10' + 'DVR/BDR': '15' + 'iPod/USB': '17' + 'HDMI': '19' + 'BD': '25' + 'Adapter': '33' + 'Netradio': '38' + 'Media Server': '44' + 'Favorites': '45' + 'MHL': '48' + 'Game': '49' +``` From f89ac0af1b4abaaa53df7c388fd8635216a1804e Mon Sep 17 00:00:00 2001 From: shbatm Date: Wed, 24 Jul 2019 16:45:21 -0500 Subject: [PATCH 37/73] Update Google Maps Device Tracker Instructions (#9918) * Update Google Maps Device Tracker Instructions * :pencil2: Tweak --- source/_components/google_maps.markdown | 29 ++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/source/_components/google_maps.markdown b/source/_components/google_maps.markdown index e0dfa1f4b7f..b6a7dc4d694 100644 --- a/source/_components/google_maps.markdown +++ b/source/_components/google_maps.markdown @@ -14,9 +14,12 @@ The `google_maps` platform allows you to detect presence using the unofficial AP ## Configuration -You first need to create an additional Google account and share your location with that account. This platform will use that account to fetch the location of your device(s). You have to setup sharing through the Google Maps app on your mobile phone. You can find more information [here](https://support.google.com/accounts?p=location_sharing). +You first need to create an additional Google account and share your location with that account. This platform will use that account to fetch the location of your device(s). -This platform will create a file named `.google_maps_location_sharing.cookies` extended with the slugified username where it caches your login session. +1. You have to setup sharing through the Google Maps app on your mobile phone. You can find more information [here](https://support.google.com/accounts?p=location_sharing). +2. You must use `mapscookiegettercli` to get a cookie file which can be used with this device tracker. See more information [here](#maps-cookie-getter) +3. Save the cookie file to your Home Assistant configuration directory with the following name: `.google_maps_location_sharing.cookies.` followed by the slugified username of the NEW Google account. + - For example: if your email was `location.tracker@gmail.com`, the filename would be: `.google_maps_location_sharing.cookies.location_tracker_gmail_com`.
@@ -32,7 +35,6 @@ To integrate Google Maps Location Sharing in Home Assistant, add the following s device_tracker: - platform: google_maps username: YOUR_USERNAME - password: YOUR_PASSWORD ``` {% configuration %} @@ -48,4 +50,25 @@ max_gps_accuracy: description: Sometimes Google Maps can report GPS locations with a very low accuracy (few kilometers). That can trigger false zoning. Using this parameter, you can filter these false GPS reports. The number has to be in meters. For example, if you put 200 only GPS reports with an accuracy under 200 will be taken into account - Defaults to 100km if not specified. required: false type: float +scan_interval: + description: The frequency (in seconds) to check for location updates. + required: false + default: 60 + type: integer {% endconfiguration %} + +### Maps Cookie Getter + +You must run the [`mapscookiegetter`](https://mapscookiegettercli.readthedocs.io/en/latest/) tool to get the cookie file from a computer with a Web Browser. To install, your computer must have Python 3 and PIP installed: + +```shell +pip3 install mapscookiegettercli +``` + +Then run the command: + +```shell +maps-cookie-getter +``` + +This will open up a browser window for you to log-in to the NEW Google Account (the one you are sharing the location with, not your normal account). After logging in, the program will save the pickled cookie file `location_sharing.cookies` in the same directory as you ran the command from. Copy this to your Home Assistant configuration directory and rename as described above. From c8ba8434185feea9d787dab933775249a8282107 Mon Sep 17 00:00:00 2001 From: Joe Trabulsy Date: Wed, 24 Jul 2019 18:01:45 -0400 Subject: [PATCH 38/73] Update VeSync Integration page (#9779) * Update VeSync integration page * Fix incorrect redirect * Remove linkable titles * Remove additional platform * Add service * Remove Time Zone * Remove active_time attribute * :pencil2: Tweak --- .vscode/cSpell.json | 1 + source/_components/vesync.markdown | 82 +++++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 13 deletions(-) diff --git a/.vscode/cSpell.json b/.vscode/cSpell.json index 42c5d088e2f..1951a92694f 100644 --- a/.vscode/cSpell.json +++ b/.vscode/cSpell.json @@ -12,6 +12,7 @@ "Denon", "endconfiguration", "endraw", + "Etekcity", "fitbit", "Flexit", "geizhals", diff --git a/source/_components/vesync.markdown b/source/_components/vesync.markdown index fa7e38cf0b8..7d7a8d93016 100644 --- a/source/_components/vesync.markdown +++ b/source/_components/vesync.markdown @@ -1,5 +1,5 @@ --- -title: "VeSync Switch" +title: "VeSync Integration" description: "Instructions on how to set up Etekcity VeSync switches and outlets within Home Assistant." logo: vesync.png ha_category: @@ -9,20 +9,37 @@ redirect_from: - /components/switch.vesync/ --- -The `vesync` switch platform enables integration with Etekcity VeSync smart wall switches and outlets. +The `vesync` integration enables you to control Etekcity smart switches and outlets connected to the VeSync App. -VeSync outlets are low-cost wifi smart plugs that offer energy monitoring and work with popular voice assistants. +The devices must be added to the VeSync App before this integration can discover them. -Supports both the 7A round outlets and 15A rectangular outlets, as well as the in wall switches. +The following platforms are supported: + +- **switch** + +## Supported Devices + +This integration supports devices controllable by the VeSync App. The following devices are supported by this integration: + +### Plugs + +- Etekcity 7 Amp US outlet - ESW01-USA (Round) +- Etekcity 10 Amp US outlet - ESW10-USA (Round) +- Etekcity 10 Amp EU outlet - ESW10-EU (Round) +- Etekcity 15 Amp US outlet - ESW15-USA (Rectangular) +- Etekcity 2 Plug Outdoor Outlet - ESO15-TB + +### Switches + +- Etekcity In Wall Smart Switch (EWSL01-USA) ## Configuration -To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file: +To use this integration, all devices must be registered with the VeSync App. Once registration is complete, you can add the VeSync integration by adding the VeSync integration in the configuration section of the frontend and entering your username and password. You can also use the traditional configuration method by adding the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry -switch: - - platform: vesync +vesync: username: YOUR_USERNAME password: YOUR_PASSWORD ``` @@ -38,11 +55,50 @@ password: type: string {% endconfiguration %} -## Exposed Attributes +## Services -VeSync switches will expose the following details for only the smart outlets. Energy monitoring not available for in-wall switches. +| Service | Description | +|---------|-------------| +| `update_devices` | Poll Vesync server to find and add any new devices | -| Attribute | Description | Example | -| ------------------- | ------------------------------------------------------------------- | --------------- | -| `current_power_w` | The present power consumption of the switch in watts. | 100 | -| `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | +## Outlet Exposed Attributes + +VeSync outlets will expose the following details for only the smart outlets. Energy monitoring not available for in-wall switches. + +| Attribute | Description | Example | +| ----------------------- | ----------------------------------------------------------------------- | --------------- | +| `current_power_w` | The present power consumption of the switch in watts. | 100 | +| `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | +| `voltage` | Current voltage of the device | 120.32 | +| `weekly_energy_total` | Total energy usage for week starting from Monday 12:01AM in kWh | 14.74 | +| `monthly_energy_total` | Total energy usage for month starting from 12:01AM on the first in kWh | 52.30 | +| `yearly_energy_total` | Total energy usage for year start from 12:01AM on Jan 1 in kWh | 105.25 | + +## Extracting Attribute data + +In order to get the attributes readings from supported devices, such as energy from outlets or fan attributes, you'll have to create a [template sensor](/components/switch.template/). + +In the example below, change all of the `vesync_switch`'s to match your device's entity ID. + +Adapted from the [TP-Link integration](https://www.home-assistant.io/components/tplink/#plugs). + +{% raw %} + +```yaml +sensor: + - platform: template + vesync_switch_watts: + friendly_name_template: "{{ states.switch.vesync_switch.name}} Current Consumption" + value_template: '{{ states.switch.vesync_switch.attributes["current_power_w"] | float }}' + unit_of_measurement: 'W' + vesync_switch_total_kwh: + friendly_name_template: "{{ states.switch.vesync_switch.name}} Total Consumption" + value_template: '{{ states.switch.vesync_switch.attributes["today_energy_kwh"] | float }}' + unit_of_measurement: 'kWh' + vesync_switch_volts: + friendly_name_template: "{{ states.switch.vesync_switch.name}} Voltage" + value_template: '{{ states.switch.vesync_switch.attributes["voltage"] | float }}' + unit_of_measurement: 'V' +``` + +{% endraw %} From 1e74efa74713ce3fb6ac276de5de4e09941573c6 Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Fri, 26 Jul 2019 08:12:33 -0400 Subject: [PATCH 39/73] Add scan interval config item to Environment Canada sensor (#9950) * Move sensor scan interval to configuration * Fix build error, change to seconds --- source/_components/environment_canada.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index 50bda08f215..ba4435afe33 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -105,7 +105,6 @@ sensor: - `advisories` - Current advisory alerts. - `statements` - Current special weather statements. - `endings` - Alerts that have recently ended. -- The platform refreshes the data every minute (primarily to update alerts), and the source data is typically updated hourly within 10 minutes after the hour. - The platform automatically determines which weather station to use based on the system's latitude/longitude settings. For greater precision, it is also possible to specify either: - A specific station code of the form `AB/s0000123` based on those listed in [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or - A specific latitude/longitude @@ -129,6 +128,11 @@ language: required: false type: string default: english +scan_interval: + description: The time between updates in seconds. + required: false + type: integer + default: 600 {% endconfiguration %} ###Alert TTS Script From 5d9270c79523ca1fee7672e444e143ab1f040672 Mon Sep 17 00:00:00 2001 From: aschamberger Date: Fri, 26 Jul 2019 14:13:23 +0200 Subject: [PATCH 40/73] adding docs for ord() template filter (#9962) * adding docs for https://github.com/home-assistant/home-assistant/pull/25398 * :pencil2: Tweak --- source/_docs/configuration/templating.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 018c7a5bedc..0b9b1b054a1 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -277,6 +277,7 @@ Some of these functions can also be used in a [filter](http://jinja.pocoo.org/do - Filter `min` will obtain the smallest item in a sequence. - Filter `value_one|bitwise_and(value_two)` perform a bitwise and(&) operation with two values. - Filter `value_one|bitwise_or(value_two)` perform a bitwise or(\|) operation with two values. +- Filter `ord` will return for a string of length one an integer representing the Unicode code point of the character when the argument is a Unicode object, or the value of the byte when the argument is an 8-bit string. ### Regular expressions From 7ec6b5d3bbb4345506198c6837f70ef1a9f62a5e Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Fri, 26 Jul 2019 14:38:35 +0200 Subject: [PATCH 41/73] Add documentation for configuring blocking of network client devices (#9975) --- source/_components/unifi.markdown | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/source/_components/unifi.markdown b/source/_components/unifi.markdown index 7f94a7dacd9..ec1c1a12d01 100644 --- a/source/_components/unifi.markdown +++ b/source/_components/unifi.markdown @@ -53,6 +53,11 @@ site: type: string required: true default: None +block_client: + description: Clients that can be blocked from the network + type: list + required: false + default: None detection_time: description: How long since the last seen time before the device is marked away, specified in seconds. type: integer @@ -67,7 +72,7 @@ ssid_filter: ### Configuring Users -The UniFi controller allows you to create multiple users on it besides the main administrator. If all you want to use is the device tracker then it is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. If you want POE control as well you would need to have 'admin' permissions. +The UniFi controller allows you to create multiple users on it besides the main administrator. If all you want to use is the device tracker then it is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. If you want blocking of network access or POE control as well you would need to have 'admin' permissions. ### Conflicts with MQTT @@ -89,9 +94,15 @@ If Home Assistant and the UniFi controller are running on separate machines or V ## Switch -Switches are network devices that are powered by POE switches from Ubuiqitis UniFi line of networking gear. +### Block network access for clients -Note that POE control actually configures the network port of the switch which the device is connected to. +Allow control of network access to clients configured in `configuration.yaml` + +### Control clients powered by POE + +Entities appear automatically for each connected POE client. If no POE client device is in operation, no entity will be visible. Note: Unifi infrastructure devices such as access points and other switches are not (yet) supported, even if they are powered over ethernet themselves. + +Note that POE control actually configures the network port of the switch which the client is connected to. ## Debugging integration From 41d5559acaca8c55287cc31eefc6afe0fe0feb7d Mon Sep 17 00:00:00 2001 From: manonstreet Date: Sun, 28 Jul 2019 14:07:16 -0400 Subject: [PATCH 42/73] Update Switchbot doc to match PR #25474 (#9976) * Update Switchbot doc to match PR #25474 Add details on existing assumed_state attribute as well as the for the new last_run_success attribute * :pencil2: Tweaks --- source/_components/switchbot.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/switchbot.markdown b/source/_components/switchbot.markdown index aab3a5bbc9d..468a619913a 100644 --- a/source/_components/switchbot.markdown +++ b/source/_components/switchbot.markdown @@ -32,3 +32,10 @@ name: required: false type: string {% endconfiguration %} + +## Switchbot Entity + +There are two attributes available on the Switchbot entity to give you more information about your device. + +- `last_run_success`: If `true` if the last action sent to the Switchbot succeeded. This attribute is useful for error trapping when Bluetooth connectivity is intermittent. If `false`, see home-assistant.log for specific error messgages. +- `assumed_state`: Always `true`. If the state of the Switchbot entity cannot be determined, it is assumed to be `on`. From 510f59163d5fef621cd1d2702fcb42909cfb6cb5 Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Mon, 29 Jul 2019 03:37:13 -0400 Subject: [PATCH 43/73] Add uv_index to list of sensors (#9996) --- source/_components/environment_canada.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index ba4435afe33..04d2ec131b6 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -98,6 +98,7 @@ sensor: - `wind_bearing` - The current wind direction in degrees. - `high_temp` - The next forecast high temperature, in ºC. - `low_temp` - The next forecast low temperature, in ºC. + - `uv_index` - The next forecast UV index. - `pop` - The next forecast probability of precipitation, in %. - `text_summary` - A textual description of the next forecast period, e.g. "Tonight. Mainly cloudy. Low -12." - `warnings` - Current warning alerts. From f59b8dd15b091a866dfe37074a1da0511e395bb2 Mon Sep 17 00:00:00 2001 From: MJJ Date: Mon, 29 Jul 2019 09:45:29 +0200 Subject: [PATCH 44/73] updated buienradar.sensor docs (#9605) * updated buienradar.sensor docs updated docs for new changes in buienradar sensor * Update sensor.buienradar.markdown * Update sensor.buienradar.markdown * Update sensor.buienradar.markdown * :pencil2: Tweak --- source/_components/sensor.buienradar.markdown | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index 2e22f89d2ae..4ba6cd9df0a 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -8,7 +8,7 @@ ha_release: 0.47 ha_iot_class: Cloud Polling --- -The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). +The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a webservice that provides detailed weather information for users in The Netherlands. The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). The selected weather station will provide all weather data, with the exception of the forecasted precipitation. The forecasted precipitation data will be retrieved from buienradar using your actual gps-location (and not the location of the nearest weather station). @@ -40,7 +40,7 @@ longitude: required: false type: float timeframe: - description: "Minutes to look ahead for precipitation forecast (min: 5 / max: 120)." + description: Minutes to look ahead for precipitation forecast (minimum 5, maximum 120). required: false default: 60 type: integer @@ -51,8 +51,12 @@ monitored_conditions: keys: stationname: description: The name of the selected meteo-station. + barometerfc: + description: A numeric barametric forecast (1 to 7) + barometerfcname: + description: "A textual representation of the barometer forecast (eg: Thunderstorms, Stable, etc.)." conditioncode: - description: A symbol and a unique code identifying the current weather condition ([a..z]). + description: "A symbol and a unique code identifying the current weather condition ([a..z])." condition: description: A symbol and the current weather condition (`clear`, `cloudy`, `fog`, `rainy`, `snowy` or `lightning`). conditiondetailed: @@ -61,6 +65,8 @@ monitored_conditions: description: A symbol with the full current weather condition (in English). symbol: description: A symbol for the current weather with the full current condition (in Dutch). + feeltemperature: + description: "The current feel temperature (in [C](https://en.wikipedia.org/wiki/Celsius))." humidity: description: The relative humidity (%). temperature: @@ -72,7 +78,7 @@ monitored_conditions: windforce: description: "The wind speed/force in [Bft](https://en.wikipedia.org/wiki/Beaufort_scale)." winddirection: - description: "Where the wind is coming from: N (North),Z (south), NO (North-East), etc." + description: "Where the wind is coming from: N (North), Z (south), NO (North-East), etc." windazimuth: description: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. pressure: @@ -89,6 +95,10 @@ monitored_conditions: description: The total expected precipitation/rain in mm within the given time-frame. The total expected rain in the configured time-frame will be equal to _precipitation_forecast_total_/_timeframe_ mm/min. So, with time-frame configured to 30 minutes and a value of 5, the expected rain is 5 mm in 30 minutes, which is the same as 10 mm/h. If time-frame is set to 90 minutes and a value of 5, the expected rain is 5 mm in 90 minutes, which is equal to 3.3 mm/h. irradiance: description: "Sun intensity in Watt per square meter ([W/m2](https://en.wikipedia.org/wiki/W/m2))." + rainlast24hour: + description: The rail over the last 24 hours (in mm). + rainlasthour: + description: The rail over the last hour (in mm). temperature_1d: description: "The forecasted temperature (in [C](https://en.wikipedia.org/wiki/Celsius))." mintemp_1d: @@ -98,11 +108,21 @@ monitored_conditions: sunchance_1d: description: The forecasted chance for sun (%). rain_1d: - description: "The forecasted amount of rain in [mm](https://en.wikipedia.org/wiki/Millimetre)." + description: "The forecasted amount of rain in [mm](https://en.wikipedia.org/wiki/Millimetre); the average of minrain_1d and maxrain_1d." + minrain_1d: + description: "The minimum forecasted amount of rain in [mm](https://en.wikipedia.org/wiki/Millimetre)." + maxrain_1d: + description: "The maximum forecasted amount of rain in [mm](https://en.wikipedia.org/wiki/Millimetre)." snow_1d: description: "The forecasted amount of snow in [cm](https://en.wikipedia.org/wiki/Centimetre)." + windazimuth_1d: + description: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. (derived from winddirection_1d) + winddirection_1d: + description: "Where the wind will be coming from: N (North), Z (south), NO (North-East), etc." windforce_1d: description: "The expected windforce in [Bft](https://en.wikipedia.org/wiki/Beaufort_scale)." + windspeed_1d: + description: "The expected windspeed in [m/s](https://en.wikipedia.org/wiki/M/s) (derived from windforce_1d)." conditioncode_1d: description: Symbol and condition code of the expected condition. condition_1d: @@ -145,11 +165,14 @@ Full configuration example (excluding forecasted conditions) where location is m longitude: 5.70 monitored_conditions: - stationname + - barometerfc + - barometerfcname - conditioncode - condition - conditiondetailed - conditionexact - symbol + - feeltemperature - humidity - temperature - groundtemperature @@ -164,6 +187,8 @@ Full configuration example (excluding forecasted conditions) where location is m - irradiance - precipitation_forecast_average - precipitation_forecast_total + - rainlast24hour + - rainlasthour ``` Configuration example with current condition and (some) forecasted values: @@ -190,21 +215,23 @@ sensor: - temperature_3d - temperature_4d - temperature_5d + - mintemp_1d - rainchance_1d - rainchance_2d - - rainchance_3d - - rainchance_4d - - rainchance_5d - sunchance_1d - sunchance_2d - - sunchance_3d - - sunchance_4d - - sunchance_5d - rain_1d - rain_2d - - rain_3d - - rain_4d - - rain_5d + - minrain_1d + - maxrain_1d + - windforce_1d + - windforce_2d + - windspeed_1d + - windspeed_2d + - winddirection_1d + - winddirection_2d + - windazimuth_1d + - windazimuth_2d ``` [Usage statement:](https://www.buienradar.nl/overbuienradar/gratis-weerdata) From 3baa5df87bede616bc8fc572e49091135194a980 Mon Sep 17 00:00:00 2001 From: Maikel Punie Date: Mon, 29 Jul 2019 09:46:32 +0200 Subject: [PATCH 45/73] Added velbus config flow documentation (#9955) * Added velbus config flow documentation * Appliad all comments * Missed 2 comments in PR9955 * :pencil2: Tweak --- source/_components/velbus.markdown | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/source/_components/velbus.markdown b/source/_components/velbus.markdown index 1d59dd2508e..68d973de4ba 100644 --- a/source/_components/velbus.markdown +++ b/source/_components/velbus.markdown @@ -29,19 +29,23 @@ There is currently support for the following device types within Home Assistant: ## Configuration -The gateway needs to be configured by adding the following lines to your `configuration.yaml` file: +There are 2 options in configuring the velbus integration: + +- Via the Home Assistant user interface where it will let you enter the port string to connect to the Velbus bus. +- Via the Home Assistant `configuration.yaml` file. ```yaml # Example configuration.yaml entry for a USB or serial interface velbus: - port: '/dev/ttyUSB00' + port: 'PORT_STRING' ``` -```yaml -# Example configuration.yaml entry for a TCP/IP interface -velbus: - port: '127.0.0.1:3678' -``` +## Port Sstring + +The port string used in the user interface or the configuration file can have 2 formats: + +- For a serial device: /dev/ttyUSB00 +- For a tcp/ip device: 127.0.0.1:3678 {% configuration %} port: From 470fa2665f142ca523bd92588eda764af4e4de70 Mon Sep 17 00:00:00 2001 From: gjbadros Date: Mon, 29 Jul 2019 11:05:32 -0700 Subject: [PATCH 46/73] Describe support of multiple elk devices (#9441) * Describe support of multiple elk devices For an upcoming PR that supports multiple elk devices. This is a doc update for the version of that PR that uses multiple host sections instead of a list of host sections under a devices tag (since that extra "devices" section would result in a breaking change). * :pencil2: Tweak * Added a prefix field to one of the config entries The example config needed a prefix for the second entry. --- source/_components/elkm1.markdown | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/_components/elkm1.markdown b/source/_components/elkm1.markdown index 063db11650f..86baa1093c2 100644 --- a/source/_components/elkm1.markdown +++ b/source/_components/elkm1.markdown @@ -36,18 +36,21 @@ There is currently support for the following device types within Home Assistant: ## Configuration -To integrate Elk-M1 controller with Home Assistant, add the following +To integrate one or more Elk-M1 controllers with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry elkm1: - host: elk://IP_ADDRESS + - host: elk://IP_ADDRESS_1 + ... + - host: elk://IP_ADDRESS_2 + prefix: gh # for guest house controller ``` {% configuration %} host: - description: Connection string to Elk of the form `://
[:port]`. `` is `elk` for non-secure connection, `elks` for secure connection, and `serial` for serial port connection. `
` is IP address or domain or for `serial` the serial port that the Elk is connected to. Optional `` is the port to connect to on the Elk, defaulting to 2101 for `elk` and 2601 for `elks`. For `serial` method, _address_ is the path to the tty _/dev/ttyS1_ for example and `[:baud]` is the baud rate to connect with. + description: Connection string to Elk of the form `://
[:port]`. `` is `elk` for non-secure connection, `elks` for secure connection, and `serial` for serial port connection. `
` is IP address or domain or for `serial` the serial port that the Elk is connected to. Optional `` is the port to connect to on the Elk, defaulting to 2101 for `elk` and 2601 for `elks`. For `serial` method, _address_ is the path to the tty _/dev/ttyS1_ for example and `[:baud]` is the baud rate to connect with. You may have multiple host sections for connecting multiple controllers. required: true type: string username: @@ -58,6 +61,10 @@ password: description: Password to login to Elk. Only required if using `elks` connection method. required: false type: string +prefix: + description: The prefix to use, if any, for all the devices created for this controller. At most one host can omit the prefix, all others must have a unique prefix within the home assistant instance. + require: false + type: string temperature_unit: description: The temperature unit that the Elk panel uses. Valid values are `C` and `F`. required: false From f72b9a4386aeedc3b1a37600c766f23479e5e155 Mon Sep 17 00:00:00 2001 From: Andre Lengwenus Date: Mon, 29 Jul 2019 21:24:51 +0200 Subject: [PATCH 47/73] Documentation for LCN covers via output ports (#9981) * Documentation for LCN covers via output ports * :pencil2: Tweaks --- source/_components/lcn.markdown | 75 +++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/source/_components/lcn.markdown b/source/_components/lcn.markdown index 3b8dc83ea94..987c4fc6ecb 100644 --- a/source/_components/lcn.markdown +++ b/source/_components/lcn.markdown @@ -21,7 +21,7 @@ redirect_from: The `lcn` integration for Home Assistant allows you to connect to [LCN](http://www.lcn.eu) hardware devices. -The integration requires one unused license of the coupling software LCN-PCHK (version >2.8) and a LCN hardware coupler. Alternatively a LCN-PKE coupler can be used which offers two PCHK licenses. +The integration requires one unused license of the coupling software LCN-PCHK (version >2.8) and an LCN hardware coupler. Alternatively, an LCN-PKE coupler can be used which offers two PCHK licenses. With this setup sending and receiving commands to and from LCN modules is possible. There is currently support for the following device types within Home Assistant: @@ -36,8 +36,8 @@ There is currently support for the following device types within Home Assistant:
- Please note: Besides the implemented platforms the `lcn` integration offers a variety of [service calls](#services). - These service calls cover functionalities of the LCN system which cannot be represented by the platform implementations. + Please note: Besides the implemented platforms, the `lcn` integration offers a variety of [service calls](#services). + These service calls cover functionalities of the LCN system, which cannot be represented by the platform implementations. They are ideal to be used in automation scripts or for the `template` platforms.
@@ -45,7 +45,7 @@ There is currently support for the following device types within Home Assistant: ## Configuration To use your LCN system in your installation, add the following lines to your `configuration.yaml` file. -You have to specify at least one ip/port with login credentials for a PCHK host. +You have to specify at least one IP/port with login credentials for a PCHK host. Consider to store your credentials in a [secrets.yaml](/docs/configuration/secrets). ```yaml @@ -97,7 +97,7 @@ lcn: address: myhome.s0.m7 source: var3 unit_of_measurement: °C - + switches: - name: Sprinkler switch address: myhome.s0.m7 @@ -127,7 +127,7 @@ connections: required: true type: string name: - description: Optional connection identifier. If omited, the connections will be named consecutively as _pchk_, _pchk1_, _pchk2_, ... + description: Optional connection identifier. If omitted, the connections will be named consecutively as _pchk_, _pchk1_, _pchk2_, ... required: false default: pchk type: string @@ -219,6 +219,10 @@ covers: description: "Motor port ([MOTOR_PORT](#ports))." required: true type: string + reverse_time: + description: "Reverse time ([REVERSE_TIME](#variables-and-units), see also [Cover](#cover))." + required: false + type: string lights: description: List of your lights. @@ -329,7 +333,7 @@ Modules can be arranged in _segments_. Segments can be addressed by their numeri LCN Modules within the _same_ segment can be grouped by their group id (5..254) or 3 (= target all groups.) -The LCN integration allows the connection to more than one hardware coupler. In this case it has to be specified which hardware coupler should be used for addressing the specified module. +The LCN integration allows the connection to more than one hardware coupler. In this case, it has to be specified which hardware coupler should be used for addressing the specified module. Whenever the address of a module or a group has to be specified, it can be addressed using one of the following syntaxes: @@ -363,12 +367,12 @@ The platforms and service calls use several predefined constants as parameters. | -------- | ------ | | OUTPUT_PORT | `output1`, `output2`, `output3`, `output4` | | RELAY_PORT | `relay1`, `relay2`, `relay3`, `relay4`, `relay5`, `relay6`, `relay7`, `relay8` | -| MOTOR_PORT | `motor1`, `motor2`, `motor3`, `motor4` | +| MOTOR_PORT | `motor1`, `motor2`, `motor3`, `motor4`, `outputs` | | LED_PORT | `led1`, `led2`, `led3`, `led4`, `led5`, `led6`, `led7`, `led8`, `led9`, `led10`, `led11`, `led12` | | LOGICOP_PORT | `logicop1`, `logicop2`, `logicop3`, `logicop4` | | BINSENSOR_PORT | `binsensor1`, `binsensor2`, `binsensor3`, `binsensor4`, `binsensor5`, `binsensor6`, `binsensor7`, `binsensor8` | -The [MOTOR_PORT](#ports) values specify which hardware relay configuration will be used: +The [MOTOR_PORT](#ports) values specify which hardware relay or outputs configuration will be used: | Motor | Relay on/off | Relay up/down | | :------: | :----------: | :-----------: | @@ -377,6 +381,11 @@ The [MOTOR_PORT](#ports) values specify which hardware relay configuration will | `motor3` | `relay5` | `relay6` | | `motor4` | `relay7` | `relay8` | +| Motor | Output up | Output down | +| :-------: | :-------: | :---------: | +| `outputs` | `output1` | `output2` | + + ### Variables and Units | Constant | Values | @@ -388,6 +397,7 @@ The [MOTOR_PORT](#ports) values specify which hardware relay configuration will | VAR_UNIT | `native`, `°C`, `°K`, `°F`, `lux_t`, `lux_i`, `m/s`, `%`, `ppm`, `volt`, `ampere`, `degree` | | TIME_UNIT | `seconds`, `minutes`, `hours`, `days` | | RELVARREF | `current`, `prog` | +| REVERSE_TIME | `rt70`, `rt600`, `rt1200` | ### States: @@ -417,19 +427,30 @@ The binary sensor can be used in automation scripts or in conjunction with `temp ### Climate The `lcn` climate platform allows the control of the [LCN](http://www.lcn.eu) climate regulators. -This platform depends on the correct configuration of the module's regulators which has to be done in the LCN-PRO programming software. -You need to specify at least the variable for the current temperature and a setpoint variable for the target temperature. -If the control is set lockable, the regulator can be turned on/off. +This platform depends on the correct configuration of the module's regulators, which has to be done in the LCN-PRO programming software. +You need to specify at least the variable for the current temperature and a setpoint variable for the target temperature. +If the control is set lockable, the regulator can be turned on/off.
-If you intend to leave the regulation to home assistant, you should consider using the [Generic Thermostat](/components/generic_thermostat/) in conjuction with [LCN Sensor](#sensor) and [LCN Switch](#switch). +If you intend to leave the regulation to Home Assistant, you should consider using the [Generic Thermostat](/components/generic_thermostat/) in conjunction with [LCN Sensor](#sensor) and [LCN Switch](#switch).
### Cover -The `lcn` cover platform allows the control of [LCN](http://www.lcn.eu) relays which have been configured as motor controllers. +The `lcn` cover platform allows the control of [LCN](http://www.lcn.eu) relays and output ports which have been configured as motor controllers. + +Only for the module with firmware earlier than 190C:
+The configuration allows the optional definition of reverse time. This is the time which is waited during the switching of the motor currents. +The reverse time should only be defined when using the [MOTOR_PORT](#ports) value `OUTPUTS`. For all other configuration, the reverse time has to be defined in the LCN Pro software. +For the reverse time, you may choose one of the following constants: `RT70` (70ms), `RT600` (600ms), `RT1200` (1,2s). + +

+If you are using the module's output ports for motor control, ensure that you have configured the output ports as motor controllers in the LCN Pro software! +Otherwise, the output ports are not mutually interlocked and you run the risk of destroying the motor. +

+ ### Light @@ -457,7 +478,7 @@ The sensor can be used in automation scripts or in conjunction with `template` p
Ensure that the LCN module is configured properly to provide the requested value. - Otherwise the module might show unexpected behavior or return error messages. + Otherwise, the module might show unexpected behavior or return error messages.
### Switch @@ -470,7 +491,7 @@ The `lcn` switch platform allows the control of the following [LCN](http://www.l ## Services In order to directly interact with the LCN system, and invoke commands which are not covered by the implemented platforms, the following service calls can be used. -Refer to the (Services Calls)[/docs/scripts/service-calls] page for examples on how to use them. +Refer to the (Services Calls)[/docs/scripts/service-calls] page for examples on how to use them. ### Service `output_abs` @@ -479,9 +500,9 @@ Set absolute brightness of output port in percent. | Service data attribute | Optional | Description | Values | | ---------------------- | -------- | ----------- | ------ | | `address` | No | [LCN address](#lcn-addresses) | -| `output` | No | Output port of module | [OUTPUT_PORT](#ports) | -| `brightness` | Yes | Absolute brightness in percent | 0..100 | -| `transition` | Yes | Transition (ramp) time in seconds | 0..486 | +| `output` | No | Output port of module | [OUTPUT_PORT](#ports) | +| `brightness` | Yes | Absolute brightness in percent | 0..100 | +| `transition` | Yes | Transition (ramp) time in seconds | 0..486 | Example: @@ -501,9 +522,9 @@ Set relative brightness of output port in percent. | Service data attribute | Optional | Description | Values | | ---------------------- | -------- | ----------- | ------ | | `address` | No | [LCN address](#lcn-addresses) | -| `output` | No | Output port of module | [OUTPUT_PORT](#ports) | -| `brightness` | Yes | Relative brightness in percent | -100..100 | -| `transition` | Yes | Transition (ramp) time in seconds | 0..486 | +| `output` | No | Output port of module | [OUTPUT_PORT](#ports) | +| `brightness` | Yes | Relative brightness in percent | -100..100 | +| `transition` | Yes | Transition (ramp) time in seconds | 0..486 | Example: @@ -522,8 +543,8 @@ Toggle output port. | Service data attribute | Optional | Description | Values | | ---------------------- | -------- | ----------- | ------ | | `address` | No | [LCN address](#lcn-addresses) | -| `output` | No | Output port of module | [OUTPUT_PORT](#ports) | -| `transition` | Yes | Transition (ramp) time in seconds | 0..486 | +| `output` | No | Output port of module | [OUTPUT_PORT](#ports) | +| `transition` | Yes | Transition (ramp) time in seconds | 0..486 | Example: @@ -682,7 +703,7 @@ data: Send keys (which executes bound commands). The keys attribute is a string with one or more key identifiers. Example: `a1a5d8` If `state` is not defined, it is assumed to be `hit`. -The command allow the sending of keys immediately or deferred. For a deferred sendig the attributes `time` and `time_unit` have to be specified. For deferred sending the only key state allowed is `hit`. +The command allows the sending of keys immediately or deferred. For a deferred sending the attributes `time` and `time_unit` have to be specified. For deferred sending, the only key state allowed is `hit`. If `time_unit` is not defined, it is assumed to be `seconds`. | Service data attribute | Optional | Description | Values | @@ -717,9 +738,9 @@ data: ### Service `lock_keys` Locks keys. -If table is not defined, it is assumend to be table `a`. +If the table is not defined, it is assumed to be table `a`. The key lock states are defined as a string with eight characters. Each character represents the state change of a key lock (1=on, 0=off, t=toggle, -=nochange). -The command allows the locking of keys for a specified time period. For a time period the attributes `time` and `time_unit` have to be specified. For a time period only table `a` is allowed. +The command allows the locking of keys for a specified time period. For a time period, the attributes `time` and `time_unit` have to be specified. For a time period, only table `a` is allowed. If `time_unit` is not defined, it is assumed to be `seconds`. | Service data attribute | Optional | Description | Values | From 7c5eed2968128fbcb2dc591c4ad029e594073ac5 Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Wed, 31 Jul 2019 04:14:29 -0400 Subject: [PATCH 48/73] Add precip_yesterday to list of sensors (#10014) --- source/_components/environment_canada.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index 04d2ec131b6..2c9c43ae2fd 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -101,6 +101,7 @@ sensor: - `uv_index` - The next forecast UV index. - `pop` - The next forecast probability of precipitation, in %. - `text_summary` - A textual description of the next forecast period, e.g. "Tonight. Mainly cloudy. Low -12." + - `precip_yesterday` - The total amount of precipitation that fell the previous day. - `warnings` - Current warning alerts. - `watches` - Current watch alerts. - `advisories` - Current advisory alerts. From 53935f3baab9ea32f6d72d600f2f72d41bd5dcba Mon Sep 17 00:00:00 2001 From: Jon Gilmore <7232986+JonGilmore@users.noreply.github.com> Date: Wed, 31 Jul 2019 03:15:53 -0500 Subject: [PATCH 49/73] Update lutron.markdown (#10003) updated docs to support changes pushed to pypi --- source/_components/lutron.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown index ca2278d0783..f905a6c2b8e 100644 --- a/source/_components/lutron.markdown +++ b/source/_components/lutron.markdown @@ -70,7 +70,7 @@ For single-action buttons (scene selection, etc.), `action` will be `single`, an ## Scene -This integration uses keypad programming to identify scenes. Currently, it only works with SeeTouch keypads. +This integration uses keypad programming to identify scenes. Currently, it works with seeTouch, hybrid seeTouch, main repeater, homeowner, and seeTouch RF tabletop keypads. The Lutron scene platform allows you to control scenes programmed into your SeeTouch keypads. After setup, scenes will appear in Home Assistant using the area, keypad and button name. From 19731d0fcc848227d004cdd18fba93a3a947608f Mon Sep 17 00:00:00 2001 From: Bram Goolaerts Date: Wed, 31 Jul 2019 10:32:09 +0200 Subject: [PATCH 50/73] Add De Lijn component documentation (#9507) * Add De Lijn component Documentation of the De Lijn component to add passages of stops of the Flemish public transport company into home assistant * :pencil2: Tweak * Update source/_components/delijn.markdown Suggested corrections applied Co-Authored-By: Klaas Schoute * Some suggested changes added Sensor added as ha_category. Only show the mandatory items in the configuration example. Rewritten the Configuration part a little bit to align with example. Added some additional information on the Full Configuration to clarify the outcome of that configuration. * Alignment of configuration names Aligned the names in the configuration explanation with the actual configuration names. * Linked to custom lovelace card added Added link to custom lovelace card that makes best use of all the retrieved features (ie. correct colour codes of the line cards) * Apply suggestions from code review Co-Authored-By: Klaas Schoute Co-Authored-By: Franck Nijhof * Documents aligned with changes in component code sub_key was replaces with api_key in the component code so the reference is changed in the documentation here as well. * Updated with changes to component The delijn component has been updated based on feedback given in PR #24265. Based on those changes the documentation had to be updated as well. Now documentation and component are aligned again. * :pencil2: Markdown cleanup * :art: Adds De Lijn logo --- source/_components/delijn.markdown | 73 +++++++++++++++++++++++ source/images/supported_brands/delijn.svg | 1 + 2 files changed, 74 insertions(+) create mode 100644 source/_components/delijn.markdown create mode 100644 source/images/supported_brands/delijn.svg diff --git a/source/_components/delijn.markdown b/source/_components/delijn.markdown new file mode 100644 index 00000000000..bb4ae3c759c --- /dev/null +++ b/source/_components/delijn.markdown @@ -0,0 +1,73 @@ +--- +title: "De Lijn" +description: "Instructions on how to integrate De Lijn (Flemish public transport company) departure times into Home Assistant." +ha_release: 0.97 +ha_category: + - Transport + - Sensor +ha_iot_class: Cloud Polling +logo: delijn.svg +--- + +The `delijn` sensor will give you the departure time of the next bus, tram or subway at a specific stop of the De Lijn public transport network in Flanders (Belgium). + +## Setup + +Create a developer account at [De Lijn Open Data portal](https://data.delijn.be/) to get a free API subscription key. +For valid stop IDs check for the 6 digits at the physical stops or visit the [stops page](https://www.delijn.be/en/haltes/) of the De Lijn website. + +## Configuration + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: delijn + api_key: 'API_SUBSCRIPTION_KEY' + next_departure: + - stop_id: 'STOP_ID' +``` + +{% configuration %} +api_key: + description: "API Subscription key needed to access De Lijn API's." + required: true + type: string +next_departure: + description: One or multiple departure sensors. + required: true + type: list + keys: + stop_id: + description: "ID of the stop, e.g. `200552`." + required: true + type: string + number_of_departures: + description: "Specify the maximum number of departures/passages at a stop to retrieve" + required: false + default: 5 + type: integer +{% endconfiguration %} + +## Examples + +### Full configuration + +The example below shows a full configuration with two sensors, only the abcdefg needs to be replaced with an actual API subscription key. The first stop_id will return the default next 5 passages, the second stop_id has been forced to return the next 20 passages. + +```yaml +# Example configuration.yaml entry +sensor: + # De Lijn public transport + - platform: delijn + api_key: 'abcdefg' + next_departure: + - stop_id: '200018' + - stop_id: '201169' + number_of_departures: 20 +``` + +## Custom Lovelace card + +Works best with the following custom Lovelace card: diff --git a/source/images/supported_brands/delijn.svg b/source/images/supported_brands/delijn.svg new file mode 100644 index 00000000000..8f9ee82532c --- /dev/null +++ b/source/images/supported_brands/delijn.svg @@ -0,0 +1 @@ + \ No newline at end of file From 7359d8f7fb64694f018d01fa17c766a810214077 Mon Sep 17 00:00:00 2001 From: Fran Date: Wed, 31 Jul 2019 10:33:46 +0200 Subject: [PATCH 51/73] Update nuki.markdown (#9841) According Home Assistant PR #22888 --- source/_components/nuki.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_components/nuki.markdown b/source/_components/nuki.markdown index 1c900edfec6..b0bbda7dc71 100644 --- a/source/_components/nuki.markdown +++ b/source/_components/nuki.markdown @@ -41,7 +41,7 @@ token: ## Services -### Service `nuki_unlatch` +### Service `open` This will unlatch the door, ie. open it (provided this works with your type of door). @@ -49,7 +49,7 @@ This will unlatch the door, ie. open it (provided this works with your type of d | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`s Nuki Locks. -### Service `nuki_lock_n_go` +### Service `lock_n_go` This will first unlock, wait a few seconds (20 by default) then re-lock. The wait period can be customized through the app. See the [Nuki Website](https://nuki.io/en/support/smart-lock/sl-features/locking-with-the-smart-lock/) for more details about this feature. @@ -58,3 +58,11 @@ See the [Nuki Website](https://nuki.io/en/support/smart-lock/sl-features/locking | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`s Nuki Locks. | `unlatch` | yes | Boolean - Whether to unlatch the door when first opening it. + +### Service `check_connection` + +This will force the communication between the bridge and the lock, updating the available attribute. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`s Nuki Locks. From e9fbc61eacff1abb02900c6dcf782aa54f94ded5 Mon Sep 17 00:00:00 2001 From: kreegahbundolo Date: Wed, 31 Jul 2019 10:45:11 +0200 Subject: [PATCH 52/73] Added pushover image attachment functionality (#9702) Added documentation for a new feature enabling image attachments to be sent in pushover notifications. --- source/_components/pushover.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/pushover.markdown b/source/_components/pushover.markdown index 781ac32babd..92a764c2142 100644 --- a/source/_components/pushover.markdown +++ b/source/_components/pushover.markdown @@ -53,10 +53,13 @@ Example Automation: url: "https://www.home-assistant.io/" sound: pianobar priority: 0 + attachment: "http://example.com/image.png" ``` Component specific values in the nested `data` section are optional. +Image attachments can be added using the `attachment` parameter, which can either be a valid URL for an image (ex: `http://example.com/image.png`) or a local file reference (ex: `/tmp/image.png`). + To use notifications, please see the [getting started with automation page](/getting-started/automation/). When sending a notification, optional parameters can also be set as per the pushover [API documentation](https://pushover.net/api). @@ -80,6 +83,7 @@ alexa: sound: falling device: pixel url: "https://www.home-assistant.io/" + attachment: "/tmp/image.png" ``` {% endraw %} From 862537aae24f5c6eb3a7e51ba6aefb7a925d56e8 Mon Sep 17 00:00:00 2001 From: William Sutton Date: Wed, 31 Jul 2019 04:46:04 -0400 Subject: [PATCH 53/73] Added documentation (#9533) Added documentation regarding home-assistant PR #24086. Humidity is now available from devices that have built in humidity sensors. --- source/_components/radiotherm.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/radiotherm.markdown b/source/_components/radiotherm.markdown index a872148f75b..4f4cb9c138c 100644 --- a/source/_components/radiotherm.markdown +++ b/source/_components/radiotherm.markdown @@ -60,3 +60,4 @@ climate: - 192.168.99.137 - 192.168.99.202 ``` +Humidity is now available as the `current_humidity` attribute for each `climate.$HOST` entity. This only works for RadioThermostat devices that have a built in humidity sensor. From 57511081c48ffd512264c82d5a39f1e228f0f27b Mon Sep 17 00:00:00 2001 From: Martin Eberhardt Date: Wed, 31 Jul 2019 18:50:51 +0200 Subject: [PATCH 54/73] Update Rejseplanen documentation for HA PR #25375 (#9939) * Update Rejseplanen documentation for HA PR #25375 * Remove double newline at end of file --- source/_components/rejseplanen.markdown | 33 +++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/source/_components/rejseplanen.markdown b/source/_components/rejseplanen.markdown index cdfa7f78a64..03bee9fefbc 100644 --- a/source/_components/rejseplanen.markdown +++ b/source/_components/rejseplanen.markdown @@ -20,9 +20,9 @@ If you know the exact name of the stop you can search the stop_id with the follo If you don't know the name of the stop follow this guide: - Go to [https://www.openstreetmap.org](https://www.openstreetmap.org) -- Make a search and fill in the location you want to find for. +- Make a search and fill in the location you want to find for. - The url will look like this [https://www.openstreetmap.org/#map=18/56.15756/10.20674](https://www.openstreetmap.org/#map=18/56.15756/10.20674) -- Now insert the coordinates for the location in the url, in this example it will be: [http://xmlopen.rejseplanen.dk/bin/rest.exe/stopsNearby?coordX=56.15756&coordY=10.20674&](http://xmlopen.rejseplanen.dk/bin/rest.exe/stopsNearby?coordX=56.15756&coordY=10.20674&) +- Now insert the coordinates for the location in the url, in this example it will be: [http://xmlopen.rejseplanen.dk/bin/rest.exe/stopsNearby?coordX=56.15756&coordY=10.20674&](http://xmlopen.rejseplanen.dk/bin/rest.exe/stopsNearby?coordX=56.15756&coordY=10.20674&) - You will now see the 30 stops closest to your location. You will se a output like this: @@ -118,7 +118,36 @@ The sensor can filter the timetables by one or more routes, directions and types |--------------|-------------| | BUS | Normal bus | | EXB | Express bus | +| TB | Harbour bus| | LET | Letbanen | | M | Metro | | S | S-train | | REG | Regional train | +| IC | Intercity train | +| LYN | Intercity express train | +| TOG | Other trains | + +## Attributes + +| Attribute | Description | +| ------------ | -------------------------------------- | +| `due_in` | Minutes until departure | +| `due_at` | Departure date and time | +| `type` | Transport type | +| `route` | Route code | +| `direction` | Destination stop | +| `stop` | Departure stop | +| `stop_id` | ID of departure stop | +| `attribution` | Attribution (required by data source) | +| `next_departures` | List of further departures | + +### `next_departures` + +| Attribute | Description | +| ------------ | -------------------------------------- | +| `due_in` | Minutes until departure | +| `due_at` | Departure date and time | +| `type` | Transport type | +| `route` | Route code | +| `direction` | Destination stop | +| `stop` | Departure stop | From 50c1fbb7dc55459415a75a836b6c188de932d291 Mon Sep 17 00:00:00 2001 From: Tobias Perschon Date: Wed, 31 Jul 2019 19:59:36 +0200 Subject: [PATCH 55/73] added description for timeout option (#10019) --- source/_components/telnet.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/telnet.markdown b/source/_components/telnet.markdown index 32ad3936ddc..221ff25f97d 100644 --- a/source/_components/telnet.markdown +++ b/source/_components/telnet.markdown @@ -26,6 +26,7 @@ switch: command_off: "PWR OFF" command_state: "PWR?" value_template: '{{ value == "PWR=01" }}' + timeout: 0.9 ``` {% endraw %} @@ -69,4 +70,9 @@ switches: description: The name used to display the switch in the frontend. required: false type: string + timeout: + description: How long to wait for a reply after a telnet command is sent. + required: false + default: 0.2 + type: float {% endconfiguration %} From a425b65733f373cbc031535317c2ee31e3eb5428 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 31 Jul 2019 16:26:56 -0700 Subject: [PATCH 56/73] Merge conflict --- source/_docs/automation/trigger.markdown | 66 +++++++++++++----------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 6db3bc2918e..32afab597a9 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -24,7 +24,7 @@ automation:
- Starting 0.42, it is no longer possible to listen for event `homeassistant_start`. Use the 'homeassistant' platform below instead. +Starting 0.42, it is no longer possible to listen for event `homeassistant_start`. Use the 'homeassistant' platform below instead.
@@ -50,8 +50,8 @@ automation: platform: mqtt topic: living_room/switch/ac # Optional - payload: 'on' - encoding: 'utf-8' + payload: "on" + encoding: "utf-8" ``` ### Numeric state trigger @@ -59,13 +59,14 @@ automation: Triggers when numeric value of an entity's state crosses a given threshold. On state change of a specified entity, attempts to parse the state as a number and triggers once if value is changing from above to below or from below to above the given threshold. {% raw %} + ```yaml automation: trigger: platform: numeric_state entity_id: sensor.temperature # Optional - value_template: '{{ state.attributes.battery }}' + value_template: "{{ state.attributes.battery }}" # At least one of the following required above: 17 below: 25 @@ -76,6 +77,7 @@ automation: minutes: 10 seconds: 5 ``` + {% endraw %}
@@ -86,25 +88,28 @@ In the example above, a numeric_state that goes to 17.1-24.9 (from 17 or below, The `for:` can also be specified as `HH:MM:SS` like this: {% raw %} + ```yaml automation: trigger: platform: numeric_state entity_id: sensor.temperature # Optional - value_template: '{{ state.attributes.battery }}' + value_template: "{{ state.attributes.battery }}" # At least one of the following required above: 17 below: 25 # If given, will trigger when condition has been for X time. - for: '01:10:05' + for: "01:10:05" ``` + {% endraw %} You can also use templates in the `for` option. {% raw %} + ```yaml automation: trigger: @@ -122,6 +127,7 @@ automation: message: > {{ trigger.to_state.name }} too high for {{ trigger.for }}! ``` + {% endraw %} The `for` template(s) will be evaluated when an entity changes as specified. @@ -136,23 +142,24 @@ automation: platform: state entity_id: device_tracker.paulus, device_tracker.anne_therese # Optional - from: 'not_home' + from: "not_home" # Optional - to: 'home' + to: "home" # If given, will trigger when state has been the to state for X time. - for: '01:10:05' + for: "01:10:05" ``` You can also use templates in the `for` option. {% raw %} + ```yaml automation: trigger: platform: state entity_id: device_tracker.paulus, device_tracker.anne_therese - to: 'home' + to: "home" for: minutes: "{{ states('input_number.lock_min')|int }}" seconds: "{{ states('input_number.lock_sec')|int }}" @@ -160,14 +167,14 @@ automation: service: lock.lock entity_id: lock.my_place ``` + {% endraw %} The `for` template(s) will be evaluated when an entity changes as specified. -
- Use quotes around your values for `from` and `to` to avoid the YAML parser interpreting values as booleans. +Use quotes around your values for `from` and `to` to avoid the YAML parser interpreting values as booleans.
@@ -181,7 +188,7 @@ An optional time offset can be given to have it trigger a set time before or aft
-Since the duration of twilight is different throughout the year, it is recommended to use [sun elevation triggers][sun_elevation_trigger] instead of `sunset` or `sunrise` with a time offset to trigger automations during dusk or dawn. +Since the duration of twilight is different throughout the year, it is recommended to use [sun elevation triggers][sun_elevation_trigger] instead of `sunset` or `sunrise` with a time offset to trigger automations during dusk or dawn.
@@ -194,7 +201,7 @@ automation: # Possible values: sunset, sunrise event: sunset # Optional time offset. This example will trigger 45 minutes before sunset. - offset: '-00:45:00' + offset: "-00:45:00" ``` #### Sun elevation trigger @@ -202,6 +209,7 @@ automation: Sometimes you may want more granular control over an automation than simply sunset or sunrise and specify an exact elevation of the sun. This can be used to layer automations to occur as the sun lowers on the horizon or even after it is below the horizon. This is also useful when the "sunset" event is not dark enough outside and you would like the automation to run later at a precise solar angle instead of the time offset such as turning on exterior lighting. For most things intended to trigger during dusk or dawn, a number between 0° and -6° is suitable; -4° is used in this example: {% raw %} + ```yaml automation: alias: "Exterior Lighting on when dark outside" @@ -215,6 +223,7 @@ automation: service: switch.turn_on entity_id: switch.exterior_lighting ``` + {% endraw %} If you want to get more precise, start with the US Naval Observatory [tool](http://aa.usno.navy.mil/data/docs/AltAz.php) which will help you estimate what the solar elevation will be at any specific time. Then from this, you can select from the defined twilight numbers. @@ -224,6 +233,7 @@ Although the actual amount of light depends on weather, topography and land cove - Civil twilight: 0° > Solar angle > -6° This is what is meant by twilight for the average person: Under clear weather conditions, civil twilight approximates the limit at which solar illumination suffices for the human eye to clearly distinguish terrestrial objects. Enough illumination renders artificial sources unnecessary for most outdoor activities. + - Nautical twilight: 6° > Solar angle > -12° - Astronomical twilight: 12° > Solar angle > -18° @@ -235,6 +245,7 @@ Template triggers work by evaluating a [template](/docs/configuration/templating With template triggers you can also evaluate attribute changes by using is_state_attr (`{% raw %}{{ is_state_attr('climate.living_room', 'away_mode', 'off') }}{% endraw %}`) {% raw %} + ```yaml automation: trigger: @@ -242,13 +253,15 @@ automation: value_template: "{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}" # If given, will trigger when template remains true for X time. - for: '00:01:00' + for: "00:01:00" ``` + {% endraw %} You can also use templates in the `for` option. {% raw %} + ```yaml automation: trigger: @@ -257,17 +270,13 @@ automation: for: minutes: "{{ states('input_number.minutes')|int(0) }}" ``` + {% endraw %} The `for` template(s) will be evaluated when the `value_template` becomes `true`.
-<<<<<<< HEAD - -======= ->>>>>>> current Rendering templates with time (`now()`) is dangerous as trigger templates only update based on entity state changes. -
### Time trigger @@ -279,7 +288,7 @@ automation: trigger: platform: time # Military time format. This trigger will fire at 3:32 PM - at: '15:32:00' + at: "15:32:00" ``` ### Time pattern trigger @@ -297,19 +306,19 @@ automation 2: trigger: platform: time_pattern # Trigger once per minute during the hour of 3 - hours: '3' - minutes: '*' + hours: "3" + minutes: "*" automation 3: trigger: platform: time_pattern # You can also match on interval. This will match every 5 minutes - minutes: '/5' + minutes: "/5" ```
- Do not prefix numbers with a zero - using `'00'` instead of '0' for example will result in errors. +Do not prefix numbers with a zero - using `'00'` instead of '0' for example will result in errors.
@@ -326,7 +335,6 @@ automation: You could test triggering the above automation by sending a POST HTTP request to `http://your-home-assistant:8123/api/webhook/some_hook_id`. An example with no data sent to a SSL/TLS secured installation and using the command-line curl program is `curl -d "" https://your-home-assistant:8123/api/webhook/some_hook_id`. - ### Zone trigger Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work, you need to have setup a device tracker platform that supports reporting GPS coordinates. This includes [GPS Logger](/components/device_tracker.gpslogger/), the [OwnTracks platform](/components/device_tracker.owntracks/) and the [iCloud platform](/components/device_tracker.icloud/). @@ -338,7 +346,7 @@ automation: entity_id: device_tracker.paulus zone: zone.home # Event is either enter or leave - event: enter # or "leave" + event: enter # or "leave" ``` ### Geolocation trigger @@ -353,7 +361,7 @@ automation: source: nsw_rural_fire_service_feed zone: zone.bushfire_alert_zone # Event is either enter or leave - event: enter # or "leave" + event: enter # or "leave" ``` ### Multiple triggers @@ -363,7 +371,7 @@ When your want your automation rule to have multiple triggers, just prefix the f ```yaml automation: trigger: - # first trigger + # first trigger - platform: time_pattern minutes: 5 # our second trigger is the sunset From 34b8f43238502a435c968f1d3f985fb9045461e4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 31 Jul 2019 16:29:14 -0700 Subject: [PATCH 57/73] Add draft release notes --- source/_posts/2019-08-07-release-97.markdown | 608 +++++++++++++++++++ 1 file changed, 608 insertions(+) create mode 100644 source/_posts/2019-08-07-release-97.markdown diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown new file mode 100644 index 00000000000..b9f9a75679a --- /dev/null +++ b/source/_posts/2019-08-07-release-97.markdown @@ -0,0 +1,608 @@ +--- +layout: post +title: "0.97: XXX - UPDATE DATE" +description: "XXXX" +date: 2019-07-31 00:11:03 +date_formatted: "August 7, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-08-release-97/components.png +--- + + + +## New Integrations + +- Add support for recording history to Apache Kafka ([@bachya] - [#25085]) ([apache_kafka docs]) (new-integration) +- Rename RitAssist to FleetGO ([@depl0y] - [#25093]) ([fleetgo docs]) ([ritassist docs]) (breaking change) (new-integration) +- Add Twente Milieu integration ([@frenck] - [#25129]) ([twentemilieu docs]) (new-integration) +- Add Fortigate integration ([@kifeo] - [#24908]) ([fortigate docs]) (new-integration) +- Add support for Rainforest Eagle-200 ([@gtdiehl] - [#24919]) ([rainforest_eagle docs]) (new-integration) +- Add Elgato Avea integration ([@pattyland] - [#24281]) ([avea docs]) (new-integration) (new-platform) +- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) (new-platform) +- Add new device tracker supporting Fortinet FortiGate ([@kimfrellsen] - [#23078]) ([fortios docs]) (new-integration) (new-platform) +- Add De Lijn (Flemish Public Transport) component ([@bollewolle] - [#24265]) ([delijn docs]) (new-integration) (new-platform) + +## New Platforms + +- Add Support for VeSync Devices - Outlets and Switches ([@webdjoe] - [#24953]) ([vesync docs]) (new-platform) +- Add Elgato Avea integration ([@pattyland] - [#24281]) ([avea docs]) (new-integration) (new-platform) +- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) (new-platform) +- Add new device tracker supporting Fortinet FortiGate ([@kimfrellsen] - [#23078]) ([fortios docs]) (new-integration) (new-platform) +- Add De Lijn (Flemish Public Transport) component ([@bollewolle] - [#24265]) ([delijn docs]) (new-integration) (new-platform) +- Change how ring polls for changes to allow more platforms to be added ([@rossdargan] - [#25534]) ([ring docs]) (new-platform) + +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +## Reporting Issues + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +- Rewrite calendar component ([@MartinHjelmare] - [#24950]) ([caldav docs]) ([calendar docs]) ([demo docs]) ([google docs]) ([todoist docs]) (breaking change) +- Remove monitored conditions from syncthru ([@nielstron] - [#25052]) ([syncthru docs]) (breaking change) +- Update KNX component to xknx 0.11 ([@farmio] - [#24738]) ([knx docs]) (breaking change) +- Rename RitAssist to FleetGO ([@depl0y] - [#25093]) ([fleetgo docs]) ([ritassist docs]) (breaking change) (new-integration) +- Add support for multiple N26 accounts ([@gorynychzmey] - [#25086]) ([n26 docs]) (breaking change) +- Update Environment Canada platforms ([@michaeldavie] - [#24884]) ([environment_canada docs]) (breaking change) +- Move totalconnect from platform to component config ([@austinmroczek] - [#24427]) ([totalconnect docs]) (breaking change) +- Merge UniFi device tracker to config entry ([@Kane610] - [#24367]) ([unifi docs]) (breaking change) +- Improve Nuki lock ([@franfos] - [#22888]) ([nuki docs]) (breaking change) +- Multiroom support for snapcast ([@lyghtnox] - [#24061]) ([snapcast docs]) (breaking change) +- Return Ambient PWS brightness sensor unit and remove CONF_MONITORED_CONDITIONS ([@bachya] - [#25284]) ([ambient_station docs]) (breaking change) +- Update Google Maps Location Tracker to use locationsharinglib==4.0.2 ([@shbatm] - [#25316]) ([google_maps docs]) (breaking change) +- Improve handling of Z-Wave config entry vs yaml config ([@cgarwood] - [#25112]) ([zwave docs]) (breaking change) +- Update to buienradar json api; and additional monitored_conditions ([@mjj4791] - [#24463]) ([buienradar docs]) (breaking change) +- Bump Python support to min Python 3.6.0 ([@balloob] - [#25582]) (breaking change) +- Improve and align Rejseplanen with other transport components (Breaking) ([@DarkFox] - [#25375]) ([rejseplanen docs]) (breaking change) + +## All changes + +- Rewrite calendar component ([@MartinHjelmare] - [#24950]) ([caldav docs]) ([calendar docs]) ([demo docs]) ([google docs]) ([todoist docs]) (breaking change) +- Remove monitored conditions from syncthru ([@nielstron] - [#25052]) ([syncthru docs]) (breaking change) +- Update KNX component to xknx 0.11 ([@farmio] - [#24738]) ([knx docs]) (breaking change) +- Support hass-release inside devcontainer ([@pvizeli] - [#25090]) +- Add support for recording history to Apache Kafka ([@bachya] - [#25085]) ([apache_kafka docs]) (new-integration) +- Ps4 move send_command service to init ([@ktnrg45] - [#25094]) ([ps4 docs]) +- Rename RitAssist to FleetGO ([@depl0y] - [#25093]) ([fleetgo docs]) ([ritassist docs]) (breaking change) (new-integration) +- Add support for multiple N26 accounts ([@gorynychzmey] - [#25086]) ([n26 docs]) (breaking change) +- Bump insteonplm to 0.16.3 ([@teharris1] - [#25108]) ([insteon docs]) +- Use more compatible samsungtv TV key ([@escoand] - [#25083]) ([samsungtv docs]) +- Add additional WWLLN test ([@bachya] - [#25111]) ([wwlln docs]) +- Splunk component filter support ([@asleeis] - [#25071]) ([splunk docs]) +- Add more public rain sensors ([@cgtobi] - [#25117]) ([netatmo docs]) +- PS4 handle no connection/ fix spamming of logs when device is off ([@ktnrg45] - [#25091]) ([ps4 docs]) +- Upgrade flake8 to 3.7.8 ([@scop] - [#25120]) +- Upgrade youtube_dl to 2019.07.12 ([@fabaff] - [#25128]) ([media_extractor docs]) +- Update Environment Canada platforms ([@michaeldavie] - [#24884]) ([environment_canada docs]) (breaking change) +- PS4 move load_games and save_games helpers to init from media_player ([@ktnrg45] - [#25127]) ([ps4 docs]) +- Move totalconnect from platform to component config ([@austinmroczek] - [#24427]) ([totalconnect docs]) (breaking change) +- Add Twente Milieu integration ([@frenck] - [#25129]) ([twentemilieu docs]) (new-integration) +- Fix aggregation in Netatmo public sensor ([@cgtobi] - [#25132]) ([netatmo docs]) +- Merge UniFi device tracker to config entry ([@Kane610] - [#24367]) ([unifi docs]) (breaking change) +- Small changes to bluetooth RSSI tracking ([@FrederikBolding] - [#25056]) ([bluetooth_tracker docs]) +- PS4 Add tests for init ([@ktnrg45] - [#25161]) ([ps4 docs]) +- Add HomeKit Reset Accessory ([@adrum] - [#25158]) ([homekit docs]) +- Add spotify service to allow to play music from playlist ([@lealoureiro] - [#24991]) ([spotify docs]) +- Add travel time attribution/coordinates ([@ljmerza] - [#24956]) ([google_travel_time docs]) +- Upgrade youtube_dl to 2019.07.16 ([@fabaff] - [#25173]) ([media_extractor docs]) +- Add Fortigate integration ([@kifeo] - [#24908]) ([fortigate docs]) (new-integration) +- Upgrade discord.py to 1.2.3 ([@fabaff] - [#25174]) ([discord docs]) +- Upgrade ruamel.yaml to 0.15.99 ([@fabaff] - [#25175]) +- Upgrade Mastodon.py to 1.4.5 ([@fabaff] - [#25176]) ([mastodon docs]) +- Delete config.yml ([@pvizeli] - [#25181]) +- Improve Nuki lock ([@franfos] - [#22888]) ([nuki docs]) (breaking change) +- Raise not ready when no data from API is retrieved ([@cgtobi] - [#25182]) ([opensensemap docs]) +- Add severe weather sensor to Dark Sky ([@rtclauss] - [#22701]) ([darksky docs]) +- Use MockConfigEntry ([@andrewsayre] - [#25190]) +- Upgrade mypy to 0.720, turn on unreachability warnings ([@scop] - [#25157]) +- Add HMIP-FCI / HMIP-FBL / HmIP-BBL ([@SukramJ] - [#25188]) ([homematicip_cloud docs]) +- Add login_method config option to fix login issue with RouterOS Version > 6.43 ([@Bouni] - [#25194]) ([mikrotik docs]) +- Handle somfy expired token ([@tetienne] - [#25195]) ([somfy docs]) +- Fix issue #24495 ([@thomasgermain] - [#25199]) ([seventeentrack docs]) +- Simplify cache restore ([@keesschollaart81] - [#25186]) +- Add HmIP-PCBS2, HmIP-PCBS-BAT to Homematic IP Cloud ([@SukramJ] - [#25201]) ([homematicip_cloud docs]) +- Bump simplisafe-python to 4.0.0 + add additional SimpliSafe attributes ([@bachya] - [#25202]) ([simplisafe docs]) +- Upgrades Dockerfiles to Debian Buster ([@frenck] - [#25208]) +- Add myself to songpal codeowners ([@rytilahti] - [#25221]) ([songpal docs]) +- OpenWrt Luci RPC Device Tracker Module Bump ([@fbradyirl] - [#25234]) ([luci docs]) +- Add hvac_action support for MQTT HVAC ([@definitio] - [#25260]) ([mqtt docs]) +- Add vendor support for vorwerk robots and fix zone retrieval ([@dshokouhi] - [#25200]) ([neato docs]) +- Add support for Rainforest Eagle-200 ([@gtdiehl] - [#24919]) ([rainforest_eagle docs]) (new-integration) +- Add MQTT climate precision ([@PhilRW] - [#25265]) ([mqtt docs]) +- Add services to set and remove Simplisafe PINs ([@bachya] - [#25207]) ([simplisafe docs]) +- Multiroom support for snapcast ([@lyghtnox] - [#24061]) ([snapcast docs]) (breaking change) +- Avoid creating temporary lists ([@nierob] - [#25317]) ([climate docs]) ([device_automation docs]) ([device_tracker docs]) ([google_assistant docs]) ([media_player docs]) ([nextbus docs]) ([smartthings docs]) ([system_health docs]) +- Return Ambient PWS brightness sensor unit and remove CONF_MONITORED_CONDITIONS ([@bachya] - [#25284]) ([ambient_station docs]) (breaking change) +- Ps4 reformat media data ([@ktnrg45] - [#25172]) ([ps4 docs]) +- Fix missing Nachteule in mvglive component ([@9R] - [#25304]) ([mvglive docs]) +- Doc lint fixes ([@scop] - [#25339]) ([evohome docs]) ([hive docs]) +- Remove some Python 2 compatibility code ([@scop] - [#25341]) ([html5 docs]) +- Fix util.ruamel_yaml type errors ([@scop] - [#25338]) +- Mypy config improvements ([@scop] - [#25340]) +- Update Google Maps Location Tracker to use locationsharinglib==4.0.2 ([@shbatm] - [#25316]) ([google_maps docs]) (breaking change) +- Automatically expand WWLLN window to 1 hour (if necessary) ([@bachya] - [#25357]) ([wwlln docs]) +- Type check all helpers ([@scop] - [#25373]) +- Optional and Union simplifications ([@scop] - [#25365]) +- Add add_torrent service to Transmission ([@postlund] - [#25144]) ([transmission docs]) +- Add support for contact binary sensors in homekit_controller ([@dwradcliffe] - [#25355]) ([homekit_controller docs]) +- Only poll HomeKit connection once for all entities on a single bridge/pairing ([@Jc2k] - [#25249]) ([homekit_controller docs]) +- Add area support to fan service schemas ([@bachya] - [#25409]) ([fan docs]) +- Add area support to cover service schemas ([@bachya] - [#25408]) ([cover docs]) +- Add area support to automation service schemas ([@bachya] - [#25403]) ([automation docs]) +- Add area support to counter service schemas ([@bachya] - [#25401]) ([counter docs]) +- Add area support to alarm_control_panel service schemas ([@bachya] - [#25402]) ([alarm_control_panel docs]) +- Clean up Netatmo sensor code ([@cgtobi] - [#25390]) ([netatmo docs]) +- Add area support to script service schemas ([@bachya] - [#25439]) ([script docs]) +- Add area support to scene service schemas ([@bachya] - [#25438]) ([scene docs]) +- Add area support to input select service schemas ([@bachya] - [#25432]) ([input_select docs]) +- Add area support to input number service schemas ([@bachya] - [#25431]) ([input_number docs]) +- Add area support to input datetime service schemas ([@bachya] - [#25430]) ([input_datetime docs]) +- Add area support to Wink service schemas ([@bachya] - [#25445]) ([wink docs]) +- Add area support to input boolean service schemas ([@bachya] - [#25429]) ([input_boolean docs]) +- Add area support to image processing service schemas ([@bachya] - [#25428]) ([image_processing docs]) +- Add area support to input text service schemas ([@bachya] - [#25434]) ([input_text docs]) +- Add area support to climate service schemas ([@bachya] - [#25441]) ([climate docs]) +- Upgrade HPILO requirement to v4.3 ([@xt16johnny] - [#25444]) ([hp_ilo docs]) +- Increase vallox robustness on startup ([@andre-richter] - [#25382]) ([vallox docs]) +- Add Support for VeSync Devices - Outlets and Switches ([@webdjoe] - [#24953]) ([vesync docs]) (new-platform) +- Add area support to utility meter service schemas ([@bachya] - [#25442]) ([utility_meter docs]) +- Add Elgato Avea integration ([@pattyland] - [#24281]) ([avea docs]) (new-integration) (new-platform) +- Add area support to lock service schemas ([@bachya] - [#25435]) ([lock docs]) +- Add area support to remote service schemas ([@bachya] - [#25437]) ([remote docs]) +- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) (new-platform) +- Add new device tracker supporting Fortinet FortiGate ([@kimfrellsen] - [#23078]) ([fortios docs]) (new-integration) (new-platform) +- Bump up ZHA dependencies. ([@Adminiuga] - [#25450]) ([zha docs]) +- Add area support to media player service schemas ([@bachya] - [#25436]) ([media_player docs]) +- Huawei LTE misc improvements ([@scop] - [#25377]) ([huawei_lte docs]) +- Add area support to timer service schemas ([@bachya] - [#25440]) ([timer docs]) +- Remove unnecessary REMOTE_SERVICE_SCHEMA ([@bachya] - [#25453]) ([remote docs]) +- Add area support to vacuum service schemas ([@bachya] - [#25443]) ([vacuum docs]) +- Daikin simplification and code cleanup ([@fredrike] - [#25416]) ([daikin docs]) +- Allow configuring sources for older Pioneer receivers ([@plafue] - [#25305]) ([pioneer docs]) +- Add area support to group service schemas ([@bachya] - [#25410]) ([group docs]) +- Lint fixes ([@scop] - [#25462]) ([avea docs]) ([fortios docs]) +- Install requirements_test.txt for flake8 in Azure CI ([@scop] - [#25463]) +- Fix bloomsky unit system ([@Santobert] - [#25460]) ([bloomsky docs]) +- Type check homeassistant.scripts ([@scop] - [#25464]) +- Mypy config cleanups ([@scop] - [#25475]) +- Add scan interval to config of Environment Canada sensor ([@michaeldavie] - [#25414]) ([environment_canada docs]) +- UniFi block clients ([@Kane610] - [#25478]) ([unifi docs]) +- Add a unique identifier to deCONZ groups ([@Kane610] - [#25485]) ([deconz docs]) +- Add ord() to template filters ([@aschamberger] - [#25398]) +- Update solax to 0.1.2 ([@squishykid] - [#25497]) ([solax docs]) +- Add De Lijn (Flemish Public Transport) component ([@bollewolle] - [#24265]) ([delijn docs]) (new-integration) (new-platform) +- Fix deprecation warning in test ([@balloob] - [#25506]) ([http docs]) +- Improve handling of Z-Wave config entry vs yaml config ([@cgarwood] - [#25112]) ([zwave docs]) (breaking change) +- Fire lovelace updated event when update detected ([@balloob] - [#25507]) ([lovelace docs]) +- Support multiple Elk instances ([@gjbadros] - [#23839]) ([elkm1 docs]) +- Add container settings for YAML extension to avoid Hass specific custom tags errors ([@oncleben31] - [#25504]) +- Add last_run_success boolean attribute to Switchbot for error trapping ([@manonstreet] - [#25474]) ([switchbot docs]) +- deCONZ - Add power attribute for consumption sensors ([@Kane610] - [#25512]) ([deconz docs]) +- Improve seventeentrack ([@thomasgermain] - [#25454]) ([seventeentrack docs]) +- Roombalocate ([@Anglac] - [#25508]) ([roomba docs]) +- deCONZ - cleanup sensor attributes ([@Kane610] - [#25540]) ([deconz docs]) +- Update to buienradar json api; and additional monitored_conditions ([@mjj4791] - [#24463]) ([buienradar docs]) (breaking change) +- Fix bug with WWLLN update interval ([@bachya] - [#25498]) ([wwlln docs]) +- Fix WinkAC mode API calls to correct methods ([@cameronrmorris] - [#25545]) ([wink docs]) +- Bump env_canada to 0.0.19 ([@michaeldavie] - [#25548]) ([environment_canada docs]) +- Tibber, off peak values ([@Danielhiversen] - [#25320]) ([tibber docs]) +- Enable velbus config entries ([@Cereal2nd] - [#25308]) ([velbus docs]) +- huawei_lte: try unsupported data retrievals only once ([@scop] - [#25524]) ([huawei_lte docs]) +- Ignore .dmypy.json ([@scop] - [#25528]) +- Update eternalegypt to 0.0.8 ([@amelchio] - [#25551]) ([netgear_lte docs]) +- Update Cisco Mobility Express module version ([@fbradyirl] - [#25422]) ([cisco_mobility_express docs]) +- Expose last_video_id as property for Ring camera ([@Yarikx] - [#25553]) ([ring docs]) +- Quiet noisy tado query logging ([@andersonshatch] - [#25529]) ([tado docs]) +- Add PS4 tests for media player ([@ktnrg45] - [#25415]) ([ps4 docs]) +- UniFi POE control restore clients ([@Kane610] - [#25558]) ([unifi docs]) +- LCN cover control via output ports ([@alengwenus] - [#25511]) ([lcn docs]) +- UniFi device tracker restore clients ([@Kane610] - [#25532]) ([unifi docs]) +- Transition SimpliSafe data retrieval to its own object ([@bachya] - [#25546]) ([simplisafe docs]) +- UniFi - Track devices ([@Kane610] - [#25570]) ([unifi docs]) +- pylutron PyPI update ([@JonGilmore] - [#25557]) ([lutron docs]) +- Make the velbus component more robust in handling errors ([@Cereal2nd] - [#25567]) ([velbus docs]) +- Updated Workday Binary Sensor to use Holidays 0.9.11 and added support for Aruba Holidays. ([@orson1282] - [#25568]) ([workday docs]) +- add cleaning state code for roborock s6 ([@benleb] - [#25500]) ([xiaomi_miio docs]) +- ZHA log helper ([@Adminiuga] - [#25543]) ([zha docs]) +- Fix : Velbus translation error ([@Quentame] - [#25575]) ([velbus docs]) +- Add last event data (including "changed_by") to SimpliSafe ([@bachya] - [#25569]) ([simplisafe docs]) +- Bump Python support to min Python 3.6.0 ([@balloob] - [#25582]) (breaking change) +- Bump insteonplm to 0.16.5 ([@teharris1] - [#25580]) ([insteon docs]) +- Fix status of lutron switches/lights after HA reboot ([@JonGilmore] - [#25592]) ([lutron docs]) +- Add support for Roku TVs to be powered on or off ([@manutenfruits] - [#25590]) ([roku docs]) +- Bump env_canada to 0.0.20 ([@michaeldavie] - [#25594]) ([environment_canada docs]) +- Bump venstarcolortouch to 0.9 ([@iamtpage] - [#25585]) ([venstar docs]) +- Log platform import errors and correct reqs for config check ([@elupus] - [#25425]) +- Improve and align Rejseplanen with other transport components (Breaking) ([@DarkFox] - [#25375]) ([rejseplanen docs]) (breaking change) +- Add migration notification for Ambient PWS ([@bachya] - [#25561]) ([ambient_station docs]) +- Fix wrong exposed light for emulated hue ([@croghostrider] - [#25581]) ([demo docs]) ([emulated_hue docs]) +- Fix bug and bump geniushub client ([@zxdavb] - [#25599]) ([geniushub docs]) +- implemented timout setting for telnet switch ([@tofuSCHNITZEL] - [#25602]) ([telnet docs]) +- remove myself from CODEOWNDERS ([@ChristianKuehnel] - [#25593]) +- Change how ring polls for changes to allow more platforms to be added ([@rossdargan] - [#25534]) ([ring docs]) (new-platform) +- Introduce support for color temperature ([@yeralin] - [#25503]) ([flux_led docs]) +- Netatmo climate refactor ([@cgtobi] - [#25457]) ([netatmo docs]) +- Return history for entities in the order they were requested ([@thomasloven] - [#25560]) ([history docs]) +- Python < 3.6 remainder cleanups ([@scop] - [#25607]) +- Azure flake8 dep, docstring fixes ([@scop] - [#25605]) ([rejseplanen docs]) ([ring docs]) ([zha docs]) + +[#22701]: https://github.com/home-assistant/home-assistant/pull/22701 +[#22888]: https://github.com/home-assistant/home-assistant/pull/22888 +[#23078]: https://github.com/home-assistant/home-assistant/pull/23078 +[#23839]: https://github.com/home-assistant/home-assistant/pull/23839 +[#23844]: https://github.com/home-assistant/home-assistant/pull/23844 +[#24061]: https://github.com/home-assistant/home-assistant/pull/24061 +[#24265]: https://github.com/home-assistant/home-assistant/pull/24265 +[#24281]: https://github.com/home-assistant/home-assistant/pull/24281 +[#24367]: https://github.com/home-assistant/home-assistant/pull/24367 +[#24427]: https://github.com/home-assistant/home-assistant/pull/24427 +[#24463]: https://github.com/home-assistant/home-assistant/pull/24463 +[#24738]: https://github.com/home-assistant/home-assistant/pull/24738 +[#24884]: https://github.com/home-assistant/home-assistant/pull/24884 +[#24908]: https://github.com/home-assistant/home-assistant/pull/24908 +[#24919]: https://github.com/home-assistant/home-assistant/pull/24919 +[#24950]: https://github.com/home-assistant/home-assistant/pull/24950 +[#24953]: https://github.com/home-assistant/home-assistant/pull/24953 +[#24956]: https://github.com/home-assistant/home-assistant/pull/24956 +[#24991]: https://github.com/home-assistant/home-assistant/pull/24991 +[#25052]: https://github.com/home-assistant/home-assistant/pull/25052 +[#25056]: https://github.com/home-assistant/home-assistant/pull/25056 +[#25071]: https://github.com/home-assistant/home-assistant/pull/25071 +[#25083]: https://github.com/home-assistant/home-assistant/pull/25083 +[#25085]: https://github.com/home-assistant/home-assistant/pull/25085 +[#25086]: https://github.com/home-assistant/home-assistant/pull/25086 +[#25090]: https://github.com/home-assistant/home-assistant/pull/25090 +[#25091]: https://github.com/home-assistant/home-assistant/pull/25091 +[#25093]: https://github.com/home-assistant/home-assistant/pull/25093 +[#25094]: https://github.com/home-assistant/home-assistant/pull/25094 +[#25108]: https://github.com/home-assistant/home-assistant/pull/25108 +[#25111]: https://github.com/home-assistant/home-assistant/pull/25111 +[#25112]: https://github.com/home-assistant/home-assistant/pull/25112 +[#25117]: https://github.com/home-assistant/home-assistant/pull/25117 +[#25120]: https://github.com/home-assistant/home-assistant/pull/25120 +[#25127]: https://github.com/home-assistant/home-assistant/pull/25127 +[#25128]: https://github.com/home-assistant/home-assistant/pull/25128 +[#25129]: https://github.com/home-assistant/home-assistant/pull/25129 +[#25132]: https://github.com/home-assistant/home-assistant/pull/25132 +[#25144]: https://github.com/home-assistant/home-assistant/pull/25144 +[#25157]: https://github.com/home-assistant/home-assistant/pull/25157 +[#25158]: https://github.com/home-assistant/home-assistant/pull/25158 +[#25161]: https://github.com/home-assistant/home-assistant/pull/25161 +[#25172]: https://github.com/home-assistant/home-assistant/pull/25172 +[#25173]: https://github.com/home-assistant/home-assistant/pull/25173 +[#25174]: https://github.com/home-assistant/home-assistant/pull/25174 +[#25175]: https://github.com/home-assistant/home-assistant/pull/25175 +[#25176]: https://github.com/home-assistant/home-assistant/pull/25176 +[#25181]: https://github.com/home-assistant/home-assistant/pull/25181 +[#25182]: https://github.com/home-assistant/home-assistant/pull/25182 +[#25186]: https://github.com/home-assistant/home-assistant/pull/25186 +[#25188]: https://github.com/home-assistant/home-assistant/pull/25188 +[#25190]: https://github.com/home-assistant/home-assistant/pull/25190 +[#25194]: https://github.com/home-assistant/home-assistant/pull/25194 +[#25195]: https://github.com/home-assistant/home-assistant/pull/25195 +[#25199]: https://github.com/home-assistant/home-assistant/pull/25199 +[#25200]: https://github.com/home-assistant/home-assistant/pull/25200 +[#25201]: https://github.com/home-assistant/home-assistant/pull/25201 +[#25202]: https://github.com/home-assistant/home-assistant/pull/25202 +[#25207]: https://github.com/home-assistant/home-assistant/pull/25207 +[#25208]: https://github.com/home-assistant/home-assistant/pull/25208 +[#25221]: https://github.com/home-assistant/home-assistant/pull/25221 +[#25234]: https://github.com/home-assistant/home-assistant/pull/25234 +[#25249]: https://github.com/home-assistant/home-assistant/pull/25249 +[#25260]: https://github.com/home-assistant/home-assistant/pull/25260 +[#25265]: https://github.com/home-assistant/home-assistant/pull/25265 +[#25284]: https://github.com/home-assistant/home-assistant/pull/25284 +[#25304]: https://github.com/home-assistant/home-assistant/pull/25304 +[#25305]: https://github.com/home-assistant/home-assistant/pull/25305 +[#25308]: https://github.com/home-assistant/home-assistant/pull/25308 +[#25316]: https://github.com/home-assistant/home-assistant/pull/25316 +[#25317]: https://github.com/home-assistant/home-assistant/pull/25317 +[#25320]: https://github.com/home-assistant/home-assistant/pull/25320 +[#25338]: https://github.com/home-assistant/home-assistant/pull/25338 +[#25339]: https://github.com/home-assistant/home-assistant/pull/25339 +[#25340]: https://github.com/home-assistant/home-assistant/pull/25340 +[#25341]: https://github.com/home-assistant/home-assistant/pull/25341 +[#25355]: https://github.com/home-assistant/home-assistant/pull/25355 +[#25357]: https://github.com/home-assistant/home-assistant/pull/25357 +[#25365]: https://github.com/home-assistant/home-assistant/pull/25365 +[#25373]: https://github.com/home-assistant/home-assistant/pull/25373 +[#25375]: https://github.com/home-assistant/home-assistant/pull/25375 +[#25377]: https://github.com/home-assistant/home-assistant/pull/25377 +[#25382]: https://github.com/home-assistant/home-assistant/pull/25382 +[#25390]: https://github.com/home-assistant/home-assistant/pull/25390 +[#25398]: https://github.com/home-assistant/home-assistant/pull/25398 +[#25401]: https://github.com/home-assistant/home-assistant/pull/25401 +[#25402]: https://github.com/home-assistant/home-assistant/pull/25402 +[#25403]: https://github.com/home-assistant/home-assistant/pull/25403 +[#25408]: https://github.com/home-assistant/home-assistant/pull/25408 +[#25409]: https://github.com/home-assistant/home-assistant/pull/25409 +[#25410]: https://github.com/home-assistant/home-assistant/pull/25410 +[#25414]: https://github.com/home-assistant/home-assistant/pull/25414 +[#25415]: https://github.com/home-assistant/home-assistant/pull/25415 +[#25416]: https://github.com/home-assistant/home-assistant/pull/25416 +[#25422]: https://github.com/home-assistant/home-assistant/pull/25422 +[#25425]: https://github.com/home-assistant/home-assistant/pull/25425 +[#25428]: https://github.com/home-assistant/home-assistant/pull/25428 +[#25429]: https://github.com/home-assistant/home-assistant/pull/25429 +[#25430]: https://github.com/home-assistant/home-assistant/pull/25430 +[#25431]: https://github.com/home-assistant/home-assistant/pull/25431 +[#25432]: https://github.com/home-assistant/home-assistant/pull/25432 +[#25434]: https://github.com/home-assistant/home-assistant/pull/25434 +[#25435]: https://github.com/home-assistant/home-assistant/pull/25435 +[#25436]: https://github.com/home-assistant/home-assistant/pull/25436 +[#25437]: https://github.com/home-assistant/home-assistant/pull/25437 +[#25438]: https://github.com/home-assistant/home-assistant/pull/25438 +[#25439]: https://github.com/home-assistant/home-assistant/pull/25439 +[#25440]: https://github.com/home-assistant/home-assistant/pull/25440 +[#25441]: https://github.com/home-assistant/home-assistant/pull/25441 +[#25442]: https://github.com/home-assistant/home-assistant/pull/25442 +[#25443]: https://github.com/home-assistant/home-assistant/pull/25443 +[#25444]: https://github.com/home-assistant/home-assistant/pull/25444 +[#25445]: https://github.com/home-assistant/home-assistant/pull/25445 +[#25450]: https://github.com/home-assistant/home-assistant/pull/25450 +[#25453]: https://github.com/home-assistant/home-assistant/pull/25453 +[#25454]: https://github.com/home-assistant/home-assistant/pull/25454 +[#25457]: https://github.com/home-assistant/home-assistant/pull/25457 +[#25460]: https://github.com/home-assistant/home-assistant/pull/25460 +[#25462]: https://github.com/home-assistant/home-assistant/pull/25462 +[#25463]: https://github.com/home-assistant/home-assistant/pull/25463 +[#25464]: https://github.com/home-assistant/home-assistant/pull/25464 +[#25474]: https://github.com/home-assistant/home-assistant/pull/25474 +[#25475]: https://github.com/home-assistant/home-assistant/pull/25475 +[#25478]: https://github.com/home-assistant/home-assistant/pull/25478 +[#25485]: https://github.com/home-assistant/home-assistant/pull/25485 +[#25497]: https://github.com/home-assistant/home-assistant/pull/25497 +[#25498]: https://github.com/home-assistant/home-assistant/pull/25498 +[#25500]: https://github.com/home-assistant/home-assistant/pull/25500 +[#25503]: https://github.com/home-assistant/home-assistant/pull/25503 +[#25504]: https://github.com/home-assistant/home-assistant/pull/25504 +[#25506]: https://github.com/home-assistant/home-assistant/pull/25506 +[#25507]: https://github.com/home-assistant/home-assistant/pull/25507 +[#25508]: https://github.com/home-assistant/home-assistant/pull/25508 +[#25511]: https://github.com/home-assistant/home-assistant/pull/25511 +[#25512]: https://github.com/home-assistant/home-assistant/pull/25512 +[#25524]: https://github.com/home-assistant/home-assistant/pull/25524 +[#25528]: https://github.com/home-assistant/home-assistant/pull/25528 +[#25529]: https://github.com/home-assistant/home-assistant/pull/25529 +[#25532]: https://github.com/home-assistant/home-assistant/pull/25532 +[#25534]: https://github.com/home-assistant/home-assistant/pull/25534 +[#25540]: https://github.com/home-assistant/home-assistant/pull/25540 +[#25543]: https://github.com/home-assistant/home-assistant/pull/25543 +[#25545]: https://github.com/home-assistant/home-assistant/pull/25545 +[#25546]: https://github.com/home-assistant/home-assistant/pull/25546 +[#25548]: https://github.com/home-assistant/home-assistant/pull/25548 +[#25551]: https://github.com/home-assistant/home-assistant/pull/25551 +[#25553]: https://github.com/home-assistant/home-assistant/pull/25553 +[#25557]: https://github.com/home-assistant/home-assistant/pull/25557 +[#25558]: https://github.com/home-assistant/home-assistant/pull/25558 +[#25560]: https://github.com/home-assistant/home-assistant/pull/25560 +[#25561]: https://github.com/home-assistant/home-assistant/pull/25561 +[#25567]: https://github.com/home-assistant/home-assistant/pull/25567 +[#25568]: https://github.com/home-assistant/home-assistant/pull/25568 +[#25569]: https://github.com/home-assistant/home-assistant/pull/25569 +[#25570]: https://github.com/home-assistant/home-assistant/pull/25570 +[#25575]: https://github.com/home-assistant/home-assistant/pull/25575 +[#25580]: https://github.com/home-assistant/home-assistant/pull/25580 +[#25581]: https://github.com/home-assistant/home-assistant/pull/25581 +[#25582]: https://github.com/home-assistant/home-assistant/pull/25582 +[#25585]: https://github.com/home-assistant/home-assistant/pull/25585 +[#25590]: https://github.com/home-assistant/home-assistant/pull/25590 +[#25592]: https://github.com/home-assistant/home-assistant/pull/25592 +[#25593]: https://github.com/home-assistant/home-assistant/pull/25593 +[#25594]: https://github.com/home-assistant/home-assistant/pull/25594 +[#25599]: https://github.com/home-assistant/home-assistant/pull/25599 +[#25602]: https://github.com/home-assistant/home-assistant/pull/25602 +[#25605]: https://github.com/home-assistant/home-assistant/pull/25605 +[#25607]: https://github.com/home-assistant/home-assistant/pull/25607 +[@9r]: https://github.com/9R +[@adminiuga]: https://github.com/Adminiuga +[@anglac]: https://github.com/Anglac +[@bouni]: https://github.com/Bouni +[@cereal2nd]: https://github.com/Cereal2nd +[@christiankuehnel]: https://github.com/ChristianKuehnel +[@danielhiversen]: https://github.com/Danielhiversen +[@darkfox]: https://github.com/DarkFox +[@frederikbolding]: https://github.com/FrederikBolding +[@jc2k]: https://github.com/Jc2k +[@jongilmore]: https://github.com/JonGilmore +[@kane610]: https://github.com/Kane610 +[@martinhjelmare]: https://github.com/MartinHjelmare +[@philrw]: https://github.com/PhilRW +[@quentame]: https://github.com/Quentame +[@santobert]: https://github.com/Santobert +[@sukramj]: https://github.com/SukramJ +[@yarikx]: https://github.com/Yarikx +[@adrum]: https://github.com/adrum +[@alengwenus]: https://github.com/alengwenus +[@amelchio]: https://github.com/amelchio +[@andersonshatch]: https://github.com/andersonshatch +[@andre-richter]: https://github.com/andre-richter +[@andrewsayre]: https://github.com/andrewsayre +[@aschamberger]: https://github.com/aschamberger +[@asleeis]: https://github.com/asleeis +[@austinmroczek]: https://github.com/austinmroczek +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@benleb]: https://github.com/benleb +[@bollewolle]: https://github.com/bollewolle +[@cameronrmorris]: https://github.com/cameronrmorris +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@croghostrider]: https://github.com/croghostrider +[@definitio]: https://github.com/definitio +[@depl0y]: https://github.com/depl0y +[@dshokouhi]: https://github.com/dshokouhi +[@dwradcliffe]: https://github.com/dwradcliffe +[@elupus]: https://github.com/elupus +[@escoand]: https://github.com/escoand +[@fabaff]: https://github.com/fabaff +[@farmio]: https://github.com/farmio +[@fbradyirl]: https://github.com/fbradyirl +[@franfos]: https://github.com/franfos +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@gjbadros]: https://github.com/gjbadros +[@gorynychzmey]: https://github.com/gorynychzmey +[@gtdiehl]: https://github.com/gtdiehl +[@iamtpage]: https://github.com/iamtpage +[@keesschollaart81]: https://github.com/keesschollaart81 +[@kifeo]: https://github.com/kifeo +[@kimfrellsen]: https://github.com/kimfrellsen +[@ktnrg45]: https://github.com/ktnrg45 +[@lealoureiro]: https://github.com/lealoureiro +[@ljmerza]: https://github.com/ljmerza +[@lyghtnox]: https://github.com/lyghtnox +[@manonstreet]: https://github.com/manonstreet +[@manutenfruits]: https://github.com/manutenfruits +[@michaeldavie]: https://github.com/michaeldavie +[@mjj4791]: https://github.com/mjj4791 +[@nielstron]: https://github.com/nielstron +[@nierob]: https://github.com/nierob +[@oncleben31]: https://github.com/oncleben31 +[@ooii]: https://github.com/ooii +[@orson1282]: https://github.com/orson1282 +[@pattyland]: https://github.com/pattyland +[@plafue]: https://github.com/plafue +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@rossdargan]: https://github.com/rossdargan +[@rtclauss]: https://github.com/rtclauss +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@shbatm]: https://github.com/shbatm +[@squishykid]: https://github.com/squishykid +[@teharris1]: https://github.com/teharris1 +[@tetienne]: https://github.com/tetienne +[@thomasgermain]: https://github.com/thomasgermain +[@thomasloven]: https://github.com/thomasloven +[@tofuschnitzel]: https://github.com/tofuSCHNITZEL +[@webdjoe]: https://github.com/webdjoe +[@xt16johnny]: https://github.com/xt16johnny +[@yeralin]: https://github.com/yeralin +[@zxdavb]: https://github.com/zxdavb +[alarm_control_panel docs]: /components/alarm_control_panel/ +[ambient_station docs]: /components/ambient_station/ +[apache_kafka docs]: /components/apache_kafka/ +[automation docs]: /components/automation/ +[avea docs]: /components/avea/ +[bloomsky docs]: /components/bloomsky/ +[bluetooth_tracker docs]: /components/bluetooth_tracker/ +[buienradar docs]: /components/buienradar/ +[caldav docs]: /components/caldav/ +[calendar docs]: /components/calendar/ +[cisco_mobility_express docs]: /components/cisco_mobility_express/ +[climate docs]: /components/climate/ +[counter docs]: /components/counter/ +[cover docs]: /components/cover/ +[daikin docs]: /components/daikin/ +[darksky docs]: /components/darksky/ +[deconz docs]: /components/deconz/ +[delijn docs]: /components/delijn/ +[demo docs]: /components/demo/ +[device_automation docs]: /components/device_automation/ +[device_tracker docs]: /components/device_tracker/ +[discord docs]: /components/discord/ +[elkm1 docs]: /components/elkm1/ +[emulated_hue docs]: /components/emulated_hue/ +[environment_canada docs]: /components/environment_canada/ +[evohome docs]: /components/evohome/ +[fan docs]: /components/fan/ +[fleetgo docs]: /components/fleetgo/ +[flux_led docs]: /components/flux_led/ +[fortigate docs]: /components/fortigate/ +[fortios docs]: /components/fortios/ +[geniushub docs]: /components/geniushub/ +[google docs]: /components/google/ +[google_assistant docs]: /components/google_assistant/ +[google_maps docs]: /components/google_maps/ +[google_travel_time docs]: /components/google_travel_time/ +[group docs]: /components/group/ +[history docs]: /components/history/ +[hive docs]: /components/hive/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[homematicip_cloud docs]: /components/homematicip_cloud/ +[hp_ilo docs]: /components/hp_ilo/ +[html5 docs]: /components/html5/ +[http docs]: /components/http/ +[huawei_lte docs]: /components/huawei_lte/ +[image_processing docs]: /components/image_processing/ +[input_boolean docs]: /components/input_boolean/ +[input_datetime docs]: /components/input_datetime/ +[input_number docs]: /components/input_number/ +[input_select docs]: /components/input_select/ +[input_text docs]: /components/input_text/ +[insteon docs]: /components/insteon/ +[knx docs]: /components/knx/ +[lcn docs]: /components/lcn/ +[lock docs]: /components/lock/ +[lovelace docs]: /components/lovelace/ +[luci docs]: /components/luci/ +[lutron docs]: /components/lutron/ +[mastodon docs]: /components/mastodon/ +[media_extractor docs]: /components/media_extractor/ +[media_player docs]: /components/media_player/ +[mikrotik docs]: /components/mikrotik/ +[mqtt docs]: /components/mqtt/ +[mvglive docs]: /components/mvglive/ +[n26 docs]: /components/n26/ +[neato docs]: /components/neato/ +[netatmo docs]: /components/netatmo/ +[netgear_lte docs]: /components/netgear_lte/ +[nextbus docs]: /components/nextbus/ +[nuki docs]: /components/nuki/ +[opensensemap docs]: /components/opensensemap/ +[pioneer docs]: /components/pioneer/ +[ps4 docs]: /components/ps4/ +[rainforest_eagle docs]: /components/rainforest_eagle/ +[rejseplanen docs]: /components/rejseplanen/ +[remote docs]: /components/remote/ +[ring docs]: /components/ring/ +[ritassist docs]: /components/ritassist/ +[roku docs]: /components/roku/ +[roomba docs]: /components/roomba/ +[samsungtv docs]: /components/samsungtv/ +[scene docs]: /components/scene/ +[script docs]: /components/script/ +[seventeentrack docs]: /components/seventeentrack/ +[simplisafe docs]: /components/simplisafe/ +[smartthings docs]: /components/smartthings/ +[snapcast docs]: /components/snapcast/ +[solax docs]: /components/solax/ +[somfy docs]: /components/somfy/ +[songpal docs]: /components/songpal/ +[splunk docs]: /components/splunk/ +[spotify docs]: /components/spotify/ +[suez_water docs]: /components/suez_water/ +[switchbot docs]: /components/switchbot/ +[syncthru docs]: /components/syncthru/ +[system_health docs]: /components/system_health/ +[tado docs]: /components/tado/ +[telnet docs]: /components/telnet/ +[tibber docs]: /components/tibber/ +[timer docs]: /components/timer/ +[todoist docs]: /components/todoist/ +[totalconnect docs]: /components/totalconnect/ +[transmission docs]: /components/transmission/ +[twentemilieu docs]: /components/twentemilieu/ +[unifi docs]: /components/unifi/ +[utility_meter docs]: /components/utility_meter/ +[vacuum docs]: /components/vacuum/ +[vallox docs]: /components/vallox/ +[velbus docs]: /components/velbus/ +[venstar docs]: /components/venstar/ +[vesync docs]: /components/vesync/ +[wink docs]: /components/wink/ +[workday docs]: /components/workday/ +[wwlln docs]: /components/wwlln/ +[xiaomi_miio docs]: /components/xiaomi_miio/ +[zha docs]: /components/zha/ +[zwave docs]: /components/zwave/ From 4c8cb70b3a77e5282967adc002a35e19e1b84db6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 31 Jul 2019 16:37:33 -0700 Subject: [PATCH 58/73] Add draft release notes --- source/_posts/2019-08-07-release-97.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index b9f9a75679a..411e2879851 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -13,6 +13,18 @@ og_image: /images/blog/2019-08-release-97/components.png
+## Python 3.5 support has been dropped + +As per previous announcements, this is the first release that requires at least Python 3.6. + +## UI changes + +- Improved accessibility. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible for visually impaired users. +- Split out configuration.yaml actions fron core config into a new server control config panel. Thanks [@IcyPalm] +- Markdown card will now have size + 1 if it has a header defined. Some layouts might move around due to this. + +[@icypalm]: https://www.github.com/IcyPalm/ + ## New Integrations - Add support for recording history to Apache Kafka ([@bachya] - [#25085]) ([apache_kafka docs]) (new-integration) From 158a340aaf620ee994278710e0a3ae21caab4b33 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 31 Jul 2019 16:44:49 -0700 Subject: [PATCH 59/73] Stub In other news --- source/_posts/2019-08-07-release-97.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 411e2879851..9a165c99f5a 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -25,6 +25,10 @@ As per previous announcements, this is the first release that requires at least [@icypalm]: https://www.github.com/IcyPalm/ +## In other news + +TBD + ## New Integrations - Add support for recording history to Apache Kafka ([@bachya] - [#25085]) ([apache_kafka docs]) (new-integration) From 992755b91d492ac5e31c4af34e85544be380f308 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 1 Aug 2019 08:51:46 +0200 Subject: [PATCH 60/73] Fixes configuration block for wwlln --- source/_components/wwlln.markdown | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/source/_components/wwlln.markdown b/source/_components/wwlln.markdown index 1bd789f241d..90c022d43a6 100644 --- a/source/_components/wwlln.markdown +++ b/source/_components/wwlln.markdown @@ -37,22 +37,22 @@ wwlln: {% configuration %} latitude: -description: The latitude you want to monitor; defaults to the value defined in `configuration.yaml`. -required: false -type: float + description: The latitude you want to monitor; defaults to the value defined in `configuration.yaml`. + required: false + type: float longitude: -description: The longitude you want to monitor; defaults to the value defined in `configuration.yaml`. -required: false -type: float + description: The longitude you want to monitor; defaults to the value defined in `configuration.yaml`. + required: false + type: float radius: -description: The radius around your location to monitor; defaults to 25 km or mi (depending on the unit system defined in your `configuration.yaml`). -required: false -type: integer + description: The radius around your location to monitor; defaults to 25 km or mi (depending on the unit system defined in your `configuration.yaml`). + required: false + type: integer window: -description: The amount of time before now for which strikes should be considered "active" and shown in the UI. Note that a window of less than 1 hour may cause Home Assistant to miss events. -required: false -type: time -default: 10 minutes + description: The amount of time before now for which strikes should be considered "active" and shown in the UI. Note that a window of less than 1 hour may cause Home Assistant to miss events. + required: false + type: time + default: 10 minutes {% endconfiguration %} ## State Attributes From 0e1397a6e83b264daff32c6329433823c9a9e359 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 4 Aug 2019 21:00:39 -0700 Subject: [PATCH 61/73] update in other news --- source/_posts/2019-08-07-release-97.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 9a165c99f5a..d49b8771ce5 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -27,7 +27,15 @@ As per previous announcements, this is the first release that requires at least ## In other news -TBD +Frenck wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/) how to make a $2 smart doorbell using Home Assistant and ESPHome. + +[@jimz011] has updated his amazing Lovelace config and shared it on the forums. Preview below, but also make sure to check out [the forum post](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-96-x-compatible-now-with-dynamic-themes/) + +[@jimz011]: https://github.com/jimz011 + +
+ +
## New Integrations @@ -78,6 +86,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update to buienradar json api; and additional monitored_conditions ([@mjj4791] - [#24463]) ([buienradar docs]) (breaking change) - Bump Python support to min Python 3.6.0 ([@balloob] - [#25582]) (breaking change) - Improve and align Rejseplanen with other transport components (Breaking) ([@DarkFox] - [#25375]) ([rejseplanen docs]) (breaking change) +- Ecobee presets now represent the different Ecobee comfort settings. Selectable by name instead of unknown ID. ([@balloob] - PR link todo) ## All changes From 78409b08fd92e216cad90f54956b319dd47213f3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 4 Aug 2019 21:06:10 -0700 Subject: [PATCH 62/73] Better link --- source/_posts/2019-08-07-release-97.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index d49b8771ce5..88795c4970c 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -29,7 +29,7 @@ As per previous announcements, this is the first release that requires at least Frenck wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/) how to make a $2 smart doorbell using Home Assistant and ESPHome. -[@jimz011] has updated his amazing Lovelace config and shared it on the forums. Preview below, but also make sure to check out [the forum post](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-96-x-compatible-now-with-dynamic-themes/) +[@jimz011] has updated his amazing Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-96-x-compatible-now-with-dynamic-themes/). Preview below. [@jimz011]: https://github.com/jimz011 From 2d4612d1f84bf0f5578ddec5d5de264792645a38 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 5 Aug 2019 10:03:49 -0700 Subject: [PATCH 63/73] Update 2019-08-07-release-97.markdown --- source/_posts/2019-08-07-release-97.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 88795c4970c..b6749859269 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -29,6 +29,8 @@ As per previous announcements, this is the first release that requires at least Frenck wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/) how to make a $2 smart doorbell using Home Assistant and ESPHome. +https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assistant/ + [@jimz011] has updated his amazing Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-96-x-compatible-now-with-dynamic-themes/). Preview below. [@jimz011]: https://github.com/jimz011 From 082f0011a7d433bc0d6bd6c8f1b27670feba1be8 Mon Sep 17 00:00:00 2001 From: cogneato Date: Tue, 6 Aug 2019 10:00:20 -0600 Subject: [PATCH 64/73] Add descriptions for breaking changes Add descriptions for breaking changes. Ecobee still WIP --- source/_posts/2019-08-07-release-97.markdown | 70 +++++++++++++++----- 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index b6749859269..5b8ee2c71e8 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -72,23 +72,59 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes -- Rewrite calendar component ([@MartinHjelmare] - [#24950]) ([caldav docs]) ([calendar docs]) ([demo docs]) ([google docs]) ([todoist docs]) (breaking change) -- Remove monitored conditions from syncthru ([@nielstron] - [#25052]) ([syncthru docs]) (breaking change) -- Update KNX component to xknx 0.11 ([@farmio] - [#24738]) ([knx docs]) (breaking change) -- Rename RitAssist to FleetGO ([@depl0y] - [#25093]) ([fleetgo docs]) ([ritassist docs]) (breaking change) (new-integration) -- Add support for multiple N26 accounts ([@gorynychzmey] - [#25086]) ([n26 docs]) (breaking change) -- Update Environment Canada platforms ([@michaeldavie] - [#24884]) ([environment_canada docs]) (breaking change) -- Move totalconnect from platform to component config ([@austinmroczek] - [#24427]) ([totalconnect docs]) (breaking change) -- Merge UniFi device tracker to config entry ([@Kane610] - [#24367]) ([unifi docs]) (breaking change) -- Improve Nuki lock ([@franfos] - [#22888]) ([nuki docs]) (breaking change) -- Multiroom support for snapcast ([@lyghtnox] - [#24061]) ([snapcast docs]) (breaking change) -- Return Ambient PWS brightness sensor unit and remove CONF_MONITORED_CONDITIONS ([@bachya] - [#25284]) ([ambient_station docs]) (breaking change) -- Update Google Maps Location Tracker to use locationsharinglib==4.0.2 ([@shbatm] - [#25316]) ([google_maps docs]) (breaking change) -- Improve handling of Z-Wave config entry vs yaml config ([@cgarwood] - [#25112]) ([zwave docs]) (breaking change) -- Update to buienradar json api; and additional monitored_conditions ([@mjj4791] - [#24463]) ([buienradar docs]) (breaking change) -- Bump Python support to min Python 3.6.0 ([@balloob] - [#25582]) (breaking change) -- Improve and align Rejseplanen with other transport components (Breaking) ([@DarkFox] - [#25375]) ([rejseplanen docs]) (breaking change) -- Ecobee presets now represent the different Ecobee comfort settings. Selectable by name instead of unknown ID. ([@balloob] - PR link todo) +- **Python** - Bump Python support to min Python 3.6.0 ([@balloob] - [#25582]) +- **Z-Wave** - Improve handling of Z-Wave config entry vs yaml config. If a Z-Wave `network_key` is specified in configuration.yaml it will override a `network_key` specified in the Z-Wave config entry. ([@cgarwood] - [#25112]) ([zwave docs]) +- **Unifi** - Unifi Device tracker is now part of config entry. After initial import the unifi device tracker configuration is no longer needed. If configuring SSID filter or detection time you will need to use the new configuration from UniFi. See UniFi component documentation for details. ([@Kane610] - [#24367]) ([unifi docs]) +- **Ecobee** - Ecobee presets now represent the different Ecobee comfort settings. Selectable by name instead of unknown ID. ([@balloob] - PR link todo) +- **Calendar** - Rewrite calendar component - The calendar integration has been rewritten to follow our current standards and is mostly non breaking. The reset (clean up) of state attributes upon an event time passing has been removed, though. Attributes are no longer set to an arbitrary default value, and will now keep the attributes representing the last event. With this change, automations that rely on state attributes getting reset will need to be updated. All platforms have been converted. - ([@MartinHjelmare] - [#24950]) ([caldav docs]) ([calendar docs]) ([demo docs]) ([google docs]) ([todoist docs]) +- **SyncThru** - The monitored_conditions configuration option has been removed. All available monitored conditions will be used by default. Users that have been using the monitored_conditions option need to remove it from the syncthru section in configuration.yaml. ([@nielstron] - [#25052]) ([syncthru docs]) +- **KNX** - Updates the knx component to use xknx 0.11.1 . This introduces several new features and bugfixes. For a complete list see: https://github.com/XKNX/xknx/releases/tag/0.11.0 ([@farmio] - [#24738]) ([knx docs]) + - `scene:` `scene_number` is now 1 indexed according to KNX standards. Previously it was 0 based. Please add 1 to your already configured scene numbers (`scene_number: 5` becomes `scene_number: 6`). + - `sensor:` `state_address` replaces `address` in configuration + - `binary_sensor:` `state_address` replace `address` in configuration when using xknx config file (`knx: config_file = ...`): Replace `group_address` in BinarySensor and Sensor with `group_address_state`. +- **RitAssist** - The company has been renamed from RitAssist to FleetGO, so this component needed to get renamed. Users of this integration will need to update their device_tracker config section to use the new name. ([@depl0y] - [#25093]) ([fleetgo docs]) ([ritassist docs]) +- **N26** - Adds support for multiple N26 accounts. The generation of unique ids for spaces has been changed. Users may need to remove the stale old id entities, representing spaces, from the entity registry. ([@gorynychzmey] - [#25086]) ([n26 docs]) +- **Environment Canada** - This change removes the `monitored_conditions` and `name` options and adds an optional `language` option. Sensors are now created for all provided data. ([@michaeldavie] - [#24884]) ([environment_canada docs]) +```yaml +sensor: + - platform: environment_canada + language: french +``` + +- **TotalConnect** - Total Connect Client was upgraded to support more than one alarm panel and allow future support for additional sensors. Previous `alarm_control_panel` entries must be removed, and a new totalconnect entry must be added to configuration.yaml. See https://www.home-assistant.io/components/totalconnect/ for configuration details. ([@austinmroczek] - [#24427]) ([totalconnect docs]) +- **Nuki** - The `lock.nuki_unlatch` service has been removed. It has been replaced by the `lock.open` service. The `lock.nuki_lock_n_go` service has been renamed to `nuki.lock_n_go`. Users that are using the removed or renamed services in automations need to replace them with the new services. ([@franfos] - [#22888]) ([nuki docs]) +- **Snapcast** - This changes adds multiroom support for the snapcast component. It adds 2 services `media_player.snapcast_join` and `media_player.snapcast_unjoin` to group/ungroup a client with another client. Also added source selection support in the snapcast clients as the groups are unusable due to their dynamic nature. ([@lyghtnox] - [#24061]) ([snapcast docs]) +- **Ambient Weather Station** - The `unique_id` for Ambient sensors uses a new formula, meaning that even though they have the same friendly names, new sensors will be created. The integration will automatically perform this migration under the hood, but if you've altered the entity IDs of any Ambient PWS entities, you'll need do the same to the new entities upon creation. Additionally, the `monitored_keys` configuration option is no longer supported in `configuration.yaml`. The integration will now create sensors for all conditions supported by the particular device. +([@bachya] - [#25284]) ([ambient_station docs]) +- **Google Maps** - Google Passwords are no longer required to be provided in your config. An external program is now required to obtain the necessary cookie file to place in your Home Assistant config directory. This is due to the authentication process being removed from the underlying package. Existing users should remove the `password:` entry from their config file (username is still required). The cookie file previously generated should still be valid and will allow the tracker to continue functioning normally until the cookie is invalidated. New users will need to follow the instructions on the Google Maps Location Sharing page to create their cookie file.([@shbatm] - [#25316]) ([google_maps docs]) + +- **BuienRadar** - Updates to the new version of python-buienrader (1.0.1); this version now leverages the new json buienradar-api. ([@mjj4791] - [#24463]) ([buienradar docs]) + + The following sensor types (monitored_conditions) are no longer supported, since they are no longer provided by the json api of buienradar: + + - snow_1d .. snow_5d + + The following monitored conditions will change units: + + - windgust (now km/h, was m/s) + - windspeed (now km/h, was m/s) + - windspeed_?d (now km/h, was m/s) + - visibility (now km, was m) + + +- **Rejseplanen** - Improve and align Rejseplanen with other transport components. ([@DarkFox] - [#25375]) ([rejseplanen docs]) + - All attributes changed to snake_case. + - Later departure attribute has been removed. + - Added next_departures which contains a list of all later departures returned from the search, as dictionaries with the same fields as the next departure. + + Any existing templates using the sensor's attributes will need to be updated as follows: + - Stop ID -> stop_id + - Stop -> stop + - Route -> route + - Type -> type + - Direction -> direction + - Due in -> due_in + - Due at -> due_at ## All changes From 5d15b756df82a6dfe2742ae2832deb965200bb85 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 6 Aug 2019 10:28:05 -0700 Subject: [PATCH 65/73] Add link cast --- source/_posts/2019-08-07-release-97.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index bf4bd0eb3ee..9fe19a51a2d 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -23,7 +23,7 @@ Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml ## Home Assistant Cast -In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. Read the announcement for more information. +In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. [Read the announcement for more information.](/blog/2019/08/06/home-assistant-cast/) ## UI changes From b0d21ee84a1a1e07156f7bdb4061078ca0266880 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 6 Aug 2019 17:02:11 -0700 Subject: [PATCH 66/73] Update the links --- source/_posts/2019-08-07-release-97.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 9fe19a51a2d..43b37a4beb7 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -39,12 +39,12 @@ Frenck wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for- https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assistant/ -[@jimz011] has updated his amazing Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-96-x-compatible-now-with-dynamic-themes/). Preview below. +[@jimz011] has updated his amazing Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-97-x-compatible-massive-update/117086). Preview below. [@jimz011]: https://github.com/jimz011
- +
## New Integrations From bed508c206ba01cc9626beba07c408e5b3df4104 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 6 Aug 2019 17:02:42 -0700 Subject: [PATCH 67/73] Update date a little bit to help with ordering --- source/_posts/2019-08-07-release-97.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 43b37a4beb7..3c9c60f4fcc 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -2,7 +2,7 @@ layout: post title: "0.97: XXX - UPDATE DATE" description: "XXXX" -date: 2019-07-31 00:11:03 +date: 2019-08-06 19:11:03 date_formatted: "August 7, 2019" author: Paulus Schoutsen author_twitter: balloob From a9717165cdf8736dcba2d9e7a1460825e33ed6ba Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 7 Aug 2019 17:40:24 +0200 Subject: [PATCH 68/73] Update 2019-08-07-release-97.markdown --- source/_posts/2019-08-07-release-97.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 3c9c60f4fcc..0c739b07ae4 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -17,6 +17,10 @@ og_image: /images/blog/2019-08-release-97/components.png As per previous announcements, this is the first release that requires at least Python 3.6. +## Docker + +This is the latest release where `homeassistant/home-assistant` is based on Debian. In followup of [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), we replace the image with the Alpine based Hass.io Images. You don't need to change your setup if you use that image without modification; otherwise, it could be that you need to update your commands. + ## Reload scenes from configuration.yaml Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track the effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681). From 75ae4cda11f57f9ad5e76c94510a10a4d2bb69d8 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 7 Aug 2019 19:43:26 +0200 Subject: [PATCH 69/73] Update 2019-08-07-release-97.markdown --- source/_posts/2019-08-07-release-97.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 0c739b07ae4..94424dc414d 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -21,6 +21,8 @@ As per previous announcements, this is the first release that requires at least This is the latest release where `homeassistant/home-assistant` is based on Debian. In followup of [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), we replace the image with the Alpine based Hass.io Images. You don't need to change your setup if you use that image without modification; otherwise, it could be that you need to update your commands. +Recent we improve the Docker environment for Hass.io with a Wheels backend and other feature and the cap grow between the spare maintained Debian image and the full maintained Hass.io images. We Focus us now to one Docker build backend and don't want to fragment our resources. + ## Reload scenes from configuration.yaml Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track the effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681). From 0e17482f738887c116a7c12372da8306a0900c6f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 7 Aug 2019 10:45:27 -0700 Subject: [PATCH 70/73] Things --- source/_components/fortios.markdown | 2 +- .../{suez.markdown => suez_water.markdown} | 0 source/_posts/2019-08-07-release-97.markdown | 191 +++++++++++++----- .../images/blog/2019-08-0.97/components.png | Bin 0 -> 72884 bytes 4 files changed, 146 insertions(+), 47 deletions(-) rename source/_components/{suez.markdown => suez_water.markdown} (100%) create mode 100644 source/images/blog/2019-08-0.97/components.png diff --git a/source/_components/fortios.markdown b/source/_components/fortios.markdown index e74f7c3a6cc..404f369cc8e 100644 --- a/source/_components/fortios.markdown +++ b/source/_components/fortios.markdown @@ -1,7 +1,7 @@ --- title: "Device Tracker FortiOS" description: "Instructions on how to use Fortinet FortiOS to track devices in Home Assistant." -logo: fortinet.png +logo: fortinet.jpg ha_category: - Presence Detection ha_release: 0.97 diff --git a/source/_components/suez.markdown b/source/_components/suez_water.markdown similarity index 100% rename from source/_components/suez.markdown rename to source/_components/suez_water.markdown diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 94424dc414d..6e5238c3b0a 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.97: XXX - UPDATE DATE" -description: "XXXX" -date: 2019-08-06 19:11:03 +title: "0.97: Apache Kafka, Fortigate, Twente Milieu" +description: "Core config and configuration.yaml tools have been split up and a new reload scenes service has been introduced." +date: 2019-08-07 01:11:03 date_formatted: "August 7, 2019" author: Paulus Schoutsen author_twitter: balloob @@ -11,30 +11,36 @@ categories: Release-Notes og_image: /images/blog/2019-08-release-97/components.png --- - + + +It's time for Home Assistant 0.97! This has been a very busy release cycle as we have been fine tuning development. This will make it easier to maintain and contribute to Home Assistant in the future. ## Python 3.5 support has been dropped -As per previous announcements, this is the first release that requires at least Python 3.6. +As per previous announcements, this is the first release that requires at least Python 3.6. If you are on Hassbian and are planning to upgrade Python, please take note of the [known issues with the default wheel server](/blog/2019/07/19/piwheels/). ## Docker -This is the latest release where `homeassistant/home-assistant` is based on Debian. In followup of [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), we replace the image with the Alpine based Hass.io Images. You don't need to change your setup if you use that image without modification; otherwise, it could be that you need to update your commands. +This is the latest release where our Docker image `homeassistant/home-assistant` is based on Debian. As decided in [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), the image will now be based on Alpine Linux starting with the next release. This will be the same Home Assistant image that powers Hass.io. You don't need to change anything unless you were installing Debian packages or making any other changes to the running container. In that case you'll need to find the Alpine equivalent of whatever you were doing. Recent we improve the Docker environment for Hass.io with a Wheels backend and other feature and the cap grow between the spare maintained Debian image and the full maintained Hass.io images. We Focus us now to one Docker build backend and don't want to fragment our resources. ## Reload scenes from configuration.yaml -Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track the effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681). +Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track this effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681). ## Home Assistant Cast In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. [Read the announcement for more information.](/blog/2019/08/06/home-assistant-cast/) +

+Picture of a Google Nest Hub with the Home Assistant UI on it. +

+ ## UI changes -- Improved accessibility. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible for visually impaired users. -- Split out configuration.yaml actions fron core config into a new server control config panel. Thanks [@IcyPalm] +- Improved accessibility for visually impaired users. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible. +- Split out configuration.yaml actions from core config into a new server control config panel. Thanks [@IcyPalm] - Markdown card will now have size + 1 if it has a header defined. Some layouts might move around due to this. [@icypalm]: https://www.github.com/IcyPalm/ @@ -43,7 +49,9 @@ In case you missed the announcement, we released Home Assistant Cast yesterday. Frenck wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/) how to make a $2 smart doorbell using Home Assistant and ESPHome. -https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assistant/ +Aaron created a great tutorial explaining how to add an [interactive 3D floorplan to Home Assistant](https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assistant/). + +We wrote about how we use Azure DevOps to automate the development of Home Assistant. [Check the developer blog](https://developers.home-assistant.io/blog/2019/07/19/building-all-the-things.html). [@jimz011] has updated his amazing Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-97-x-compatible-massive-update/117086). Preview below. @@ -61,18 +69,10 @@ https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assis - Add Fortigate integration ([@kifeo] - [#24908]) ([fortigate docs]) (new-integration) - Add support for Rainforest Eagle-200 ([@gtdiehl] - [#24919]) ([rainforest_eagle docs]) (new-integration) - Add Elgato Avea integration ([@pattyland] - [#24281]) ([avea docs]) (new-integration) (new-platform) -- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) (new-platform) +- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) - Add new device tracker supporting Fortinet FortiGate ([@kimfrellsen] - [#23078]) ([fortios docs]) (new-integration) (new-platform) - Add De Lijn (Flemish Public Transport) component ([@bollewolle] - [#24265]) ([delijn docs]) (new-integration) (new-platform) - -## New Platforms - - Add Support for VeSync Devices - Outlets and Switches ([@webdjoe] - [#24953]) ([vesync docs]) (new-platform) -- Add Elgato Avea integration ([@pattyland] - [#24281]) ([avea docs]) (new-integration) (new-platform) -- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) (new-platform) -- Add new device tracker supporting Fortinet FortiGate ([@kimfrellsen] - [#23078]) ([fortios docs]) (new-integration) (new-platform) -- Add De Lijn (Flemish Public Transport) component ([@bollewolle] - [#24265]) ([delijn docs]) (new-integration) (new-platform) -- Change how ring polls for changes to allow more platforms to be added ([@rossdargan] - [#25534]) ([ring docs]) (new-platform) ## If you need help... @@ -99,11 +99,12 @@ Experiencing issues introduced by this release? Please report them in our [issue - **RitAssist** - The company has been renamed from RitAssist to FleetGO, so this component needed to get renamed. Users of this integration will need to update their device_tracker config section to use the new name. ([@depl0y] - [#25093]) ([fleetgo docs]) ([ritassist docs]) - **N26** - Adds support for multiple N26 accounts. The generation of unique ids for spaces has been changed. Users may need to remove the stale old id entities, representing spaces, from the entity registry. ([@gorynychzmey] - [#25086]) ([n26 docs]) - **Environment Canada** - This change removes the `monitored_conditions` and `name` options and adds an optional `language` option. Sensors are now created for all provided data. ([@michaeldavie] - [#24884]) ([environment_canada docs]) -```yaml -sensor: - - platform: environment_canada - language: french -``` + + ```yaml + sensor: + - platform: environment_canada + language: french + ``` - **TotalConnect** - Total Connect Client was upgraded to support more than one alarm panel and allow future support for additional sensors. Previous `alarm_control_panel` entries must be removed, and a new totalconnect entry must be added to configuration.yaml. See https://www.home-assistant.io/components/totalconnect/ for configuration details. ([@austinmroczek] - [#24427]) ([totalconnect docs]) - **Nuki** - The `lock.nuki_unlatch` service has been removed. It has been replaced by the `lock.open` service. The `lock.nuki_lock_n_go` service has been renamed to `nuki.lock_n_go`. Users that are using the removed or renamed services in automations need to replace them with the new services. ([@franfos] - [#22888]) ([nuki docs]) @@ -140,6 +141,37 @@ sensor: - Due in -> due_in - Due at -> due_at +## Beta Fixes + +- Expose comfort presets as HA presets ([@balloob] - [#25491]) ([ecobee docs]) (breaking change) (beta fix) +- Fix handling of empty results from Rejseplanen ([@DarkFox] - [#25610]) ([rejseplanen docs]) (breaking change) (beta fix) +- bump quirks ([@dmulcahey] - [#25618]) ([zha docs]) (beta fix) +- Handle disabled devices ([@Kane610] - [#25625]) ([unifi docs]) (beta fix) +- Fix polling HomeKit devices with multiple services per accessory ([@Jc2k] - [#25629]) ([homekit_controller docs]) (beta fix) +- Meteofrance improve log error messages ([@oncleben31] - [#25630]) ([meteo_france docs]) (beta fix) +- Bump homekit_python to 0.15 ([@Jc2k] - [#25631]) ([homekit_controller docs]) (beta fix) +- Filter out empty results in history API ([@balloob] - [#25633]) ([history docs]) (beta fix) +- Upgrade hass-nabucasa to 0.16 ([@balloob] - [#25636]) ([cloud docs]) (beta fix) +- Feature zwave preset modes ([@Santobert] - [#25537]) ([climate docs]) ([zwave docs]) (beta fix) +- Add PRESET_AWAY to HomematicIP Cloud climate ([@SukramJ] - [#25641]) ([homematicip_cloud docs]) (beta fix) +- UniFi - allow configuration to not track clients or devices ([@Kane610] - [#25642]) ([unifi docs]) (beta fix) +- Add preset to be away and eco ([@balloob] - [#25643]) ([nest docs]) (beta fix) +- Revert flux_led to 0.89 ([@amelchio] - [#25653]) ([flux_led docs]) (beta fix) +- Options to not track wired clients ([@Kane610] - [#25669]) ([unifi docs]) (beta fix) +- Fix issue with incorrect Notion bridge IDs ([@bachya] - [#25683]) ([notion docs]) (beta fix) +- In some circumstances device.last_seen can be None ([@Kane610] - [#25690]) ([unifi docs]) (beta fix) +- UniFi - reverse connectivity logic ([@Kane610] - [#25691]) ([unifi docs]) (beta fix) +- Fix roku lxml requirement ([@pvizeli] - [#25696]) ([roku docs]) (beta fix) +- Add HmIP-SCI to Homematic IP Cloud, Fix HmIP-SWDM ([@SukramJ] - [#25639]) ([homematicip_cloud docs]) (beta fix) +- Bump envoy_reader to 0.8.6, fix missing dependency ([@jesserizzo] - [#25679]) ([enphase_envoy docs]) (beta fix) +- Add service to reload scenes from configuration.yaml ([@balloob] - [#25680]) ([homeassistant docs]) ([scene docs]) (beta fix) +- Update HTTP defaults ([@balloob] - [#25702]) ([http docs]) (beta fix) +- UniFi - handle device not having a name ([@Kane610] - [#25713]) ([unifi docs]) (beta fix) +- Bump hdate==0.9.0 (use pytz instead of dateutil) ([@tsvi] - [#25726]) ([jewish_calendar docs]) (beta fix) +- initial commit ([@zxdavb] - [#25731]) ([incomfort docs]) (beta fix) +- Revert emulated hue changes ([@balloob] - [#25732]) ([emulated_hue docs]) (beta fix) +- Fix last seen not available on certain devices ([@Kane610] - [#25735]) ([unifi docs]) (beta fix) + ## All changes - Rewrite calendar component ([@MartinHjelmare] - [#24950]) ([caldav docs]) ([calendar docs]) ([demo docs]) ([google docs]) ([todoist docs]) (breaking change) @@ -196,7 +228,7 @@ sensor: - Add MQTT climate precision ([@PhilRW] - [#25265]) ([mqtt docs]) - Add services to set and remove Simplisafe PINs ([@bachya] - [#25207]) ([simplisafe docs]) - Multiroom support for snapcast ([@lyghtnox] - [#24061]) ([snapcast docs]) (breaking change) -- Avoid creating temporary lists ([@nierob] - [#25317]) ([climate docs]) ([device_automation docs]) ([device_tracker docs]) ([google_assistant docs]) ([media_player docs]) ([nextbus docs]) ([smartthings docs]) ([system_health docs]) +- Avoid creating temporary lists ([@nierob] - [#25317]) ([climate docs]) ([device_tracker docs]) ([google_assistant docs]) ([media_player docs]) ([nextbus docs]) ([smartthings docs]) ([system_health docs]) - Return Ambient PWS brightness sensor unit and remove CONF_MONITORED_CONDITIONS ([@bachya] - [#25284]) ([ambient_station docs]) (breaking change) - Ps4 reformat media data ([@ktnrg45] - [#25172]) ([ps4 docs]) - Fix missing Nachteule in mvglive component ([@9R] - [#25304]) ([mvglive docs]) @@ -234,7 +266,7 @@ sensor: - Add Elgato Avea integration ([@pattyland] - [#24281]) ([avea docs]) (new-integration) (new-platform) - Add area support to lock service schemas ([@bachya] - [#25435]) ([lock docs]) - Add area support to remote service schemas ([@bachya] - [#25437]) ([remote docs]) -- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) (new-platform) +- Suez water ([@ooii] - [#23844]) ([suez_water docs]) (new-integration) - Add new device tracker supporting Fortinet FortiGate ([@kimfrellsen] - [#23078]) ([fortios docs]) (new-integration) (new-platform) - Bump up ZHA dependencies. ([@Adminiuga] - [#25450]) ([zha docs]) - Add area support to media player service schemas ([@bachya] - [#25436]) ([media_player docs]) @@ -310,6 +342,34 @@ sensor: - Return history for entities in the order they were requested ([@thomasloven] - [#25560]) ([history docs]) - Python < 3.6 remainder cleanups ([@scop] - [#25607]) - Azure flake8 dep, docstring fixes ([@scop] - [#25605]) ([rejseplanen docs]) ([ring docs]) ([zha docs]) +- Expose comfort presets as HA presets ([@balloob] - [#25491]) ([ecobee docs]) (breaking change) (beta fix) +- Fix handling of empty results from Rejseplanen ([@DarkFox] - [#25610]) ([rejseplanen docs]) (breaking change) (beta fix) +- bump quirks ([@dmulcahey] - [#25618]) ([zha docs]) (beta fix) +- Handle disabled devices ([@Kane610] - [#25625]) ([unifi docs]) (beta fix) +- Fix polling HomeKit devices with multiple services per accessory ([@Jc2k] - [#25629]) ([homekit_controller docs]) (beta fix) +- Meteofrance improve log error messages ([@oncleben31] - [#25630]) ([meteo_france docs]) (beta fix) +- Bump homekit_python to 0.15 ([@Jc2k] - [#25631]) ([homekit_controller docs]) (beta fix) +- Filter out empty results in history API ([@balloob] - [#25633]) ([history docs]) (beta fix) +- Upgrade hass-nabucasa to 0.16 ([@balloob] - [#25636]) ([cloud docs]) (beta fix) +- Feature zwave preset modes ([@Santobert] - [#25537]) ([climate docs]) ([zwave docs]) (beta fix) +- Add PRESET_AWAY to HomematicIP Cloud climate ([@SukramJ] - [#25641]) ([homematicip_cloud docs]) (beta fix) +- UniFi - allow configuration to not track clients or devices ([@Kane610] - [#25642]) ([unifi docs]) (beta fix) +- Add preset to be away and eco ([@balloob] - [#25643]) ([nest docs]) (beta fix) +- Revert flux_led to 0.89 ([@amelchio] - [#25653]) ([flux_led docs]) (beta fix) +- Options to not track wired clients ([@Kane610] - [#25669]) ([unifi docs]) (beta fix) +- Fix issue with incorrect Notion bridge IDs ([@bachya] - [#25683]) ([notion docs]) (beta fix) +- In some circumstances device.last_seen can be None ([@Kane610] - [#25690]) ([unifi docs]) (beta fix) +- UniFi - reverse connectivity logic ([@Kane610] - [#25691]) ([unifi docs]) (beta fix) +- Fix roku lxml requirement ([@pvizeli] - [#25696]) ([roku docs]) (beta fix) +- Add HmIP-SCI to Homematic IP Cloud, Fix HmIP-SWDM ([@SukramJ] - [#25639]) ([homematicip_cloud docs]) (beta fix) +- Bump envoy_reader to 0.8.6, fix missing dependency ([@jesserizzo] - [#25679]) ([enphase_envoy docs]) (beta fix) +- Add service to reload scenes from configuration.yaml ([@balloob] - [#25680]) ([homeassistant docs]) ([scene docs]) (beta fix) +- Update HTTP defaults ([@balloob] - [#25702]) ([http docs]) (beta fix) +- UniFi - handle device not having a name ([@Kane610] - [#25713]) ([unifi docs]) (beta fix) +- Bump hdate==0.9.0 (use pytz instead of dateutil) ([@tsvi] - [#25726]) ([jewish_calendar docs]) (beta fix) +- initial commit ([@zxdavb] - [#25731]) ([incomfort docs]) (beta fix) +- Revert emulated hue changes ([@balloob] - [#25732]) ([emulated_hue docs]) (beta fix) +- Fix last seen not available on certain devices ([@Kane610] - [#25735]) ([unifi docs]) (beta fix) [#22701]: https://github.com/home-assistant/home-assistant/pull/22701 [#22888]: https://github.com/home-assistant/home-assistant/pull/22888 @@ -436,6 +496,7 @@ sensor: [#25475]: https://github.com/home-assistant/home-assistant/pull/25475 [#25478]: https://github.com/home-assistant/home-assistant/pull/25478 [#25485]: https://github.com/home-assistant/home-assistant/pull/25485 +[#25491]: https://github.com/home-assistant/home-assistant/pull/25491 [#25497]: https://github.com/home-assistant/home-assistant/pull/25497 [#25498]: https://github.com/home-assistant/home-assistant/pull/25498 [#25500]: https://github.com/home-assistant/home-assistant/pull/25500 @@ -451,6 +512,7 @@ sensor: [#25529]: https://github.com/home-assistant/home-assistant/pull/25529 [#25532]: https://github.com/home-assistant/home-assistant/pull/25532 [#25534]: https://github.com/home-assistant/home-assistant/pull/25534 +[#25537]: https://github.com/home-assistant/home-assistant/pull/25537 [#25540]: https://github.com/home-assistant/home-assistant/pull/25540 [#25543]: https://github.com/home-assistant/home-assistant/pull/25543 [#25545]: https://github.com/home-assistant/home-assistant/pull/25545 @@ -479,24 +541,50 @@ sensor: [#25602]: https://github.com/home-assistant/home-assistant/pull/25602 [#25605]: https://github.com/home-assistant/home-assistant/pull/25605 [#25607]: https://github.com/home-assistant/home-assistant/pull/25607 -[@9r]: https://github.com/9R -[@adminiuga]: https://github.com/Adminiuga -[@anglac]: https://github.com/Anglac -[@bouni]: https://github.com/Bouni -[@cereal2nd]: https://github.com/Cereal2nd -[@christiankuehnel]: https://github.com/ChristianKuehnel -[@danielhiversen]: https://github.com/Danielhiversen -[@darkfox]: https://github.com/DarkFox -[@frederikbolding]: https://github.com/FrederikBolding -[@jc2k]: https://github.com/Jc2k -[@jongilmore]: https://github.com/JonGilmore -[@kane610]: https://github.com/Kane610 -[@martinhjelmare]: https://github.com/MartinHjelmare -[@philrw]: https://github.com/PhilRW -[@quentame]: https://github.com/Quentame -[@santobert]: https://github.com/Santobert -[@sukramj]: https://github.com/SukramJ -[@yarikx]: https://github.com/Yarikx +[#25610]: https://github.com/home-assistant/home-assistant/pull/25610 +[#25618]: https://github.com/home-assistant/home-assistant/pull/25618 +[#25625]: https://github.com/home-assistant/home-assistant/pull/25625 +[#25629]: https://github.com/home-assistant/home-assistant/pull/25629 +[#25630]: https://github.com/home-assistant/home-assistant/pull/25630 +[#25631]: https://github.com/home-assistant/home-assistant/pull/25631 +[#25633]: https://github.com/home-assistant/home-assistant/pull/25633 +[#25636]: https://github.com/home-assistant/home-assistant/pull/25636 +[#25639]: https://github.com/home-assistant/home-assistant/pull/25639 +[#25641]: https://github.com/home-assistant/home-assistant/pull/25641 +[#25642]: https://github.com/home-assistant/home-assistant/pull/25642 +[#25643]: https://github.com/home-assistant/home-assistant/pull/25643 +[#25653]: https://github.com/home-assistant/home-assistant/pull/25653 +[#25669]: https://github.com/home-assistant/home-assistant/pull/25669 +[#25679]: https://github.com/home-assistant/home-assistant/pull/25679 +[#25680]: https://github.com/home-assistant/home-assistant/pull/25680 +[#25683]: https://github.com/home-assistant/home-assistant/pull/25683 +[#25690]: https://github.com/home-assistant/home-assistant/pull/25690 +[#25691]: https://github.com/home-assistant/home-assistant/pull/25691 +[#25696]: https://github.com/home-assistant/home-assistant/pull/25696 +[#25702]: https://github.com/home-assistant/home-assistant/pull/25702 +[#25713]: https://github.com/home-assistant/home-assistant/pull/25713 +[#25726]: https://github.com/home-assistant/home-assistant/pull/25726 +[#25731]: https://github.com/home-assistant/home-assistant/pull/25731 +[#25732]: https://github.com/home-assistant/home-assistant/pull/25732 +[#25735]: https://github.com/home-assistant/home-assistant/pull/25735 +[@9R]: https://github.com/9R +[@Adminiuga]: https://github.com/Adminiuga +[@Anglac]: https://github.com/Anglac +[@Bouni]: https://github.com/Bouni +[@Cereal2nd]: https://github.com/Cereal2nd +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@Danielhiversen]: https://github.com/Danielhiversen +[@DarkFox]: https://github.com/DarkFox +[@FrederikBolding]: https://github.com/FrederikBolding +[@Jc2k]: https://github.com/Jc2k +[@JonGilmore]: https://github.com/JonGilmore +[@Kane610]: https://github.com/Kane610 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@PhilRW]: https://github.com/PhilRW +[@Quentame]: https://github.com/Quentame +[@Santobert]: https://github.com/Santobert +[@SukramJ]: https://github.com/SukramJ +[@Yarikx]: https://github.com/Yarikx [@adrum]: https://github.com/adrum [@alengwenus]: https://github.com/alengwenus [@amelchio]: https://github.com/amelchio @@ -516,6 +604,7 @@ sensor: [@croghostrider]: https://github.com/croghostrider [@definitio]: https://github.com/definitio [@depl0y]: https://github.com/depl0y +[@dmulcahey]: https://github.com/dmulcahey [@dshokouhi]: https://github.com/dshokouhi [@dwradcliffe]: https://github.com/dwradcliffe [@elupus]: https://github.com/elupus @@ -530,6 +619,7 @@ sensor: [@gorynychzmey]: https://github.com/gorynychzmey [@gtdiehl]: https://github.com/gtdiehl [@iamtpage]: https://github.com/iamtpage +[@jesserizzo]: https://github.com/jesserizzo [@keesschollaart81]: https://github.com/keesschollaart81 [@kifeo]: https://github.com/kifeo [@kimfrellsen]: https://github.com/kimfrellsen @@ -560,7 +650,8 @@ sensor: [@tetienne]: https://github.com/tetienne [@thomasgermain]: https://github.com/thomasgermain [@thomasloven]: https://github.com/thomasloven -[@tofuschnitzel]: https://github.com/tofuSCHNITZEL +[@tofuSCHNITZEL]: https://github.com/tofuSCHNITZEL +[@tsvi]: https://github.com/tsvi [@webdjoe]: https://github.com/webdjoe [@xt16johnny]: https://github.com/xt16johnny [@yeralin]: https://github.com/yeralin @@ -577,6 +668,7 @@ sensor: [calendar docs]: /components/calendar/ [cisco_mobility_express docs]: /components/cisco_mobility_express/ [climate docs]: /components/climate/ +[cloud docs]: /components/cloud/ [counter docs]: /components/counter/ [cover docs]: /components/cover/ [daikin docs]: /components/daikin/ @@ -584,11 +676,12 @@ sensor: [deconz docs]: /components/deconz/ [delijn docs]: /components/delijn/ [demo docs]: /components/demo/ -[device_automation docs]: /components/device_automation/ [device_tracker docs]: /components/device_tracker/ [discord docs]: /components/discord/ +[ecobee docs]: /components/ecobee/ [elkm1 docs]: /components/elkm1/ [emulated_hue docs]: /components/emulated_hue/ +[enphase_envoy docs]: /components/enphase_envoy/ [environment_canada docs]: /components/environment_canada/ [evohome docs]: /components/evohome/ [fan docs]: /components/fan/ @@ -604,6 +697,7 @@ sensor: [group docs]: /components/group/ [history docs]: /components/history/ [hive docs]: /components/hive/ +[homeassistant docs]: /components/homeassistant/ [homekit docs]: /components/homekit/ [homekit_controller docs]: /components/homekit_controller/ [homematicip_cloud docs]: /components/homematicip_cloud/ @@ -612,12 +706,14 @@ sensor: [http docs]: /components/http/ [huawei_lte docs]: /components/huawei_lte/ [image_processing docs]: /components/image_processing/ +[incomfort docs]: /components/incomfort/ [input_boolean docs]: /components/input_boolean/ [input_datetime docs]: /components/input_datetime/ [input_number docs]: /components/input_number/ [input_select docs]: /components/input_select/ [input_text docs]: /components/input_text/ [insteon docs]: /components/insteon/ +[jewish_calendar docs]: /components/jewish_calendar/ [knx docs]: /components/knx/ [lcn docs]: /components/lcn/ [lock docs]: /components/lock/ @@ -627,14 +723,17 @@ sensor: [mastodon docs]: /components/mastodon/ [media_extractor docs]: /components/media_extractor/ [media_player docs]: /components/media_player/ +[meteo_france docs]: /components/meteo_france/ [mikrotik docs]: /components/mikrotik/ [mqtt docs]: /components/mqtt/ [mvglive docs]: /components/mvglive/ [n26 docs]: /components/n26/ [neato docs]: /components/neato/ +[nest docs]: /components/nest/ [netatmo docs]: /components/netatmo/ [netgear_lte docs]: /components/netgear_lte/ [nextbus docs]: /components/nextbus/ +[notion docs]: /components/notion/ [nuki docs]: /components/nuki/ [opensensemap docs]: /components/opensensemap/ [pioneer docs]: /components/pioneer/ diff --git a/source/images/blog/2019-08-0.97/components.png b/source/images/blog/2019-08-0.97/components.png new file mode 100644 index 0000000000000000000000000000000000000000..4888b9c99e7b186882af87f25b8d3406c100b5fc GIT binary patch literal 72884 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%0Ds~LdC9xh_h8}~n=m@j` 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 dO-ZD1Nes)5*Xr~v)*>Q&`Z`A16 Date: Wed, 7 Aug 2019 10:51:11 -0700 Subject: [PATCH 71/73] Tweaks --- source/_posts/2019-08-07-release-97.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 6e5238c3b0a..ac6b6c890d5 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -21,9 +21,9 @@ As per previous announcements, this is the first release that requires at least ## Docker -This is the latest release where our Docker image `homeassistant/home-assistant` is based on Debian. As decided in [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), the image will now be based on Alpine Linux starting with the next release. This will be the same Home Assistant image that powers Hass.io. You don't need to change anything unless you were installing Debian packages or making any other changes to the running container. In that case you'll need to find the Alpine equivalent of whatever you were doing. +This is the latest release for which our Docker image `homeassistant/home-assistant` is based on Debian. As decided in [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), the image will now be based on Alpine Linux starting with the next release. This will be the same Home Assistant image that powers Hass.io. You don't need to change anything unless you were installing Debian packages or making any other changes to the running container. In that case you'll need to find the Alpine equivalent of whatever you were doing. -Recent we improve the Docker environment for Hass.io with a Wheels backend and other feature and the cap grow between the spare maintained Debian image and the full maintained Hass.io images. We Focus us now to one Docker build backend and don't want to fragment our resources. +The main driver behind this change is that by re-using images, maintenance will be easier and users of the `homeassistant/home-assistant` image can benefit of the many optimizations that went into the hass.io images. ## Reload scenes from configuration.yaml From b115b7c2d873c8842a7e8bc84b42db0cc69bc663 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 7 Aug 2019 10:59:07 -0700 Subject: [PATCH 72/73] Add cast links --- source/_lovelace/entities.markdown | 30 ++++++++++++++++++++ source/_posts/2019-08-07-release-97.markdown | 1 + 2 files changed, 31 insertions(+) diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index fa561811b48..1a386e2cb0b 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -94,6 +94,36 @@ service_data: type: map {% endconfiguration %} +### Cast + +Special row to start Home Assistant Cast. + +{% configuration %} +type: + required: true + description: cast + type: string +view: + required: true + description: Path to the view that needs to be shown. + type: string +name: + required: false + description: Name to show in the row + type: string + default: Home Assistant Cast +icon: + required: false + description: Icon to use + type: string + default: `hass:television` +hide_if_unavailable: + required: false + description: Hide this row if casting is not available in the browser. + type: boolean + default: false +{% endconfiguration %} + ### Divider {% configuration %} diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index ac6b6c890d5..3d843148765 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -39,6 +39,7 @@ In case you missed the announcement, we released Home Assistant Cast yesterday. ## UI changes +- [New Cast row available](/lovelace/entities/#cast) in the Lovelace entities card to start Home Assistant Cast. - Improved accessibility for visually impaired users. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible. - Split out configuration.yaml actions from core config into a new server control config panel. Thanks [@IcyPalm] - Markdown card will now have size + 1 if it has a header defined. Some layouts might move around due to this. From f2a8542d360fddf4bec57b5a48dadb0cfdba9158 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 7 Aug 2019 20:23:12 +0200 Subject: [PATCH 73/73] :pencil2: Tweaks --- source/_posts/2019-08-07-release-97.markdown | 28 +++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/source/_posts/2019-08-07-release-97.markdown b/source/_posts/2019-08-07-release-97.markdown index 3d843148765..c11ccf3b83e 100644 --- a/source/_posts/2019-08-07-release-97.markdown +++ b/source/_posts/2019-08-07-release-97.markdown @@ -13,7 +13,7 @@ og_image: /images/blog/2019-08-release-97/components.png -It's time for Home Assistant 0.97! This has been a very busy release cycle as we have been fine tuning development. This will make it easier to maintain and contribute to Home Assistant in the future. +It's time for Home Assistant 0.97! It has been a very busy release cycle as we have been fine-tuning our development process, which makes it easier to maintain and contribute to Home Assistant in the future. ## Python 3.5 support has been dropped @@ -21,40 +21,44 @@ As per previous announcements, this is the first release that requires at least ## Docker -This is the latest release for which our Docker image `homeassistant/home-assistant` is based on Debian. As decided in [ADR006 Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), the image will now be based on Alpine Linux starting with the next release. This will be the same Home Assistant image that powers Hass.io. You don't need to change anything unless you were installing Debian packages or making any other changes to the running container. In that case you'll need to find the Alpine equivalent of whatever you were doing. +This is the last release that bases our Home Assistant Docker image (`homeassistant/home-assistant`) on Debian. As decided in [Architecture Decision Record 0006: Docker Images](https://github.com/home-assistant/architecture/blob/master/adr/0006-docker-images.md), the image will be based on Alpine Linux starting with the 0.98 release. These new Docker images will be running same the Home Assistant Docker image that powers Hass.io. You don't need to change anything unless you have installed Debian packages manually or made any other changes to the running container. However, if that is the case, you'll need to find the Alpine equivalent of whatever you were doing. -The main driver behind this change is that by re-using images, maintenance will be easier and users of the `homeassistant/home-assistant` image can benefit of the many optimizations that went into the hass.io images. +The main driver behind this change is that by re-using images, maintenance becomes easier, and users of the `homeassistant/home-assistant` image can benefit from the many optimizations that went into the Hass.io images. -## Reload scenes from configuration.yaml +## Reload scenes from `configuration.yaml` -Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track this effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681). +Thanks to [@balloob] it is now possible to reload scenes from `configuration.yaml` without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first-class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track this effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681). ## Home Assistant Cast -In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. [Read the announcement for more information.](/blog/2019/08/06/home-assistant-cast/) +In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. [Read the announcement for more information.](/blog/2019/08/06/home-assistant-cast/).

Picture of a Google Nest Hub with the Home Assistant UI on it.

+Home Assistant Cast opens a whole new world of possibilities for using Lovelace, and we are really excited to learn what cool things you will do with it! If you created something, feel free to share it on social media using the `#homeassistantcast` hash-tag. We are looking forward to your pictures! + ## UI changes +This release contains a couple of notable UI changes: + - [New Cast row available](/lovelace/entities/#cast) in the Lovelace entities card to start Home Assistant Cast. - Improved accessibility for visually impaired users. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible. -- Split out configuration.yaml actions from core config into a new server control config panel. Thanks [@IcyPalm] -- Markdown card will now have size + 1 if it has a header defined. Some layouts might move around due to this. +- Split out `configuration.yaml` actions from the core configuration into a new server control config panel. Thanks [@IcyPalm] +- Markdown card now has a size + 1, if it has a header defined. Some layouts might be moved around due to this. [@icypalm]: https://www.github.com/IcyPalm/ ## In other news -Frenck wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/) how to make a $2 smart doorbell using Home Assistant and ESPHome. +[Frenck](https://github.com/frenck) wrote [an excellent blog post](https://frenck.dev/diy-smart-doorbell-for-just-2-dollar/) on how to make a $2 smart doorbell using Home Assistant and ESPHome, which doesn't require soldering. -Aaron created a great tutorial explaining how to add an [interactive 3D floorplan to Home Assistant](https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assistant/). +[Aaron](https://github.com/boralyl) created a great and detailed tutorial explaining how to add an [interactive 3D floorplan to Home Assistant](https://aarongodfrey.dev/home%20automation/creating-a-3d-floorplan-in-home-assistant/). -We wrote about how we use Azure DevOps to automate the development of Home Assistant. [Check the developer blog](https://developers.home-assistant.io/blog/2019/07/19/building-all-the-things.html). +We wrote about how we use Azure DevOps to automate the development of Home Assistant. Interested to see how Home Assistant is automatically build? [Check the developer blog](https://developers.home-assistant.io/blog/2019/07/19/building-all-the-things.html). -[@jimz011] has updated his amazing Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-97-x-compatible-massive-update/117086). Preview below. +[@jimz011] has updated his amazing, HomeKit inspired, Lovelace config and shared it [on the forums](https://community.home-assistant.io/t/homekit-inspired-lovelace-by-jimz011-august-2019-ha-0-97-x-compatible-massive-update/117086). Sneak preview on how it looks: [@jimz011]: https://github.com/jimz011