From 2b8e24606f1da0f0f9377f99c31f2be4bbb8d11f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 25 Aug 2017 23:02:12 -0700 Subject: [PATCH] Add release blog post --- _config.yml | 8 +- source/_components/abode.markdown | 2 +- .../alarm_control_panel.abode.markdown | 2 +- .../_components/binary_sensor.abode.markdown | 2 +- ...ir.markdown => sensor.london_air.markdown} | 0 source/_docs/automation/editor.markdown | 8 +- source/_docs/scripts/editor.markdown | 28 ++ source/_includes/asides/docs_navigation.html | 1 + .../_posts/2017-08-26-release-0-52.markdown | 376 ++++++++++++++++++ .../images/blog/2017-08-0.52/components.png | Bin 0 -> 26431 bytes 10 files changed, 415 insertions(+), 12 deletions(-) rename source/_components/{sensor.londond_air.markdown => sensor.london_air.markdown} (100%) create mode 100644 source/_docs/scripts/editor.markdown create mode 100644 source/_posts/2017-08-26-release-0-52.markdown create mode 100644 source/images/blog/2017-08-0.52/components.png diff --git a/_config.yml b/_config.yml index 77f78049d6b..f62bb660786 100644 --- a/_config.yml +++ b/_config.yml @@ -142,12 +142,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 51 -current_patch_version: 2 -date_released: 2017-08-14 +current_minor_version: 52 +current_patch_version: 0 +date_released: 2017-08-26 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0512--august-14" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 5b1368d4c6d..59b247f7bf7 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -2,7 +2,7 @@ layout: page title: "Abode Home Security" description: "Instructions on integrating Abode home security with Home Assistant." -date: 2017-08-26 13:28 +date: 2017-08-26 0:28 sidebar: true comments: false sharing: true diff --git a/source/_components/alarm_control_panel.abode.markdown b/source/_components/alarm_control_panel.abode.markdown index 4b140acdb06..593735b7d20 100644 --- a/source/_components/alarm_control_panel.abode.markdown +++ b/source/_components/alarm_control_panel.abode.markdown @@ -2,7 +2,7 @@ layout: page title: "Abode Alarm Control Panel" description: "Instructions how to setup the Abode Alarm control panel within Home Assistant." -date: 2017-08-26 13:28 +date: 2017-08-26 0:28 sidebar: true comments: false sharing: true diff --git a/source/_components/binary_sensor.abode.markdown b/source/_components/binary_sensor.abode.markdown index d0ee36ad392..35dfeda1713 100644 --- a/source/_components/binary_sensor.abode.markdown +++ b/source/_components/binary_sensor.abode.markdown @@ -2,7 +2,7 @@ layout: page title: "Abode Binary Sensor" description: "Instructions how to integrate Abode binary sensors into Home Assistant." -date: 2017-08-26 13:28 +date: 2017-08-26 0:28 sidebar: true comments: false sharing: true diff --git a/source/_components/sensor.londond_air.markdown b/source/_components/sensor.london_air.markdown similarity index 100% rename from source/_components/sensor.londond_air.markdown rename to source/_components/sensor.london_air.markdown diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 83b1de0f29e..e8a60039668 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Automation Editor" -description: "Instructions on how to use the new automation editor." +description: "Instructions on how to use the automation editor." date: 2016-04-24 08:30 +0100 sidebar: true comments: false @@ -9,11 +9,9 @@ sharing: true footer: true --- -In Home Assistant 0.45 we have introduced the first version of our automation editor. The editor is still in a very early stage and rough around the edges. For now we are only supporting Chrome but better browser support is planned for the future. +In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. -If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. - -From the UI choose **Automation** which is located in the sidebar. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/components/sensor.random/). +From the UI choose **Configuration** which is located in the sidebar, then click on **Automation** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/components/sensor.random/). Choose a meaningful name for your automation rules. diff --git a/source/_docs/scripts/editor.markdown b/source/_docs/scripts/editor.markdown new file mode 100644 index 00000000000..e5cc30c2272 --- /dev/null +++ b/source/_docs/scripts/editor.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Script Editor" +description: "Instructions on how to use the new script editor." +date: 2016-08-26 03:30 +0000 +sidebar: true +comments: false +sharing: true +footer: true +redirect_from: /docs/script/editor/ +--- + +In Home Assistant 0.52 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. + +
+ +
+ +## {% linkable_title Updating your configuration to use the editor %} + +The script editor reads and writes to the file `scripts.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the script component to read from it: + +```yaml +# Configuration.yaml example +script: !include scripts.yaml +``` + +The conten that was under `script:` should now be moved to `scripts.yaml` to be editable. diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 83fa9419bb0..c113f371a5a 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -78,6 +78,7 @@
  • diff --git a/source/_posts/2017-08-26-release-0-52.markdown b/source/_posts/2017-08-26-release-0-52.markdown new file mode 100644 index 00000000000..152d0621d7c --- /dev/null +++ b/source/_posts/2017-08-26-release-0-52.markdown @@ -0,0 +1,376 @@ +--- +layout: post +title: "0.51: Massive history speed up, finished automation editor and official vacuum cleaner support" +description: "Lots of frontend bugs have been squashed, the automation editor now supports all triggers and actions and vacuum cleaners are now an official component." +date: 2017-08-26 00:11:05 +date_formatted: "August 26, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-08-0.52/components.png +--- + + + +Although the summer is in full progress, the development hasn't stalled. This release brings bug fixes, clean ups and another 8 new integrations. On top of that we are also introducing a new [script editor](/docs/scripts/editor/)! + +To use the scripts editor, create a new file in your config directory named `scripts.yaml` and copy your existing scripts over: + +```yaml +# scripts.yaml +turn_on_some_lights: + alias: Turn on the lights + sequence: + - data: {} + service: light.turn_on +``` + + Than update your `configuration.yaml` to look like this: + +```yaml +# Configuration.yaml example +script: !include scripts.yaml +``` + +
    + +
    + +## New Platforms + +- Add version sensor ([@fabaff] - [#8912]) ([sensor.version docs]) (new-platform) +- Nello.io lock support ([@pschmitt] - [#8957]) ([lock.nello docs]) (new-platform) +- Add HipChat notify service. ([@BioSehnsucht] - [#8918]) ([notify.hipchat docs]) (new-platform) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Adds London_air component ([@robmarkcole] - [#9020]) ([sensor.london_air docs]) (new-platform) +- Add Abode home security component ([@arsaboo] - [#9030]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) (new-platform) +- Add support for Prowl notifications. ([@mbrrg] - [#9028]) ([notify.prowl docs]) (new-platform) +- Add worldtidesinfo sensor component ([@aetolus] - [#8860]) ([sensor.worldtidesinfo docs]) (new-platform) + +## {% linkable_title If you need help... %} +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} +Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template. + + +## Breaking Changes + +- Remove spaces from Xiami switch attributes ([@syssi] - [#8952]) ([switch.xiaomi docs]) (breaking change) +- MQTT Switch: command and availability payload are now no longer linked. Command and availability payload default to ON/OFF and must be configured individually if custom values are required. ([@timstanley1985] - [#8934]) ([switch.mqtt docs]) (breaking change) + +```yaml + - platform: mqtt + name: "Kitchen" + state_topic: "stat/sonoff_1/POWER" + command_topic: "cmnd/sonoff_1/POWER" + availability_topic: "tele/sonoff_1/LWT" + payload_available: "Online" + payload_not_available: "Offline" + retain: true +``` + +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) + +```yaml +usps: + username: user + password: pass + name: optional +``` + +- eliqonline: The optional channel_id configuration variable of the Eliqonline sensor needs to be a positive integer. ([@molobrakos] - [#9072]) ([sensor.eliqonline docs]) (breaking change) +- MySensors: Not a breaking change per se but users that have not been following the mysensors [serial API](https://www.mysensors.org/download/serial_api_20) could face dropped messages after this change. Messages are now validated according to the API before being passed along from/to devices. See [0.11 release notes](https://github.com/theolind/pymysensors/releases/tag/0.11) for more info. ([@MartinHjelmare] - [#9069]) ([mysensors docs]) ([binary_sensor.mysensors docs]) ([climate.mysensors docs]) ([cover.mysensors docs]) ([device_tracker.mysensors docs]) ([light.mysensors docs]) ([notify.mysensors docs]) ([sensor.mysensors docs]) ([switch.mysensors docs]) (breaking change) +- Automatic has disabled password authentication on their API. Home Assistant will now use OAuth2 to authenticate accounts. The following steps must be taken to transition your setup: + 1) Log in to your Automatic developer account. In the Automatic Developer Apps Manager, specify the OAuth Redirect URL in the developer page. This should be configured to `/api/automatic/callback`. (Example: `http://hassio.local:8123/api/automatic/callback`) Note that this URL only needs to be accessible from the browser you use to perform the authentication. + 2) Remove username/password from your automatic device tracker configuration in configuration.yaml. + 3) If you have authorized your account for `scope:current_location`, add `current_location: true` to your automatic device tracker configuration in configuration.yaml. + 4) When you restart home assistant, click on the Automatic Configure link in the Configurator card, and follow the instructions to authorize Home Assistant.

    NOTE: Automatic's API is currently not correctly authorizing with refresh tokens, so Step 4 currently needs to be performed after every restart. ([@armills] - [#8962] [#9002]) ([configurator docs]) ([device_tracker.automatic docs]) (breaking change) + +## All changes + +- Add version sensor ([@fabaff] - [#8912]) ([sensor.version docs]) (new-platform) +- Fix hue lights for Philips and non-philips lights ([@groth-its] - [#8905]) ([light.hue docs]) +- Fixed cert_expiry sensor to delay firing on HA startup ([@arsaboo] - [#8920]) ([sensor.cert_expiry docs]) +- Remove spaces from Xiami switch attributes ([@syssi] - [#8952]) ([switch.xiaomi docs]) (breaking change) +- Add service to alarm control panel for night mode arming ([@schmittx] - [#8614]) ([alarm_control_panel docs]) ([alarm_control_panel.totalconnect docs]) +- Add support for Automatic OAuth2 authentication ([@armills] - [#8962]) ([configurator docs]) ([device_tracker.automatic docs]) (breaking change) +- Nello.io lock support ([@pschmitt] - [#8957]) ([lock.nello docs]) (new-platform) +- Added continue-on-errors, added value template ([@iamjackg] - [#8971]) ([sensor.snmp docs]) +- Is_allowed_path raise for None path ([@danielhiversen] - [#8953]) +- Fix #8960 - Decora Wi-Fi Switch unable to set brightness ([@tlyakhov] - [#8989]) ([light.decora_wifi docs]) +- Adds port/SSL config options for RainMachine ([@bachya] - [#8986]) ([switch.rainmachine docs]) +- Automatic device tracker remove password ([@armills] - [#9002]) ([device_tracker.automatic docs]) (breaking change) +- Add scripts editor backend ([@balloob] - [#8993]) ([config docs]) ([script docs]) (new-platform) +- MQTT Switch - Add configurable availability payload ([@timstanley1985] - [#8934]) ([switch.mqtt docs]) (breaking change) +- Buienradar newconditions ([@mjj4791] - [#8897]) ([sensor.buienradar docs]) ([weather.buienradar docs]) +- Pushbullet, fix multiple messages sent when url param is set ([@karlkar] - [#9006]) ([notify.pushbullet docs]) +- Update to pyenvisalink 2.2, and remove range validation on zonedump i… ([@Cinntax] - [#8981]) ([envisalink docs]) +- Fix #9010 - Swiss Public Transportation shows departure time in the past ([@michaelhertig] - [#9011]) ([sensor.swiss_public_transport docs]) +- Add HipChat notify service. ([@BioSehnsucht] - [#8918]) ([notify.hipchat docs]) (new-platform) +- Update onkyo-eiscp to 1.2.3 ([@danieljkemp] - [#9019]) ([media_player.onkyo docs]) +- Check if album image(s) exist in spotify ([@Tommatheussen] - [#9024]) ([media_player.spotify docs]) +- Update ffmpeg to 1.7 to fix severals problems ([@pvizeli] - [#9029]) +- Add state_with_unit property to state objects in templates ([@balloob] - [#9014]) +- Fix Geizhals index issue when not 4 prices available ([@celeroll] - [#9035]) ([sensor.geizhals docs]) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Set password after connecting. Fixes #8983 ([@StevenLooman] - [#9039]) ([media_player.mpd docs]) +- Update iOS sensor (battery icon fix and format updates) ([@schmittx] - [#9032]) +- Adds London_air component ([@robmarkcole] - [#9020]) ([sensor.london_air docs]) (new-platform) +- Update pwmled to 1.2.1. ([@soldag] - [#9040]) ([light.rpi_gpio_pwm docs]) +- Configurable timeout for webostv. ([@soldag] - [#9042]) ([media_player.webostv docs]) +- Update ios.py ([@schmittx] - [#9041]) ([sensor.ios docs]) +- Support Windows in UPNP discovery ([@kabongsteve] - [#8936]) +- Upgrade python-pushover to 0.3 ([@fanaticDavid] - [#9045]) ([notify.pushover docs]) +- Add speeds to fan dropdown in ISY fan component ([@boojew] - [#9004]) ([fan.isy994 docs]) +- Update Fitbit sensor (icons, formatting, client update) ([@schmittx] - [#9031]) ([sensor.fitbit docs]) +- Add Abode home security component ([@arsaboo] - [#9030]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) (new-platform) +- LIFX: avoid rare NoneType errors ([@amelchio] - [#9054]) ([light.lifx docs]) +- Bump dlib face_recognition to 0.2.2 ([@arsaboo] - [#9060]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) +- Update fitbit.py ([@schmittx] - [#9064]) ([sensor.fitbit docs]) +- Upgrade sendgrid to 5.0.0 ([@fabaff] - [#9062]) ([notify.sendgrid docs]) +- Upgrade slacker to 0.9.60 ([@fabaff] - [#9065]) ([notify.slack docs]) +- Add support for Prowl notifications. ([@mbrrg] - [#9028]) ([notify.prowl docs]) (new-platform) +- Upgrade onkyo-eiscp to 1.2.4 (fixes #8995) ([@fabaff] - [#9068]) ([media_player.onkyo docs]) +- Workday sensor offset ([@LaStrada] - [#8824]) ([binary_sensor.workday docs]) +- eliqonline: channel id is an integer ([@molobrakos] - [#9072]) ([sensor.eliqonline docs]) (breaking change) +- Use builtin constants for Abode alarm_control_panel ([@arsaboo] - [#9059]) ([alarm_control_panel.abode docs]) +- bump python-ecobee-api version to 0.0.8 ([@nkgilley] - [#9074]) ([ecobee docs]) +- Bump abodepy to 0.7.1 ([@arsaboo] - [#9077]) ([abode docs]) +- async_query returns False if connection to server failed, handle this properly ([@molobrakos] - [#9070]) ([media_player.squeezebox docs]) +- Added insteonplm device_override multiple capabilities ([@teharris1] - [#9078]) ([insteon_plm docs]) +- Upgrade uber_rides to 0.5.1 ([@fabaff] - [#9080]) ([sensor.uber docs]) +- Upgrade discord.py to 0.16.10 ([@fabaff] - [#9082]) ([notify.discord docs]) +- Fix `device` attribute in fritz_callmonitor.py (fixes #9055) ([@870074+max-te] - [#9081]) ([sensor.fritzbox_callmonitor docs]) +- Upgrade youtube_dl to 2017.8.18 ([@fabaff] - [#9079]) ([media_extractor docs]) +- Remove dash ([@fabaff] - [#9089]) +- Upgrade credstash to 1.13.3 ([@fabaff] - [#9088]) +- 9043 Fixed error while running dev docker ([@MungoRae] - [#9044]) +- Don't redefine consts ([@fabaff] - [#9086]) ([notify.hipchat docs]) +- Fix octoprint errors when printer is off/disconnected ([@w1ll1am23] - [#8988]) ([octoprint docs]) ([sensor.octoprint docs]) +- Pilight switch: restore last state after restart ([@janLo] - [#8580]) ([switch.pilight docs]) +- Fix netdata system_load and add disk_free. ([@michaelarnauts] - [#9091]) ([sensor.netdata docs]) +- Add worldtidesinfo sensor component ([@aetolus] - [#8860]) ([sensor.worldtidesinfo docs]) (new-platform) +- Support changing the bulb color for tplink smartbulbs, fixes #8766 ([@rytilahti] - [#8780]) ([light.tplink docs]) +- bump snapcast version ([@happyleavesaoc] - [#9100]) ([media_player.snapcast docs]) +- bump fedex version ([@happyleavesaoc] - [#9099]) ([sensor.fedex docs]) +- Yeelight fix updates on hsv mode ([@rytilahti] - [#9093]) ([light.yeelight docs]) +- Catch exceptions ([@fabaff] - [#9085]) ([notify.discord docs]) +- Fix issue 8894 with uk_transport component if no next_buses or next_trains ([@robmarkcole] - [#9046]) ([sensor.uk_transport docs]) +- upgrade Xiaomi Gateway lib to 0.3 ([@danielhiversen] - [#9101]) ([xiaomi docs]) +- pythonegardia package requirement to .18 ([@jeroenterheerdt] - [#9104]) ([alarm_control_panel.egardia docs]) +- Simplisafe unknown status fix ([@lekobob] - [#9111]) ([alarm_control_panel.simplisafe docs]) +- Update flux_led.py ([@danielhiversen] - [#9122]) ([light.flux_led docs]) +- Xiaomi ([@danielhiversen] - [#9126]) ([xiaomi docs]) +- refactor pushbullet ([@danielhiversen] - [#9125]) ([notify.pushbullet docs]) +- optimistic mode for template covers (w/o timed movement) ([@PhracturedBlue] - [#8402]) ([cover.template docs]) +- Use const ([@fabaff] - [#9127]) ([prometheus docs]) +- Refactor mysensors callback and add validation ([@MartinHjelmare] - [#9069]) ([mysensors docs]) ([binary_sensor.mysensors docs]) ([climate.mysensors docs]) ([cover.mysensors docs]) ([device_tracker.mysensors docs]) ([light.mysensors docs]) ([notify.mysensors docs]) ([sensor.mysensors docs]) ([switch.mysensors docs]) (breaking change) + +[#8402]: https://github.com/home-assistant/home-assistant/pull/8402 +[#8580]: https://github.com/home-assistant/home-assistant/pull/8580 +[#8614]: https://github.com/home-assistant/home-assistant/pull/8614 +[#8679]: https://github.com/home-assistant/home-assistant/pull/8679 +[#8780]: https://github.com/home-assistant/home-assistant/pull/8780 +[#8824]: https://github.com/home-assistant/home-assistant/pull/8824 +[#8860]: https://github.com/home-assistant/home-assistant/pull/8860 +[#8897]: https://github.com/home-assistant/home-assistant/pull/8897 +[#8905]: https://github.com/home-assistant/home-assistant/pull/8905 +[#8912]: https://github.com/home-assistant/home-assistant/pull/8912 +[#8918]: https://github.com/home-assistant/home-assistant/pull/8918 +[#8920]: https://github.com/home-assistant/home-assistant/pull/8920 +[#8934]: https://github.com/home-assistant/home-assistant/pull/8934 +[#8936]: https://github.com/home-assistant/home-assistant/pull/8936 +[#8952]: https://github.com/home-assistant/home-assistant/pull/8952 +[#8953]: https://github.com/home-assistant/home-assistant/pull/8953 +[#8957]: https://github.com/home-assistant/home-assistant/pull/8957 +[#8962]: https://github.com/home-assistant/home-assistant/pull/8962 +[#8971]: https://github.com/home-assistant/home-assistant/pull/8971 +[#8981]: https://github.com/home-assistant/home-assistant/pull/8981 +[#8986]: https://github.com/home-assistant/home-assistant/pull/8986 +[#8988]: https://github.com/home-assistant/home-assistant/pull/8988 +[#8989]: https://github.com/home-assistant/home-assistant/pull/8989 +[#8993]: https://github.com/home-assistant/home-assistant/pull/8993 +[#9002]: https://github.com/home-assistant/home-assistant/pull/9002 +[#9004]: https://github.com/home-assistant/home-assistant/pull/9004 +[#9006]: https://github.com/home-assistant/home-assistant/pull/9006 +[#9011]: https://github.com/home-assistant/home-assistant/pull/9011 +[#9014]: https://github.com/home-assistant/home-assistant/pull/9014 +[#9019]: https://github.com/home-assistant/home-assistant/pull/9019 +[#9020]: https://github.com/home-assistant/home-assistant/pull/9020 +[#9024]: https://github.com/home-assistant/home-assistant/pull/9024 +[#9028]: https://github.com/home-assistant/home-assistant/pull/9028 +[#9029]: https://github.com/home-assistant/home-assistant/pull/9029 +[#9030]: https://github.com/home-assistant/home-assistant/pull/9030 +[#9031]: https://github.com/home-assistant/home-assistant/pull/9031 +[#9032]: https://github.com/home-assistant/home-assistant/pull/9032 +[#9035]: https://github.com/home-assistant/home-assistant/pull/9035 +[#9039]: https://github.com/home-assistant/home-assistant/pull/9039 +[#9040]: https://github.com/home-assistant/home-assistant/pull/9040 +[#9041]: https://github.com/home-assistant/home-assistant/pull/9041 +[#9042]: https://github.com/home-assistant/home-assistant/pull/9042 +[#9044]: https://github.com/home-assistant/home-assistant/pull/9044 +[#9045]: https://github.com/home-assistant/home-assistant/pull/9045 +[#9046]: https://github.com/home-assistant/home-assistant/pull/9046 +[#9054]: https://github.com/home-assistant/home-assistant/pull/9054 +[#9059]: https://github.com/home-assistant/home-assistant/pull/9059 +[#9060]: https://github.com/home-assistant/home-assistant/pull/9060 +[#9062]: https://github.com/home-assistant/home-assistant/pull/9062 +[#9064]: https://github.com/home-assistant/home-assistant/pull/9064 +[#9065]: https://github.com/home-assistant/home-assistant/pull/9065 +[#9068]: https://github.com/home-assistant/home-assistant/pull/9068 +[#9069]: https://github.com/home-assistant/home-assistant/pull/9069 +[#9070]: https://github.com/home-assistant/home-assistant/pull/9070 +[#9072]: https://github.com/home-assistant/home-assistant/pull/9072 +[#9074]: https://github.com/home-assistant/home-assistant/pull/9074 +[#9077]: https://github.com/home-assistant/home-assistant/pull/9077 +[#9078]: https://github.com/home-assistant/home-assistant/pull/9078 +[#9079]: https://github.com/home-assistant/home-assistant/pull/9079 +[#9080]: https://github.com/home-assistant/home-assistant/pull/9080 +[#9081]: https://github.com/home-assistant/home-assistant/pull/9081 +[#9082]: https://github.com/home-assistant/home-assistant/pull/9082 +[#9085]: https://github.com/home-assistant/home-assistant/pull/9085 +[#9086]: https://github.com/home-assistant/home-assistant/pull/9086 +[#9088]: https://github.com/home-assistant/home-assistant/pull/9088 +[#9089]: https://github.com/home-assistant/home-assistant/pull/9089 +[#9091]: https://github.com/home-assistant/home-assistant/pull/9091 +[#9093]: https://github.com/home-assistant/home-assistant/pull/9093 +[#9099]: https://github.com/home-assistant/home-assistant/pull/9099 +[#9100]: https://github.com/home-assistant/home-assistant/pull/9100 +[#9101]: https://github.com/home-assistant/home-assistant/pull/9101 +[#9104]: https://github.com/home-assistant/home-assistant/pull/9104 +[#9111]: https://github.com/home-assistant/home-assistant/pull/9111 +[#9122]: https://github.com/home-assistant/home-assistant/pull/9122 +[#9125]: https://github.com/home-assistant/home-assistant/pull/9125 +[#9126]: https://github.com/home-assistant/home-assistant/pull/9126 +[#9127]: https://github.com/home-assistant/home-assistant/pull/9127 +[@870074+max-te]: https://github.com/870074+max-te +[@BioSehnsucht]: https://github.com/BioSehnsucht +[@Cinntax]: https://github.com/Cinntax +[@LaStrada]: https://github.com/LaStrada +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MungoRae]: https://github.com/MungoRae +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@StevenLooman]: https://github.com/StevenLooman +[@Tommatheussen]: https://github.com/Tommatheussen +[@aetolus]: https://github.com/aetolus +[@amelchio]: https://github.com/amelchio +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@boojew]: https://github.com/boojew +[@celeroll]: https://github.com/celeroll +[@danielhiversen]: https://github.com/danielhiversen +[@danieljkemp]: https://github.com/danieljkemp +[@fabaff]: https://github.com/fabaff +[@fanaticDavid]: https://github.com/fanaticDavid +[@groth-its]: https://github.com/groth-its +[@happyleavesaoc]: https://github.com/happyleavesaoc +[@iamjackg]: https://github.com/iamjackg +[@janLo]: https://github.com/janLo +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@kabongsteve]: https://github.com/kabongsteve +[@karlkar]: https://github.com/karlkar +[@lekobob]: https://github.com/lekobob +[@mbrrg]: https://github.com/mbrrg +[@mezz64]: https://github.com/mezz64 +[@michaelarnauts]: https://github.com/michaelarnauts +[@michaelhertig]: https://github.com/michaelhertig +[@mjj4791]: https://github.com/mjj4791 +[@molobrakos]: https://github.com/molobrakos +[@nkgilley]: https://github.com/nkgilley +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@robmarkcole]: https://github.com/robmarkcole +[@rytilahti]: https://github.com/rytilahti +[@schmittx]: https://github.com/schmittx +[@soldag]: https://github.com/soldag +[@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 +[@timstanley1985]: https://github.com/timstanley1985 +[@tlyakhov]: https://github.com/tlyakhov +[@w1ll1am23]: https://github.com/w1ll1am23 +[abode docs]: https://home-assistant.io/components/abode/ +[alarm_control_panel docs]: https://home-assistant.io/components/alarm_control_panel/ +[alarm_control_panel.abode docs]: https://home-assistant.io/components/alarm_control_panel.abode/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarm_control_panel.simplisafe docs]: https://home-assistant.io/components/alarm_control_panel.simplisafe/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[binary_sensor.abode docs]: https://home-assistant.io/components/binary_sensor.abode/ +[binary_sensor.mysensors docs]: https://home-assistant.io/components/binary_sensor.mysensors/ +[binary_sensor.workday docs]: https://home-assistant.io/components/binary_sensor.workday/ +[camera.usps docs]: https://home-assistant.io/components/camera.usps/ +[climate.mysensors docs]: https://home-assistant.io/components/climate.mysensors/ +[config docs]: https://home-assistant.io/components/config/ +[configurator docs]: https://home-assistant.io/components/configurator/ +[cover.mysensors docs]: https://home-assistant.io/components/cover.mysensors/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[device_tracker.automatic docs]: https://home-assistant.io/components/device_tracker.automatic/ +[device_tracker.mysensors docs]: https://home-assistant.io/components/device_tracker.mysensors/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[emulated_hue.upnp docs]: https://home-assistant.io/components/emulated_hue.upnp/ +[envisalink docs]: https://home-assistant.io/components/envisalink/ +[fan.isy994 docs]: https://home-assistant.io/components/fan.isy994/ +[image_processing.dlib_face_detect docs]: https://home-assistant.io/components/image_processing.dlib_face_detect/ +[image_processing.dlib_face_identify docs]: https://home-assistant.io/components/image_processing.dlib_face_identify/ +[insteon_plm docs]: https://home-assistant.io/components/insteon_plm/ +[light.decora_wifi docs]: https://home-assistant.io/components/light.decora_wifi/ +[light.flux_led docs]: https://home-assistant.io/components/light.flux_led/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mysensors docs]: https://home-assistant.io/components/light.mysensors/ +[light.rpi_gpio_pwm docs]: https://home-assistant.io/components/light.rpi_gpio_pwm/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.yeelight docs]: https://home-assistant.io/components/light.yeelight/ +[lock.nello docs]: https://home-assistant.io/components/lock.nello/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.mpd docs]: https://home-assistant.io/components/media_player.mpd/ +[media_player.onkyo docs]: https://home-assistant.io/components/media_player.onkyo/ +[media_player.snapcast docs]: https://home-assistant.io/components/media_player.snapcast/ +[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[mysensors docs]: https://home-assistant.io/components/mysensors/ +[notify.discord docs]: https://home-assistant.io/components/notify.discord/ +[notify.hipchat docs]: https://home-assistant.io/components/notify.hipchat/ +[notify.mysensors docs]: https://home-assistant.io/components/notify.mysensors/ +[notify.prowl docs]: https://home-assistant.io/components/notify.prowl/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[notify.pushover docs]: https://home-assistant.io/components/notify.pushover/ +[notify.sendgrid docs]: https://home-assistant.io/components/notify.sendgrid/ +[notify.slack docs]: https://home-assistant.io/components/notify.slack/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[script docs]: https://home-assistant.io/components/script/ +[sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/ +[sensor.cert_expiry docs]: https://home-assistant.io/components/sensor.cert_expiry/ +[sensor.eliqonline docs]: https://home-assistant.io/components/sensor.eliqonline/ +[sensor.fedex docs]: https://home-assistant.io/components/sensor.fedex/ +[sensor.fitbit docs]: https://home-assistant.io/components/sensor.fitbit/ +[sensor.fritzbox_callmonitor docs]: https://home-assistant.io/components/sensor.fritzbox_callmonitor/ +[sensor.geizhals docs]: https://home-assistant.io/components/sensor.geizhals/ +[sensor.ios docs]: https://home-assistant.io/components/sensor.ios/ +[sensor.london_air docs]: https://home-assistant.io/components/sensor.london_air/ +[sensor.mysensors docs]: https://home-assistant.io/components/sensor.mysensors/ +[sensor.netdata docs]: https://home-assistant.io/components/sensor.netdata/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.swiss_public_transport docs]: https://home-assistant.io/components/sensor.swiss_public_transport/ +[sensor.uber docs]: https://home-assistant.io/components/sensor.uber/ +[sensor.uk_transport docs]: https://home-assistant.io/components/sensor.uk_transport/ +[sensor.usps docs]: https://home-assistant.io/components/sensor.usps/ +[sensor.version docs]: https://home-assistant.io/components/sensor.version/ +[sensor.worldtidesinfo docs]: https://home-assistant.io/components/sensor.worldtidesinfo/ +[switch.mqtt docs]: https://home-assistant.io/components/switch.mqtt/ +[switch.mysensors docs]: https://home-assistant.io/components/switch.mysensors/ +[switch.pilight docs]: https://home-assistant.io/components/switch.pilight/ +[switch.rainmachine docs]: https://home-assistant.io/components/switch.rainmachine/ +[switch.xiaomi docs]: https://home-assistant.io/components/switch.xiaomi/ +[usps docs]: https://home-assistant.io/components/usps/ +[weather.buienradar docs]: https://home-assistant.io/components/weather.buienradar/ +[xiaomi docs]: https://home-assistant.io/components/xiaomi/ +[forum]: https://community.home-assistant.io/ +[issue]: https://github.com/home-assistant/home-assistant/issues +[discord]: https://discord.gg/c5DvZ4e diff --git a/source/images/blog/2017-08-0.52/components.png b/source/images/blog/2017-08-0.52/components.png new file mode 100644 index 0000000000000000000000000000000000000000..14225ee5feee2200a59f96723613aea5cd308497 GIT binary patch literal 26431 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 literal 0 HcmV?d00001