From 932b3075397c73ca1581d1d2ed3d958702bc7cd4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 6 Feb 2019 16:40:57 -0800 Subject: [PATCH 01/19] Stub for 88 --- _config.yml | 4 ++-- source/_posts/2019-02-20-release-88.markdown | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 source/_posts/2019-02-20-release-88.markdown diff --git a/_config.yml b/_config.yml index bbe95b287f0..1998a724ff0 100644 --- a/_config.yml +++ b/_config.yml @@ -143,9 +143,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 87 +current_minor_version: 88 current_patch_version: 0 -date_released: 2019-02-06 +date_released: 2019-02-20 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown new file mode 100644 index 00000000000..bac985bfe45 --- /dev/null +++ b/source/_posts/2019-02-20-release-88.markdown @@ -0,0 +1,19 @@ +--- +layout: post +title: "0.88: TODO - UPDATE DATE." +description: "TO DO" +date: 2019-02-06 00:11:03 +date_formatted: "February 20, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-02-release-88/smartthings.png +--- + + + +Command line auth provider + +Person component + From 869245e0454e75602190ea9ed1906c45acc01da8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 13 Feb 2019 20:49:01 -0800 Subject: [PATCH 02/19] Add LL note --- source/_posts/2019-02-20-release-88.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index 126ff58ffd1..039f5a57835 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -18,7 +18,7 @@ Command line auth provider Person component - +Note for Lovelace custom card developers: if you relied on the availability of `` in your code, you will have to update it to `` to work like before. ## {% linkable_title New Platforms %} From 11c580d37729429a88654308c1b0d450e68cf258 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 13 Feb 2019 20:59:51 -0800 Subject: [PATCH 03/19] Update date --- source/_posts/2019-02-20-release-88.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index 039f5a57835..744088d8da9 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -2,7 +2,7 @@ layout: post title: "0.88: TODO - UPDATE DATE." description: "TO DO" -date: 2019-02-06 00:11:03 +date: 2019-02-13 00:11:03 date_formatted: "February 20, 2019" author: Paulus Schoutsen author_twitter: balloob From 3274e7127e08f44c3f2c0845c9cae6ba309b9960 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 13 Feb 2019 21:03:02 -0800 Subject: [PATCH 04/19] Highlight noteworthy breaking changes --- source/_posts/2019-02-20-release-88.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index 744088d8da9..57a575889a5 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -18,8 +18,14 @@ Command line auth provider Person component +## {% linkable_title Noteworthy breaking changes %} + +We have tightened config validation. Platform configuration will no longer allow to contain keys that are not supported. This should help with finding typos in your current and future YAML. + Note for Lovelace custom card developers: if you relied on the availability of `` in your code, you will have to update it to `` to work like before. +Note for custom component developers: We are moving to a new file structure. Platforms now live embedded in components. Custom platforms will have to be updated to follow this pattern. This is a breaking change in case your custom platform overrides a built-in platform. Rename your custom platform from, ie `light/hue.py` to `hue/light.py`. + ## {% linkable_title New Platforms %} - Split googlehome to a component with device tracker platform ([@ludeeus] - [#19971]) ([device_tracker docs]) ([googlehome docs]) (breaking change) (new-platform) From e9c3cedc0a7cb4c5debc690919c44093ab1232a3 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Thu, 14 Feb 2019 14:39:09 -0500 Subject: [PATCH 05/19] Added templates to Bayesian sensor (#8408) * Added templates to Bayesian sensor * change quotes * more changes * Added raw/endraw tags --- .../binary_sensor.bayesian.markdown | 65 +++++++++++++------ 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/source/_components/binary_sensor.bayesian.markdown b/source/_components/binary_sensor.bayesian.markdown index 6154fbaa1f2..81424f7d666 100644 --- a/source/_components/binary_sensor.bayesian.markdown +++ b/source/_components/binary_sensor.bayesian.markdown @@ -57,10 +57,21 @@ observations: required: true type: list keys: - entity_id: - description: Name of the entity to monitor. + platform: + description: > + The supported platforms are `state`, `numeric_state`, and `template`. + They are modeled after their corresponding triggers for automations, + requiring `to_state` (for `state`), `below` and/or `above` (for `numeric_state`) and `value_template` (for `template`). required: true type: string + entity_id: + description: Name of the entity to monitor. + required: true (for `state` and `numeric_state`) + type: string + value_template: + description: Defines the template to be used. + required: true (for `template`) + type: template prob_given_true: description: The probability of the observation occurring, given the event is `true`. required: true @@ -70,17 +81,10 @@ observations: required: false type: float default: "`1 - prob_given_true` if `prob_given_false` is not set" - platform: - description: > - The only supported observation platforms are `state` and `numeric_state`, - which are modeled after their corresponding triggers for automations, - requiring `below` and/or `above` instead of `to_state`. - required: true - type: string to_state: description: The target state. - required: true - type: string + required: true (for `state`) + type: string {% endconfiguration %} ## {% linkable_title Full examples %} @@ -95,23 +99,23 @@ binary_sensor: prior: 0.25 probability_threshold: 0.95 observations: - - entity_id: 'sensor.living_room_motion' + - platform: 'state' + entity_id: 'sensor.living_room_motion' prob_given_true: 0.4 prob_given_false: 0.2 - platform: 'state' to_state: 'off' - - entity_id: 'sensor.basement_motion' + - platform: 'state' + entity_id: 'sensor.basement_motion' prob_given_true: 0.5 prob_given_false: 0.4 - platform: 'state' to_state: 'off' - - entity_id: 'sensor.bedroom_motion' + - platform: 'state' + entity_id: 'sensor.bedroom_motion' prob_given_true: 0.5 - platform: 'state' to_state: 'on' - - entity_id: 'sun.sun' + - platform: 'state' + entity_id: 'sun.sun' prob_given_true: 0.7 - platform: 'state' to_state: 'below_horizon' ``` @@ -126,8 +130,27 @@ binary_sensor: prior: 0.2 probability_threshold: 0.9 observations: - - entity_id: 'sensor.outside_air_temperature_fahrenheit' + - platform: 'numeric_state' + entity_id: 'sensor.outside_air_temperature_fahrenheit' prob_given_true: 0.95 - platform: 'numeric_state' below: 50 ``` + +Finally, here's an example for `template` observation platform, +as seen in the configuration it requires `value_template` and does not use `entity_id`. + +{% raw %} +```yaml +# Example configuration.yaml entry +binary_sensor: + name: 'Paulus Home' + platform: 'bayesian' + prior: 0.5 + probability_threshold: 0.9 + observations: + - platform: template + value_template: > + {{is_state('device_tracker.paulus','not_home') and ((as_timestamp(now()) - as_timestamp(states.device_tracker.paulus.last_changed)) > 300)}} + prob_given_true: 0.95 +``` +{% endraw %} From e183ac151849d7f81355c60b8848f2b54c70e0c3 Mon Sep 17 00:00:00 2001 From: Ryan Wagoner <8441200+rwagoner@users.noreply.github.com> Date: Thu, 14 Feb 2019 14:39:31 -0500 Subject: [PATCH 06/19] Add night arm mode to MQTT alarm control panel (#8471) --- source/_components/alarm_control_panel.mqtt.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/alarm_control_panel.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index f563e6eeaeb..f084ef7d17a 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -20,6 +20,7 @@ The component will accept the following states from your Alarm Panel (in lower c - `disarmed` - `armed_home` - `armed_away` +- 'armed_night' - `pending` - `triggered` @@ -75,6 +76,11 @@ payload_arm_away: required: false type: string default: ARM_AWAY +payload_arm_night: + description: The payload to set armed-night mode on your Alarm Panel. + required: false + type: string + default: ARM_NIGHT code: description: If defined, specifies a code to enable or disable the alarm in the frontend. required: false From 5a3144e8ff657405024fcea590cb2a853d3b87d9 Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Thu, 14 Feb 2019 03:26:34 -0600 Subject: [PATCH 07/19] Add SmartThings Lock platform docs (#8493) --- source/_components/smartthings.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/smartthings.markdown b/source/_components/smartthings.markdown index 33ae99bb977..2df31934330 100644 --- a/source/_components/smartthings.markdown +++ b/source/_components/smartthings.markdown @@ -15,6 +15,7 @@ ha_category: - Climate - Fan - Light + - Lock - Sensor - Switch ha_release: "0.87" @@ -28,6 +29,8 @@ redirect_from: - /components/fan.smartthings/ - /components/smartthings.light/ - /components/light.smartthings/ + - /components/smartthings.lock/ + - /components/lock.smartthings/ - /components/smartthings.sensor/ - /components/sensor.smartthings/ - /components/smartthings.switch/ @@ -113,6 +116,7 @@ SmartThings represents devices as a set of [capabilities](https://smartthings.de - [Climate](#climate) - [Fan](#fan) - [Light](#light) +- [Lock](#lock) - [Sensor](#sensor) - [Switch](#switch) @@ -166,6 +170,10 @@ The SmartThings Light platform lets you control devices that have light-related | [`colorControl`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Color-Control) | `color` | [`colorTemperature`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Color-Temperature) | `color_temp` +### {% linkable_title Lock %} + +The SmartThings Lock platform lets you control devices that have the [`lock`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Lock) capability, showing current lock status and supporting lock and unlock commands. + ### {% linkable_title Sensor %} The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device. From 5f9012a039646504edd966249892336960bbd1ca Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Thu, 14 Feb 2019 19:05:59 +0100 Subject: [PATCH 08/19] Example fix (#8576) --- source/_components/speedtestdotnet.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/speedtestdotnet.markdown b/source/_components/speedtestdotnet.markdown index 25da80f840e..f4898d452a1 100644 --- a/source/_components/speedtestdotnet.markdown +++ b/source/_components/speedtestdotnet.markdown @@ -111,13 +111,13 @@ Every half hour of every day: ```yaml # Example configuration.yaml entry -speedtest: +speedtestdotnet: update_interval: minutes: 30 - monitored_conditions: - - ping - - download - - upload + monitored_conditions: + - ping + - download + - upload ``` ### {% linkable_title Using as a trigger in an automation %} From 9fb7eb80c5ba8bea411d5f3ba419b0a433f9066d Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Mon, 18 Feb 2019 11:23:56 -0800 Subject: [PATCH 09/19] Deprecate conf_update_interval (#8603) --- source/_components/fastdotcom.markdown | 10 +++++----- source/_components/freedns.markdown | 2 +- source/_components/sensor.broadlink.markdown | 6 +++--- source/_components/sensor.darksky.markdown | 6 +++--- source/_components/sensor.fedex.markdown | 8 ++++---- source/_components/sensor.ups.markdown | 8 ++++---- source/_components/snips.markdown | 2 +- source/_components/speedtestdotnet.markdown | 10 +++++----- source/_components/tellduslive.markdown | 8 ++++---- 9 files changed, 30 insertions(+), 30 deletions(-) diff --git a/source/_components/fastdotcom.markdown b/source/_components/fastdotcom.markdown index c665142808b..6a9f1c32aa7 100644 --- a/source/_components/fastdotcom.markdown +++ b/source/_components/fastdotcom.markdown @@ -26,7 +26,7 @@ Currently fast.com only supports measuring download bandwidth. If you want to me Enabling this component will automatically create the Fast.com Sensor. -By default, a speed test will be run every hour. The user can change the update frequency in the configuration by defining the `update_interval` for a speed test to run. +By default, a speed test will be run every hour. The user can change the update frequency in the configuration by defining the `scan_interval` for a speed test to run. ## {% linkable_title Configuration %} @@ -42,13 +42,13 @@ Every half hour of every day: ```yaml fastdotcom: - update_interval: + scan_interval: minutes: 30 ``` {% configuration %} -update_interval: - description: "Minimum time interval between updates. Supported formats: `update_interval: 'HH:MM:SS'`, `update_interval: 'HH:MM'` and Time period dictionary (see example below)." +scan_interval: + description: "Minimum time interval between updates. Supported formats: `scan_interval: 'HH:MM:SS'`, `scan_interval: 'HH:MM'` and Time period dictionary (see example below)." required: false default: 60 minutes type: time @@ -62,7 +62,7 @@ manual: #### {% linkable_title Time period dictionary example %} ```yaml -update_interval: +scan_interval: # At least one of these must be specified: days: 0 hours: 0 diff --git a/source/_components/freedns.markdown b/source/_components/freedns.markdown index 0f128208110..73c2160c7a9 100644 --- a/source/_components/freedns.markdown +++ b/source/_components/freedns.markdown @@ -44,7 +44,7 @@ freedns: description: The full update URL. This is exclusive to `access_token`. required: false type: string - update_interval: + scan_interval: description: How often to call the update service. required: false type: time period diff --git a/source/_components/sensor.broadlink.markdown b/source/_components/sensor.broadlink.markdown index 4688cf2aa03..2b8e534ef30 100644 --- a/source/_components/sensor.broadlink.markdown +++ b/source/_components/sensor.broadlink.markdown @@ -33,7 +33,7 @@ Configuration options: - **host** (*Required*): The hostname/IP address to connect to. - **mac** (*Required*): Device mac address. - **name** (*Optional*): Default BL. Sensor name -- **update_interval** (*Optional*): Time in seconds to fetch data from sensors. Default 300. +- **scan_interval** (*Optional*): Time in seconds to fetch data from sensors. Default 300. - **timeout** (*Optional*): Timeout in seconds for the connection to the device. - **monitored_conditions** array (*Required*): States to monitor. - 'temperature' @@ -49,7 +49,7 @@ Obtain sensor data from an A1: ```yaml sensor: - platform: broadlink - update_interval: 60 + scan_interval: 60 host: IP_ADDRESS mac: 'MAC_ADDRESS' monitored_conditions: @@ -65,7 +65,7 @@ Obtain temperature data from an RM2: ```yaml sensor: - platform: broadlink - update_interval: 60 + scan_interval: 60 host: IP_ADDRESS mac: 'MAC_ADDRESS' monitored_conditions: diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index bedf4fe225f..71f7d10f668 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -143,8 +143,8 @@ units: required: false default: "`si` or `us`, based on the temperature preference in Home Assistant." type: string -update_interval: - description: "Minimum time interval between updates. Supported formats: `update_interval: 'HH:MM:SS'`, `update_interval: 'HH:MM'` and Time period dictionary (see example below)." +scan_interval: + description: "Minimum time interval between updates. Supported formats: `scan_interval: 'HH:MM:SS'`, `scan_interval: 'HH:MM'` and Time period dictionary (see example below)." required: false default: 2 minutes type: time @@ -153,7 +153,7 @@ update_interval: #### {% linkable_title Time period dictionary example %} ```yaml -update_interval: +scan_interval: # At least one of these must be specified: days: 0 hours: 0 diff --git a/source/_components/sensor.fedex.markdown b/source/_components/sensor.fedex.markdown index 00e8a6c1b62..d19e870756f 100644 --- a/source/_components/sensor.fedex.markdown +++ b/source/_components/sensor.fedex.markdown @@ -32,11 +32,11 @@ Configuration options for the FedEx Sensor: - **username** (*Required*): The username to access the FedEx Delivery Manager service. - **password** (*Required*): The password for the given username. - **name** (*Optional*): Name the sensor. -- **update_inverval** (*Optional*): Minimum time interval between updates. Default is 1 hour. Supported formats: - - `update_interval: 'HH:MM:SS'` - - `update_interval: 'HH:MM'` +- **scan_inverval** (*Optional*): Minimum time interval between updates. Default is 1 hour. Supported formats: + - `scan_interval: 'HH:MM:SS'` + - `scan_interval: 'HH:MM'` - Time period dictionary, e.g.: -
update_interval:
+    
scan_interval:
         # At least one of these must be specified:
         days: 0
         hours: 0
diff --git a/source/_components/sensor.ups.markdown b/source/_components/sensor.ups.markdown
index 0c78dac2067..2b57a0e2663 100644
--- a/source/_components/sensor.ups.markdown
+++ b/source/_components/sensor.ups.markdown
@@ -32,11 +32,11 @@ Configuration options for the UPS Sensor:
 - **username** (*Required*): The username to access the UPS My Choice service.
 - **password** (*Required*): The password for the given username.
 - **name** (*Optional*): Name the sensor.
-- **update_inverval** (*Optional*): Minimum time interval between updates. Default is 1 hour. Supported formats:
-  - `update_interval: 'HH:MM:SS'`
-  - `update_interval: 'HH:MM'`
+- **scan_inverval** (*Optional*): Minimum time interval between updates. Default is 1 hour. Supported formats:
+  - `scan_interval: 'HH:MM:SS'`
+  - `scan_interval: 'HH:MM'`
   - Time period dictionary, e.g.:
-    
update_interval:
+    
scan_interval:
         # At least one of these must be specified:
         days: 0
         hours: 0
diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown
index edb894e6e1d..3b3be76e9e0 100644
--- a/source/_components/snips.markdown
+++ b/source/_components/snips.markdown
@@ -277,7 +277,7 @@ So now you can open and close your garage door, let's check the weather. Add the
 - platform: darksky
   name: "Dark Sky Weather"
   api_key: !secret dark_sky_key
-  update_interval:
+  scan_interval:
     minutes: 10
   monitored_conditions:
     - summary
diff --git a/source/_components/speedtestdotnet.markdown b/source/_components/speedtestdotnet.markdown
index f4898d452a1..a6386845bb3 100644
--- a/source/_components/speedtestdotnet.markdown
+++ b/source/_components/speedtestdotnet.markdown
@@ -23,7 +23,7 @@ The `speedtestdotnet` component uses the [Speedtest.net](https://speedtest.net/)
 
 Enabling this component will automatically create the Speedtest.net Sensors for the monitored conditions (below).
 
-By default, a speed test will be run every hour. The user can change the update frequency in the configuration by defining the `update_interval` for a speed test to run.
+By default, a speed test will be run every hour. The user can change the update frequency in the configuration by defining the `scan_interval` for a speed test to run.
 
 ## {% linkable_title Configuration %}
 
@@ -56,8 +56,8 @@ speedtestdotnet:
     description: Specify the speed test server to perform the test against.
     required: false
     type: integer
-  update_interval:
-    description: "Minimum time interval between updates. Supported formats: `update_interval: 'HH:MM:SS'`, `update_interval: 'HH:MM'` and Time period dictionary (see example below)."
+  scan_interval:
+    description: "Minimum time interval between updates. Supported formats: `scan_interval: 'HH:MM:SS'`, `scan_interval: 'HH:MM'` and Time period dictionary (see example below)."
     required: false
     default: 60 minutes
     type: time
@@ -72,7 +72,7 @@ speedtestdotnet:
 #### {% linkable_title Time period dictionary example %}
 
 ```yaml
-update_interval:
+scan_interval:
   # At least one of these must be specified:
   days: 0
   hours: 0
@@ -112,7 +112,7 @@ Every half hour of every day:
 ```yaml
 # Example configuration.yaml entry
 speedtestdotnet:
-  update_interval:
+  scan_interval:
     minutes: 30
   monitored_conditions:
     - ping
diff --git a/source/_components/tellduslive.markdown b/source/_components/tellduslive.markdown
index 665f8845199..266cef58007 100644
--- a/source/_components/tellduslive.markdown
+++ b/source/_components/tellduslive.markdown
@@ -8,7 +8,7 @@ comments: false
 sharing: true
 footer: true
 logo: tellduslive.svg
-ha_category: 
+ha_category:
   - Hub
   - Binary Sensor
   - Cover
@@ -50,15 +50,15 @@ host:
   description: Host address to Tellstick Net or Tellstick ZNet for Local API, only useful when automatic discovery is not enabled.
   required: false
   type: string
-update_interval:
+scan_interval:
   description: Interval (in seconds) for polling the Telldus Live server (or the local server).
   required: false
   type: integer
   default: 60
 {% endconfiguration %}
 
-

-It is only possible to configure the `update_interval` when setting up the device. If the polling interval needs to be changed after the device is configured it must be changed manually by changing `"scan_interval": 60,` for the device in the file `.storage/core.config_entries`. +

+It is only possible to configure the `scan_interval` when setting up the device. If the polling interval needs to be changed after the device is configured it must be changed manually by changing `"scan_interval": 60,` for the device in the file `.storage/core.config_entries`.

The component will offer configuration through the Home Assistant user interface where it will let you associate it with your Telldus Live account. From 7305ab92a21e480a511f04f50ccb5b27374bdbae Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Sun, 17 Feb 2019 04:28:24 -0600 Subject: [PATCH 10/19] Add SmartThings troubleshooting steps and demo video (#8609) * Add troubleshooting and fan video * Minor changes --- source/_components/smartthings.markdown | 64 ++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/source/_components/smartthings.markdown b/source/_components/smartthings.markdown index 2df31934330..60de6c4f629 100644 --- a/source/_components/smartthings.markdown +++ b/source/_components/smartthings.markdown @@ -44,6 +44,13 @@ Samsung SmartThings is integrated into Home Assistant through the SmartThings Cl 3. Support for multiple SmartThings accounts and locations, each represented as a unique integration in the front-end configuration. 4. No brokers, bridges, or additional dependencies. +See it in action, with a step-by-step setup guide, thanks to a fan! (v0.87 featured): + +
+ +
+ + ## {% linkable_title Basic requirements %} 1. A [personal access token](https://account.smartthings.com/tokens) tied to a Samsung or SmartThings account (see below for instructions). @@ -83,6 +90,8 @@ The SmartThings component is configured exclusively through the front-end. Manua Advanced: If you have multiple locations in SmartThings, each can be integrated into Home Assistant. Follow the steps above, then for each subsequent location, install the SmartApp and it will automatically add to Home Assistant. This can be completed during step 3 (install SmartApp) above or at any time after that.

+See the [troubleshooting](#troubleshooting) if you are having issues setting up the integration. + ## {% linkable_title Events %} The SmartThings component triggers events for select device capabilities. @@ -109,6 +118,8 @@ The component will trigger an event when a device with the [button](https://smar `value` | Describes the action taken on the button. See the [button](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Button) capability reference for a list of possible values (not all are supported by every device). `name` | The name given to the device in SmartThings. +Event data payloads are logged at the debug level, see [debugging](#debugging) for more information. + ## {% linkable_title Platforms %} SmartThings represents devices as a set of [capabilities](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html) and the SmartThings component maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms. @@ -237,4 +248,55 @@ The SmartThings Sensor platform lets your view devices that have sensor-related ### {% linkable_title Switch %} -The SmartThings Switch platform lets you control devices that have the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability that are not already represented by a more specific platform. \ No newline at end of file +The SmartThings Switch platform lets you control devices that have the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability that are not already represented by a more specific platform. + +## {% linkable_title Troubleshooting %} + +### {% linkable_title Setup %} + +Perform the following steps if you receive one of the following error messages while attempting to setup the integration: + +- "SmartThings could not validate the endpoint configured in base_url. Please review the component requirements." +- "Unable to setup the SmartApp. Please try again." + +#### {% linkable_title Checklist %} + +1. Ensure `base_url` is properly set to the _external address_ that Home Assistant is available to the internet. SmartThings must be able to reach this address. +1. Validate there are no problems with your certificate or SSL configuration by using an online checker, such as [https://www.digicert.com/help/](https://www.digicert.com/help/). +1. Some reverse proxy configuration settings can interfere with communication from SmartThings. For example, TLSv1.3 is not supported. Setting the supported cipher suite too restrictly will prevent handshaking. The following NGINX SSL configuration is known to work: + ```nginx + # cert.crt also contains intermediate certificates + ssl_certificate /path/to/cert.crt; + ssl_certificate_key /path/to/cert.key; + ssl_dhparam /path/to/dhparam.pem; + ssl_protocols TLSv1.2; + ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; + ssl_prefer_server_ciphers on; + ssl_ecdh_curve secp384r1; + ssl_session_timeout 10m; + ssl_session_cache shared:SSL:10m; + ssl_session_tickets off; + ``` +1. While the error message (above) is being displayed, run the following command from outside your local network to confirm it is responding to the ping lifecycle event: + ```bash + curl -X POST https://{BASE_URL}/api/webhook/{WEBHOOK_ID} -H "Content-Type: application/json; charset=utf-8" -d $'{"lifecycle": "PING", "executionId": "00000000-0000-0000-0000-000000000000", "locale": "en", "version": "1.0.0", "pingData": { "challenge": "00000000-0000-0000-0000-000000000000"}}' + ``` + Where `{BASE_URL}` is your external address and `{WEBHOOK_ID}` is the value of `webhook_id` from `.storage/smartthings` in your Home Assistant configuration directory. + + The expected response is: + ```bash + {"pingData": {"challenge": "00000000-0000-0000-0000-000000000000"}} + ``` + +If you have completed the checklist above and are still unable to setup the platform, [activate debug logging](#debugging) for the SmartThings component and include the log messages up until the point of failure in [a new issue](https://github.com/home-assistant/home-assistant/issues). + +### {% linkable_title Debugging %} + +The SmartThings component will log additional information about push updates received, events fired, and other messages when the log level is set to `debug`. Add the the relevent line below to the `configuration.yaml`: + +```yaml +logger: + default: info + logs: + homeassistant.components.smartthings: debug +``` From 820577c04ff22446b896a8626726d5693346374c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 19 Feb 2019 10:43:20 -0800 Subject: [PATCH 11/19] Update notes --- source/_posts/2019-02-20-release-88.markdown | 97 ++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index 57a575889a5..bf7f0485d7b 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -83,6 +83,35 @@ Experiencing issues introduced by this release? Please report them in our [issue - Make monitored_conditions more specific in Ambient PWS ([@bachya] - [#20803]) ([ambient_station docs]) (breaking change) - Use CONF_RECIPIENT for default recipient in config ([@rohankapoorcom] - [#20925]) ([tplink_lte docs]) (breaking change) - Update ZHA API to be device oriented ([@dmulcahey] - [#20990]) ([zha docs]) (breaking change) +- Deprecate conf_update_interval ([@rohankapoorcom] - [#20924]) (breaking change) (beta fix) +- Return None if no GTFS departures found ([@renemarc] - [#20919]) ([sensor.gtfs docs]) (breaking change) (beta fix) +- Set aioharmony version to 0.1.8 ([@ehendrix23] - [#21213]) ([harmony docs]) (breaking change) (beta fix) + +## {% linkable_title Beta Fixes %} + +- Set ZHA device availability on new join ([@dmulcahey] - [#21066]) ([zha docs]) (beta fix) +- Set uvloop version consistent with hass.io ([@philhawthorne] - [#21080]) (beta fix) +- Check against unlinked user ([@balloob] - [#21081]) ([person docs]) (beta fix) +- Fix hue retry crash ([@balloob] - [#21083]) ([hue docs]) (beta fix) +- Update pychromecast ([@balloob] - [#21097]) ([cast docs]) (beta fix) +- Bump aioambient to 0.1.2 ([@bachya] - [#21098]) ([ambient_station docs]) (beta fix) +- Bump thermoworks_smoke version to get new pyrebase version ([@nhorvath] - [#21100]) ([sensor.thermoworks_smoke docs]) (beta fix) +- Don't expose services in Utility_Meter unless tariffs are available ([@dgomes] - [#20878]) ([utility_meter docs]) (beta fix) +- Deprecate conf_update_interval ([@rohankapoorcom] - [#20924]) (breaking change) (beta fix) +- Fix battery_level error - HomeKit ([@cdce8p] - [#21120]) ([homekit docs]) (beta fix) +- Handle ValueError ([@balloob] - [#21126]) ([person docs]) (beta fix) +- Bump pychromecast to 2.5.2 ([@balloob] - [#21127]) ([cast docs]) (beta fix) +- Return None if no GTFS departures found ([@renemarc] - [#20919]) ([sensor.gtfs docs]) (breaking change) (beta fix) +- SmartThings Component Enhancements/Fixes ([@andrewsayre] - [#21085]) ([smartthings docs]) (beta fix) +- Fix SmartThings Translation Error ([@andrewsayre] - [#21103]) ([smartthings docs]) (beta fix) +- Fix track_change error in utility_meter ([@dgomes] - [#21134]) ([utility_meter docs]) (beta fix) +- Update pyEight for Python 3.7 Compatability ([@mezz64] - [#21161]) ([eight_sleep docs]) (beta fix) +- Add power source to device and clean up zha listeners ([@dmulcahey] - [#21174]) ([zha docs]) (beta fix) +- Fix for #19072 ([@sjabby] - [#21175]) ([light.flux_led docs]) (beta fix) +- Upgrade aioimaplib for Python 3.7 compatibility ([@amelchio] - [#21197]) ([sensor.imap docs]) (beta fix) +- ordered by last occurence ([@dgomes] - [#21200]) ([system_log docs]) (beta fix) +- Set aioharmony version to 0.1.8 ([@ehendrix23] - [#21213]) ([harmony docs]) (breaking change) (beta fix) +- Push pyads to 3.0.7 ([@carstenschroeder] - [#21216]) ([ads docs]) (beta fix) ## {% linkable_title All changes %} @@ -91,6 +120,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add precision parameter to dsmr sensor ([@zumitnl] - [#19873]) ([sensor.dsmr docs]) - Split googlehome to a component with device tracker platform ([@ludeeus] - [#19971]) ([device_tracker docs]) ([googlehome docs]) (breaking change) (new-platform) - Move mqtt_mock to tests/components/mqtt/conftest.py ([@awarecan] - [#20621]) +- Revert #20611: code in Abode alarm panel ([@arsaboo] - [#20629]) ([alarm_control_panel.abode docs]) - Support for new velux api, added cover.velux ([@Julius2342] - [#18738]) ([velux docs]) ([cover.velux docs]) (breaking change) (new-feature) (new-platform) - Fix xiaomi default gateway in services ([@therve] - [#20623]) ([xiaomi_aqara docs]) - Fix sensor.cpuspeed inside docker container (#20614) ([@rohankapoorcom] - [#20656]) ([sensor.cpuspeed docs]) @@ -171,6 +201,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix coroutine never awaited warning in test ([@awarecan] - [#20892]) - Add some api tests for ZHA ([@dmulcahey] - [#20909]) - Missing Binary Sensor ([@dagobert] - [#20921]) ([homematic docs]) +- Fix encoding for MQTT camera ([@emontnemery] - [#20932]) ([mqtt docs]) - Fix RFLink restore state ([@javicalle] - [#20588]) ([rflink docs]) ([light.rflink docs]) - add fan support for spider thermostats ([@peternijssen] - [#20897]) ([spider docs]) (new-feature) - Add quirks info to ZHA device ([@dmulcahey] - [#20923]) ([zha docs]) (new-feature) @@ -209,6 +240,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Norway air quality ([@Danielhiversen] - [#20683]) ([sensor.norway_air docs]) ([weather.met docs]) (new-platform) - Fix Point does I/O in event loop ([@fredrike] - [#20939]) ([point docs]) - Add unique id to ADS platforms ([@carstenschroeder] - [#20511]) ([light.ads docs]) +- Upgrade cryptography to 2.5 ([@awarecan] - [#21011]) - Update ZHA API to be device oriented ([@dmulcahey] - [#20990]) ([zha docs]) (breaking change) - Update ordering ([@fabaff] - [#21013]) ([system_health docs]) - Prevent OverflowError in ESPHome integration ([@OttoWinter] - [#21014]) ([esphome docs]) @@ -218,6 +250,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - RFC: Embed platforms without component for remote component. ([@balloob] - [#20809]) ([demo docs]) ([harmony docs]) ([itach docs]) (new-platform) - Fix discovery of audio groups ([@emontnemery] - [#20947]) ([cast docs]) - Update entity state when ZHA device becomes available ([@dmulcahey] - [#20993]) ([zha docs]) +- Update co2signal==0.4.2 to fix #20805 ([@danielsjf] - [#21022]) ([sensor.co2signal docs]) - Add missing helpers ([@fabaff] - [#21021]) - Add lock config entry unload support. ([@andrewsayre] - [#21025]) ([lock docs]) - Bump aioambient to 0.1.1 ([@bachya] - [#21024]) ([ambient_station docs]) @@ -239,6 +272,29 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade ruamel.yaml to 0.15.88 ([@fabaff] - [#21055]) - Update file header ([@fabaff] - [#21054]) - Don't directly update config entries ([@balloob] - [#20877]) ([deconz docs]) ([homematicip_cloud docs]) ([hue docs]) ([unifi docs]) +- Set ZHA device availability on new join ([@dmulcahey] - [#21066]) ([zha docs]) (beta fix) +- Set uvloop version consistent with hass.io ([@philhawthorne] - [#21080]) (beta fix) +- Check against unlinked user ([@balloob] - [#21081]) ([person docs]) (beta fix) +- Fix hue retry crash ([@balloob] - [#21083]) ([hue docs]) (beta fix) +- Update pychromecast ([@balloob] - [#21097]) ([cast docs]) (beta fix) +- Bump aioambient to 0.1.2 ([@bachya] - [#21098]) ([ambient_station docs]) (beta fix) +- Bump thermoworks_smoke version to get new pyrebase version ([@nhorvath] - [#21100]) ([sensor.thermoworks_smoke docs]) (beta fix) +- Don't expose services in Utility_Meter unless tariffs are available ([@dgomes] - [#20878]) ([utility_meter docs]) (beta fix) +- Deprecate conf_update_interval ([@rohankapoorcom] - [#20924]) (breaking change) (beta fix) +- Fix battery_level error - HomeKit ([@cdce8p] - [#21120]) ([homekit docs]) (beta fix) +- Handle ValueError ([@balloob] - [#21126]) ([person docs]) (beta fix) +- Bump pychromecast to 2.5.2 ([@balloob] - [#21127]) ([cast docs]) (beta fix) +- Return None if no GTFS departures found ([@renemarc] - [#20919]) ([sensor.gtfs docs]) (breaking change) (beta fix) +- SmartThings Component Enhancements/Fixes ([@andrewsayre] - [#21085]) ([smartthings docs]) (beta fix) +- Fix SmartThings Translation Error ([@andrewsayre] - [#21103]) ([smartthings docs]) (beta fix) +- Fix track_change error in utility_meter ([@dgomes] - [#21134]) ([utility_meter docs]) (beta fix) +- Update pyEight for Python 3.7 Compatability ([@mezz64] - [#21161]) ([eight_sleep docs]) (beta fix) +- Add power source to device and clean up zha listeners ([@dmulcahey] - [#21174]) ([zha docs]) (beta fix) +- Fix for #19072 ([@sjabby] - [#21175]) ([light.flux_led docs]) (beta fix) +- Upgrade aioimaplib for Python 3.7 compatibility ([@amelchio] - [#21197]) ([sensor.imap docs]) (beta fix) +- ordered by last occurence ([@dgomes] - [#21200]) ([system_log docs]) (beta fix) +- Set aioharmony version to 0.1.8 ([@ehendrix23] - [#21213]) ([harmony docs]) (breaking change) (beta fix) +- Push pyads to 3.0.7 ([@carstenschroeder] - [#21216]) ([ads docs]) (beta fix) [#18700]: https://github.com/home-assistant/home-assistant/pull/18700 [#18738]: https://github.com/home-assistant/home-assistant/pull/18738 @@ -270,6 +326,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#20621]: https://github.com/home-assistant/home-assistant/pull/20621 [#20623]: https://github.com/home-assistant/home-assistant/pull/20623 [#20625]: https://github.com/home-assistant/home-assistant/pull/20625 +[#20629]: https://github.com/home-assistant/home-assistant/pull/20629 [#20634]: https://github.com/home-assistant/home-assistant/pull/20634 [#20635]: https://github.com/home-assistant/home-assistant/pull/20635 [#20650]: https://github.com/home-assistant/home-assistant/pull/20650 @@ -337,6 +394,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#20874]: https://github.com/home-assistant/home-assistant/pull/20874 [#20876]: https://github.com/home-assistant/home-assistant/pull/20876 [#20877]: https://github.com/home-assistant/home-assistant/pull/20877 +[#20878]: https://github.com/home-assistant/home-assistant/pull/20878 [#20880]: https://github.com/home-assistant/home-assistant/pull/20880 [#20883]: https://github.com/home-assistant/home-assistant/pull/20883 [#20887]: https://github.com/home-assistant/home-assistant/pull/20887 @@ -348,10 +406,13 @@ Experiencing issues introduced by this release? Please report them in our [issue [#20909]: https://github.com/home-assistant/home-assistant/pull/20909 [#20910]: https://github.com/home-assistant/home-assistant/pull/20910 [#20915]: https://github.com/home-assistant/home-assistant/pull/20915 +[#20919]: https://github.com/home-assistant/home-assistant/pull/20919 [#20921]: https://github.com/home-assistant/home-assistant/pull/20921 [#20923]: https://github.com/home-assistant/home-assistant/pull/20923 +[#20924]: https://github.com/home-assistant/home-assistant/pull/20924 [#20925]: https://github.com/home-assistant/home-assistant/pull/20925 [#20929]: https://github.com/home-assistant/home-assistant/pull/20929 +[#20932]: https://github.com/home-assistant/home-assistant/pull/20932 [#20937]: https://github.com/home-assistant/home-assistant/pull/20937 [#20938]: https://github.com/home-assistant/home-assistant/pull/20938 [#20939]: https://github.com/home-assistant/home-assistant/pull/20939 @@ -373,12 +434,14 @@ Experiencing issues introduced by this release? Please report them in our [issue [#20993]: https://github.com/home-assistant/home-assistant/pull/20993 [#20998]: https://github.com/home-assistant/home-assistant/pull/20998 [#21008]: https://github.com/home-assistant/home-assistant/pull/21008 +[#21011]: https://github.com/home-assistant/home-assistant/pull/21011 [#21013]: https://github.com/home-assistant/home-assistant/pull/21013 [#21014]: https://github.com/home-assistant/home-assistant/pull/21014 [#21015]: https://github.com/home-assistant/home-assistant/pull/21015 [#21016]: https://github.com/home-assistant/home-assistant/pull/21016 [#21020]: https://github.com/home-assistant/home-assistant/pull/21020 [#21021]: https://github.com/home-assistant/home-assistant/pull/21021 +[#21022]: https://github.com/home-assistant/home-assistant/pull/21022 [#21023]: https://github.com/home-assistant/home-assistant/pull/21023 [#21024]: https://github.com/home-assistant/home-assistant/pull/21024 [#21025]: https://github.com/home-assistant/home-assistant/pull/21025 @@ -393,6 +456,26 @@ Experiencing issues introduced by this release? Please report them in our [issue [#21056]: https://github.com/home-assistant/home-assistant/pull/21056 [#21057]: https://github.com/home-assistant/home-assistant/pull/21057 [#21058]: https://github.com/home-assistant/home-assistant/pull/21058 +[#21066]: https://github.com/home-assistant/home-assistant/pull/21066 +[#21080]: https://github.com/home-assistant/home-assistant/pull/21080 +[#21081]: https://github.com/home-assistant/home-assistant/pull/21081 +[#21083]: https://github.com/home-assistant/home-assistant/pull/21083 +[#21085]: https://github.com/home-assistant/home-assistant/pull/21085 +[#21097]: https://github.com/home-assistant/home-assistant/pull/21097 +[#21098]: https://github.com/home-assistant/home-assistant/pull/21098 +[#21100]: https://github.com/home-assistant/home-assistant/pull/21100 +[#21103]: https://github.com/home-assistant/home-assistant/pull/21103 +[#21120]: https://github.com/home-assistant/home-assistant/pull/21120 +[#21126]: https://github.com/home-assistant/home-assistant/pull/21126 +[#21127]: https://github.com/home-assistant/home-assistant/pull/21127 +[#21134]: https://github.com/home-assistant/home-assistant/pull/21134 +[#21161]: https://github.com/home-assistant/home-assistant/pull/21161 +[#21174]: https://github.com/home-assistant/home-assistant/pull/21174 +[#21175]: https://github.com/home-assistant/home-assistant/pull/21175 +[#21197]: https://github.com/home-assistant/home-assistant/pull/21197 +[#21200]: https://github.com/home-assistant/home-assistant/pull/21200 +[#21213]: https://github.com/home-assistant/home-assistant/pull/21213 +[#21216]: https://github.com/home-assistant/home-assistant/pull/21216 [@CrazYoshi]: https://github.com/CrazYoshi [@Danielhiversen]: https://github.com/Danielhiversen [@JeffLIrion]: https://github.com/JeffLIrion @@ -410,6 +493,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@Xiol]: https://github.com/Xiol [@aerialls]: https://github.com/aerialls [@akinomeroglu]: https://github.com/akinomeroglu +[@amelchio]: https://github.com/amelchio [@andrewsayre]: https://github.com/andrewsayre [@arigilder]: https://github.com/arigilder [@arsaboo]: https://github.com/arsaboo @@ -420,11 +504,14 @@ Experiencing issues introduced by this release? Please report them in our [issue [@benvm]: https://github.com/benvm [@boralyl]: https://github.com/boralyl [@carstenschroeder]: https://github.com/carstenschroeder +[@cdce8p]: https://github.com/cdce8p [@cisasteelersfan]: https://github.com/cisasteelersfan [@dagobert]: https://github.com/dagobert +[@danielsjf]: https://github.com/danielsjf [@dgomes]: https://github.com/dgomes [@dmulcahey]: https://github.com/dmulcahey [@efficiosoft]: https://github.com/efficiosoft +[@ehendrix23]: https://github.com/ehendrix23 [@eliseomartelli]: https://github.com/eliseomartelli [@elupus]: https://github.com/elupus [@emontnemery]: https://github.com/emontnemery @@ -437,13 +524,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [@ludeeus]: https://github.com/ludeeus [@markusressel]: https://github.com/markusressel [@marvin-w]: https://github.com/marvin-w +[@mezz64]: https://github.com/mezz64 [@microraptor]: https://github.com/microraptor [@mw-white]: https://github.com/mw-white [@mxworm]: https://github.com/mxworm [@nd-net]: https://github.com/nd-net +[@nhorvath]: https://github.com/nhorvath [@notgwj]: https://github.com/notgwj [@pc-coholic]: https://github.com/pc-coholic [@peternijssen]: https://github.com/peternijssen +[@philhawthorne]: https://github.com/philhawthorne [@pszafer]: https://github.com/pszafer [@ptc]: https://github.com/ptc [@rbflurry]: https://github.com/rbflurry @@ -452,6 +542,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@rwagoner]: https://github.com/rwagoner [@scarface-4711]: https://github.com/scarface-4711 [@scop]: https://github.com/scop +[@sjabby]: https://github.com/sjabby [@therve]: https://github.com/therve [@timmo001]: https://github.com/timmo001 [@timvancann]: https://github.com/timvancann @@ -462,6 +553,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [abode docs]: /components/abode/ [ads docs]: /components/ads/ [air_quality docs]: /components/air_quality/ +[alarm_control_panel.abode docs]: /components/alarm_control_panel.abode/ [alarmdecoder docs]: /components/alarmdecoder/ [ambient_station docs]: /components/ambient_station/ [amcrest docs]: /components/amcrest/ @@ -483,6 +575,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [demo docs]: /components/demo/ [device_tracker docs]: /components/device_tracker/ [ebusd docs]: /components/ebusd/ +[eight_sleep docs]: /components/eight_sleep/ [emulated_hue docs]: /components/emulated_hue/ [esphome docs]: /components/esphome/ [fastdotcom docs]: /components/fastdotcom/ @@ -525,6 +618,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [rflink docs]: /components/rflink/ [script docs]: /components/script/ [sensor.ambient_station docs]: /components/sensor.ambient_station/ +[sensor.co2signal docs]: /components/sensor.co2signal/ [sensor.cpuspeed docs]: /components/sensor.cpuspeed/ [sensor.darksky docs]: /components/sensor.darksky/ [sensor.dsmr docs]: /components/sensor.dsmr/ @@ -532,6 +626,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.fastdotcom docs]: /components/sensor.fastdotcom/ [sensor.github docs]: /components/sensor.github/ [sensor.gtfs docs]: /components/sensor.gtfs/ +[sensor.imap docs]: /components/sensor.imap/ [sensor.integration docs]: /components/sensor.integration/ [sensor.jewish_calendar docs]: /components/sensor.jewish_calendar/ [sensor.miflora docs]: /components/sensor.miflora/ @@ -542,6 +637,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.speedtestdotnet docs]: /components/sensor.speedtestdotnet/ [sensor.sql docs]: /components/sensor.sql/ [sensor.ted5000 docs]: /components/sensor.ted5000/ +[sensor.thermoworks_smoke docs]: /components/sensor.thermoworks_smoke/ [sensor.xs1 docs]: /components/sensor.xs1/ [smartthings docs]: /components/smartthings/ [smhi docs]: /components/smhi/ @@ -560,6 +656,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [transmission docs]: /components/transmission/ [unifi docs]: /components/unifi/ [updater docs]: /components/updater/ +[utility_meter docs]: /components/utility_meter/ [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [velux docs]: /components/velux/ [weather.met docs]: /components/weather.met/ From aa3ca2e7f812440feefc4113df7f5f71f919692c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 19 Feb 2019 11:29:39 -0800 Subject: [PATCH 12/19] fix dead links --- source/_components/default_config.markdown | 16 ++++++++++++++++ source/_components/ebusd.markdown | 6 ++++-- .../{weather.ipma.markdown => ipma.markdown} | 2 ++ source/_components/velux.markdown | 1 + source/_components/xs1.markdown | 10 +++++++--- 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 source/_components/default_config.markdown rename source/_components/{weather.ipma.markdown => ipma.markdown} (96%) diff --git a/source/_components/default_config.markdown b/source/_components/default_config.markdown new file mode 100644 index 00000000000..852d8803c6e --- /dev/null +++ b/source/_components/default_config.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "Default Config" +description: "The default config component will initate a default configuration for Home Assistant." +date: 2019-02-15 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Other +ha_release: 0.88 +featured: false +--- + +This component is a meta-component and configures a default set of components for Home Assistant to load. The components that will be loaded can be found [here](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/default_config/__init__.py). diff --git a/source/_components/ebusd.markdown b/source/_components/ebusd.markdown index fcc02daa8e6..b203e051d0a 100644 --- a/source/_components/ebusd.markdown +++ b/source/_components/ebusd.markdown @@ -11,6 +11,8 @@ logo: ebusd.png ha_category: Sensor ha_iot_class: "Local Polling" ha_release: "0.88" +redirect_from: + - /components/sensor.ebusd/ --- Integration between [ebusd](https://github.com/john30/ebusd/) daemon for communication with eBUS heating systems, and Home Assistant using sensor component. @@ -31,7 +33,7 @@ host: description: This is the IP address of your ebus daemon, e.g., `127.0.0.1`. required: true type: string -circuit: +circuit: description: The heating circuit name to monitor, e.g., 700. required: true type: string @@ -40,7 +42,7 @@ port: type: integer required: false default: 8888 -name: +name: description: The name to use when displaying this ebusd instance. type: string required: false diff --git a/source/_components/weather.ipma.markdown b/source/_components/ipma.markdown similarity index 96% rename from source/_components/weather.ipma.markdown rename to source/_components/ipma.markdown index 68f4cf67a88..943650cf320 100644 --- a/source/_components/weather.ipma.markdown +++ b/source/_components/ipma.markdown @@ -11,6 +11,8 @@ logo: ipma.png ha_category: Weather ha_release: 0.72 ha_iot_class: "Cloud Polling" +redirect_from: + - /components/weather.ipma/ --- The `ipma` weather platform uses the [Instituto Português do Mar e Atmosfera](http://www.ipma.pt) as a source for current and forecast meteorological data. diff --git a/source/_components/velux.markdown b/source/_components/velux.markdown index 68468b6b08d..af87b167cd1 100644 --- a/source/_components/velux.markdown +++ b/source/_components/velux.markdown @@ -15,6 +15,7 @@ ha_release: 0.49 ha_iot_class: "Local Polling" redirect_from: - /components/scene.velux/ + - /components/cover.velux/ --- [Velux](http://www.velux.com) integration for Home Assistant allows you to connect to a Velux KLF 200 interface, to control [io-homecontrol](http://www.io-homecontrol.com) devices like windows and blinds. The module allows you to start scenes configured within KLF 200. diff --git a/source/_components/xs1.markdown b/source/_components/xs1.markdown index 1bf230dbb3b..99951e6ae2c 100644 --- a/source/_components/xs1.markdown +++ b/source/_components/xs1.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: xs1.jpg -ha_category: +ha_category: - Hub - Climate - Sensor @@ -16,6 +16,10 @@ ha_category: ha_release: 0.88 featured: false ha_iot_class: "Local Polling" +redirect_from: + - /components/climate.xs1/ + - /components/sensor.xs1/ + - /components/switch.xs1/ --- The [EZcontrol XS1](http://www.ezcontrol.de/content/view/36/28/) integration for Home Assistant allows you to observe and control devices configured on the XS1 Gateway. Please have a look at the official docs for using this gateway [Bedienungsanleitung v3.0.0.0](http://www.ezcontrol.de/support/downloads/XS1/xs1manual/Bedienungsanleitung_EZcontrol_XS1_3.0.0.0-2.pdf). @@ -78,8 +82,8 @@ If you are using climate devices the "current temp" sensor will be automatically | `switch` | Yes | | | `dimmer` | Partly | Dimmers are currently handled like switches so actual dimming is not supported :(| | `temperature` | Yes | | - - + + ### {% linkable_title Climate Actuator/Sensor%} Home Assistant can combine temperature sensors and climate actuators into a single device. The XS1 gateway does not allow this, but a sensor and actuator can be configured separately. To make Home Assistant register them in the same climate device just prefix the **sensor** name with the actuator name on the XS1 gateway configuration, f.ex: From 106978639e9ba0c9db94c119688fb42086e57779 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 19 Feb 2019 17:38:28 -0800 Subject: [PATCH 13/19] Update person.markdown --- source/_components/person.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/person.markdown b/source/_components/person.markdown index 079178bde58..9d8dc3fcaf2 100644 --- a/source/_components/person.markdown +++ b/source/_components/person.markdown @@ -15,9 +15,11 @@ ha_release: 0.88 The person component allows to connect device tracker entities to one or more person entities. The last state update of a connected device tracker will set the state of the person. Eg if you connect your router and your owntracks device as trackers to your person, the last state update from either the router or your owntracks device will set the state of your person. -## {% linkable_title Configuring the `person` component %} +You can manage persons via the UI from the person page inside the configuration panel. -To get started add the following lines to your `configuration.yaml`: +## {% linkable_title Configuring the `person` component via YAML %} + +If you prefer YAML, you can also configure your persons via `configuration.yaml`: ```yaml # Example configuration.yaml entry From 7e6eb246ad9d471bf418f5e986efde99f3ef4486 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Feb 2019 09:41:15 -0800 Subject: [PATCH 14/19] Move harmony to component doc --- source/_components/{remote.harmony.markdown => harmony.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_components/{remote.harmony.markdown => harmony.markdown} (100%) diff --git a/source/_components/remote.harmony.markdown b/source/_components/harmony.markdown similarity index 100% rename from source/_components/remote.harmony.markdown rename to source/_components/harmony.markdown From 806816337f829cf1eef660be541e7defb25afc80 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Feb 2019 10:03:00 -0800 Subject: [PATCH 15/19] Add more blog post --- source/_posts/2019-02-20-release-88.markdown | 42 ++++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index bf7f0485d7b..7054d1e8901 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.88: TODO - UPDATE DATE." -description: "TO DO" -date: 2019-02-13 00:11:03 +title: "0.88: Persons, Command line auth and event subscriptions" +description: "Happy new release day to all of you! Great features, solid bug fixes and performance gains." +date: 2019-02-20 00:11:03 date_formatted: "February 20, 2019" author: Paulus Schoutsen author_twitter: balloob @@ -13,18 +13,21 @@ og_image: /images/blog/2019-02-release-88/smartthings.png -Command line auth provider +This release introduces a new [person component][person docs] thanks to [@MartinHjelmare]. With this component, Home Assistant can be set up to track the people in your home. Each person can be linked to a user and multiple device tracker entities. This release does basic device tracker state merging, which will be evolved in the future. Device trackers merging their own states will be phased out in favor of persons. You can configure persons via the config panel. To get started, add the person component to your configuration.yaml file: `person:`. If you want to automatically stay up to date with the latest default Home Assistant components, you can now also add `default_config:` to your config. -Person component +This release also extends the event dev tool to include an event debugger. It allows you to listen to core events and get them printend to the screen. This makes it easy to find the event data that your remote is sending out. +We also have a new command line auth provider. This will allow you to use a shell script to validate users logging in to the system. This gives a lot of flexibility. For example, you can now authenticate against LDAP. More info in [the documentation](/docs/authentication/providers/#command-line). + +[@andrewsayre] has been working hard on extending the SmartThings support. This release brings sensors and climate devices into the mix. Awesome! ## {% linkable_title Noteworthy breaking changes %} -We have tightened config validation. Platform configuration will no longer allow to contain keys that are not supported. This should help with finding typos in your current and future YAML. +We have tightened config validation, so expect a couple of new warnings. Platform configuration will no longer allow to contain keys that are not supported. This should help with finding typos in your current and future YAML configs. This will currently fallback to a warning and will become a full error in the future. -Note for Lovelace custom card developers: if you relied on the availability of `` in your code, you will have to update it to `` to work like before. +Note for Lovelace custom card developers: if you relied on the availability of `` in your code, you will have to update it to `` to get a similar component. -Note for custom component developers: We are moving to a new file structure. Platforms now live embedded in components. Custom platforms will have to be updated to follow this pattern. This is a breaking change in case your custom platform overrides a built-in platform. Rename your custom platform from, ie `light/hue.py` to `hue/light.py`. +Note for custom component developers: We are moving to a new file structure. More information on [our dev blog](https://developers.home-assistant.io/blog/2019/02/19/the-great-migration.html). ## {% linkable_title New Platforms %} @@ -37,7 +40,7 @@ Note for custom component developers: We are moving to a new file structure. Pla - GitHub Sensor ([@timmo001] - [#19561]) ([sensor.github docs]) (new-platform) - Fix binary sensor in Ambient PWS ([@bachya] - [#20801]) ([ambient_station docs]) (new-platform) - XS1 component ([@markusressel] - [#19115]) ([xs1 docs]) ([climate.xs1 docs]) ([sensor.xs1 docs]) ([switch.xs1 docs]) (new-platform) -- Add MVP person component ([@MartinHjelmare] - [#20290]) ([person docs]) (new-platform) +- Add person component ([@MartinHjelmare] - [#20290]) ([person docs]) (new-platform) - Add default_config component ([@balloob] - [#20799]) ([default_config docs]) ([script docs]) (new-platform) - Add SmartThings Sensor platform ([@andrewsayre] - [#20848]) ([smartthings docs]) (new-platform) - CoolMasterNet Climate platform ([@OnFreund] - [#20787]) ([climate.coolmaster docs]) (new-platform) @@ -45,8 +48,7 @@ Note for custom component developers: We are moving to a new file structure. Pla - Ebusd integration ([@CrazYoshi] - [#19607]) ([ebusd docs]) ([sensor.ebusd docs]) (new-platform) - Add SmartThings Climate platform ([@andrewsayre] - [#20963]) ([smartthings docs]) (new-platform) - Add Rejseplanen danish public transport sensor component ([@tomatpasser] - [#19885]) ([sensor.rejseplanen docs]) (new-platform) -- Norway air quality ([@Danielhiversen] - [#20683]) ([sensor.norway_air docs]) ([weather.met docs]) (new-platform) -- RFC: Embed platforms without component for remote component. ([@balloob] - [#20809]) ([demo docs]) ([harmony docs]) ([itach docs]) (new-platform) +- Norway air quality ([@Danielhiversen] - [#20683]) (new-platform) - Add Lock capability to SmartThings platform ([@bendews] - [#20977]) ([smartthings docs]) (new-platform) ## {% linkable_title New Features %} @@ -112,6 +114,9 @@ Experiencing issues introduced by this release? Please report them in our [issue - ordered by last occurence ([@dgomes] - [#21200]) ([system_log docs]) (beta fix) - Set aioharmony version to 0.1.8 ([@ehendrix23] - [#21213]) ([harmony docs]) (breaking change) (beta fix) - Push pyads to 3.0.7 ([@carstenschroeder] - [#21216]) ([ads docs]) (beta fix) +- Refactor ZHA listeners into channels ([@dmulcahey] - [#21196]) ([zha docs]) (beta fix) +- Fix an Ambient PWS exception when location info is missing ([@bachya] - [#21220]) ([ambient_station docs]) (beta fix) +- Prevent invalid context from crashing ([@balloob] - [#21231]) (beta fix) ## {% linkable_title All changes %} @@ -237,7 +242,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update to Python 3.7 ([@balloob] - [#20988]) - Updates pyatmo to 1.8 and adds exception handling ([@carstenschroeder] - [#20938]) ([netatmo docs]) - Add frontend storage ([@balloob] - [#20880]) -- Norway air quality ([@Danielhiversen] - [#20683]) ([sensor.norway_air docs]) ([weather.met docs]) (new-platform) +- Norway air quality ([@Danielhiversen] - [#20683]) (new-platform) - Fix Point does I/O in event loop ([@fredrike] - [#20939]) ([point docs]) - Add unique id to ADS platforms ([@carstenschroeder] - [#20511]) ([light.ads docs]) - Upgrade cryptography to 2.5 ([@awarecan] - [#21011]) @@ -247,7 +252,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade restrictedpython to 4.0b8 ([@fabaff] - [#21015]) ([python_script docs]) - Norway air, minor fix ([@Danielhiversen] - [#21016]) ([air_quality docs]) - Allow target all timer services using 'entity_id: all' ([@rbflurry] - [#21008]) ([timer docs]) -- RFC: Embed platforms without component for remote component. ([@balloob] - [#20809]) ([demo docs]) ([harmony docs]) ([itach docs]) (new-platform) +- RFC: Embed platforms without component for remote component. ([@balloob] - [#20809]) - Fix discovery of audio groups ([@emontnemery] - [#20947]) ([cast docs]) - Update entity state when ZHA device becomes available ([@dmulcahey] - [#20993]) ([zha docs]) - Update co2signal==0.4.2 to fix #20805 ([@danielsjf] - [#21022]) ([sensor.co2signal docs]) @@ -295,6 +300,9 @@ Experiencing issues introduced by this release? Please report them in our [issue - ordered by last occurence ([@dgomes] - [#21200]) ([system_log docs]) (beta fix) - Set aioharmony version to 0.1.8 ([@ehendrix23] - [#21213]) ([harmony docs]) (breaking change) (beta fix) - Push pyads to 3.0.7 ([@carstenschroeder] - [#21216]) ([ads docs]) (beta fix) +- Refactor ZHA listeners into channels ([@dmulcahey] - [#21196]) ([zha docs]) (beta fix) +- Fix an Ambient PWS exception when location info is missing ([@bachya] - [#21220]) ([ambient_station docs]) (beta fix) +- Prevent invalid context from crashing ([@balloob] - [#21231]) (beta fix) [#18700]: https://github.com/home-assistant/home-assistant/pull/18700 [#18738]: https://github.com/home-assistant/home-assistant/pull/18738 @@ -472,10 +480,13 @@ Experiencing issues introduced by this release? Please report them in our [issue [#21161]: https://github.com/home-assistant/home-assistant/pull/21161 [#21174]: https://github.com/home-assistant/home-assistant/pull/21174 [#21175]: https://github.com/home-assistant/home-assistant/pull/21175 +[#21196]: https://github.com/home-assistant/home-assistant/pull/21196 [#21197]: https://github.com/home-assistant/home-assistant/pull/21197 [#21200]: https://github.com/home-assistant/home-assistant/pull/21200 [#21213]: https://github.com/home-assistant/home-assistant/pull/21213 [#21216]: https://github.com/home-assistant/home-assistant/pull/21216 +[#21220]: https://github.com/home-assistant/home-assistant/pull/21220 +[#21231]: https://github.com/home-assistant/home-assistant/pull/21231 [@CrazYoshi]: https://github.com/CrazYoshi [@Danielhiversen]: https://github.com/Danielhiversen [@JeffLIrion]: https://github.com/JeffLIrion @@ -572,7 +583,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [cover.velux docs]: /components/cover.velux/ [deconz docs]: /components/deconz/ [default_config docs]: /components/default_config/ -[demo docs]: /components/demo/ [device_tracker docs]: /components/device_tracker/ [ebusd docs]: /components/ebusd/ [eight_sleep docs]: /components/eight_sleep/ @@ -591,7 +601,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [hue docs]: /components/hue/ [ipma docs]: /components/ipma/ [isy994 docs]: /components/isy994/ -[itach docs]: /components/itach/ [knx docs]: /components/knx/ [light.ads docs]: /components/light.ads/ [light.flux_led docs]: /components/light.flux_led/ @@ -610,6 +619,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [mythicbeastsdns docs]: /components/mythicbeastsdns/ [netatmo docs]: /components/netatmo/ [netgear_lte docs]: /components/netgear_lte/ +[norway_air docs]: /components/norway_air/ [notify docs]: /components/notify/ [onboarding docs]: /components/onboarding/ [person docs]: /components/person/ @@ -631,7 +641,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.jewish_calendar docs]: /components/sensor.jewish_calendar/ [sensor.miflora docs]: /components/sensor.miflora/ [sensor.modbus docs]: /components/sensor.modbus/ -[sensor.norway_air docs]: /components/sensor.norway_air/ [sensor.rejseplanen docs]: /components/sensor.rejseplanen/ [sensor.speedtest docs]: /components/sensor.speedtest/ [sensor.speedtestdotnet docs]: /components/sensor.speedtestdotnet/ @@ -659,7 +668,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [utility_meter docs]: /components/utility_meter/ [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [velux docs]: /components/velux/ -[weather.met docs]: /components/weather.met/ [websocket_api docs]: /components/websocket_api/ [wink docs]: /components/wink/ [xiaomi_aqara docs]: /components/xiaomi_aqara/ From c5990631fa3cab4b6eb7ff5e10b666b2830259fd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Feb 2019 10:52:34 -0800 Subject: [PATCH 16/19] More stuff --- source/_components/ebusd.markdown | 1 - source/_posts/2019-02-20-release-88.markdown | 2 ++ .../blog/2019-02-release-88/components.png | Bin 0 -> 32509 bytes .../2019-02-release-88/event_subscription.png | Bin 0 -> 12788 bytes 4 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 source/images/blog/2019-02-release-88/components.png create mode 100644 source/images/blog/2019-02-release-88/event_subscription.png diff --git a/source/_components/ebusd.markdown b/source/_components/ebusd.markdown index b203e051d0a..4ed01d16e2e 100644 --- a/source/_components/ebusd.markdown +++ b/source/_components/ebusd.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -logo: ebusd.png ha_category: Sensor ha_iot_class: "Local Polling" ha_release: "0.88" diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index 7054d1e8901..e955b167c94 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -17,6 +17,8 @@ This release introduces a new [person component][person docs] thanks to [@Martin This release also extends the event dev tool to include an event debugger. It allows you to listen to core events and get them printend to the screen. This makes it easy to find the event data that your remote is sending out. +Screenshot of the new event subscription tool. + We also have a new command line auth provider. This will allow you to use a shell script to validate users logging in to the system. This gives a lot of flexibility. For example, you can now authenticate against LDAP. More info in [the documentation](/docs/authentication/providers/#command-line). [@andrewsayre] has been working hard on extending the SmartThings support. This release brings sensors and climate devices into the mix. Awesome! diff --git a/source/images/blog/2019-02-release-88/components.png b/source/images/blog/2019-02-release-88/components.png new file mode 100644 index 0000000000000000000000000000000000000000..580d8d19a9ddaeffb1626f06f0c8bfcd3e67f900 GIT binary patch literal 32509 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 I<*g$A4`k`rv;Y7A literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-02-release-88/event_subscription.png b/source/images/blog/2019-02-release-88/event_subscription.png new file mode 100644 index 0000000000000000000000000000000000000000..6344962f7d1bd6788a86fc069be5cdd19af5c8cc GIT binary patch literal 12788 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 literal 0 HcmV?d00001 From 88f87fed6c2ba1986055001e37b96c1f7942861a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Feb 2019 11:09:45 -0800 Subject: [PATCH 17/19] Final tweak --- source/_posts/2019-02-20-release-88.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index e955b167c94..a267eb67f7d 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -13,6 +13,8 @@ og_image: /images/blog/2019-02-release-88/smartthings.png +Release 0.88 has landed. It's been a busy two weeks with a ton of cool stuff and improvements. + This release introduces a new [person component][person docs] thanks to [@MartinHjelmare]. With this component, Home Assistant can be set up to track the people in your home. Each person can be linked to a user and multiple device tracker entities. This release does basic device tracker state merging, which will be evolved in the future. Device trackers merging their own states will be phased out in favor of persons. You can configure persons via the config panel. To get started, add the person component to your configuration.yaml file: `person:`. If you want to automatically stay up to date with the latest default Home Assistant components, you can now also add `default_config:` to your config. This release also extends the event dev tool to include an event debugger. It allows you to listen to core events and get them printend to the screen. This makes it easy to find the event data that your remote is sending out. From 9245e92cfdb512e6bbe18efe39455ee5b6da9862 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Feb 2019 11:09:55 -0800 Subject: [PATCH 18/19] FIx og image --- source/_posts/2019-02-20-release-88.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-02-20-release-88.markdown b/source/_posts/2019-02-20-release-88.markdown index a267eb67f7d..ece9d939341 100644 --- a/source/_posts/2019-02-20-release-88.markdown +++ b/source/_posts/2019-02-20-release-88.markdown @@ -8,7 +8,7 @@ author: Paulus Schoutsen author_twitter: balloob comments: true categories: Release-Notes -og_image: /images/blog/2019-02-release-88/smartthings.png +og_image: /images/blog/2019-02-release-88/components.png --- From 9cdfdc871068b77c9ca009ff84aad6a455c66a5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 20 Feb 2019 21:32:58 +0100 Subject: [PATCH 19/19] fix merge conflict (#8653) --- source/_includes/asides/component_navigation.html | 9 --------- 1 file changed, 9 deletions(-) diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 61590c66d35..17d3f5ab05b 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -60,7 +60,6 @@ {%- endif -%} -<<<<<<< HEAD

{%- if is_platform -%} Source: {{imp_name}}/{{parent_name}}.py @@ -68,14 +67,6 @@ Source: {{imp_url}} {%- endif -%}
-======= - {%- if is_platform -%} - - {%- endif -%} ->>>>>>> rc {%- if is_platform and parent_name != 'sensor' -%}