From 2c80c32eb0c882437bf5824fda4bc1120b6f8918 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 15 Jul 2017 21:07:56 -0700 Subject: [PATCH] Add 0.49 release blog post --- _config.yml | 8 +- source/_components/lametric.markdown | 19 + source/_components/notify.lametric.markdown | 20 + source/_posts/2017-07-16-release-49.markdown | 462 ++++++++++++++++++ .../images/blog/2017-07-0.49/components.png | Bin 0 -> 26076 bytes .../images/blog/2017-07-0.49/green-theme.png | Bin 0 -> 5667 bytes 6 files changed, 505 insertions(+), 4 deletions(-) create mode 100644 source/_components/lametric.markdown create mode 100644 source/_components/notify.lametric.markdown create mode 100644 source/_posts/2017-07-16-release-49.markdown create mode 100644 source/images/blog/2017-07-0.49/components.png create mode 100644 source/images/blog/2017-07-0.49/green-theme.png diff --git a/_config.yml b/_config.yml index 9c226bb45af..10e1ef759d7 100644 --- a/_config.yml +++ b/_config.yml @@ -142,12 +142,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 48 -current_patch_version: 1 -date_released: 2017-07-05 +current_minor_version: 49 +current_patch_version: 0 +date_released: 2017-07-16 # 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-0481---july-5" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): diff --git a/source/_components/lametric.markdown b/source/_components/lametric.markdown new file mode 100644 index 00000000000..36d6b6d4868 --- /dev/null +++ b/source/_components/lametric.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "LaMetric" +description: "Instructions on how to integrate LaMetric with Home Assistant." +date: 2017-04-02 13:28 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.49 +--- + +```yaml +# configuration.yaml example +lametric: + client_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx + client_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` diff --git a/source/_components/notify.lametric.markdown b/source/_components/notify.lametric.markdown new file mode 100644 index 00000000000..70ad2a4cdc0 --- /dev/null +++ b/source/_components/notify.lametric.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "LaMetric Notify" +description: "Instructions on how to setup the LaMetric notify platform with Home Assistant." +date: 2017-04-02 13:28 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Notify +ha_release: 0.49 +--- + +```yaml +notify: + name: lametric1 + platform: lametric + display_time: 20 + icon: i555 +``` diff --git a/source/_posts/2017-07-16-release-49.markdown b/source/_posts/2017-07-16-release-49.markdown new file mode 100644 index 00000000000..821b818fa6b --- /dev/null +++ b/source/_posts/2017-07-16-release-49.markdown @@ -0,0 +1,462 @@ +--- +layout: post +title: "0.49: Themes 🎨, kiosk mode and Prometheus.io" +description: "Style the frontend the way you want it and present it in Kiosk mode without tabs." +date: 2017-07-15 00:02:05 +0000 +date_formatted: "July 15, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-07-0.49/components.png +--- + + + +# {% linkable_title WE HAVE THEMES 🎨👩‍🎨 %} + +Our already amazing frontend just got even more amazing thanks to [@andrey-git]. With the new theme support you can be in control of the primary color, accent color and a whole bunch more. + +You can specify themes using new configuration options under frontend. + +```yaml +frontend: + themes: + green: + primary-color: #6ca518; +``` + +Once a theme is defined, use the new frontend service `frontend.set_theme` to activate it. More information in [the docs][frontend docs]. + +

+Screenshot of a green dashboard +Screenshot of a green dashboard +

+ +Not all parts of the user interface are themable yet. Expect improvements in future releases. + +## {% linkable_title Kiosk mode %} + +Another great new improvement for the frontend is the addition of a kiosk mode. When the frontend is viewed in kiosk mode, the tab bar will be hidden. + +To activate kiosk mode, navigate to `https://hass.example.com:8123/kiosk/group.living_room_view`. Note that for `default_view` the url is just `https://hass.example.com:8123/kiosk` + +This feature has also been brought to you by [@Andrey-git]! Big shout out to him for his continuous efforts to bring Home Assistant to the next level. + +## {% linkable_title New Platforms %} + +- Add london_underground ([@robmarkcole] - [#8272]) ([sensor.london_underground docs]) (new-platform) +- Add citybikes platform ([@aronsky] - [#8202]) ([sensor.citybikes docs]) (new-platform) +- Add One-Time Password sensor (OTP) ([@postlund] - [#8332]) ([sensor.otp docs]) (new-platform) +- Add component for xiaomi robot vacuum (switch.xiaomi_vacuum) ([@rytilahti] - [#7913]) ([switch.xiaomi_vacuum docs]) (new-platform) +- LaMetric platform and notify module ([@open-homeautomation] - [#8230]) ([lametric docs]) ([notify.lametric docs]) (new-platform) +- New component to connect to VELUX KLF 200 Interface ([@Julius2342] - [#8203]) ([velux docs]) ([scene.velux docs]) (new-platform) +- New service `send_magic_packet` with new component `wake_on_lan` ([@azogue] - [#8397]) ([wake_on_lan docs]) (new-platform) +- Add support for Prometheus ([@rcloran] - [#8211]) ([prometheus docs]) (new-platform) +- Refactored Amcrest to use central hub component ([@tchellomello] - [#8184]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) (breaking change) (new-platform) +- Added media_extractor service ([@minchik] - [#8369]) ([media_extractor docs]) (new-platform) +- Vizio SmartCast support ([@vkorn] - [#8260]) ([media_player.vizio 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. + + +## {% linkable_title Breaking Changes %} + +- UPC Connect component no longer needs a password passed into the configuration. ([@Flavien] - [#8335]) ([device_tracker.upc_connect docs]) (breaking change) +- The Apple TV platform has been upgraded to a component and a remote platform has been added. This requires your Apple TV configuration to be moved to the new `apple_tv` component. ([@postlund] - [#8122]) ([media_player.apple_tv docs]) (breaking change) + +```yaml +apple_tv: + - name: Apple TV + host: 10.0.10.20 + login_id: 00000000-1234-5678-9012-345678901234 + start_off: true + credentials: 8660DEA5154FB46B:20B94847926112B3F46F85DB3A7311830463BF65570C22C3786E27F38C3326CF +``` + +- Refactored Amcrest to use central hub component to prepare for future integrations. This requires your Amcrest configuration to be moved to the new `amcrest` component. ([@tchellomello] - [#8184]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) (breaking change) (new-platform) + +```yaml +amcrest: + - host: !secret amcrest_living + name: "Living Room" + username: !secret amcrest_living_username + password: !secret amcrest_living_password + resolution: low + stream_source: snapshot + sensors: + - motion_detector + - ptz_preset +``` + +## {% linkable_title All changes %} + +- Version bump to 0.49.0.dev0 ([@fabaff] - [#8266]) +- Upgrade pyowm to 2.7.1 ([@fabaff] - [#8274]) ([sensor.openweathermap docs]) ([weather.openweathermap docs]) +- Don't call update() in constructor ([@fabaff] - [#8276]) ([sensor.openweathermap docs]) +- Update apcaccess to 0.0.13. Add "Percent Load Capacity" to INFERRED_UNITS. ([@michaelarnauts] - [#8277]) ([apcupsd docs]) ([sensor.apcupsd docs]) +- Update knxip to 0.4 (better handling of reconnects) ([@open-homeautomation] - [#8289]) ([knx docs]) +- Add london_underground ([@robmarkcole] - [#8272]) ([sensor.london_underground docs]) (new-platform) +- pytado moved to pypi ([@wmalgadey] - [#8298]) ([tado docs]) ([climate.tado docs]) +- Fix doc link in header ([@robmarkcole] - [#8305]) ([sensor.london_underground docs]) +- Upgrade discord.py to 0.16.8 ([@fabaff] - [#8304]) ([notify.discord docs]) +- zha: Strip whitespace from device names ([@rcloran] - [#8306]) ([zha docs]) +- Upgrade chardet to 3.0.4 ([@fabaff] - [#8313]) +- Upgrade aiohttp to 2.2.2 ([@fabaff] - [#8314]) +- Fix pylint issue ([@fabaff] - [#8325]) ([snips docs]) +- vsure 1.3.7 ([@persandstrom] - [#8321]) ([verisure docs]) +- Update pyEmby to fix media images ([@mezz64] - [#8331]) ([media_player.emby docs]) +- Partially revert #7931 ([@fabaff] - [#8326]) ([sensor.yweather docs]) +- Only allow 'tls_insecure_set()' if cert is present (fixes #8329) ([@fabaff] - [#8337]) ([mqtt docs]) +- Fix issue #8285 ([@Sabesto] - [#8340]) ([modbus docs]) ([binary_sensor.modbus docs]) ([climate.flexit docs]) ([sensor.modbus docs]) ([switch.modbus docs]) +- Bump dlib face_recognition to 0.2.0 ([@pvizeli] - [#8345]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) +- Update Avion and Decora switches to match upstream changes ([@mjg59] - [#7903]) ([light.avion docs]) ([light.decora docs]) +- Fix the "302" error in the UPC Connect component and remove the need to specify the router password ([@Flavien] - [#8335]) ([device_tracker.upc_connect docs]) (breaking change) +- Add new feature to Apple TV platform ([@postlund] - [#8122]) ([media_player.apple_tv docs]) (breaking change) +- Add citybikes platform ([@aronsky] - [#8202]) ([sensor.citybikes docs]) (new-platform) +- Fix some issues for PyLint 1.7.2 ([@balloob] - [#8356]) +- Fix pylint 1.7.2 no-else-return issues ([@balloob] - [#8361]) +- Upgrade aiohttp to 2.2.3 ([@fabaff] - [#8363]) +- Remove some more usage of run_in_executor ([@balloob] - [#8352]) +- Correct spelling of aliases, deprecate old config options. ([@aequitas] - [#8348]) ([rflink docs]) ([light.rflink docs]) ([sensor.rflink docs]) ([switch.rflink docs]) +- Allow Pilight Binary Sensor to control reset_delay_sec through configuration ([@clarkewd] - [#8358]) ([binary_sensor.pilight docs]) +- Mqtt client_id fix for #8315 ([@heinemml] - [#8366]) ([mqtt docs]) +- Allow all panel urls ([@balloob] - [#8368]) +- Update pyHik to catch XML errors ([@mezz64] - [#8384]) ([binary_sensor.hikvision docs]) +- update version ([@wardcraigj] - [#8380]) ([alarm_control_panel.totalconnect docs]) +- Add One-Time Password sensor (OTP) ([@postlund] - [#8332]) ([sensor.otp docs]) (new-platform) +- buienradar==0.7, fix winddirection/azimuth, logging ([@mjj4791] - [#8281]) ([sensor.buienradar docs]) ([weather.buienradar docs]) +- Add component for xiaomi robot vacuum (switch.xiaomi_vacuum) ([@rytilahti] - [#7913]) ([switch.xiaomi_vacuum docs]) (new-platform) +- Try catch around database updates in recorder. Resolves 6919 ([@mitchese] - [#8349]) ([recorder docs]) +- Fix Amazon Polly with non english voices. #8377 ([@CharlesBlonde] - [#8378]) ([tts.amazon_polly docs]) +- Fix TTS options. #8375 ([@CharlesBlonde] - [#8376]) ([tts docs]) +- Add address-specific KNX listeners that fire events on the HASS bus ([@open-homeautomation] - [#8374]) ([knx docs]) +- GTFS: check start/end date on services ([@Kernald] - [#8373]) ([sensor.gtfs docs]) +- Implement KNX dimming functionality ([@open-homeautomation] - [#8371]) ([light.knx docs]) +- Add Soundtouch support for playing an HTTP url ([@CharlesBlonde] - [#8370]) ([media_player.soundtouch docs]) +- Modbus fixes to work with pymodbus 1.3.1 ([@Sabesto] - [#8365]) ([modbus docs]) ([binary_sensor.modbus docs]) ([sensor.modbus docs]) ([switch.modbus docs]) +- Cleanup the asuswrt component ([@mattsch] - [#8359]) ([device_tracker.asuswrt docs]) +- cover_template:i open/close/stop actions no longer required. Improve tests ([@PhracturedBlue] - [#8344]) ([cover.template docs]) +- Prevent errors on Octoprint sensors and binary_sensors when Octoprint and/or Printer are off ([@w1ll1am23] - [#8343]) ([octoprint docs]) ([binary_sensor.octoprint docs]) ([sensor.octoprint docs]) +- Presence detection for tp link eap225 ([@alexrockt] - [#8322]) ([device_tracker.tplink docs]) +- zha light: Refresh at startup ([@rcloran] - [#8310]) ([light.zha docs]) +- zha: Try multiple reads to get manufacturer/model ([@rcloran] - [#8308]) ([zha docs]) +- Upnp mapping notification ([@dgomes] - [#8303]) ([upnp docs]) +- Use user-set device names for Linksys Smart Wi-Fi routers (3) ([@Klikini] - [#8300]) ([device_tracker.linksys_smart docs]) +- Added support for upload of remote or local files to slack ([@simaosimao] - [#8278]) ([notify.slack docs]) +- Update avion.py ([@pvizeli] - [#8364]) ([light.avion docs]) +- LaMetric platform and notify module ([@open-homeautomation] - [#8230]) ([lametric docs]) ([notify.lametric docs]) (new-platform) +- Sets spotify media_type to music ([@Tommatheussen] - [#8387]) ([media_player.spotify docs]) +- Update waqi sensor ([@andrey-git] - [#8385]) ([sensor.waqi docs]) +- Update aiolifx ([@amelchio] - [#8396]) ([light.lifx docs]) +- Code owners ([@balloob] - [#8393]) +- Add new Dyson sensors ([@CharlesBlonde] - [#8199]) ([dyson docs]) ([fan.dyson docs]) ([sensor.dyson docs]) +- Fix CODEOWNERS z-wave team name ([@armills] - [#8400]) +- Upgrade Sphinx to 1.6.3 ([@fabaff] - [#8405]) +- Use upstream RachioPy, fix manual run switches ([@Klikini] - [#8286]) ([switch.rachio docs]) +- Marrantz SR5006 & SR5006 treated as AVR-X device | Fixed Mapping of Media Player and AUX input functions ([@scarface-4711] - [#8409]) ([media_player.denonavr docs]) +- New component to connect to VELUX KLF 200 Interface ([@Julius2342] - [#8203]) ([velux docs]) ([scene.velux docs]) (new-platform) +- Properly handle the case when a group includes itself. ([@andrey-git] - [#8398]) ([group docs]) +- Add set_operation_mode support to generic_thermostat ([@mtreinish] - [#8392]) ([climate.generic_thermostat docs]) +- Make gzips reproducible by excluding timestamp ([@armills] - [#8420]) +- Do not overwrite a custom hyperion light name with the hostname of the server. ([@doctorjames] - [#8391]) ([light.hyperion docs]) +- Fixed link to documentation ([@Julius2342] - [#8424]) ([velux docs]) ([scene.velux docs]) +- Fix KeyError (fixes #3721, fixes #7241) ([@fabaff] - [#8428]) ([sensor.uber docs]) +- Use HA lat/long for the start (fixes #3971) ([@fabaff] - [#8429]) ([sensor.uber docs]) +- bump python-mirobo requirement to support newer firmwares and more ([@rytilahti] - [#8431]) ([switch.xiaomi_vacuum docs]) +- New service `send_magic_packet` with new component `wake_on_lan` ([@azogue] - [#8397]) ([wake_on_lan docs]) (new-platform) +- Integrate utility functions into restricted Python environment ([@open-homeautomation] - [#8427]) ([python_script docs]) +- Allow Twitter notifications to include media ([@MikeChristianson] - [#8282]) ([notify docs]) ([notify.twitter docs]) +- Fix typo (sending USERNAME instead of PASSWORD) introduced in #7963 ([@thecynic] - [#8433]) ([lutron docs]) +- zha: Handle both input and output clusters ([@rcloran] - [#8410]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([sensor.zha docs]) +- Add support for Prometheus ([@rcloran] - [#8211]) ([prometheus docs]) (new-platform) +- Refactored Amcrest to use central hub component ([@tchellomello] - [#8184]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) (breaking change) (new-platform) +- Fix radiothermostat -1 value issue ([@aneisch] - [#8395]) ([climate.radiotherm docs]) +- Added media_extractor service ([@minchik] - [#8369]) ([media_extractor docs]) (new-platform) +- Updated pyvera ([@alanfischer] - [#8437]) ([vera docs]) +- Upgrade phue to 1.0 (fixes #7749) ([@fabaff] - [#8444]) ([light.hue docs]) +- Add effects ([@fabaff] - [#8442]) ([light.mystrom docs]) +- Exclude 'TAXI' product (fixes #8401) ([@fabaff] - [#8438]) ([sensor.uber docs]) +- Switch pyW215 to pypi ([@andrey-git] - [#8445]) ([switch.dlink docs]) +- Vizio SmartCast support ([@vkorn] - [#8260]) ([media_player.vizio docs]) (new-platform) +- DHT support for humidity and temperature offset ([@gitmopp] - [#8238]) ([sensor.dht docs]) +- Add support for rain and moisture sensors ([@sdague] - [#8440]) ([sensor.arwn docs]) +- Hass.io: Disable timeout when updating OS/supervisor/hass ([@balloob] - [#8447]) ([hassio docs]) +- Fix Arlo Q not working with 0.48.1 ([@viswa-swami] - [#8446]) ([camera.arlo docs]) +- Support for Plex servers with enforced SSL ([@nmaggioni] - [#8341]) ([media_player.plex docs]) +- Upgrade youtube_dl to 2017.7.9 ([@fabaff] - [#8450]) ([media_extractor docs]) +- Implement a bridge between HASS event bus and KNX bus to send events ([@open-homeautomation] - [#8449]) ([knx docs]) +- LIFX: improve light availability ([@amelchio] - [#8451]) ([light.lifx docs]) +- LIFX: make broadcast address configurable ([@amelchio] - [#8453]) ([light.lifx docs]) +- Backend support for themes ([@andrey-git] - [#8419]) +- upgrade broadlink ([@danielhiversen] - [#8462]) ([sensor.broadlink docs]) ([switch.broadlink docs]) +- upgrade rfxtrx lib ([@danielhiversen] - [#8463]) ([rfxtrx docs]) +- Plex: Add exception handler when connection fails ([@abmantis] - [#8179]) ([media_player.plex docs]) +- HomeMatic dependency upgrade + IP Wall Thermostat support ([@danielperna84] - [#8465]) ([homematic docs]) +- Add kiosk-mode panel ([@andrey-git] - [#8457]) + +[#7903]: https://github.com/home-assistant/home-assistant/pull/7903 +[#7913]: https://github.com/home-assistant/home-assistant/pull/7913 +[#8122]: https://github.com/home-assistant/home-assistant/pull/8122 +[#8179]: https://github.com/home-assistant/home-assistant/pull/8179 +[#8184]: https://github.com/home-assistant/home-assistant/pull/8184 +[#8199]: https://github.com/home-assistant/home-assistant/pull/8199 +[#8202]: https://github.com/home-assistant/home-assistant/pull/8202 +[#8203]: https://github.com/home-assistant/home-assistant/pull/8203 +[#8211]: https://github.com/home-assistant/home-assistant/pull/8211 +[#8230]: https://github.com/home-assistant/home-assistant/pull/8230 +[#8238]: https://github.com/home-assistant/home-assistant/pull/8238 +[#8260]: https://github.com/home-assistant/home-assistant/pull/8260 +[#8266]: https://github.com/home-assistant/home-assistant/pull/8266 +[#8272]: https://github.com/home-assistant/home-assistant/pull/8272 +[#8274]: https://github.com/home-assistant/home-assistant/pull/8274 +[#8276]: https://github.com/home-assistant/home-assistant/pull/8276 +[#8277]: https://github.com/home-assistant/home-assistant/pull/8277 +[#8278]: https://github.com/home-assistant/home-assistant/pull/8278 +[#8281]: https://github.com/home-assistant/home-assistant/pull/8281 +[#8282]: https://github.com/home-assistant/home-assistant/pull/8282 +[#8286]: https://github.com/home-assistant/home-assistant/pull/8286 +[#8289]: https://github.com/home-assistant/home-assistant/pull/8289 +[#8298]: https://github.com/home-assistant/home-assistant/pull/8298 +[#8300]: https://github.com/home-assistant/home-assistant/pull/8300 +[#8303]: https://github.com/home-assistant/home-assistant/pull/8303 +[#8304]: https://github.com/home-assistant/home-assistant/pull/8304 +[#8305]: https://github.com/home-assistant/home-assistant/pull/8305 +[#8306]: https://github.com/home-assistant/home-assistant/pull/8306 +[#8308]: https://github.com/home-assistant/home-assistant/pull/8308 +[#8310]: https://github.com/home-assistant/home-assistant/pull/8310 +[#8313]: https://github.com/home-assistant/home-assistant/pull/8313 +[#8314]: https://github.com/home-assistant/home-assistant/pull/8314 +[#8321]: https://github.com/home-assistant/home-assistant/pull/8321 +[#8322]: https://github.com/home-assistant/home-assistant/pull/8322 +[#8325]: https://github.com/home-assistant/home-assistant/pull/8325 +[#8326]: https://github.com/home-assistant/home-assistant/pull/8326 +[#8331]: https://github.com/home-assistant/home-assistant/pull/8331 +[#8332]: https://github.com/home-assistant/home-assistant/pull/8332 +[#8335]: https://github.com/home-assistant/home-assistant/pull/8335 +[#8337]: https://github.com/home-assistant/home-assistant/pull/8337 +[#8340]: https://github.com/home-assistant/home-assistant/pull/8340 +[#8341]: https://github.com/home-assistant/home-assistant/pull/8341 +[#8343]: https://github.com/home-assistant/home-assistant/pull/8343 +[#8344]: https://github.com/home-assistant/home-assistant/pull/8344 +[#8345]: https://github.com/home-assistant/home-assistant/pull/8345 +[#8348]: https://github.com/home-assistant/home-assistant/pull/8348 +[#8349]: https://github.com/home-assistant/home-assistant/pull/8349 +[#8352]: https://github.com/home-assistant/home-assistant/pull/8352 +[#8356]: https://github.com/home-assistant/home-assistant/pull/8356 +[#8358]: https://github.com/home-assistant/home-assistant/pull/8358 +[#8359]: https://github.com/home-assistant/home-assistant/pull/8359 +[#8361]: https://github.com/home-assistant/home-assistant/pull/8361 +[#8363]: https://github.com/home-assistant/home-assistant/pull/8363 +[#8364]: https://github.com/home-assistant/home-assistant/pull/8364 +[#8365]: https://github.com/home-assistant/home-assistant/pull/8365 +[#8366]: https://github.com/home-assistant/home-assistant/pull/8366 +[#8368]: https://github.com/home-assistant/home-assistant/pull/8368 +[#8369]: https://github.com/home-assistant/home-assistant/pull/8369 +[#8370]: https://github.com/home-assistant/home-assistant/pull/8370 +[#8371]: https://github.com/home-assistant/home-assistant/pull/8371 +[#8373]: https://github.com/home-assistant/home-assistant/pull/8373 +[#8374]: https://github.com/home-assistant/home-assistant/pull/8374 +[#8376]: https://github.com/home-assistant/home-assistant/pull/8376 +[#8378]: https://github.com/home-assistant/home-assistant/pull/8378 +[#8380]: https://github.com/home-assistant/home-assistant/pull/8380 +[#8384]: https://github.com/home-assistant/home-assistant/pull/8384 +[#8385]: https://github.com/home-assistant/home-assistant/pull/8385 +[#8387]: https://github.com/home-assistant/home-assistant/pull/8387 +[#8391]: https://github.com/home-assistant/home-assistant/pull/8391 +[#8392]: https://github.com/home-assistant/home-assistant/pull/8392 +[#8393]: https://github.com/home-assistant/home-assistant/pull/8393 +[#8395]: https://github.com/home-assistant/home-assistant/pull/8395 +[#8396]: https://github.com/home-assistant/home-assistant/pull/8396 +[#8397]: https://github.com/home-assistant/home-assistant/pull/8397 +[#8398]: https://github.com/home-assistant/home-assistant/pull/8398 +[#8400]: https://github.com/home-assistant/home-assistant/pull/8400 +[#8405]: https://github.com/home-assistant/home-assistant/pull/8405 +[#8409]: https://github.com/home-assistant/home-assistant/pull/8409 +[#8410]: https://github.com/home-assistant/home-assistant/pull/8410 +[#8419]: https://github.com/home-assistant/home-assistant/pull/8419 +[#8420]: https://github.com/home-assistant/home-assistant/pull/8420 +[#8424]: https://github.com/home-assistant/home-assistant/pull/8424 +[#8427]: https://github.com/home-assistant/home-assistant/pull/8427 +[#8428]: https://github.com/home-assistant/home-assistant/pull/8428 +[#8429]: https://github.com/home-assistant/home-assistant/pull/8429 +[#8431]: https://github.com/home-assistant/home-assistant/pull/8431 +[#8433]: https://github.com/home-assistant/home-assistant/pull/8433 +[#8437]: https://github.com/home-assistant/home-assistant/pull/8437 +[#8438]: https://github.com/home-assistant/home-assistant/pull/8438 +[#8440]: https://github.com/home-assistant/home-assistant/pull/8440 +[#8442]: https://github.com/home-assistant/home-assistant/pull/8442 +[#8444]: https://github.com/home-assistant/home-assistant/pull/8444 +[#8445]: https://github.com/home-assistant/home-assistant/pull/8445 +[#8446]: https://github.com/home-assistant/home-assistant/pull/8446 +[#8447]: https://github.com/home-assistant/home-assistant/pull/8447 +[#8449]: https://github.com/home-assistant/home-assistant/pull/8449 +[#8450]: https://github.com/home-assistant/home-assistant/pull/8450 +[#8451]: https://github.com/home-assistant/home-assistant/pull/8451 +[#8453]: https://github.com/home-assistant/home-assistant/pull/8453 +[#8457]: https://github.com/home-assistant/home-assistant/pull/8457 +[#8462]: https://github.com/home-assistant/home-assistant/pull/8462 +[#8463]: https://github.com/home-assistant/home-assistant/pull/8463 +[#8465]: https://github.com/home-assistant/home-assistant/pull/8465 +[@CharlesBlonde]: https://github.com/CharlesBlonde +[@Flavien]: https://github.com/Flavien +[@Julius2342]: https://github.com/Julius2342 +[@Kernald]: https://github.com/Kernald +[@Klikini]: https://github.com/Klikini +[@MikeChristianson]: https://github.com/MikeChristianson +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@Sabesto]: https://github.com/Sabesto +[@Tommatheussen]: https://github.com/Tommatheussen +[@abmantis]: https://github.com/abmantis +[@aequitas]: https://github.com/aequitas +[@alanfischer]: https://github.com/alanfischer +[@alexrockt]: https://github.com/alexrockt +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@aneisch]: https://github.com/aneisch +[@armills]: https://github.com/armills +[@aronsky]: https://github.com/aronsky +[@azogue]: https://github.com/azogue +[@balloob]: https://github.com/balloob +[@clarkewd]: https://github.com/clarkewd +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dgomes]: https://github.com/dgomes +[@doctorjames]: https://github.com/doctorjames +[@fabaff]: https://github.com/fabaff +[@gitmopp]: https://github.com/gitmopp +[@heinemml]: https://github.com/heinemml +[@mattsch]: https://github.com/mattsch +[@mezz64]: https://github.com/mezz64 +[@michaelarnauts]: https://github.com/michaelarnauts +[@minchik]: https://github.com/minchik +[@mitchese]: https://github.com/mitchese +[@mjg59]: https://github.com/mjg59 +[@mjj4791]: https://github.com/mjj4791 +[@mtreinish]: https://github.com/mtreinish +[@nmaggioni]: https://github.com/nmaggioni +[@open-homeautomation]: https://github.com/open-homeautomation +[@persandstrom]: https://github.com/persandstrom +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@robmarkcole]: https://github.com/robmarkcole +[@rytilahti]: https://github.com/rytilahti +[@scarface-4711]: https://github.com/scarface-4711 +[@sdague]: https://github.com/sdague +[@simaosimao]: https://github.com/simaosimao +[@tchellomello]: https://github.com/tchellomello +[@thecynic]: https://github.com/thecynic +[@viswa-swami]: https://github.com/viswa-swami +[@vkorn]: https://github.com/vkorn +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[@wmalgadey]: https://github.com/wmalgadey +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[amcrest docs]: https://home-assistant.io/components/amcrest/ +[apcupsd docs]: https://home-assistant.io/components/apcupsd/ +[binary_sensor.hikvision docs]: https://home-assistant.io/components/binary_sensor.hikvision/ +[binary_sensor.modbus docs]: https://home-assistant.io/components/binary_sensor.modbus/ +[binary_sensor.octoprint docs]: https://home-assistant.io/components/binary_sensor.octoprint/ +[binary_sensor.pilight docs]: https://home-assistant.io/components/binary_sensor.pilight/ +[binary_sensor.zha docs]: https://home-assistant.io/components/binary_sensor.zha/ +[camera.amcrest docs]: https://home-assistant.io/components/camera.amcrest/ +[camera.arlo docs]: https://home-assistant.io/components/camera.arlo/ +[climate.flexit docs]: https://home-assistant.io/components/climate.flexit/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.radiotherm docs]: https://home-assistant.io/components/climate.radiotherm/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.linksys_smart docs]: https://home-assistant.io/components/device_tracker.linksys_smart/ +[device_tracker.tplink docs]: https://home-assistant.io/components/device_tracker.tplink/ +[device_tracker.upc_connect docs]: https://home-assistant.io/components/device_tracker.upc_connect/ +[dyson docs]: https://home-assistant.io/components/dyson/ +[fan.dyson docs]: https://home-assistant.io/components/fan.dyson/ +[group docs]: https://home-assistant.io/components/group/ +[hassio docs]: https://home-assistant.io/hassio/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[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/ +[knx docs]: https://home-assistant.io/components/knx/ +[lametric docs]: https://home-assistant.io/components/lametric/ +[light.avion docs]: https://home-assistant.io/components/light.avion/ +[light.decora docs]: https://home-assistant.io/components/light.decora/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.hyperion docs]: https://home-assistant.io/components/light.hyperion/ +[light.knx docs]: https://home-assistant.io/components/light.knx/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mystrom docs]: https://home-assistant.io/components/light.mystrom/ +[light.rflink docs]: https://home-assistant.io/components/light.rflink/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[lutron docs]: https://home-assistant.io/components/lutron/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.apple_tv docs]: https://home-assistant.io/components/media_player.apple_tv/ +[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/ +[media_player.emby docs]: https://home-assistant.io/components/media_player.emby/ +[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/ +[media_player.soundtouch docs]: https://home-assistant.io/components/media_player.soundtouch/ +[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/ +[media_player.vizio docs]: https://home-assistant.io/components/media_player.vizio/ +[modbus docs]: https://home-assistant.io/components/modbus/ +[mqtt docs]: https://home-assistant.io/components/mqtt/ +[notify docs]: https://home-assistant.io/components/notify/ +[notify.discord docs]: https://home-assistant.io/components/notify.discord/ +[notify.lametric docs]: https://home-assistant.io/components/notify.lametric/ +[notify.slack docs]: https://home-assistant.io/components/notify.slack/ +[notify.twitter docs]: https://home-assistant.io/components/notify.twitter/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[python_script docs]: https://home-assistant.io/components/python_script/ +[recorder docs]: https://home-assistant.io/components/recorder/ +[rflink docs]: https://home-assistant.io/components/rflink/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[scene.velux docs]: https://home-assistant.io/components/scene.velux/ +[sensor.amcrest docs]: https://home-assistant.io/components/sensor.amcrest/ +[sensor.apcupsd docs]: https://home-assistant.io/components/sensor.apcupsd/ +[sensor.arwn docs]: https://home-assistant.io/components/sensor.arwn/ +[sensor.broadlink docs]: https://home-assistant.io/components/sensor.broadlink/ +[sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/ +[sensor.citybikes docs]: https://home-assistant.io/components/sensor.citybikes/ +[sensor.dht docs]: https://home-assistant.io/components/sensor.dht/ +[sensor.dyson docs]: https://home-assistant.io/components/sensor.dyson/ +[sensor.gtfs docs]: https://home-assistant.io/components/sensor.gtfs/ +[sensor.london_underground docs]: https://home-assistant.io/components/sensor.london_underground/ +[sensor.modbus docs]: https://home-assistant.io/components/sensor.modbus/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.openweathermap docs]: https://home-assistant.io/components/sensor.openweathermap/ +[sensor.otp docs]: https://home-assistant.io/components/sensor.otp/ +[sensor.rflink docs]: https://home-assistant.io/components/sensor.rflink/ +[sensor.london_underground docs]: https://home-assistant.io/components/sensor.london_underground/ +[sensor.uber docs]: https://home-assistant.io/components/sensor.uber/ +[sensor.waqi docs]: https://home-assistant.io/components/sensor.waqi/ +[sensor.yweather docs]: https://home-assistant.io/components/sensor.yweather/ +[sensor.zha docs]: https://home-assistant.io/components/sensor.zha/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.dlink docs]: https://home-assistant.io/components/switch.dlink/ +[switch.modbus docs]: https://home-assistant.io/components/switch.modbus/ +[switch.rachio docs]: https://home-assistant.io/components/switch.rachio/ +[switch.rflink docs]: https://home-assistant.io/components/switch.rflink/ +[switch.xiaomi_vacuum docs]: https://home-assistant.io/components/switch.xiaomi_vacuum/ +[tado docs]: https://home-assistant.io/components/tado/ +[tts docs]: https://home-assistant.io/components/tts/ +[tts.amazon_polly docs]: https://home-assistant.io/components/tts.amazon_polly/ +[upnp docs]: https://home-assistant.io/components/upnp/ +[velux docs]: https://home-assistant.io/components/velux/ +[frontend docs]: https://home-assistant.io/components/frontend/ +[vera docs]: https://home-assistant.io/components/vera/ +[verisure docs]: https://home-assistant.io/components/verisure/ +[wake_on_lan docs]: https://home-assistant.io/components/wake_on_lan/ +[weather.buienradar docs]: https://home-assistant.io/components/weather.buienradar/ +[weather.openweathermap docs]: https://home-assistant.io/components/weather.openweathermap/ +[zha docs]: https://home-assistant.io/components/zha/ +[zha.const docs]: https://home-assistant.io/components/zha.const/ +[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-07-0.49/components.png b/source/images/blog/2017-07-0.49/components.png new file mode 100644 index 0000000000000000000000000000000000000000..86629d6dff4e3041b55186fdcc59a5fa4ba5082f GIT binary patch literal 26076 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

$tPyurX1uEkXlP%>HWj?hB-$?tDWCPB^n) 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 literal 0 HcmV?d00001 diff --git a/source/images/blog/2017-07-0.49/green-theme.png b/source/images/blog/2017-07-0.49/green-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..d9672ab95583939a2b2f54b88bcb12a3e164717d GIT binary patch literal 5667 zcmchbXEfZ=xA#X+h?0Vc5JV87cS8`p6GW6zhar0V=`}$jMTb||tdY#mz~k}j>+2#SB0W7lH8nM+ zrlxv&dS_>6gM)*ip`n6;f;>Dt{r&w)N=nkw(m%E{006L`eDe1KzkRl1ZEcN2B8!WQ z6B85TmuyThx4XK!nwpxTqN2RKygn?vwiOMa~j8U-WHg`Iip0a

BjbfX3ery!vaULJ6rSzQRA6_L21v5 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 literal 0 HcmV?d00001