From 41af54a264a1674547ab820b5c452034d826f680 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 29 Jun 2018 18:09:32 -0400 Subject: [PATCH 01/22] Add release blog post --- _config.yml | 8 +- source/_posts/2018-07-06-release-73.markdown | 287 +++++++++++++++++++ 2 files changed, 291 insertions(+), 4 deletions(-) create mode 100644 source/_posts/2018-07-06-release-73.markdown diff --git a/_config.yml b/_config.yml index 7a63002486a..08612e54735 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 72 -current_patch_version: 1 -date_released: 2018-06-25 +current_minor_version: 73 +current_patch_version: 0 +date_released: 2018-07-06 # 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-0721---june-25" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown new file mode 100644 index 00000000000..0161aea2fd4 --- /dev/null +++ b/source/_posts/2018-07-06-release-73.markdown @@ -0,0 +1,287 @@ +--- +layout: post +title: "0.73: TBD - update date" +description: "TBD" +date: 2018-06-29 00:01:00 +date_formatted: "July 6, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-07-0.73/components.png +--- + + + +Lots of Lovelace changes. + +## {% linkable_title New Platforms %} + +- Support for Homekit Controller climate devices ([@armills] - [#15057]) ([homekit_controller docs]) ([climate.homekit_controller docs]) ([light.homekit_controller docs]) ([switch.homekit_controller docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). 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](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- Update to hole to 0.3.0 ([@fabaff] - [#15014]) ([sensor.pi_hole docs]) (breaking change) +- Update PostNL unit of measure to align with UPS ([@keesschollaart81] - [#15023]) ([sensor.postnl docs]) (breaking change) +- Make Pollen.com platform async ([@bachya] - [#14963]) ([sensor.pollen docs]) (breaking change) +- Adding 'namespace' for prometheus metrics ([@alexbarcelo] - [#13738]) ([prometheus docs]) (breaking change) +- Fix zwave climate operation mode mappings ([@cdce8p] - [#15162]) ([climate.zwave docs]) (breaking change) +- X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) +- Stop supporting deprecated TLS ciphers ([@hmmbob] - [#15217]) ([http docs]) (breaking change) + +## {% linkable_title All changes %} + +- Add entity support to Waze Travel Time ([@Petro31] - [#14934]) ([sensor.waze_travel_time docs]) +- Switch to own packaged version of anel_pwrctrl ([@andrey-git] - [#15011]) ([switch.anel_pwrctrl docs]) +- Switch to own packaged version of braviarc ([@andrey-git] - [#15009]) ([media_player.braviatv docs]) +- HomeKit style clean up ([@schmittx] - [#14793]) ([homekit docs]) +- Upgrade netdisco to 1.5.0 ([@fabaff] - [#15016]) +- Update to hole to 0.3.0 ([@fabaff] - [#15014]) ([sensor.pi_hole docs]) (breaking change) +- Upgrade numpy to 1.14.5 ([@fabaff] - [#15015]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) +- Upgrade youtube_dl to 2018.06.14 ([@fabaff] - [#15013]) ([media_extractor docs]) +- Switch nuimo to a hopefully working pypi version ([@andrey-git] - [#15006]) ([nuimo_controller docs]) +- Remove typing ([@fabaff] - [#15018]) +- Add support for Homekit battery service ([@schmittx] - [#14288]) ([homekit docs]) +- Update PostNL unit of measure to align with UPS ([@keesschollaart81] - [#15023]) ([sensor.postnl docs]) (breaking change) +- Expose Wemo component availability to home assistant ([@gstorer] - [#14995]) ([light.wemo docs]) +- Improve volume support for Vizio Smartcast ([@JeffLIrion] - [#14981]) ([media_player.vizio docs]) +- Upgrade requests to 2.19.1 ([@fabaff] - [#15019]) +- Show running apps as sources for Fire TV ([@JeffLIrion] - [#15033]) ([media_player.firetv docs]) +- Patch save_json ([@Hate-Usernames] - [#15046]) +- Update loopenergy link to docs ([@fabaff] - [#15050]) ([sensor.loopenergy docs]) +- Switch upstream adafruit package ([@andrey-git] - [#15038]) ([sensor.dht docs]) +- Switch to own packaged version of pyflic ([@andrey-git] - [#15041]) ([binary_sensor.flic docs]) +- Update condition.py ([@raoulteeuwen] - [#15021]) +- Update pywemo to version 0.4.28. ([@gstorer] - [#15052]) ([wemo docs]) +- Upgrade pyarlo to 0.1.8 to support Arlo Baby monitor ([@tchellomello] - [#15060]) ([arlo docs]) +- Upgraded librouteros since it has support for authenticatoin in new RouterOS. ([@dejx] - [#15056]) ([device_tracker docs]) +- Python wink update ([@w1ll1am23] - [#15048]) ([wink docs]) ([cover.wink docs]) +- Fix tplink max/min kelvin for temperature adjustment ([@titilambert] - [#15020]) ([light.tplink docs]) +- Update pyhomematic to 0.1.44 ([@danielperna84] - [#15069]) ([homematic docs]) +- Homematic: Add optional port for resolvenames via JSON ([@hanzoh] - [#15029]) ([homematic docs]) +- Add script to run monkeytype typing on test suite ([@MartinHjelmare] - [#14440]) +- Switch to pypi version of pybotvac ([@andrey-git] - [#15115]) ([neato docs]) +- Added attribute attribution to Digital Ocean component ([@tchellomello] - [#15114]) ([digital_ocean docs]) ([binary_sensor.digital_ocean docs]) ([switch.digital_ocean docs]) +- Make Pollen.com platform async ([@bachya] - [#14963]) ([sensor.pollen docs]) (breaking change) +- deCONZ small improvements ([@Kane610] - [#15128]) ([deconz docs]) ([light.deconz docs]) +- Bump insteonplm version to 0.11.2 ([@teharris1] - [#15133]) ([insteon_plm docs]) +- Reorganize mysensors ([@MartinHjelmare] - [#15123]) +- MQTT Alarm Control Panel: add retain option for publishing for cases... ([@b3nj1] - [#15134]) ([alarm_control_panel.mqtt docs]) +- Add discovery support to mqtt climate component. ([@dreizehnelf] - [#15085]) ([mqtt docs]) ([climate.mqtt docs]) +- Support for Homekit Controller climate devices ([@armills] - [#15057]) ([homekit_controller docs]) ([climate.homekit_controller docs]) ([light.homekit_controller docs]) ([switch.homekit_controller docs]) (new-platform) +- PyPi: Fix description and setup.cfg ([@cdce8p] - [#15107]) +- Add language to dark sky weather component ([@pvizeli] - [#15130]) ([weather.darksky docs]) +- Add storage helper and migrate config entries ([@balloob] - [#15045]) ([sensor.fitbit docs]) +- Fix pylintrc section order and option placements ([@scop] - [#15120]) +- Fix #14919. Should throw exception when camera stream closed by frontend ([@awarecan] - [#15028]) ([camera docs]) ([camera.proxy docs]) +- Revert "Add language to dark sky weather component" ([@pvizeli] - [#15142]) ([weather.darksky docs]) +- Lint cleanup ([@scop] - [#15103]) +- Update aiofreepybox to fix HTTPS connection issues ([@stilllman] - [#15104]) ([device_tracker docs]) +- Fix mysensors climate supported features ([@MartinHjelmare] - [#15110]) ([climate.mysensors docs]) +- Update xiaomi.py ([@vaidyasr] - [#15136]) ([camera.xiaomi docs]) +- Return None to indicate no config found ([@balloob] - [#15147]) +- Add channel changing support to SamsungTV component ([@mlebrun] - [#14451]) ([media_player.samsungtv docs]) +- Add SSL peer certificate support to HTTP server ([@kepten] - [#15043]) ([emulated_hue docs]) ([http docs]) +- Address inconsistent behavior on flux_led component ([@oblogic7] - [#14713]) ([light.flux_led docs]) +- Upgrade youtube_dl to 2018.06.25 ([@fabaff] - [#15168]) ([media_extractor docs]) +- Upgrade keyring to 13.0.0 ([@fabaff] - [#15167]) +- Upgrade sendgrid to 5.4.1 ([@fabaff] - [#15166]) ([notify docs]) +- Add Mini remote support to insteon_plm ([@teharris1] - [#15152]) ([insteon_plm docs]) +- Warn when using custom components ([@balloob] - [#15172]) +- Philips Hue Scene Activation: Simplified scene lookup logic, improved error handling ([@MizterB] - [#15175]) ([hue docs]) +- Finalize BotVac D7 Support And Further Reduce Cloud Calls ([@dshokouhi] - [#15161]) ([neato docs]) ([camera.neato docs]) ([switch.neato docs]) ([vacuum.neato docs]) +- DarkSky weather / Fix states ([@pvizeli] - [#15174]) ([weather.darksky docs]) +- Only use the X-Forwarded-For header if connection is from a trusted network ([@colinodell] - [#15182]) ([http docs]) +- Adding 'namespace' for prometheus metrics ([@alexbarcelo] - [#13738]) ([prometheus docs]) (breaking change) +- Storage auth ([@balloob] - [#15192]) +- Make sure we check access token expiration ([@balloob] - [#15207]) ([frontend docs]) +- Migrate home assistant auth provider to use storage helper ([@balloob] - [#15200]) +- Fix zwave climate operation mode mappings ([@cdce8p] - [#15162]) ([climate.zwave docs]) (breaking change) +- Fixed Indentation error ([@vaidyasr] - [#15210]) ([camera.xiaomi docs]) +- X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) +- Stop supporting deprecated TLS ciphers ([@hmmbob] - [#15217]) ([http docs]) (breaking change) +- Update eternalegypt ([@amelchio] - [#15180]) ([netgear_lte docs]) ([notify docs]) +- Update python-wink to 1.9.1 ([@vickyg3] - [#15215]) ([wink docs]) +- Fix 'AirQualityMonitorStatus' object has no attribute ‘time_state’ ([@syssi] - [#15216]) ([sensor.xiaomi_miio docs]) +- Use cached states for neato when possible ([@dshokouhi] - [#15218]) ([switch.neato docs]) ([vacuum.neato docs]) + +[#13738]: https://github.com/home-assistant/home-assistant/pull/13738 +[#14288]: https://github.com/home-assistant/home-assistant/pull/14288 +[#14440]: https://github.com/home-assistant/home-assistant/pull/14440 +[#14451]: https://github.com/home-assistant/home-assistant/pull/14451 +[#14713]: https://github.com/home-assistant/home-assistant/pull/14713 +[#14793]: https://github.com/home-assistant/home-assistant/pull/14793 +[#14934]: https://github.com/home-assistant/home-assistant/pull/14934 +[#14963]: https://github.com/home-assistant/home-assistant/pull/14963 +[#14981]: https://github.com/home-assistant/home-assistant/pull/14981 +[#14995]: https://github.com/home-assistant/home-assistant/pull/14995 +[#15006]: https://github.com/home-assistant/home-assistant/pull/15006 +[#15009]: https://github.com/home-assistant/home-assistant/pull/15009 +[#15011]: https://github.com/home-assistant/home-assistant/pull/15011 +[#15013]: https://github.com/home-assistant/home-assistant/pull/15013 +[#15014]: https://github.com/home-assistant/home-assistant/pull/15014 +[#15015]: https://github.com/home-assistant/home-assistant/pull/15015 +[#15016]: https://github.com/home-assistant/home-assistant/pull/15016 +[#15018]: https://github.com/home-assistant/home-assistant/pull/15018 +[#15019]: https://github.com/home-assistant/home-assistant/pull/15019 +[#15020]: https://github.com/home-assistant/home-assistant/pull/15020 +[#15021]: https://github.com/home-assistant/home-assistant/pull/15021 +[#15023]: https://github.com/home-assistant/home-assistant/pull/15023 +[#15028]: https://github.com/home-assistant/home-assistant/pull/15028 +[#15029]: https://github.com/home-assistant/home-assistant/pull/15029 +[#15033]: https://github.com/home-assistant/home-assistant/pull/15033 +[#15038]: https://github.com/home-assistant/home-assistant/pull/15038 +[#15041]: https://github.com/home-assistant/home-assistant/pull/15041 +[#15043]: https://github.com/home-assistant/home-assistant/pull/15043 +[#15045]: https://github.com/home-assistant/home-assistant/pull/15045 +[#15046]: https://github.com/home-assistant/home-assistant/pull/15046 +[#15048]: https://github.com/home-assistant/home-assistant/pull/15048 +[#15050]: https://github.com/home-assistant/home-assistant/pull/15050 +[#15052]: https://github.com/home-assistant/home-assistant/pull/15052 +[#15056]: https://github.com/home-assistant/home-assistant/pull/15056 +[#15057]: https://github.com/home-assistant/home-assistant/pull/15057 +[#15060]: https://github.com/home-assistant/home-assistant/pull/15060 +[#15069]: https://github.com/home-assistant/home-assistant/pull/15069 +[#15085]: https://github.com/home-assistant/home-assistant/pull/15085 +[#15103]: https://github.com/home-assistant/home-assistant/pull/15103 +[#15104]: https://github.com/home-assistant/home-assistant/pull/15104 +[#15107]: https://github.com/home-assistant/home-assistant/pull/15107 +[#15110]: https://github.com/home-assistant/home-assistant/pull/15110 +[#15114]: https://github.com/home-assistant/home-assistant/pull/15114 +[#15115]: https://github.com/home-assistant/home-assistant/pull/15115 +[#15120]: https://github.com/home-assistant/home-assistant/pull/15120 +[#15123]: https://github.com/home-assistant/home-assistant/pull/15123 +[#15128]: https://github.com/home-assistant/home-assistant/pull/15128 +[#15130]: https://github.com/home-assistant/home-assistant/pull/15130 +[#15133]: https://github.com/home-assistant/home-assistant/pull/15133 +[#15134]: https://github.com/home-assistant/home-assistant/pull/15134 +[#15136]: https://github.com/home-assistant/home-assistant/pull/15136 +[#15142]: https://github.com/home-assistant/home-assistant/pull/15142 +[#15147]: https://github.com/home-assistant/home-assistant/pull/15147 +[#15152]: https://github.com/home-assistant/home-assistant/pull/15152 +[#15161]: https://github.com/home-assistant/home-assistant/pull/15161 +[#15162]: https://github.com/home-assistant/home-assistant/pull/15162 +[#15166]: https://github.com/home-assistant/home-assistant/pull/15166 +[#15167]: https://github.com/home-assistant/home-assistant/pull/15167 +[#15168]: https://github.com/home-assistant/home-assistant/pull/15168 +[#15172]: https://github.com/home-assistant/home-assistant/pull/15172 +[#15174]: https://github.com/home-assistant/home-assistant/pull/15174 +[#15175]: https://github.com/home-assistant/home-assistant/pull/15175 +[#15180]: https://github.com/home-assistant/home-assistant/pull/15180 +[#15182]: https://github.com/home-assistant/home-assistant/pull/15182 +[#15192]: https://github.com/home-assistant/home-assistant/pull/15192 +[#15200]: https://github.com/home-assistant/home-assistant/pull/15200 +[#15204]: https://github.com/home-assistant/home-assistant/pull/15204 +[#15207]: https://github.com/home-assistant/home-assistant/pull/15207 +[#15210]: https://github.com/home-assistant/home-assistant/pull/15210 +[#15215]: https://github.com/home-assistant/home-assistant/pull/15215 +[#15216]: https://github.com/home-assistant/home-assistant/pull/15216 +[#15217]: https://github.com/home-assistant/home-assistant/pull/15217 +[#15218]: https://github.com/home-assistant/home-assistant/pull/15218 +[@Hate-Usernames]: https://github.com/Hate-Usernames +[@JeffLIrion]: https://github.com/JeffLIrion +[@Kane610]: https://github.com/Kane610 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MizterB]: https://github.com/MizterB +[@Petro31]: https://github.com/Petro31 +[@alexbarcelo]: https://github.com/alexbarcelo +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@awarecan]: https://github.com/awarecan +[@b3nj1]: https://github.com/b3nj1 +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@colinodell]: https://github.com/colinodell +[@danielperna84]: https://github.com/danielperna84 +[@dejx]: https://github.com/dejx +[@dreizehnelf]: https://github.com/dreizehnelf +[@dshokouhi]: https://github.com/dshokouhi +[@fabaff]: https://github.com/fabaff +[@gstorer]: https://github.com/gstorer +[@hanzoh]: https://github.com/hanzoh +[@hmmbob]: https://github.com/hmmbob +[@keesschollaart81]: https://github.com/keesschollaart81 +[@kepten]: https://github.com/kepten +[@mlebrun]: https://github.com/mlebrun +[@oblogic7]: https://github.com/oblogic7 +[@pvizeli]: https://github.com/pvizeli +[@raoulteeuwen]: https://github.com/raoulteeuwen +[@schmittx]: https://github.com/schmittx +[@scop]: https://github.com/scop +[@stilllman]: https://github.com/stilllman +[@syssi]: https://github.com/syssi +[@tchellomello]: https://github.com/tchellomello +[@teharris1]: https://github.com/teharris1 +[@titilambert]: https://github.com/titilambert +[@vaidyasr]: https://github.com/vaidyasr +[@vickyg3]: https://github.com/vickyg3 +[@w1ll1am23]: https://github.com/w1ll1am23 +[alarm_control_panel.mqtt docs]: /components/alarm_control_panel.mqtt/ +[arlo docs]: /components/arlo/ +[binary_sensor.digital_ocean docs]: /components/binary_sensor.digital_ocean/ +[binary_sensor.flic docs]: /components/binary_sensor.flic/ +[binary_sensor.trend docs]: /components/binary_sensor.trend/ +[camera docs]: /components/camera/ +[camera.neato docs]: /components/camera.neato/ +[camera.proxy docs]: /components/camera.proxy/ +[camera.xiaomi docs]: /components/camera.xiaomi/ +[climate.homekit_controller docs]: /components/climate.homekit_controller/ +[climate.mqtt docs]: /components/climate.mqtt/ +[climate.mysensors docs]: /components/climate.mysensors/ +[climate.zwave docs]: /components/climate.zwave/ +[cover.wink docs]: /components/cover.wink/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[digital_ocean docs]: /components/digital_ocean/ +[emulated_hue docs]: /components/emulated_hue/ +[frontend docs]: /components/frontend/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[homematic docs]: /components/homematic/ +[http docs]: /components/http/ +[hue docs]: /components/hue/ +[image_processing.opencv docs]: /components/image_processing.opencv/ +[insteon_plm docs]: /components/insteon_plm/ +[light.deconz docs]: /components/light.deconz/ +[light.flux_led docs]: /components/light.flux_led/ +[light.homekit_controller docs]: /components/light.homekit_controller/ +[light.tplink docs]: /components/light.tplink/ +[light.wemo docs]: /components/light.wemo/ +[media_extractor docs]: /components/media_extractor/ +[media_player.braviatv docs]: /components/media_player.braviatv/ +[media_player.firetv docs]: /components/media_player.firetv/ +[media_player.samsungtv docs]: /components/media_player.samsungtv/ +[media_player.vizio docs]: /components/media_player.vizio/ +[mqtt docs]: /components/mqtt/ +[neato docs]: /components/neato/ +[netgear_lte docs]: /components/netgear_lte/ +[notify docs]: /components/notify/ +[nuimo_controller docs]: /components/nuimo_controller/ +[prometheus docs]: /components/prometheus/ +[sensor.dht docs]: /components/sensor.dht/ +[sensor.fitbit docs]: /components/sensor.fitbit/ +[sensor.loopenergy docs]: /components/sensor.loopenergy/ +[sensor.pi_hole docs]: /components/sensor.pi_hole/ +[sensor.pollen docs]: /components/sensor.pollen/ +[sensor.postnl docs]: /components/sensor.postnl/ +[sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ +[sensor.xiaomi_miio docs]: /components/sensor.xiaomi_miio/ +[switch.anel_pwrctrl docs]: /components/switch.anel_pwrctrl/ +[switch.digital_ocean docs]: /components/switch.digital_ocean/ +[switch.homekit_controller docs]: /components/switch.homekit_controller/ +[switch.neato docs]: /components/switch.neato/ +[vacuum.neato docs]: /components/vacuum.neato/ +[weather.darksky docs]: /components/weather.darksky/ +[wemo docs]: /components/wemo/ +[wink docs]: /components/wink/ From e403f4d2a1802cbc81d5401d5ce9c10a9369d03b Mon Sep 17 00:00:00 2001 From: Frank Niesten Date: Sat, 30 Jun 2018 10:12:14 +0200 Subject: [PATCH 02/22] Added Smart Meter (#5625) Sagemcom XS210 ESMR5 works at home out of the box with this component. --- source/_components/sensor.dsmr.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.dsmr.markdown b/source/_components/sensor.dsmr.markdown index 6cd6befc3ab..8ead92afc41 100644 --- a/source/_components/sensor.dsmr.markdown +++ b/source/_components/sensor.dsmr.markdown @@ -32,6 +32,7 @@ This component is known to work for: - Landis+Gyr ZCF110 / ZM F110 (DSMR 4.2) - Kaifa E0026 - Kamstrup 382JxC (DSMR 2.2) +- Sagemcom XS210 ESMR5 USB serial converters: From 6f7ef34904b423dce23c939dc373fc61d58fb19f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 30 Jun 2018 16:24:01 +0200 Subject: [PATCH 03/22] Add changes from #5195 (#5637) --- source/_addons/duckdns.markdown | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 123e975e970..2f910f75b06 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -20,19 +20,18 @@ featured: true "keyfile": "privkey.pem" }, "token": "sdfj-2131023-dslfjsd-12321", - "domains": ["my-domain.duckdns.org"] + "domains": ["my-domain.duckdns.org"], + "seconds": 300 } ``` Configuration variables: -- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Encrypt certificates for your DuckDNS domain. +- **lets_encrypt.accept_terms** (*Required*): If you accept the [Let's Encrypt Subscriber Agreement](https://letsencrypt.org/repository/), it will generate and update Let's Encrypt certificates for your DuckDNS domain. - **token** (*Required*): Your Duck DNS API key. - **domains** (*Required*): A list of domains to update DNS. - **seconds** (*Required*): Seconds between updates to Duck DNS. -[le]: https://letsencrypt.org/repository/ - ## {% linkable_title Home Assistant configuration %} Use the following configuration in Home Assistant to use the generated certificate: @@ -48,7 +47,7 @@ If you use a port other than `8123` or an SSL proxy, change the port number acco ## {% linkable_title Router configuration %} -You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/) - noting that you'll only need to forward the TCP port. +You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/). Noting that you'll only need to forward the TCP port. Ensure that you allocate the Home Assistant system a fixed IP on your network before you configure port forwarding. You can do this either on the computer itself (see the [install guide](/hassio/installation/) or via a static lease on your router. From ef37588b48574eaf8e7bd2a677f5bf0bb67253ba Mon Sep 17 00:00:00 2001 From: Bruno Adele Date: Sun, 1 Jul 2018 11:54:08 +0200 Subject: [PATCH 04/22] Use openstreetmap instead googlemap (no free price) (#5641) * Use openstreetmap instead googlemap (no free price) * Templates must be escaped and fix names --- source/_components/binary_sensor.iss.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.iss.markdown b/source/_components/binary_sensor.iss.markdown index c2061706882..0d4e4276b30 100644 --- a/source/_components/binary_sensor.iss.markdown +++ b/source/_components/binary_sensor.iss.markdown @@ -42,11 +42,13 @@ If you set `show_on_map` `True` then the location attributes are named `latitude The [generic camera platform](/components/camera.mjpeg/) offers the possibility to show the location of the ISS on Google Maps. +{% raw %} ```yaml # Example configuration.yaml entry camera: - platform: generic name: ISS - still_image_url: {% raw %}https://maps.googleapis.com/maps/api/staticmap?center={{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }}&zoom=5&size=500x500&maptype=roadmap&markers=color:blue%7Clabel:P%7C{{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }}{% endraw %} - limit_refetch_to_url_change: true + still_image_url: http://staticmap.openstreetmap.de/staticmap.php?center={{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }}&zoom=4&size=865x512&maptype=mapnik&markers={{ states.binary_sensor.iss.attributes.lat }},{{ states.binary_sensor.iss.attributes.long }},lightblue + limit_refetch_to_url_change: true ``` +{% endraw %} From 1a4bcfef281eb937af1b7fc5d6648caefecb4036 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 13:42:58 -0400 Subject: [PATCH 05/22] Update notes --- source/_posts/2018-07-06-release-73.markdown | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 0161aea2fd4..95495aa5716 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -18,6 +18,7 @@ Lots of Lovelace changes. ## {% linkable_title New Platforms %} - Support for Homekit Controller climate devices ([@armills] - [#15057]) ([homekit_controller docs]) ([climate.homekit_controller docs]) ([light.homekit_controller docs]) ([switch.homekit_controller docs]) (new-platform) +- Rachio webhooks ([@Klikini] - [#15111]) ([rachio docs]) ([binary_sensor.rachio docs]) ([switch.rachio docs]) (beta fix) (new-platform) ## {% linkable_title If you need help... %} @@ -38,6 +39,14 @@ Experiencing issues introduced by this release? Please report them in our [issue - X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) - Stop supporting deprecated TLS ciphers ([@hmmbob] - [#15217]) ([http docs]) (breaking change) +## {% linkable_title Beta Fixes %} + +- Rachio webhooks ([@Klikini] - [#15111]) ([rachio docs]) ([binary_sensor.rachio docs]) ([switch.rachio docs]) (beta fix) (new-platform) +- Only create front-end client_id once ([@awarecan] - [#15214]) ([frontend docs]) (beta fix) +- Make LIFX color/temperature attributes mutually exclusive ([@amelchio] - [#15234]) ([light.lifx docs]) (beta fix) +- Fix an issue when user's nest developer account don't have permission ([@awarecan] - [#15237]) ([binary_sensor.nest docs]) (beta fix) +- Revert some changes to setup.py ([@cdce8p] - [#15248]) (beta fix) + ## {% linkable_title All changes %} - Add entity support to Waze Travel Time ([@Petro31] - [#14934]) ([sensor.waze_travel_time docs]) @@ -113,6 +122,11 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update python-wink to 1.9.1 ([@vickyg3] - [#15215]) ([wink docs]) - Fix 'AirQualityMonitorStatus' object has no attribute ‘time_state’ ([@syssi] - [#15216]) ([sensor.xiaomi_miio docs]) - Use cached states for neato when possible ([@dshokouhi] - [#15218]) ([switch.neato docs]) ([vacuum.neato docs]) +- Rachio webhooks ([@Klikini] - [#15111]) ([rachio docs]) ([binary_sensor.rachio docs]) ([switch.rachio docs]) (beta fix) (new-platform) +- Only create front-end client_id once ([@awarecan] - [#15214]) ([frontend docs]) (beta fix) +- Make LIFX color/temperature attributes mutually exclusive ([@amelchio] - [#15234]) ([light.lifx docs]) (beta fix) +- Fix an issue when user's nest developer account don't have permission ([@awarecan] - [#15237]) ([binary_sensor.nest docs]) (beta fix) +- Revert some changes to setup.py ([@cdce8p] - [#15248]) (beta fix) [#13738]: https://github.com/home-assistant/home-assistant/pull/13738 [#14288]: https://github.com/home-assistant/home-assistant/pull/14288 @@ -156,6 +170,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#15104]: https://github.com/home-assistant/home-assistant/pull/15104 [#15107]: https://github.com/home-assistant/home-assistant/pull/15107 [#15110]: https://github.com/home-assistant/home-assistant/pull/15110 +[#15111]: https://github.com/home-assistant/home-assistant/pull/15111 [#15114]: https://github.com/home-assistant/home-assistant/pull/15114 [#15115]: https://github.com/home-assistant/home-assistant/pull/15115 [#15120]: https://github.com/home-assistant/home-assistant/pull/15120 @@ -183,13 +198,18 @@ Experiencing issues introduced by this release? Please report them in our [issue [#15204]: https://github.com/home-assistant/home-assistant/pull/15204 [#15207]: https://github.com/home-assistant/home-assistant/pull/15207 [#15210]: https://github.com/home-assistant/home-assistant/pull/15210 +[#15214]: https://github.com/home-assistant/home-assistant/pull/15214 [#15215]: https://github.com/home-assistant/home-assistant/pull/15215 [#15216]: https://github.com/home-assistant/home-assistant/pull/15216 [#15217]: https://github.com/home-assistant/home-assistant/pull/15217 [#15218]: https://github.com/home-assistant/home-assistant/pull/15218 +[#15234]: https://github.com/home-assistant/home-assistant/pull/15234 +[#15237]: https://github.com/home-assistant/home-assistant/pull/15237 +[#15248]: https://github.com/home-assistant/home-assistant/pull/15248 [@Hate-Usernames]: https://github.com/Hate-Usernames [@JeffLIrion]: https://github.com/JeffLIrion [@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini [@MartinHjelmare]: https://github.com/MartinHjelmare [@MizterB]: https://github.com/MizterB [@Petro31]: https://github.com/Petro31 @@ -231,6 +251,8 @@ Experiencing issues introduced by this release? Please report them in our [issue [arlo docs]: /components/arlo/ [binary_sensor.digital_ocean docs]: /components/binary_sensor.digital_ocean/ [binary_sensor.flic docs]: /components/binary_sensor.flic/ +[binary_sensor.nest docs]: /components/binary_sensor.nest/ +[binary_sensor.rachio docs]: /components/binary_sensor.rachio/ [binary_sensor.trend docs]: /components/binary_sensor.trend/ [camera docs]: /components/camera/ [camera.neato docs]: /components/camera.neato/ @@ -256,6 +278,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [light.deconz docs]: /components/light.deconz/ [light.flux_led docs]: /components/light.flux_led/ [light.homekit_controller docs]: /components/light.homekit_controller/ +[light.lifx docs]: /components/light.lifx/ [light.tplink docs]: /components/light.tplink/ [light.wemo docs]: /components/light.wemo/ [media_extractor docs]: /components/media_extractor/ @@ -269,6 +292,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [notify docs]: /components/notify/ [nuimo_controller docs]: /components/nuimo_controller/ [prometheus docs]: /components/prometheus/ +[rachio docs]: /components/rachio/ [sensor.dht docs]: /components/sensor.dht/ [sensor.fitbit docs]: /components/sensor.fitbit/ [sensor.loopenergy docs]: /components/sensor.loopenergy/ @@ -281,6 +305,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [switch.digital_ocean docs]: /components/switch.digital_ocean/ [switch.homekit_controller docs]: /components/switch.homekit_controller/ [switch.neato docs]: /components/switch.neato/ +[switch.rachio docs]: /components/switch.rachio/ [vacuum.neato docs]: /components/vacuum.neato/ [weather.darksky docs]: /components/weather.darksky/ [wemo docs]: /components/wemo/ From e32c33211058de39f982b9c99c6ae68166b215b4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 19:51:19 -0400 Subject: [PATCH 06/22] Add foundation for lovelace docs --- _config.yml | 2 + .../_includes/asides/lovelace_navigation.html | 22 ++++ source/_includes/site/sidebar.html | 4 +- source/_lovelace/glance.markdown | 26 +++++ .../lovelace/lovelace-ui-comparison.png | Bin 0 -> 11136 bytes source/lovelace/index.markdown | 107 ++++++++++++++++++ 6 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 source/_includes/asides/lovelace_navigation.html create mode 100644 source/_lovelace/glance.markdown create mode 100644 source/images/lovelace/lovelace-ui-comparison.png create mode 100644 source/lovelace/index.markdown diff --git a/_config.yml b/_config.yml index 08612e54735..1bb5a20bd4a 100644 --- a/_config.yml +++ b/_config.yml @@ -76,6 +76,8 @@ collections: output: true faq: output: true + lovelace: + output: true # ----------------------- # # 3rd Party Settings # diff --git a/source/_includes/asides/lovelace_navigation.html b/source/_includes/asides/lovelace_navigation.html new file mode 100644 index 00000000000..fd19a6462df --- /dev/null +++ b/source/_includes/asides/lovelace_navigation.html @@ -0,0 +1,22 @@ +
+ + {% assign cards = site.lovelace | sort: 'title' %} + +
+

Lovelace UI

+ +
+ +
+

Cards

+ +
+
diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 6ee8aaf444b..81abe7cd946 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -2,8 +2,10 @@ {% assign url_parts = page.url | split: '/' %} {% if url_parts[1] == 'components' %} {% include asides/component_navigation.html | compact_newlines %} - {% elsif url_parts[1] == 'cookbook' %} + {% elsif url_parts[1] == 'cookbook' %} {% include asides/cookbook_navigation.html | compact_newlines %} + {% elsif url_parts[1] == 'lovelace' %} + {% include asides/lovelace_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'developers' or url_parts[1] == 'help' %} {% include asides/help_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'getting-started' %} diff --git a/source/_lovelace/glance.markdown b/source/_lovelace/glance.markdown new file mode 100644 index 00000000000..9d2511eada0 --- /dev/null +++ b/source/_lovelace/glance.markdown @@ -0,0 +1,26 @@ +--- +layout: page +title: "Glance Card" +sidebar_label: Glance +description: "The Glance card allows you to see a list of entities at a glance." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +A card that allows you to see see a list of entities at a glance. + +| Name | Type | Default | Description +| ---- | ---- | ------- | ----------- +| type | string | **Required** | `glance` +| entities | list | **Required** | Entity id's +| title | string | Optional | Card title + +Each entry in the list of entities is either an entity ID or an entity option object. The entity option object can have the following options: + +| Name | Type | Default | Description +| ---- | ---- | ------- | ----------- +| entity | entity id | **Required** | The ID of the entity to show. +| title | string | Optional | The title to use instead of the entity name. diff --git a/source/images/lovelace/lovelace-ui-comparison.png b/source/images/lovelace/lovelace-ui-comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..1d79d98716ba67749c5f9d14dfd28bcffbc5656c GIT binary patch literal 11136 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 Mp|4)`&?e%)0n1N>oB#j- literal 0 HcmV?d00001 diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown new file mode 100644 index 00000000000..f2b626a3dc3 --- /dev/null +++ b/source/lovelace/index.markdown @@ -0,0 +1,107 @@ +--- +layout: page +title: "Lovelace UI" +description: "The Lovelace UI is a powerful and configurable interface for Home Assistant." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

+This is an experimental feature. Configuration might change in future versions. +

+ +Starting with Home Assistant 0.72, we're experimenting with a new way of defining your interface. We're calling it the Lovelace UI. + +The Lovelace UI is: + + - **Extremely fast**. We create the user interface when the UI configuration changes. When a state changes, we just make the UI represent the current state. + - **Extremely customizable**. We have a new file for just configuration. In the past, we declined UI specific options because they did not fit in the state machine. They will fit in a configuration file for a user interface. + - **Extremely extensible**. It's based on the web standard [custom elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements). Don't like the built-in cards? Make your own! Custom cards are treated the same as built-in cards and are configured the same way. [Check the docs.](lovelace_custom_card.md) + - **Making the backend faster**. With Lovelace, the backend will no longer need to maintain entities like groups for the sole purpose of showing them on the frontend. + +## How it works + +The old user interface relied solely on the state machine. This caused trouble as it meant that the state machine was now not only the source for device states, but also for user interface configuration. With Lovelace, we're taking a completely different approach. All user interface configuration will live in a seperate file, controlled by the user. + +

+Diagram showing how states no longer contain UI configuration. +Visual comparison of old configuration versus new configuration +

+ + + +## Trying it out + +Create a new file `/ui-lovelace.yaml` and add the following content: + +```yaml +title: My Awesome Home +views: + # View tab title. + - title: Example + # Optional unique id for direct access /lovelace/${id} + id: example + # Each view can have a different theme applied. Theme should be defined in the frontend. + theme: dark-mode + # The cards to show on this view. + cards: + # The entities card will take a list of entities and show their state. + - type: entities + # Title of the entities card + title: Example + # The entities here will be shown in the same order as specified. + entities: + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_livingroom + - input_boolean.switch_tv + + # The filter card will filter available entities for certain criteria + # and render it as type 'entities'. + - type: entity-filter + # Filter criteria. They are all optional. + filter: + - domain: input_boolean + state: 'on' + # This config will be passed to the card rendering the filter results + card_config: + title: Input booleans that are on + + # Specify a tab icon if you want the view tab to be an icon. + - icon: mdi:home-assistant + # Title of the view. Will be used as the tooltip for tab icon + title: Second view + cards: + - type: entities + title: Lots of Kitchen AC + entities: + # It is totally possible to render duplicates. + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen +``` + +Add to your `configuration.yaml`: + +```yaml +input_boolean: + switch_ac_kitchen: + name: AC kitchen + switch_ac_livingroom: + name: AC living room + switch_tv: + name: TV +``` + +Now restart Home Assistant, navigate to `/lovelace`. When you make changes to `ui-lovelace.yaml`, you don't have to restart Home Assistant or refresh the page. Just hit the refresh button at the top of the UI. + +## Current limitations + +This is the very very early version aimed at gathering feedback. Discussion and suggestions are welcome in the [ui-schema repository](https://github.com/home-assistant/ui-schema). From 7cc9c8c4b9a929b4cbd0e6f20693f1d1ce3c80f5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 23:30:21 -0400 Subject: [PATCH 07/22] Update intro for blog post --- source/_includes/site/sidebar.html | 2 +- source/_posts/2018-07-06-release-73.markdown | 19 ++++++++++++++++-- .../blog/2018-07-0.73/lovelace-elements.png | Bin 0 -> 22349 bytes 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 source/images/blog/2018-07-0.73/lovelace-elements.png diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 81abe7cd946..38fa8d55074 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -2,7 +2,7 @@ {% assign url_parts = page.url | split: '/' %} {% if url_parts[1] == 'components' %} {% include asides/component_navigation.html | compact_newlines %} - {% elsif url_parts[1] == 'cookbook' %} + {% elsif url_parts[1] == 'cookbook' %} {% include asides/cookbook_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'lovelace' %} {% include asides/lovelace_navigation.html | compact_newlines %} diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 95495aa5716..c9407b53e59 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -11,9 +11,20 @@ categories: Release-Notes og_image: /images/blog/2018-07-0.73/components.png --- -
+Today we're releasing Home Assistant 0.73. First, let's talk security. Home Assistant has a lot of power. It can control all devices in your house and know what you're up to. That's why securing it is very important. It's not good enough to connect your instance unsecured to the internet and hope no one will find it. All ports on all computers are regularly scanned by bad actors. Please read [our guidelines thoroughly](https://www.home-assistant.io/docs/configuration/securing/) and follow them. -Lots of Lovelace changes. +In the meanwhile, we're also working hard on the new authentication system. A preview version is included in this release, more info on [our developer blog](https://developers.home-assistant.io/blog/2018/07/02/trying-new-auth.html). + +This release also includes a TON of love for the new Lovelace UI. Yes, it's still experimental but daaang, it's already so awesome that you should probably just go ahead and try it out. Thanks to all the devs who have jumped on this: [@c727], [@ciotlosm] and [@jeradM]. + +We don't have time to go through all the changes in this release, but [@ciotlosm] has been keeping [a very detailed changelog](https://github.com/ciotlosm/docs-lovelace/blob/0.73.0/changelog.md). I'll just leave this screenshot by [@arsaboo] of the new picture-elements card: + +

+Screenshot of a floorplan with sensor info and light/camera controls overlayed. +The new picture elements card. +

+ +And last but not least, [@Klikini] has upgraded Rachio support from cloud polling to cloud push! Now you'll be able to get instantly notified of changes to your sprinklers. NICE! ## {% linkable_title New Platforms %} @@ -206,6 +217,10 @@ Experiencing issues introduced by this release? Please report them in our [issue [#15234]: https://github.com/home-assistant/home-assistant/pull/15234 [#15237]: https://github.com/home-assistant/home-assistant/pull/15237 [#15248]: https://github.com/home-assistant/home-assistant/pull/15248 +[@ciotlosm]: https://github.com/ciotlosm +[@jeradM]: https://github.com/jeradM +[@c727]: https://github.com/c727 +[@arsaboo]: https://github.com/arsaboo [@Hate-Usernames]: https://github.com/Hate-Usernames [@JeffLIrion]: https://github.com/JeffLIrion [@Kane610]: https://github.com/Kane610 diff --git a/source/images/blog/2018-07-0.73/lovelace-elements.png b/source/images/blog/2018-07-0.73/lovelace-elements.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6fda3367a867b180c6b9f1d4f22358ae9199c6 GIT binary patch literal 22349 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 e4gNnBg8vPl-pFA-eaF230000 Date: Mon, 2 Jul 2018 09:00:24 -0400 Subject: [PATCH 08/22] Update screenshot picture-eleemnts --- source/_posts/2018-07-06-release-73.markdown | 4 ++-- .../blog/2018-07-0.73/lovelace-elements.png | Bin 22349 -> 22452 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index c9407b53e59..7c06c255f4e 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -8,7 +8,7 @@ author: Paulus Schoutsen author_twitter: balloob comments: true categories: Release-Notes -og_image: /images/blog/2018-07-0.73/components.png +og_image: /images/blog/2018-07-0.73/lovelace-elements.png --- Today we're releasing Home Assistant 0.73. First, let's talk security. Home Assistant has a lot of power. It can control all devices in your house and know what you're up to. That's why securing it is very important. It's not good enough to connect your instance unsecured to the internet and hope no one will find it. All ports on all computers are regularly scanned by bad actors. Please read [our guidelines thoroughly](https://www.home-assistant.io/docs/configuration/securing/) and follow them. @@ -17,7 +17,7 @@ In the meanwhile, we're also working hard on the new authentication system. A pr This release also includes a TON of love for the new Lovelace UI. Yes, it's still experimental but daaang, it's already so awesome that you should probably just go ahead and try it out. Thanks to all the devs who have jumped on this: [@c727], [@ciotlosm] and [@jeradM]. -We don't have time to go through all the changes in this release, but [@ciotlosm] has been keeping [a very detailed changelog](https://github.com/ciotlosm/docs-lovelace/blob/0.73.0/changelog.md). I'll just leave this screenshot by [@arsaboo] of the new picture-elements card: +We don't have time to go through all the changes in this release, but [@ciotlosm] has been keeping [a very detailed changelog](https://github.com/ciotlosm/docs-lovelace/blob/0.73.0/changelog.md). I'll just leave this screenshot by [@arsaboo] of the new picture-elements card and [the Lovelace configuration](https://github.com/arsaboo/homeassistant-config/blob/master/ui-lovelace.yaml#L15-L158):

Screenshot of a floorplan with sensor info and light/camera controls overlayed. diff --git a/source/images/blog/2018-07-0.73/lovelace-elements.png b/source/images/blog/2018-07-0.73/lovelace-elements.png index 0e6fda3367a867b180c6b9f1d4f22358ae9199c6..64d18b6c323d6053bf6ce0c7149b6d19fcee3bcf 100644 GIT binary patch literal 22452 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�UEW|@= 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 literal 22349 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 e4gNnBg8vPl-pFA-eaF230000 Date: Mon, 2 Jul 2018 23:18:02 +0530 Subject: [PATCH 09/22] Added path as mandatory (#5647) * Added path as mandatory Added path as mandatory as different cameras use different paths to store mp4 files * Add note about path --- source/_components/camera.xiaomi.markdown | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/_components/camera.xiaomi.markdown b/source/_components/camera.xiaomi.markdown index 2285e405a41..6e1c279da40 100644 --- a/source/_components/camera.xiaomi.markdown +++ b/source/_components/camera.xiaomi.markdown @@ -19,8 +19,6 @@ To successfully implement this platform, the Home Assistant host should be capab ## {% linkable_title Preparing the Device %} -### {% linkable_title Installing Alternative Firmware %} - In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found for each models. * [Yi 720p](https://github.com/fritz-smh/yi-hack) @@ -29,16 +27,16 @@ In order to integrate the camera with Home Assistant, it is necessary to install Once installed, please ensure that you have enabled FTP. -

+

Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files.

-Hassbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. +Hassbian users: Don't forget to install `ffmpeg` support on your platform, otherwise, you'll not see video.

-The live stream writing by the camera is not an supported format when the hass reads through FTP for Yi 720p and Xiaofang Cameras, so this component retrives the video which was saved 1 minute earlier. +The live stream writing by the camera is not an supported format when the hass reads through FTP for Yi 720p and Xiaofang Cameras, so this platform retrives the video which was saved 1 minute earlier.

@@ -68,6 +66,10 @@ Configuration variables: - **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. - **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). +

+The default for `path:` will not work with all cameras. It may be needed that you add that key with the exact path for your device. +

+ ## {% linkable_title Image quality %} Any option supported by [`ffmpeg` camera](/components/camera.ffmpeg/) can be utilized via the `ffmpeg_arguments` configuration parameter. From 9165af069c3ea7fc233bd025ae76767b8861e3a4 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 2 Jul 2018 19:49:41 +0200 Subject: [PATCH 10/22] Add warning for device IDs with only numbers (#5639) --- source/_components/binary_sensor.rfxtrx.markdown | 14 +++++++++----- source/_components/cover.rfxtrx.markdown | 5 +++++ source/_components/light.rfxtrx.markdown | 5 +++++ source/_components/sensor.rfxtrx.markdown | 7 ++++++- source/_components/switch.rfxtrx.markdown | 10 +++++++--- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/source/_components/binary_sensor.rfxtrx.markdown b/source/_components/binary_sensor.rfxtrx.markdown index 296af16317a..0aaefbad7d6 100644 --- a/source/_components/binary_sensor.rfxtrx.markdown +++ b/source/_components/binary_sensor.rfxtrx.markdown @@ -38,7 +38,7 @@ binary_sensor: name: device_name ``` -Do not forget to tweak the configuration variables: +Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new binary sensors. - **device_class** (*Optional*): The [type or class of the sensor](/components/binary_sensor/) to set the icon in the frontend. @@ -48,6 +48,11 @@ Do not forget to tweak the configuration variables: This component and the [rfxtrx switch](/components/switch/rfxtrx/) can steal each other's devices when setting the `automatic_add` configuration parameter to `true`. Set `automatic_add` only when you have some devices to add to your installation, otherwise leave it to `False`.

+

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

+ Binary sensors have only two states - "on" and "off". Many door or window opening sensors will send a signal each time the door/window is open or closed. However, depending on their hardware or on their purpose, some sensors are only able to signal their "on" state: - Most motion sensors send a signal each time they detect motion. They stay "on" for a few seconds and go back to sleep, ready to signal other motion events. Usually, they do not send a signal when they go back to sleep. @@ -55,7 +60,6 @@ Binary sensors have only two states - "on" and "off". Many door or window openin For those devices, use the *off_delay* parameter. It defines a delay after which a device will go back to an "Off" state. That "Off" state will be fired internally by Home Assistant, just as if the device fired it by itself. If a motion sensor can only send signals once every 5 seconds, sets the *off_delay* parameter to *seconds: 5*. - Example configuration: ```yaml @@ -83,7 +87,7 @@ Let's try to add a new PT-2262 sensor using the "automatic_add" option and have Have your sensor trigger the "On" state for the first time. Some messages will appear: -``` +```text INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 0913000022670e013970 (Device_id: 22670e Class: LightingDevice Sub: 0) ``` @@ -91,7 +95,7 @@ Here the sensor has the id *22670e*. Now have your sensor trigger the "Off" state and look for the following message in the Home Assistant log. You should see that your device has been detected as a *new* device when triggering its "Off" state: -``` +```text INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 09130000226707013d70 (Device_id: 226707 Class: LightingDevice Sub: 0) ``` @@ -115,7 +119,7 @@ devices: The *automatic_add* option makes the rfxtrx binary sensor component calculate and display the configuration options for you in the Home Assistant logs: -``` +```text INFO (Thread-6) [homeassistant.components.rfxtrx] rfxtrx: found possible device 226707 for 22670e with the following configuration: data_bits=4 command_on=0xe diff --git a/source/_components/cover.rfxtrx.markdown b/source/_components/cover.rfxtrx.markdown index dd31090f864..342677cb5ae 100644 --- a/source/_components/cover.rfxtrx.markdown +++ b/source/_components/cover.rfxtrx.markdown @@ -67,3 +67,8 @@ Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new covers (Siemens/LightwaveRF only). - **signal_repetitions** (*Optional*): Because the rxftrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the roller shutter to try to send each signal repeatedly. - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. + +

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index b6a1b707cf5..c83d9f71fc7 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -60,3 +60,8 @@ Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of new lights. - **signal_repetitions** (*Optional*): Because the RFXtrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch to try to send each signal repeatedly. - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. + +

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 91a2dd5cf13..3378d7b03f9 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -55,7 +55,9 @@ sensor: - Humidity - Temperature ``` + Only these data_type are valid : + - *Temperature* - *Humidity* - *Barometer* @@ -93,4 +95,7 @@ Configuration variables: - **data_type** (*Optional*): Which data type the sensor should show - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. - +

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 52b58ab4a66..b1ef272d1a0 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -54,6 +54,10 @@ Configuration variables: This component and the [rfxtrx binary sensor](/components/binary_sensor.rfxtrx/) can steal each other's devices when setting the `automatic_add` configuration parameter to `true`. Set `automatic_add` only when you have some devices to add to your installation, otherwise leave it to `False`.

+

+If a device ID consists of only numbers, please make sure to surround it with quotes. +This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise. +

Generate codes: @@ -101,10 +105,10 @@ switch: devices: 0710014c440f0160: name: Hall - 0710010244080780: + "0710010244080780": name: Door fire_event: true - + automation: - alias: Switch light on when door bell rings if sun is below horizon and light was off trigger: @@ -145,7 +149,7 @@ scene: entities: switch.light1: on switch.light2: on - + automation: - alias: Use remote to enable scene trigger: From 5d1668f4296f53db8fb92cc38fdfcab473414417 Mon Sep 17 00:00:00 2001 From: Harm-Jan Roskam Date: Mon, 2 Jul 2018 19:56:00 +0200 Subject: [PATCH 11/22] Update device_tracker.mqtt.markdown (#5648) Topic in json should match the topic in the configuration.yaml. So either remove the / in the json, or add it in the config --- source/_components/device_tracker.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.mqtt.markdown b/source/_components/device_tracker.mqtt.markdown index 3640b8ad5a4..cf8f006de1f 100644 --- a/source/_components/device_tracker.mqtt.markdown +++ b/source/_components/device_tracker.mqtt.markdown @@ -36,7 +36,7 @@ Example JSON you can publish to the topic (e.g., via mqtt.publish service): ```json { - "topic": "/location/paulus", + "topic": "location/paulus", "payload": "home" } ``` From 765324878cbd72a0ee313bc938efb81b8e396c38 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 2 Jul 2018 19:01:39 +0100 Subject: [PATCH 12/22] Adding details for when you don't have a Home (#5626) * Adding details for when you don't have a Home The current instructions only work for people with a Home device. Adding details (courtesy of War on Discord) for how to do it with just a mobile and the Google Assistant app. * :pencil2: Tweaks * :pencil2: Tweaks --- source/cloud/google_assistant.markdown | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 4faaeda5862..7868c9387bb 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -9,7 +9,6 @@ sharing: true footer: true --- -

The minimum supported version of Home Assistant is 0.65.6.

@@ -19,8 +18,10 @@ The Google Assistant integration allows users to control the entities via the Ho To use this integration, you need to have: - The cloud component set up. [Learn more](/components/cloud/) - - A Google Assistant enabled device like the Google Home - - Activated the Home Assistant Smart Home skill for Google Assistant by using the Google Home app, select *Home control*, and then add *hass.io* using the *Add devices* option. + - A Google Assistant enabled device like the Google Home or a mobile phone running Google Assistant. + - Activated the Home Assistant Smart Home skill for Google Assistant. + - If you have a Google Home device, use the Google Home app, select *Home control*, and then add *hass.io* using the *Add devices* option. + - If you only have a mobile phone, launch Google Assistant, select the three dots menu. Under *Settings* you'll find *Home Control*. There you can add *hass.io* using the *Add devices* option. You can use `configuration.yaml` to configure the entities that are being shown to Google Assistant and how they are exposed. @@ -73,7 +74,7 @@ google_actions: required: false type: list entity_config: - description: Entity specific configuration for Google Assistant + description: Entity specific configuration for Google Assistant. required: false type: map keys: @@ -83,11 +84,11 @@ google_actions: type: map keys: name: - description: Name of entity to show in Google Assistant + description: Name of entity to show in Google Assistant. required: false type: string aliases: - description: Aliases that can also be used to refer to this entity + description: Aliases that can also be used to refer to this entity. required: false type: list room: From 2cbabfe2eab9c1d1f6de8155cfb5b319cba586a3 Mon Sep 17 00:00:00 2001 From: qinghuangchan Date: Tue, 3 Jul 2018 02:12:47 +0800 Subject: [PATCH 13/22] Update switch.broadlink to include SC1 device. (#5642) * Update switch.broadlink to include SC1 device. SC1 device behaves the same as sp2 device. * :pencil2: Added a . --- source/_components/switch.broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index ad5f0214dc4..040a06c726b 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -31,7 +31,7 @@ Configuration variables: - **mac** (*Required*): Device MAC address. - **timeout** (*Optional*): Timeout in seconds for the connection to the device. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. -- **type** (*Required for some models*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2`, `spminiplus` or `mp1`. +- **type** (*Required for some models*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2`, `spminiplus` or `mp1`. `SC1` devices can be registered as `sp2`. - **switches** (*Optional*): The array that contains all switches. - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. From 81c25661371be242c3198bdfe85c5063a7e8e0d9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Jul 2018 23:03:17 +0200 Subject: [PATCH 14/22] Add redirects (#5651) --- .../documentation/create_page.markdown | 119 +----------------- .../developers/documentation/index.markdown | 35 +----- .../documentation/standards.markdown | 113 +---------------- 3 files changed, 9 insertions(+), 258 deletions(-) diff --git a/source/developers/documentation/create_page.markdown b/source/developers/documentation/create_page.markdown index cb0c4125198..a21303179c8 100644 --- a/source/developers/documentation/create_page.markdown +++ b/source/developers/documentation/create_page.markdown @@ -9,119 +9,6 @@ sharing: true footer: true --- -For a platform or component page, the fastest way is to make a copy of an existing page and edit it. The [Component overview](/components/) and the [Examples section](/cookbook/) are generated automatically, so there is no need to add a link to those pages. - -Please honor the [Standards](/developers/documentation/standards/) we have for the documentation. - -If you start from scratch with a page, you need to add a header. Different sections of the documentation may need different headers. - -```text ---- -layout: page -title: "Awesome Sensor" -description: "home-assistant.io web presence" -date: 2015-06-17 08:00 -sidebar: true -comments: false -sharing: true -footer: true -ha_release: "0.38" -ha_category: Sensor ---- - -Content...Written in markdown. - -{% raw %}### {% linkable_title Linkable Header %}{% endraw %} -... -``` - -There are [pre-definied variables](https://jekyllrb.com/docs/variables/) available but usually, it's not necessary to use them when writing documentation. - -A couple of points to remember: - -- Document the needed steps to retrieve API keys or access token for the third party service or device if needed. -- If you're adding a new component, for the `ha_release` part of the header, just increment of the current release. If the current release is 0.37, make `ha_release` 0.38. If it's 0.30 or 0.40 please quote it with `" "`. -- `ha_category:` is needed to list the platform or component in the appropriate category on the website. - -### {% linkable_title Configuration %} - -Every platform page should contain a configuration sample. This sample must contain only the **required** variables to make it easy to copy and paste it for users into their `configuration.yaml` file. - -The **Configuration Variables** section must use the {% raw %}`{% configuration %} ... {% endconfiguration %}`{% endraw %} tag. - -{% raw %} -```text -{% configuration %} -api_key: - description: The API key to access the service. - required: true - type: string -name: - description: Name to use in the frontend. - required: false - default: The default name to use in the frontend. - type: string -monitored_conditions: - description: Conditions to display in the frontend. - required: true - type: list - keys: - weather: - description: A human-readable text summary. - temperature: - description: The current temperature. -{% endconfiguration %} - -``` -{% endraw %} - -Available keys: - -- **`description:`**: That the variable is about. -- **`required:`**: If the variable is required. -```text -required: true #=> Required -required: false #=> Optional -required: inclusive #=> Inclusive -required: exclusive #=> Exclusive -required: any string here #=> Any string here -``` -- **`type:`**: The type of the variable. Allowed entries: `string`, `int`, `time`, `template` or `map`. For multiple possibilities use `[string, int]`. If you use `map` then you need to define `keys:` (see the [`template` sensor](/components/sensor.template/) for an example). -- **`default:`**: The default value for the variable. - -### {% linkable_title Embedding Code %} - -You can use the [default markdown syntax](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code) to generate syntax highlighted code. For inline code wrap your code in {% raw %}`{% endraw %}. - -When you're writing code that is to be executed on the terminal, prefix it with `$`. - -### {% linkable_title Templates %} - -For the [configuration templating](/topics/templating/) is [Jinja](http://jinja.pocoo.org/) used. Check the [Documentation Standards](/developers/documentation/standards/) for further details. - -If you are don't escape templates then they will be rendered and appear blank on the website. - -### {% linkable_title HTML %} - -The direct usage of HTML is supported but not recommended. The note boxes are an exception. - -```html -

- You need to enable telnet on your router. -

-``` - -### {% linkable_title Images, icons, and logos %} - -The images which are displayed on the pages are stored in various directories according to their purpose. If you want to use a logo and placed `logo:` in the file header then this image should be stored in `source/images/supported_brands`. The background must be transparent. - -| Type | Location | -| :----------- |:----------------------------------------------| -| logos | source/images/supported_brands | -| blog | source/images/blog | -| screenshots | source/images/components | - -Not everything (product, component, etc.) should have a logo. To show something for internal parts of Home Assistant we are using the [Material Design Icons](https://materialdesignicons.com/). - -### {% linkable_title Linking From The Sidebar %} -If you are adding a new page that requires linking from the sidebar you need to edit the `docs_navigation.html` file in `home-assistant.github.io/source/_includes/asides/docs_navigation.html`. + diff --git a/source/developers/documentation/index.markdown b/source/developers/documentation/index.markdown index c6b1ee6fb4f..aed589d8a3e 100644 --- a/source/developers/documentation/index.markdown +++ b/source/developers/documentation/index.markdown @@ -10,35 +10,6 @@ footer: true redirect_from: /developers/website/ --- -The website you are reading now is the home of Home Assistant: [https://www.home-assistant.io](/). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. - -The [home-assistant.io](/) website is built using [Jekyll](http://github.com/mojombo/jekyll) and [these dependencies](https://pages.github.com/versions/). The pages are written in [Markdown](http://daringfireball.net/projects/markdown/). To add a page, you don't need to know about HTML. - -You can use the "**Edit this page on GitHub**" link to edit pages without creating a fork. Keep in mind that you can't upload images while working this way. - -For larger changes, we suggest that you clone the website repository. This way, you can review your changes locally. The process for working on the website is no different from working on Home Assistant itself. You work on your change and propose it via a Pull Request (PR). - -To test your changes locally, you need to install **Ruby** and its dependencies (gems): - -- [Install Ruby](https://www.ruby-lang.org/en/documentation/installation/) if you don't have it already. Ruby version 2.3.0 or higher is required. -- Install `bundler`, a dependency manager for Ruby: `$ gem install bundler` -- In your home-assistant.github.io root directory, run `$ bundle` to install the gems you need. - -Shortcut for Fedora: `$ sudo dnf -y install gcc-c++ ruby ruby-devel rubygem-bundler rubygem-json && bundle` - -Then you can work on the documentation: - -- Fork home-assistant.io [git repository](https://github.com/home-assistant/home-assistant.github.io). -- Create/edit/update a page in the directory `source/_components/` for your platform/component. -- Test your changes to home-assistant.io locally: run `rake preview` and navigate to [http://127.0.0.1:4000](http://127.0.0.1:4000) -- Create a Pull Request (PR) against the **next** branch of home-assistant.github.io if your documentation is a new feature, platform, or component. -- Create a Pull Request (PR) against the **current** branch of home-assistant.github.io if you fix stuff, create Cookbook entries, or expand existing documentation. - -

-It could be necessary that you run `rake generate` prior to `rake preview` for the very first preview. -

-

-Site generated by `rake` is only available locally. If you are developing on a headless machine use port forwarding: -`ssh -L 4000:localhost:4000 user_on_headless_machine@ip_of_headless_machine` -

- + diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index 05b1223cc61..5ef543344ac 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -9,113 +9,6 @@ sharing: true footer: true --- -To ensure that the documentation for Home Assistant is consistent and easy to follow for both novice and expert users, we ask that you follow a very strict set of standards for developing the documentation. - -## {% linkable_title General Documentation %} - -* The language of the documentation should be American-English. -* Don't put two spaces after a period and avoid the "Oxford comma". -* Be objective and not gender favoring, polarizing, race related or religion inconsiderate. -* The case of brand names, services, protocols, components, and platforms must match its respective counterpart. e.g., "Z-Wave" **not** "Zwave", "Z-wave", "Z Wave" or "ZWave". Also, "Input Select" **not** "input select" or "Input select". -* All headings should use the {% raw %}`{% linkable_title %}`{% endraw %} tag. - -## {% linkable_title Component and Platform Pages %} - -* The **Configuration Variables** section must use the {% raw %}`{% configuration %}`{% endraw %} tag. -* Configuration variables must document the requirement status. -* Configuration variables must document the default value, if any. -* Configuration variables must document the accepted value types. - * For configuration variables that accept multiple types, separate the types with a comma (i.e. `string, int`). -* Use YAML sequence syntax in the sample code if it is supported. -* All examples should be formatted to be included in `configuration.yaml` unless explicitly stated. - * Use capital letters and `_` to indicate that the value needs to be replaced. E.g., `api_key: YOUR_API_KEY` or `api_key: REPLACE_ME`. - * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. -* Component and platform names should be a link to their respective documentation pages. - -## {% linkable_title Templates %} - -* All examples containing Jinja2 templates should be wrapped **outside** of the code markdown with the {% raw %}`{% raw %}`{% endraw %} tag. -* Do not use `states.switch.source.state` in templates. Instead use `states()` and `is_state()`. -* Use double quotes (`"`) for ([more information](#single-vs-double-quotation-marks)): - * `friendly_name` - * Single-line templates: - * `value_template` - * `level_template` - * `icon_template` - * Children of `data_template` -* Use single quotes (`'`) for ([more information](#single-vs-double-quotation-marks): - * Strings inside of templates: - * States - * Entity IDs - * `unit_of_measurement` -* No whitespace around pipe character (`|`) for Jinja2 filters. -* Single whitespace after Jinja2 opening delimiters ({% raw %}`{{`{% endraw %}). -* Single whitespace before Jinja2 closing delimiters ({% raw %}`}}`{% endraw %}). -* Do not quote values for: - * `device_class` - * `platform` - * `condition` - * `service` - -## {% linkable_title Renaming Pages %} - -It can happen that a component or platform is renamed, in this case the documentation needs to be updated as well. If you rename a page, add `redirect_from:` to the file header and let it point to the old location/name of the page. Please consider to add details, like release number or old component/platform name, to the page in a [note](/developers/documentation/create_page/#html). - -```text ---- -... -redirect_from: /getting-started/android/ ---- -``` - -Adding a redirect also applies if you move content around in the [documentation](/docs/). - -## {% linkable_title Single vs. Double Quotation Marks %} - -Use single quotes (`'`) for strings inside of a template. It is more obvious to escape a single quote when necessary (i.e. `name` is a possessive noun), because the single quotes that wrap the string are closer in position to the apostrophe inside the string. Use double quotes (`"`) outside of a template (unless it is a multi-line template, in which case outside quotes are not required). - -### {% linkable_title Examples %} - -#### {% linkable_title Double Quotes Outside, Single Quotes Inside (Valid) %} - -{% raw %} -```yaml -automation: - ... - action: - - service: notify.notify - data_template: - message: "{% if trigger.to_state.name == 'Dale\'s Bedroom' %}Someone's in your base, killing your noobs!{% else %}It's just another door.{% endif %}" -``` -{% endraw %} - -#### {% linkable_title Single Quotes Outside, Double Quotes Inside (Invalid) %} - -{% raw %} -```yaml -automation: - ... - action: - - service: notify.notify - data_template: - message: '{% if trigger.to_state.name == "Dale's Bedroom" %}Someone's in your base, killing your noobs!{% else %}It's just another door.{% endif %}' -``` -{% endraw %} - -#### {% linkable_title Multi-Line Template (Valid) %} - -{% raw %} -```yaml -automation: - ... - action: - - service: notify.notify - data_template: - message: >- - {% if trigger.to_state.name == 'Dale\'s Bedroom' %} - Someone's in your base, killing your noobs! - {% else %} - It's just another door. - {% endif %} -``` -{% endraw %} + From a771899eb0f012a1bda2a01929e8404dbaa7c618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Tue, 3 Jul 2018 12:54:48 +0200 Subject: [PATCH 15/22] Added venv installation steps for Windows (#5649) * Added venv installation steps for Windows * Update windows.markdown * Fix typos * Fix another typo --- source/_docs/installation/windows.markdown | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_docs/installation/windows.markdown b/source/_docs/installation/windows.markdown index 7a6017c9ae1..3efe0581137 100644 --- a/source/_docs/installation/windows.markdown +++ b/source/_docs/installation/windows.markdown @@ -15,6 +15,8 @@ To run Home Assistant on Microsoft Windows installation you need to install Pyth There may be alpha or beta releases of Python listed on that download page (marked by the letters `a` or `b` in the version number. Do not use these versions.

+If you use your machine for something other than Home Assistant, you should install it in a [Python virtual environment](#Installing_in_a_Python_virtual_environment). + Start ```bash @@ -39,3 +41,27 @@ C:\...\> pip3 install --upgrade homeassistant ``` Then start Home Assistant. + +## {% linkable_title Installing in a Python virtual environment %} + +Open `cmd.exe` and paste the following commands (one at the time): + +```bash +C:\...\> py -m venv homeassistant +C:\...\> cd homeassistant +C:\...\> Scripts\activate.bat +C:\...\> py -m pip install wheel setuptools pip +C:\...\> py -m pip install homeassistant +C:\...\> hass +``` + +## {% linkable_title Upgrading in a Python virtual environment %} + +To update Home Assistant, stop it and then open `cmd.exe` and paste the following commands (one at the time): + +```bash +C:\...\> cd homeassistant +C:\...\> Scripts\activate.bat +C:\...\> py -m pip install --upgrade homeassistant +``` +Then start Home Assistant. From 2718fa9033fe04429679cfd5852871f76fcedb7b Mon Sep 17 00:00:00 2001 From: Jeff Wilson Date: Wed, 4 Jul 2018 06:33:15 -0400 Subject: [PATCH 16/22] Update calendar.google.markdown (#5653) Fixes typos and formatting --- source/_components/calendar.google.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 9825c5f9cc6..73860367c8c 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -46,7 +46,7 @@ client_id: description: Use the value you generated in the Prerequisites stage. required: true type: string -minimum: +client_secret: description: Use the value you generated in the Prerequisites stage. required: true type: string @@ -95,7 +95,7 @@ Variables: - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? - **search**: (*Optional*): If set will only trigger for matched events. - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) -  - **ignore_availablilty**: (*Optional*): Should we respect `free`/`busy` flags? (Defaults to `true`) + - **ignore_availability**: (*Optional*): Should we respect `free`/`busy` flags? (Defaults to `true`)   From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. From c237639107d41d852877c10ac82578d6538c4d1b Mon Sep 17 00:00:00 2001 From: jagjordi Date: Wed, 4 Jul 2018 20:00:30 +0200 Subject: [PATCH 17/22] Update ssh.markdown (#5658) fixed openssh link --- source/_addons/ssh.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/ssh.markdown b/source/_addons/ssh.markdown index 8dcc1e2de04..479b05c98f6 100644 --- a/source/_addons/ssh.markdown +++ b/source/_addons/ssh.markdown @@ -10,7 +10,7 @@ footer: true featured: true --- -Setting up an [SSH](https://openssh.org/) server allows access to your Hass.io folders with any SSH client. It also includes a command-line tool to access the [Hass.io API](https://github.com/home-assistant/hassio/blob/dev/API.md). Try it out: +Setting up an [SSH](https://openssh.com/) server allows access to your Hass.io folders with any SSH client. It also includes a command-line tool to access the [Hass.io API](https://github.com/home-assistant/hassio/blob/dev/API.md). Try it out: ```bash hassio help From 1bcb2af724cceb80f982d2cf1351a48d1405bac1 Mon Sep 17 00:00:00 2001 From: hitokiri8x Date: Wed, 4 Jul 2018 20:22:03 +0200 Subject: [PATCH 18/22] Add requisites for gpio (#5659) Since homeassistant user is required to be in gpio group in order to use them, let's fix this during installation! --- source/_docs/installation/raspberry-pi.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index d021e7041a0..0ee8868207c 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -49,10 +49,10 @@ $ sudo apt-get install python3 python3-venv python3-pip ``` Add an account for Home Assistant called `homeassistant`. -Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. The arguments `-G dialout` adds the user to the `dialout` group. This is required for using Z-Wave and Zigbee controllers. +Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. The arguments `-G dialout,gpio` adds the user to the `dialout` and the `gpio` group. The first is required for using Z-Wave and Zigbee controllers, while the second is required to communicate with Raspberry's GPIO. ```bash -$ sudo useradd -rm homeassistant -G dialout +$ sudo useradd -rm homeassistant -G dialout,gpio ``` Next we will create a directory for the installation of Home Assistant and change the owner to the `homeassistant` account. From a09f8c28ccfb084a146e4058afb7c038cfbf4062 Mon Sep 17 00:00:00 2001 From: Dmitriy Date: Fri, 6 Jul 2018 18:29:04 +0300 Subject: [PATCH 19/22] Update device_tracker.snmp.markdown (#5666) Base OID's for Apple Airport Express (2nd gen.) router --- source/_components/device_tracker.snmp.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index 8193abfee85..9b3805e30ce 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -34,6 +34,8 @@ The following OID examples pull the current MAC Address table from a router. Thi | EdgeRouter | Lite v1.9.0 | `1.3.6.1.2.1.4.22.1.2` | | Ruckus | ZoneDirector 9.13.3 | `1.3.6.1.4.1.25053.1.2.2.1.1.3.1.1.1.6` | | DD-WRT | unknown RouterOS version/model | `1.3.6.1.2.1.4.22.1.2` | +| Apple Airport Express (2nd gen.) | 7.6.9 | `1.3.6.1.2.1.3.1.1.2` +`1.3.6.1.2.1.4.22.1.2.16`| To use the SNMP version 1 platform in your installation, add the following to your `configuration.yaml` file: From a94332fd58462abdb69c50653fa10aa3ba3f4882 Mon Sep 17 00:00:00 2001 From: Andy Castille Date: Mon, 2 Jul 2018 15:11:20 -0500 Subject: [PATCH 20/22] Update for rewritten Rachio component (#5589) * Update for rewritten Rachio component * :pencil2: Minor tweaks * :arrow_up: ha_release 0.73 * :arrow_up: ha_release 0.73 --- .../_components/binary_sensor.rachio.markdown | 31 +++++++++++++ source/_components/rachio.markdown | 43 +++++++++++++++++++ source/_components/switch.rachio.markdown | 42 ++++++------------ 3 files changed, 88 insertions(+), 28 deletions(-) create mode 100644 source/_components/binary_sensor.rachio.markdown create mode 100644 source/_components/rachio.markdown diff --git a/source/_components/binary_sensor.rachio.markdown b/source/_components/binary_sensor.rachio.markdown new file mode 100644 index 00000000000..568e9e0c558 --- /dev/null +++ b/source/_components/binary_sensor.rachio.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Rachio Binary Sensor" +description: "Instructions on how to use Rachio binary sensors with Home Assistant." +date: 2018-06-23 16:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: rachio.png +ha_category: Hub +ha_iot_class: "Cloud Push" +ha_release: 0.73 +--- + +The `rachio` binary sensor platform allows you to view the status of your [Rachio irrigation system](http://rachio.com/). + +Once configured, a binary sensor will be added that shows whether or not each controller in the account provided is online and reachable by Rachio's servers. + +

+ You must have the [Rachio component](/components/rachio/) configured to use this switch. +

+ + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: rachio +``` diff --git a/source/_components/rachio.markdown b/source/_components/rachio.markdown new file mode 100644 index 00000000000..f50050f514c --- /dev/null +++ b/source/_components/rachio.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Rachio" +description: "Instructions on how to use Rachio with Home Assistant." +date: 2018-06-23 16:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: rachio.png +ha_category: Hub +ha_iot_class: "Cloud Push" +ha_release: 0.73 +--- + +The `rachio` platform allows you to control your [Rachio irrigation system](http://rachio.com/). + +## {% linkable_title Getting your Rachio API Key %} + +1. Log in at [https://app.rach.io/](https://app.rach.io/). +1. Click the "Account Settings" menu item at the bottom of the left sidebar +1. Click "Get API Key" +1. Copy the API key from the dialog that opens. + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +rachio: + api_key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +``` + +### {% linkable_title iFrame %} + +If you would like to see and control more detailed zone information, create an [iFrame](/components/panel_iframe/) that renders the Rachio web app. + +```yaml +panel_iframe: + rachio: + title: Rachio + url: "https://app.rach.io" + icon: mdi:water-pump +``` diff --git a/source/_components/switch.rachio.markdown b/source/_components/switch.rachio.markdown index 9208a2d4754..786c3574132 100644 --- a/source/_components/switch.rachio.markdown +++ b/source/_components/switch.rachio.markdown @@ -2,25 +2,24 @@ layout: page title: "Rachio Switch" description: "Instructions on how to use Rachio switches with Home Assistant." -date: 2017-05-29 09:00 +date: 2018-06-23 16:09 sidebar: true comments: false sharing: true footer: true logo: rachio.png ha_category: Switch -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" ha_release: 0.46 --- -The `rachio` switch platform allows you to control your [Rachio irrigation system](http://rachio.com/). +The `rachio` switch platform allows you to toggle zones connected to your [Rachio irrigation system](http://rachio.com/) on and off. -## {% linkable_title Getting your Rachio API Access Token %} +Once configured, a switch will be added for every zone that is enabled on every controller in the account provided, as well as a switch to toggle each controller's standby mode. -1. Log in at [https://app.rach.io/](https://app.rach.io/). -1. Click the user button at the top right. -1. Click API Access Token. -1. Copy the API access token from the dialog that opens. +

+ You must have the [Rachio component](/components/rachio/) configured to use this switch. +

To add this platform to your installation, add the following to your `configuration.yaml` file: @@ -28,17 +27,20 @@ To add this platform to your installation, add the following to your `configurat # Example configuration.yaml entry switch: - platform: rachio - access_token: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ``` Configuration variables: -- **access_token** (*Required*): Your Rachio API Access Token. - **manual_run_mins** (*Optional*): For how long, in minutes, to turn on a station when the switch is enabled. Defaults to 10 minutes. +

+**Water-saving suggestion:**
+Set `manual_run_mins` to a high maximum failsafe value when using scripts to control zones. If something goes wrong with your script, Home Assistant, or you hit the Rachio API rate limit of 1700 calls per day, the controller will still turn off the zone after this amount of time. +

+ ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this switch. +In this section, you find some real-life examples of how to use this switch. ### {% linkable_title `groups.yaml` example %} @@ -51,35 +53,19 @@ irrigation: entities: - group.zones_front - group.zones_back + - switch.side_yard zones_front: name: Front Yard view: false entities: - - switch.driveway - switch.front_bushes - - switch.front_garden - switch.front_yard - - switch.side_yard zones_back: name: Back Yard view: false entities: - - switch.back_bushes - switch.back_garden - switch.back_porch - - switch.back_trees -``` - -### {% linkable_title iFrame %} - -If you would like to see and control more detailed zone information, create an [iFrame](/components/panel_iframe/) that renders the Rachio web app. - -```yaml -panel_iframe: - rachio: - title: Rachio - url: "https://app.rach.io" - icon: mdi:water-pump ``` From 9d736907f06982df24a2a3f33a9038b06c798614 Mon Sep 17 00:00:00 2001 From: Colin O'Dell Date: Sat, 30 Jun 2018 05:16:37 -0400 Subject: [PATCH 21/22] Document the new http.trusted_proxies setting (#5624) Documents the setting added in https://github.com/home-assistant/home-assistant/pull/15204 --- source/_components/http.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 91b600b2c31..0616476bf07 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -37,8 +37,9 @@ Configuration variables: - **ssl_peer_certificate** (*Optional*): Path to the client/peer TLS/SSL certificate to accept secure connections from. - **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection. - **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`. -- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You must also whitelist trusted proxies using the `trusted_networks` setting below for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored. Defaults to False. -- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` option enabled, this should include the IP address/range of your proxy. This is required because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. +- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You must also whitelist trusted proxies using the `trusted_proxies` setting below for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored. Defaults to False. +- **trusted_proxies** (*Optional*): List of trusted proxies, consisting of IP addresses or networks, that are allowed to set the `X-Forwarded-For` header. This is required when using `use_x_forwarded_for` because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. +- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` option enabled, requests proxied to Home Assistant with a trusted `X-Forwarded-For` header will appear to come from the IP given in that header instead of the proxy IP. - **ip_ban_enabled** (*Optional*): Flag indicating whether additional IP filtering is enabled. Defaults to False. - **login_attempts_threshold** (*Optional*): Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is True. Defaults to -1, meaning that no new automatic bans will be added. @@ -54,7 +55,10 @@ http: cors_allowed_origins: - https://google.com - https://www.home-assistant.io - use_x_forwarded_for: False + use_x_forwarded_for: True + trusted_proxies: + - 127.0.0.1 + - ::1 trusted_networks: - 127.0.0.1 - ::1 From 5d59c3d72a70a168af6f6e059c4d74af7012c4d9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 6 Jul 2018 22:29:46 +0200 Subject: [PATCH 22/22] Update blog post --- source/_posts/2018-07-06-release-73.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 7c06c255f4e..b7fbedade39 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.73: TBD - update date" -description: "TBD" -date: 2018-06-29 00:01:00 +title: "0.73: Preview version new user system, Rachio cloud push and Lovelace goes wild" +description: "Summer is here and that means fresh new goodies for all of you." +date: 2018-07-06 00:01:00 date_formatted: "July 6, 2018" author: Paulus Schoutsen author_twitter: balloob