From ea092a5ed16f1a1afb09afd42f2af3757100b62c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 8 Jul 2019 09:12:24 -0700 Subject: [PATCH 01/24] Draft 96 --- _config.yml | 24 ++++++++-------- source/_posts/2019-07-17-release-96.markdown | 29 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 source/_posts/2019-07-17-release-96.markdown diff --git a/_config.yml b/_config.yml index f86c7aed19b..b98e5f9d019 100644 --- a/_config.yml +++ b/_config.yml @@ -41,11 +41,11 @@ liquid: kramdown: input: GFM - auto_ids: false - footnote_nr: 1 - entity_output: as_char - toc_levels: 1..6 - smart_quotes: lsquo,rsquo,ldquo,rdquo + auto_ids: false + footnote_nr: 1 + entity_output: as_char + toc_levels: 1..6 + smart_quotes: lsquo,rsquo,ldquo,rdquo parse_block_html: true plugins: @@ -53,13 +53,13 @@ plugins: - jekyll-time-to-read - octopress-include-tag -paginate: 10 # Posts per page on the blog index -paginate_path: "blog/posts/:num" # Directory base for pagination URLs eg. /posts/2/ -recent_posts: 5 # Posts in the sidebar Recent Posts section -excerpt_link: "Read on →" # "Continue reading" link text at the bottom of excerpted articles +paginate: 10 # Posts per page on the blog index +paginate_path: "blog/posts/:num" # Directory base for pagination URLs eg. /posts/2/ +recent_posts: 5 # Posts in the sidebar Recent Posts section +excerpt_link: "Read on →" # "Continue reading" link text at the bottom of excerpted articles excerpt_separator: "" -titlecase: true # Converts page and post titles to titlecase +titlecase: true # Converts page and post titles to titlecase # Each layout uses the default asides, but they can have their own asides instead. Simply uncomment the lines below # and add an array with the asides you want to use. @@ -138,9 +138,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 95 +current_minor_version: 96 current_patch_version: 0 -date_released: 2019-06-26 +date_released: 2019-07-17 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown new file mode 100644 index 00000000000..71b9c780314 --- /dev/null +++ b/source/_posts/2019-07-17-release-96.markdown @@ -0,0 +1,29 @@ +--- +layout: post +title: "0.96: TBD - UPDATE DATE" +description: "TBD." +date: 2019-07-08 04:11:03 +date_formatted: "July 17, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-07-release-96/social.png +--- + + + +Climate has been completely revamped. Huge thanks to the following people: + +- [@pvizeli] +- [@Danielhiversen] +- [@zxdavb] +- [@Swamp-lg] +- [@SukramJ] +- [@marvin-w] +- [@Jc2k] +- [@OnFreund] +- [@cgtobi] +- [@andrewsayre] + +We have a new sidebar! Started with a mockup by [@JuanMTech] and grew into a full blown implementation. Check [the demo](https://demo.home-assistant.io) for a preview. From 0eb72dcaf93b5772234bdf5b49cca040d526b7e6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 8 Jul 2019 09:31:30 -0700 Subject: [PATCH 02/24] ABC list --- source/_posts/2019-07-17-release-96.markdown | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 71b9c780314..3c67c6c4fa8 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -15,15 +15,17 @@ og_image: /images/blog/2019-07-release-96/social.png Climate has been completely revamped. Huge thanks to the following people: -- [@pvizeli] -- [@Danielhiversen] -- [@zxdavb] -- [@Swamp-lg] -- [@SukramJ] -- [@marvin-w] -- [@Jc2k] -- [@OnFreund] -- [@cgtobi] - [@andrewsayre] +- [@balloob] +- [@cgtobi] +- [@Danielhiversen] +- [@frenck] +- [@Jc2k] +- [@marvin-w] +- [@OnFreund] +- [@pvizeli] +- [@SukramJ] +- [@Swamp-lg] +- [@zxdavb] We have a new sidebar! Started with a mockup by [@JuanMTech] and grew into a full blown implementation. Check [the demo](https://demo.home-assistant.io) for a preview. From f35859d7bbb0cc44fcc152d15024a6d5a357e728 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 10 Jul 2019 21:06:00 -0700 Subject: [PATCH 03/24] Update post --- source/_posts/2019-07-17-release-96.markdown | 501 ++++++++++++++++++- 1 file changed, 500 insertions(+), 1 deletion(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 3c67c6c4fa8..f152f1ebdbf 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -13,7 +13,9 @@ og_image: /images/blog/2019-07-release-96/social.png -Climate has been completely revamped. Huge thanks to the following people: +Climate has been completely revamped. Please test out any climate integration that you use and report if it is broken. + +Huge thanks to the following people: - [@andrewsayre] - [@balloob] @@ -29,3 +31,500 @@ Climate has been completely revamped. Huge thanks to the following people: - [@zxdavb] We have a new sidebar! Started with a mockup by [@JuanMTech] and grew into a full blown implementation. Check [the demo](https://demo.home-assistant.io) for a preview. + +Big shout out to [@frenck] who has been doing a lot of clean up on the website. + +If you missed the announcement, we showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), the new interface that runs on Chromecast devices. + +## New Integrations + +- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) +- Add integration for Vallox Ventilation Units ([@andre-richter] - [#24660]) ([vallox docs]) (new-integration) +- Add support for aurora ABB Powerone solar photovoltaic inverter ([@davet2001] - [#24809]) ([aurora_abb_powerone docs]) (new-integration) +- Add support for arcam fmj receivers ([@elupus] - [#24621]) ([arcam_fmj docs]) (new-integration) +- Add support for Notion Home Monitoring ([@bachya] - [#24634]) ([notion docs]) (new-integration) +- Add support for World Wide Lightning Location Network ([@bachya] - [#25001]) ([wwlln docs]) (new-integration) + +## New Platforms + +- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) +- Add template vacuum support ([@luukd] - [#22904]) ([template docs]) (new-platform) +- Fronius (solar energy and inverter) component ([@nielstron] - [#22316]) ([sensor docs]) (new-platform) +- New scanner device tracker and ZHA device tracker support ([@dmulcahey] - [#24584]) ([device_tracker docs]) ([zha docs]) (new-platform) +- [climate] Bugfix honeywell misleading error message ([@zxdavb] - [#25048]) ([evohome docs]) ([honeywell docs]) (new-platform) + +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +## Reporting Issues + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +- Multiple devices support for opentherm_gw ([@mvn23] - [#22932]) ([opentherm_gw docs]) (breaking change) +- Change Ambient solar radiation units to lx ([@bachya] - [#24690]) ([ambient_station docs]) (breaking change) +- Changed default encoding to mp3 ([@GrandNewbien] - [#24808]) ([google_cloud docs]) (breaking change) +- Remove temperature attribute from SimpliSafe alarm control panel ([@bachya] - [#24833]) ([simplisafe docs]) (breaking change) +- Upgrade luftdaten to 0.6.1 ([@fabaff] - [#24842]) ([luftdaten docs]) (breaking change) +- Velbus: autodiscover covers ([@Cereal2nd] - [#24877]) ([velbus docs]) (breaking change) +- Remove ZHA device entity ([@dmulcahey] - [#24909]) ([zha docs]) (breaking change) +- Implement ADR0003 for Netatmo sensor ([@cgtobi] - [#24944]) ([netatmo docs]) (breaking change) +- Fix Netatmo climate presets ([@cgtobi] - [#25029]) ([netatmo docs]) (breaking change) +- updated geojson_client library to version 0.4 ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) (breaking change) + +## All changes + +- Fix AttributeError: 'NoneType' object has no attribute 'group' with sytadin component ([@foreign-sub] - [#24652]) ([sytadin docs]) +- braviatv, nmap_tracker: use getmac for getting MAC addresses ([@scop] - [#24628]) ([braviatv docs]) ([braviatv docs]) ([braviatv docs]) ([nmap_tracker docs]) +- Fix downloader_download_failed event not firing for HTTP response errors ([@sfjes] - [#24640]) ([downloader docs]) +- Multiple devices support for opentherm_gw ([@mvn23] - [#22932]) ([opentherm_gw docs]) (breaking change) +- Add device class support for Ambient PWS sensors ([@bachya] - [#24677]) ([ambient_station docs]) +- Add RainMachine device classes where appropriate ([@bachya] - [#24682]) ([rainmachine docs]) +- Change Ambient solar radiation units to lx ([@bachya] - [#24690]) ([ambient_station docs]) (breaking change) +- Upgrade to async_upnp_client==0.14.10 and increase search timeout ([@StevenLooman] - [#24685]) ([dlna_dmr docs]) ([upnp docs]) +- Upgrade mypy to 0.710 ([@scop] - [#24666]) +- Template: Expand method to expand groups, and closest as filter ([@Swamp-Ig] - [#23691]) +- Add aml_thermal label ([@jmw6773] - [#24665]) ([glances docs]) +- Corrected number of default LCN segment coupler scan tryouts ([@alengwenus] - [#24678]) ([lcn docs]) +- Upgrade discord.py to 1.2.2 ([@fabaff] - [#24695]) ([discord docs]) +- Upgrade youtube_dl to 2019.06.08 ([@fabaff] - [#24692]) ([media_extractor docs]) +- Upgrade Sphinx to 2.1.2 ([@fabaff] - [#24693]) +- Solax update 0.1.0 ([@squishykid] - [#24708]) ([solax docs]) +- Fix PS4 entities with shared host not updating and latency with multiple connections ([@ktnrg45] - [#24642]) ([ps4 docs]) +- Add initial support for remote dev container ([@pvizeli] - [#24681]) +- Expose ports 8123, 8300 and 51827 in Dockerfile ([@johnluetke] - [#24389]) +- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) +- Add 'unique_id' Property to Inverter Sensors ([@squishykid] - [#24707]) ([solax docs]) +- Remove device and entity registry entries when removing a ZHA device ([@dmulcahey] - [#24369]) ([zha docs]) +- Add support for sensor state STATE_UNAVAILABLE ([@cnrd] - [#24641]) ([plant docs]) +- Add integration for Vallox Ventilation Units ([@andre-richter] - [#24660]) ([vallox docs]) (new-integration) +- Vallox: Fix missing hass member ([@andre-richter] - [#24753]) ([vallox docs]) +- Remove obsolete comments in Dockerfile ([@Emilv2] - [#24748]) +- fix an error in the description ([@alain57] - [#24735]) +- Add support for IPP Printers to the CUPS integration ([@Matte23] - [#24756]) ([cups docs]) +- Enhancement/zha model manuf ([@Adminiuga] - [#24771]) ([zha docs]) +- Entity to handle updates via events ([@balloob] - [#24733]) +- Upgrade vallox to async client API ([@andre-richter] - [#24774]) ([vallox docs]) +- Upgrade pytest to 4.6.3 ([@scop] - [#24782]) +- Add time delta option when searching for deutsche_bahn connections ([@h3ndrik] - [#24600]) ([deutsche_bahn docs]) +- Zestimate fix for issue #23837 ([@dreed47] - [#23838]) ([zestimate docs]) +- Use climate device's target temp step value ([@andersonshatch] - [#24804]) ([homekit docs]) +- Use step from tado rather than assuming 0.1 ([@andersonshatch] - [#24807]) ([tado docs]) +- Changed default encoding to mp3 ([@GrandNewbien] - [#24808]) ([google_cloud docs]) (breaking change) +- Add developer tools panel ([@balloob] - [#24812]) ([frontend docs]) +- Add template vacuum support ([@luukd] - [#22904]) ([template docs]) (new-platform) +- Make sure alert is set up after notify ([@balloob] - [#24829]) ([alert docs]) +- Remove temperature attribute from SimpliSafe alarm control panel ([@bachya] - [#24833]) ([simplisafe docs]) (breaking change) +- Fronius (solar energy and inverter) component ([@nielstron] - [#22316]) ([sensor docs]) (new-platform) +- Add template support to template trigger's for option ([@pnbruckner] - [#24810]) ([automation docs]) +- Upgrade luftdaten to 0.6.1 ([@fabaff] - [#24842]) ([luftdaten docs]) (breaking change) +- Upgrade sqlalchemy to 1.3.5 ([@fabaff] - [#24844]) ([recorder docs]) ([sql docs]) +- Upgrade numpy to 1.16.4 ([@fabaff] - [#24845]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) +- Upgrade certifi to >= 2019.6.16 ([@fabaff] - [#24846]) +- Upgrade pyyaml to 5.1.1 ([@fabaff] - [#24847]) +- Upgrade jinja2 to >=2.10.1 ([@fabaff] - [#24851]) +- Upgrade psutil to 5.6.3 ([@fabaff] - [#24854]) ([systemmonitor docs]) +- Upgrade cryptography to 2.7 ([@fabaff] - [#24852]) +- Fix mysensors icon name ([@zewelor] - [#24871]) ([mysensors docs]) +- Update praw to 6.3.1 ([@fabaff] - [#23737]) ([reddit docs]) +- Hungarian is also supported in Google Cloud TTS ([@realthk] - [#24861]) ([google_cloud docs]) +- Upgrade youtube_dl to 2019.06.27 ([@fabaff] - [#24875]) ([media_extractor docs]) +- Velbus: autodiscover covers ([@Cereal2nd] - [#24877]) ([velbus docs]) (breaking change) +- Upgrade importlib-metadata to 0.18 ([@fabaff] - [#24848]) +- Upgrade bcrypt to 3.1.7 ([@fabaff] - [#24850]) +- Fix traceback during ZHA device removal ([@dmulcahey] - [#24882]) ([zha docs]) +- Move SmartThings imports to top ([@andrewsayre] - [#24878]) ([smartthings docs]) +- Bump androidtv to 0.0.17 ([@JeffLIrion] - [#24886]) +- Upgrade pytest to 5.0.0 ([@Danielhiversen] - [#24885]) +- Tweak geniushub battery icons according to device state ([@zxdavb] - [#24798]) ([geniushub docs]) +- Support mqtt discovery topic prefix with slashes ([@cybe] - [#24840]) ([mqtt docs]) +- Update tts.py ([@kevank] - [#24892]) ([watson_tts docs]) +- go back to signals and no hard entity references ([@dmulcahey] - [#24894]) ([zha docs]) +- Update IDs for rename node/value ([@Swamp-Ig] - [#24646]) ([zwave docs]) +- Bump life360 package to 4.0.1 ([@pnbruckner] - [#24905]) ([life360 docs]) +- Stability improvements for Sonos availability ([@amelchio] - [#24880]) ([sonos docs]) +- Fix 'same state' monitoring in numeric_state trigger ([@pnbruckner] - [#24910]) ([automation docs]) +- Fix 'same state' monitoring in state trigger ([@pnbruckner] - [#24904]) ([automation docs]) +- Add missing trigger.for variable to template trigger ([@pnbruckner] - [#24893]) ([automation docs]) +- Add ability to send attachments in pushover notifications ([@kreegahbundolo] - [#24806]) ([pushover docs]) +- New languages that looks like supported by Google but not documented: ([@lufton] - [#24881]) ([google_cloud docs]) +- Remove ZHA device entity ([@dmulcahey] - [#24909]) ([zha docs]) (breaking change) +- Bump androidtv to 0.0.18 ([@JeffLIrion] - [#24927]) ([androidtv docs]) +- Update pysonos to 0.0.19 ([@amelchio] - [#24930]) ([sonos docs]) +- Add support for Yale YRL256 lock ([@ctso] - [#24932]) ([zwave docs]) +- New scanner device tracker and ZHA device tracker support ([@dmulcahey] - [#24584]) ([device_tracker docs]) ([zha docs]) (new-platform) +- Allow updating of via_device in device registry ([@bachya] - [#24921]) +- Update pyHik library to 0.2.3 ([@mezz64] - [#24957]) ([hikvision docs]) +- Implement ADR0003 for Netatmo sensor ([@cgtobi] - [#24944]) ([netatmo docs]) (breaking change) +- Batch of Component(s) -> Integration(s) ([@frenck] - [#24972]) +- Add sonos.play_queue service ([@apeeters] - [#24974]) ([sonos docs]) +- Fix errors if rest source becomes unavailable ([@slackr31337] - [#24986]) ([scrape docs]) +- Switched from tuyapy to tuyaha as 1st one is not maintained ([@PaulAnnekov] - [#24821]) ([tuya docs]) +- Adds Lock Threads Probot ([@frenck] - [#24984]) +- Adds Stale Probot for issues ([@frenck] - [#24985]) +- Upgrade mypy to 0.711, drop no longer needed workarounds ([@scop] - [#24998]) +- Changes as per code review of #24646 ([@Swamp-Ig] - [#24917]) ([zwave docs]) +- Sleepiq single sleeper crash ([@qypea] - [#24941]) ([sleepiq docs]) +- Add support for aurora ABB Powerone solar photovoltaic inverter ([@davet2001] - [#24809]) ([aurora_abb_powerone docs]) (new-integration) +- Test dependency updates ([@scop] - [#25004]) +- upgrade switchmate to latest lib ([@Danielhiversen] - [#25006]) ([switchmate docs]) +- Upgrade hdate==0.8.8 ([@tsvi] - [#25008]) ([jewish_calendar docs]) +- Upgrade insteonplm to 0.16.0 and add INSTEON scene triggering ([@teharris1] - [#24765]) ([insteon docs]) +- Install requirements for integrations in packages before importing them. ([@ludeeus] - [#25005]) +- Added missing yeelight models mapping ([@cadavre] - [#24963]) ([yeelight docs]) +- Correct socket use in cert_expiry platform ([@elupus] - [#25011]) ([cert_expiry docs]) +- Climate 1.0 ([@pvizeli] - [#23899]) ([climate docs]) +- Implement Twilio SMS notify MediaUrl support ([@Chris-Johnston] - [#24971]) ([twilio_sms docs]) +- Enphase envoy individual inverter production ([@jesserizzo] - [#24445]) ([enphase_envoy docs]) +- Add support for arcam fmj receivers ([@elupus] - [#24621]) ([arcam_fmj docs]) (new-integration) +- Sensibo, add HVAC_MODE_OFF ([@Danielhiversen] - [#25016]) ([sensibo docs]) +- Fix ecobee flaky test ([@balloob] - [#25019]) ([ecobee docs]) +- Fix mimetypes on borked Windows machines ([@balloob] - [#25018]) ([frontend docs]) +- Add datetime option to input_datetime.set_datetime service ([@pnbruckner] - [#24975]) ([input_datetime docs]) +- Add template support to numeric_state trigger's for option ([@pnbruckner] - [#24955]) ([automation docs]) +- Add template support to state trigger's for option ([@pnbruckner] - [#24912]) ([automation docs]) +- Fix Nest sensor ([@balloob] - [#25023]) ([climate docs]) ([nest docs]) +- ambiclimate hvac_modes ([@Danielhiversen] - [#25015]) ([ambiclimate docs]) +- homematic add off support for climate ([@pvizeli] - [#25017]) ([homematic docs]) +- Support config flow on custom components ([@elupus] - [#24946]) ([config docs]) +- Improve SmartThings test mocking ([@andrewsayre] - [#25028]) +- Toon fixes for Climate 1.0 ([@frenck] - [#25027]) ([toon docs]) +- Add hvac fan state ([@andrewsayre] - [#25030]) ([climate docs]) ([smartthings docs]) +- Add support for Notion Home Monitoring ([@bachya] - [#24634]) ([notion docs]) (new-integration) +- Fix Netatmo climate presets ([@cgtobi] - [#25029]) ([netatmo docs]) (breaking change) +- Add missing support for jewish_calendar.omer_count sensor ([@arigilder] - [#24958]) ([jewish_calendar docs]) +- Centralizes Toon data, reducing API calls ([@frenck] - [#23988]) ([toon docs]) +- Upgrade youtube_dl to 2019.07.02 ([@fabaff] - [#24990]) ([media_extractor docs]) +- updated geojson_client library to version 0.4 ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) (breaking change) +- Improve toon climate ([@frenck] - [#25040]) ([toon docs]) +- Fix Netatmo rain gauge precision ([@cgtobi] - [#25036]) ([netatmo docs]) +- Bump pyvera to 0.3.2, null/missing value protection ([@jlrgraham] - [#25041]) ([vera docs]) +- Add radiotherm CT80 current humidity support ([@zombielinux] - [#25024]) ([radiotherm docs]) +- Add config flow support to Geolocation ([@bachya] - [#25046]) ([geo_location docs]) +- Update tuyaha to 0.0.2 to catch API exceptions ([@PaulAnnekov] - [#25050]) ([tuya docs]) +- Added marker sensor to CUPS integration ([@Matte23] - [#25037]) ([cups docs]) +- Remove myself as codeowner ([@cdce8p] - [#25043]) ([homekit docs]) +- [climate] Bugfix honeywell misleading error message ([@zxdavb] - [#25048]) ([evohome docs]) ([honeywell docs]) (new-platform) +- Add Sonos debug logging ([@amelchio] - [#25063]) ([sonos docs]) +- Avoid flooding steam API ([@Swamp-Ig] - [#23941]) ([steam_online docs]) +- Add check_config helper ([@kellerza] - [#24557]) +- bump zha-quirks version ([@dmulcahey] - [#25059]) ([zha docs]) +- Fix broken test in Python 3.7 ([@balloob] - [#25067]) +- Fix for Sonos debug logging ([@amelchio] - [#25064]) ([sonos docs]) +- Bump up ZHA dependencies. ([@Adminiuga] - [#25062]) ([zha docs]) +- Add support for World Wide Lightning Location Network ([@bachya] - [#25001]) ([wwlln docs]) (new-integration) +- SMA catch error ([@kellerza] - [#25045]) ([sma docs]) +- Change phrases in the logbook component for persons and binary_sensors ([@Martijn02] - [#25053]) ([logbook docs]) +- Make sure volume level is valid when incrementing/decrementing ([@JeffLIrion] - [#25061]) ([vizio docs]) +- Complete OPERATION_MODES ([@monte-monte] - [#25069]) ([knx docs]) +- Add websocket API command for Z-Wave network status ([@cgarwood] - [#25066]) ([zwave docs]) +- Correctly store removed entities for restore state ([@balloob] - [#25073]) +- Restore automation last_triggered as datetime & fix test ([@pnbruckner] - [#24951]) ([automation docs]) + +[#22316]: https://github.com/home-assistant/home-assistant/pull/22316 +[#22904]: https://github.com/home-assistant/home-assistant/pull/22904 +[#22932]: https://github.com/home-assistant/home-assistant/pull/22932 +[#23470]: https://github.com/home-assistant/home-assistant/pull/23470 +[#23691]: https://github.com/home-assistant/home-assistant/pull/23691 +[#23737]: https://github.com/home-assistant/home-assistant/pull/23737 +[#23838]: https://github.com/home-assistant/home-assistant/pull/23838 +[#23899]: https://github.com/home-assistant/home-assistant/pull/23899 +[#23941]: https://github.com/home-assistant/home-assistant/pull/23941 +[#23988]: https://github.com/home-assistant/home-assistant/pull/23988 +[#24369]: https://github.com/home-assistant/home-assistant/pull/24369 +[#24389]: https://github.com/home-assistant/home-assistant/pull/24389 +[#24445]: https://github.com/home-assistant/home-assistant/pull/24445 +[#24557]: https://github.com/home-assistant/home-assistant/pull/24557 +[#24584]: https://github.com/home-assistant/home-assistant/pull/24584 +[#24600]: https://github.com/home-assistant/home-assistant/pull/24600 +[#24621]: https://github.com/home-assistant/home-assistant/pull/24621 +[#24628]: https://github.com/home-assistant/home-assistant/pull/24628 +[#24634]: https://github.com/home-assistant/home-assistant/pull/24634 +[#24640]: https://github.com/home-assistant/home-assistant/pull/24640 +[#24641]: https://github.com/home-assistant/home-assistant/pull/24641 +[#24642]: https://github.com/home-assistant/home-assistant/pull/24642 +[#24646]: https://github.com/home-assistant/home-assistant/pull/24646 +[#24652]: https://github.com/home-assistant/home-assistant/pull/24652 +[#24660]: https://github.com/home-assistant/home-assistant/pull/24660 +[#24665]: https://github.com/home-assistant/home-assistant/pull/24665 +[#24666]: https://github.com/home-assistant/home-assistant/pull/24666 +[#24677]: https://github.com/home-assistant/home-assistant/pull/24677 +[#24678]: https://github.com/home-assistant/home-assistant/pull/24678 +[#24681]: https://github.com/home-assistant/home-assistant/pull/24681 +[#24682]: https://github.com/home-assistant/home-assistant/pull/24682 +[#24685]: https://github.com/home-assistant/home-assistant/pull/24685 +[#24690]: https://github.com/home-assistant/home-assistant/pull/24690 +[#24692]: https://github.com/home-assistant/home-assistant/pull/24692 +[#24693]: https://github.com/home-assistant/home-assistant/pull/24693 +[#24695]: https://github.com/home-assistant/home-assistant/pull/24695 +[#24707]: https://github.com/home-assistant/home-assistant/pull/24707 +[#24708]: https://github.com/home-assistant/home-assistant/pull/24708 +[#24733]: https://github.com/home-assistant/home-assistant/pull/24733 +[#24735]: https://github.com/home-assistant/home-assistant/pull/24735 +[#24748]: https://github.com/home-assistant/home-assistant/pull/24748 +[#24753]: https://github.com/home-assistant/home-assistant/pull/24753 +[#24756]: https://github.com/home-assistant/home-assistant/pull/24756 +[#24765]: https://github.com/home-assistant/home-assistant/pull/24765 +[#24771]: https://github.com/home-assistant/home-assistant/pull/24771 +[#24774]: https://github.com/home-assistant/home-assistant/pull/24774 +[#24782]: https://github.com/home-assistant/home-assistant/pull/24782 +[#24798]: https://github.com/home-assistant/home-assistant/pull/24798 +[#24804]: https://github.com/home-assistant/home-assistant/pull/24804 +[#24806]: https://github.com/home-assistant/home-assistant/pull/24806 +[#24807]: https://github.com/home-assistant/home-assistant/pull/24807 +[#24808]: https://github.com/home-assistant/home-assistant/pull/24808 +[#24809]: https://github.com/home-assistant/home-assistant/pull/24809 +[#24810]: https://github.com/home-assistant/home-assistant/pull/24810 +[#24812]: https://github.com/home-assistant/home-assistant/pull/24812 +[#24821]: https://github.com/home-assistant/home-assistant/pull/24821 +[#24829]: https://github.com/home-assistant/home-assistant/pull/24829 +[#24833]: https://github.com/home-assistant/home-assistant/pull/24833 +[#24840]: https://github.com/home-assistant/home-assistant/pull/24840 +[#24842]: https://github.com/home-assistant/home-assistant/pull/24842 +[#24844]: https://github.com/home-assistant/home-assistant/pull/24844 +[#24845]: https://github.com/home-assistant/home-assistant/pull/24845 +[#24846]: https://github.com/home-assistant/home-assistant/pull/24846 +[#24847]: https://github.com/home-assistant/home-assistant/pull/24847 +[#24848]: https://github.com/home-assistant/home-assistant/pull/24848 +[#24850]: https://github.com/home-assistant/home-assistant/pull/24850 +[#24851]: https://github.com/home-assistant/home-assistant/pull/24851 +[#24852]: https://github.com/home-assistant/home-assistant/pull/24852 +[#24854]: https://github.com/home-assistant/home-assistant/pull/24854 +[#24861]: https://github.com/home-assistant/home-assistant/pull/24861 +[#24871]: https://github.com/home-assistant/home-assistant/pull/24871 +[#24875]: https://github.com/home-assistant/home-assistant/pull/24875 +[#24877]: https://github.com/home-assistant/home-assistant/pull/24877 +[#24878]: https://github.com/home-assistant/home-assistant/pull/24878 +[#24880]: https://github.com/home-assistant/home-assistant/pull/24880 +[#24881]: https://github.com/home-assistant/home-assistant/pull/24881 +[#24882]: https://github.com/home-assistant/home-assistant/pull/24882 +[#24885]: https://github.com/home-assistant/home-assistant/pull/24885 +[#24886]: https://github.com/home-assistant/home-assistant/pull/24886 +[#24892]: https://github.com/home-assistant/home-assistant/pull/24892 +[#24893]: https://github.com/home-assistant/home-assistant/pull/24893 +[#24894]: https://github.com/home-assistant/home-assistant/pull/24894 +[#24904]: https://github.com/home-assistant/home-assistant/pull/24904 +[#24905]: https://github.com/home-assistant/home-assistant/pull/24905 +[#24909]: https://github.com/home-assistant/home-assistant/pull/24909 +[#24910]: https://github.com/home-assistant/home-assistant/pull/24910 +[#24912]: https://github.com/home-assistant/home-assistant/pull/24912 +[#24917]: https://github.com/home-assistant/home-assistant/pull/24917 +[#24921]: https://github.com/home-assistant/home-assistant/pull/24921 +[#24927]: https://github.com/home-assistant/home-assistant/pull/24927 +[#24930]: https://github.com/home-assistant/home-assistant/pull/24930 +[#24932]: https://github.com/home-assistant/home-assistant/pull/24932 +[#24941]: https://github.com/home-assistant/home-assistant/pull/24941 +[#24944]: https://github.com/home-assistant/home-assistant/pull/24944 +[#24946]: https://github.com/home-assistant/home-assistant/pull/24946 +[#24951]: https://github.com/home-assistant/home-assistant/pull/24951 +[#24955]: https://github.com/home-assistant/home-assistant/pull/24955 +[#24957]: https://github.com/home-assistant/home-assistant/pull/24957 +[#24958]: https://github.com/home-assistant/home-assistant/pull/24958 +[#24963]: https://github.com/home-assistant/home-assistant/pull/24963 +[#24971]: https://github.com/home-assistant/home-assistant/pull/24971 +[#24972]: https://github.com/home-assistant/home-assistant/pull/24972 +[#24974]: https://github.com/home-assistant/home-assistant/pull/24974 +[#24975]: https://github.com/home-assistant/home-assistant/pull/24975 +[#24984]: https://github.com/home-assistant/home-assistant/pull/24984 +[#24985]: https://github.com/home-assistant/home-assistant/pull/24985 +[#24986]: https://github.com/home-assistant/home-assistant/pull/24986 +[#24990]: https://github.com/home-assistant/home-assistant/pull/24990 +[#24998]: https://github.com/home-assistant/home-assistant/pull/24998 +[#25001]: https://github.com/home-assistant/home-assistant/pull/25001 +[#25004]: https://github.com/home-assistant/home-assistant/pull/25004 +[#25005]: https://github.com/home-assistant/home-assistant/pull/25005 +[#25006]: https://github.com/home-assistant/home-assistant/pull/25006 +[#25008]: https://github.com/home-assistant/home-assistant/pull/25008 +[#25011]: https://github.com/home-assistant/home-assistant/pull/25011 +[#25015]: https://github.com/home-assistant/home-assistant/pull/25015 +[#25016]: https://github.com/home-assistant/home-assistant/pull/25016 +[#25017]: https://github.com/home-assistant/home-assistant/pull/25017 +[#25018]: https://github.com/home-assistant/home-assistant/pull/25018 +[#25019]: https://github.com/home-assistant/home-assistant/pull/25019 +[#25023]: https://github.com/home-assistant/home-assistant/pull/25023 +[#25024]: https://github.com/home-assistant/home-assistant/pull/25024 +[#25027]: https://github.com/home-assistant/home-assistant/pull/25027 +[#25028]: https://github.com/home-assistant/home-assistant/pull/25028 +[#25029]: https://github.com/home-assistant/home-assistant/pull/25029 +[#25030]: https://github.com/home-assistant/home-assistant/pull/25030 +[#25036]: https://github.com/home-assistant/home-assistant/pull/25036 +[#25037]: https://github.com/home-assistant/home-assistant/pull/25037 +[#25039]: https://github.com/home-assistant/home-assistant/pull/25039 +[#25040]: https://github.com/home-assistant/home-assistant/pull/25040 +[#25041]: https://github.com/home-assistant/home-assistant/pull/25041 +[#25043]: https://github.com/home-assistant/home-assistant/pull/25043 +[#25045]: https://github.com/home-assistant/home-assistant/pull/25045 +[#25046]: https://github.com/home-assistant/home-assistant/pull/25046 +[#25048]: https://github.com/home-assistant/home-assistant/pull/25048 +[#25050]: https://github.com/home-assistant/home-assistant/pull/25050 +[#25053]: https://github.com/home-assistant/home-assistant/pull/25053 +[#25059]: https://github.com/home-assistant/home-assistant/pull/25059 +[#25061]: https://github.com/home-assistant/home-assistant/pull/25061 +[#25062]: https://github.com/home-assistant/home-assistant/pull/25062 +[#25063]: https://github.com/home-assistant/home-assistant/pull/25063 +[#25064]: https://github.com/home-assistant/home-assistant/pull/25064 +[#25066]: https://github.com/home-assistant/home-assistant/pull/25066 +[#25067]: https://github.com/home-assistant/home-assistant/pull/25067 +[#25069]: https://github.com/home-assistant/home-assistant/pull/25069 +[#25073]: https://github.com/home-assistant/home-assistant/pull/25073 +[@Adminiuga]: https://github.com/Adminiuga +[@Cereal2nd]: https://github.com/Cereal2nd +[@Chris-Johnston]: https://github.com/Chris-Johnston +[@Danielhiversen]: https://github.com/Danielhiversen +[@Emilv2]: https://github.com/Emilv2 +[@GrandNewbien]: https://github.com/GrandNewbien +[@JeffLIrion]: https://github.com/JeffLIrion +[@Martijn02]: https://github.com/Martijn02 +[@Matte23]: https://github.com/Matte23 +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@StevenLooman]: https://github.com/StevenLooman +[@Swamp-Ig]: https://github.com/Swamp-Ig +[@alain57]: https://github.com/alain57 +[@alengwenus]: https://github.com/alengwenus +[@amelchio]: https://github.com/amelchio +[@andersonshatch]: https://github.com/andersonshatch +[@andre-richter]: https://github.com/andre-richter +[@andrewsayre]: https://github.com/andrewsayre +[@apeeters]: https://github.com/apeeters +[@arigilder]: https://github.com/arigilder +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@cadavre]: https://github.com/cadavre +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@cnrd]: https://github.com/cnrd +[@ctso]: https://github.com/ctso +[@cybe]: https://github.com/cybe +[@davet2001]: https://github.com/davet2001 +[@dmulcahey]: https://github.com/dmulcahey +[@dreed47]: https://github.com/dreed47 +[@elupus]: https://github.com/elupus +[@endor-force]: https://github.com/endor-force +[@exxamalte]: https://github.com/exxamalte +[@fabaff]: https://github.com/fabaff +[@foreign-sub]: https://github.com/foreign-sub +[@frenck]: https://github.com/frenck +[@h3ndrik]: https://github.com/h3ndrik +[@jesserizzo]: https://github.com/jesserizzo +[@jlrgraham]: https://github.com/jlrgraham +[@jmw6773]: https://github.com/jmw6773 +[@johnluetke]: https://github.com/johnluetke +[@kellerza]: https://github.com/kellerza +[@kevank]: https://github.com/kevank +[@kreegahbundolo]: https://github.com/kreegahbundolo +[@ktnrg45]: https://github.com/ktnrg45 +[@ludeeus]: https://github.com/ludeeus +[@lufton]: https://github.com/lufton +[@luukd]: https://github.com/luukd +[@mezz64]: https://github.com/mezz64 +[@monte-monte]: https://github.com/monte-monte +[@mvn23]: https://github.com/mvn23 +[@nielstron]: https://github.com/nielstron +[@pnbruckner]: https://github.com/pnbruckner +[@pvizeli]: https://github.com/pvizeli +[@qypea]: https://github.com/qypea +[@realthk]: https://github.com/realthk +[@scop]: https://github.com/scop +[@sfjes]: https://github.com/sfjes +[@slackr31337]: https://github.com/slackr31337 +[@squishykid]: https://github.com/squishykid +[@teharris1]: https://github.com/teharris1 +[@tsvi]: https://github.com/tsvi +[@zewelor]: https://github.com/zewelor +[@zombielinux]: https://github.com/zombielinux +[@zxdavb]: https://github.com/zxdavb +[alert docs]: /components/alert/ +[ambiclimate docs]: /components/ambiclimate/ +[ambient_station docs]: /components/ambient_station/ +[androidtv docs]: /components/androidtv/ +[arcam_fmj docs]: /components/arcam_fmj/ +[aurora_abb_powerone docs]: /components/aurora_abb_powerone/ +[automation docs]: /components/automation/ +[braviatv docs]: /components/braviatv/ +[cert_expiry docs]: /components/cert_expiry/ +[climate docs]: /components/climate/ +[config docs]: /components/config/ +[cups docs]: /components/cups/ +[deutsche_bahn docs]: /components/deutsche_bahn/ +[device_tracker docs]: /components/device_tracker/ +[discord docs]: /components/discord/ +[dlna_dmr docs]: /components/dlna_dmr/ +[downloader docs]: /components/downloader/ +[ecobee docs]: /components/ecobee/ +[enphase_envoy docs]: /components/enphase_envoy/ +[evohome docs]: /components/evohome/ +[frontend docs]: /components/frontend/ +[geniushub docs]: /components/geniushub/ +[geo_json_events docs]: /components/geo_json_events/ +[geo_location docs]: /components/geo_location/ +[glances docs]: /components/glances/ +[google_cloud docs]: /components/google_cloud/ +[hikvision docs]: /components/hikvision/ +[homekit docs]: /components/homekit/ +[homematic docs]: /components/homematic/ +[honeywell docs]: /components/honeywell/ +[input_datetime docs]: /components/input_datetime/ +[insteon docs]: /components/insteon/ +[iqvia docs]: /components/iqvia/ +[jewish_calendar docs]: /components/jewish_calendar/ +[knx docs]: /components/knx/ +[lcn docs]: /components/lcn/ +[life360 docs]: /components/life360/ +[logbook docs]: /components/logbook/ +[luftdaten docs]: /components/luftdaten/ +[media_extractor docs]: /components/media_extractor/ +[mqtt docs]: /components/mqtt/ +[mysensors docs]: /components/mysensors/ +[nest docs]: /components/nest/ +[netatmo docs]: /components/netatmo/ +[nmap_tracker docs]: /components/nmap_tracker/ +[notion docs]: /components/notion/ +[nsw_rural_fire_service_feed docs]: /components/nsw_rural_fire_service_feed/ +[opencv docs]: /components/opencv/ +[opentherm_gw docs]: /components/opentherm_gw/ +[plant docs]: /components/plant/ +[ps4 docs]: /components/ps4/ +[pushover docs]: /components/pushover/ +[radiotherm docs]: /components/radiotherm/ +[rainmachine docs]: /components/rainmachine/ +[recorder docs]: /components/recorder/ +[reddit docs]: /components/reddit/ +[scrape docs]: /components/scrape/ +[sensibo docs]: /components/sensibo/ +[sensor docs]: /components/sensor/ +[simplisafe docs]: /components/simplisafe/ +[sleepiq docs]: /components/sleepiq/ +[sma docs]: /components/sma/ +[smartthings docs]: /components/smartthings/ +[solax docs]: /components/solax/ +[sonos docs]: /components/sonos/ +[sql docs]: /components/sql/ +[steam_online docs]: /components/steam_online/ +[switchmate docs]: /components/switchmate/ +[systemmonitor docs]: /components/systemmonitor/ +[sytadin docs]: /components/sytadin/ +[tado docs]: /components/tado/ +[template docs]: /components/template/ +[tensorflow docs]: /components/tensorflow/ +[toon docs]: /components/toon/ +[trafikverket_train docs]: /components/trafikverket_train/ +[trend docs]: /components/trend/ +[tuya docs]: /components/tuya/ +[twilio_sms docs]: /components/twilio_sms/ +[upnp docs]: /components/upnp/ +[usgs_earthquakes_feed docs]: /components/usgs_earthquakes_feed/ +[vallox docs]: /components/vallox/ +[velbus docs]: /components/velbus/ +[vera docs]: /components/vera/ +[vizio docs]: /components/vizio/ +[watson_tts docs]: /components/watson_tts/ +[wwlln docs]: /components/wwlln/ +[yeelight docs]: /components/yeelight/ +[zestimate docs]: /components/zestimate/ +[zha docs]: /components/zha/ +[zwave docs]: /components/zwave/ From 0239079b2bc8315c92c2c74fe0a6432423de0987 Mon Sep 17 00:00:00 2001 From: monte-monte <6649967+monte-monte@users.noreply.github.com> Date: Tue, 16 Jul 2019 10:04:42 +0300 Subject: [PATCH 04/24] Update hvac_mode attributes (#9869) Added missing attributes according to commit https://github.com/home-assistant/home-assistant/pull/25069/commits/abe62039882bed6ac8ae9b5087733cad90cc0228 I think we must add explanation for `hvac_mode` and `preset_mode` attributes, because it is unclear what these paragraphs mean and what those attributes stands for in the first place. If I am correct first are used for `controller_mode_address` and second for `operation_mode_address`. Maybe it needs to be mentioned? --- source/_components/climate.knx.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown index ca53734f988..13e8c7640e0 100644 --- a/source/_components/climate.knx.markdown +++ b/source/_components/climate.knx.markdown @@ -72,9 +72,11 @@ climate: The following values are valid for the `hvac_mode` attribute: - Off (maps internally to HVAC_MODE_OFF within Home Assistant) +- Auto (maps internally to HVAC_MODE_AUTO within Home Assistant) - Heat (maps internally to HVAC_MDOE_HEAT within Home Assistant) +- Cool (maps internally to HVAC_MDOE_COOL within Home Assistant) - Fan only (maps internally to HVAC_MODE_FAN_ONLY within Home Assistant) -- Dehumidification (maps internally to HVAC_MODE_DRY within Home Assistant) +- Dry (maps internally to HVAC_MODE_DRY within Home Assistant) The following presets are valid for the `preset_mode` attribute: From b8f5796acbbd776d7552f6722d017bdbca868c81 Mon Sep 17 00:00:00 2001 From: Mauricio Bonani Date: Tue, 16 Jul 2019 03:23:13 -0400 Subject: [PATCH 05/24] Fix OID table (#9870) --- source/_components/snmp.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/snmp.markdown b/source/_components/snmp.markdown index 8925b0993a7..50f98c5c7e2 100644 --- a/source/_components/snmp.markdown +++ b/source/_components/snmp.markdown @@ -32,19 +32,19 @@ This device tracker needs SNMP to be enabled on the router. It could be that you The following OID examples pull the current MAC Address table from a router. This reflects all recent devices seen on the network. However, since devices are not removed until they time out, this is less effective for [device tracker integration page](/components/device_tracker/) than desirable. It is recommended to use [Ping](/components/device_tracker.ping/) or [Nmap](/components/device_tracker.nmap_tracker/) instead. | Brand | Device/Firmware | OID | -|---|---|---|---| +| --- | --- | --- | | Aerohive | AP230 | `1.3.6.1.4.1.26928.1.1.1.2.1.2.1.1` | -| Apple | Airport Express (2nd gen.) 7.6.9 | `1.3.6.1.2.1.3.1.1.2` or `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` or `1.3.6.1.2.1.4.22.1.2`| | Aruba | IAP325 on AOS 6.5.4.8 | `1.3.6.1.4.1.14823.2.3.3.1.2.4.1.1` | | BiPAC | 7800DXL Firmware 2.32e | `1.3.6.1.2.1.17.7.1.2.2.1.1` | -| DD-WRT | unknown version/model | `1.3.6.1.2.1.4.22.1.2` | +| DD-WRT | unknown version/model | `1.3.6.1.2.1.4.22.1.2` | | Mikrotik | unknown RouterOS version/model | `1.3.6.1.4.1.14988.1.1.1.2.1.1` | | Mikrotik | RouterOS 6.x on RB2011 | `1.3.6.1.2.1.4.22.1.2` | | OpenWrt | Chaos Calmer 15.05 | `1.3.6.1.2.1.4.22.1.2` | -| OPNSense | 19.1 | `1.3.6.1.2.1.4.22.1.2` | -| pfSense | 2.2.4 | `1.3.6.1.2.1.4.22.1.2` | +| OPNSense | 19.1 | `1.3.6.1.2.1.4.22.1.2` | +| pfSense | 2.2.4 | `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` | -| TP-Link | Archer VR2600v | `1.3.6.1.2.1.3.1.1.2.19.1` | +| TP-Link | Archer VR2600v | `1.3.6.1.2.1.3.1.1.2.19.1` | | TP-Link | Archer VR600 | `1.3.6.1.2.1.3.1.1.2` | | Ubiquiti | Edgerouter Lite v1.9.0 | `1.3.6.1.2.1.4.22.1.2` | From 56d0dcf61a1d927ed536c1f37411e64aab2d7fbf Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 16 Jul 2019 09:26:26 +0200 Subject: [PATCH 06/24] Removes outdated example configs (#9868) --- source/_cookbook/configuration_yaml_by_fredsmith.markdown | 7 ------- source/_cookbook/configuration_yaml_by_mf_social.markdown | 6 ------ 2 files changed, 13 deletions(-) delete mode 100644 source/_cookbook/configuration_yaml_by_fredsmith.markdown delete mode 100644 source/_cookbook/configuration_yaml_by_mf_social.markdown diff --git a/source/_cookbook/configuration_yaml_by_fredsmith.markdown b/source/_cookbook/configuration_yaml_by_fredsmith.markdown deleted file mode 100644 index 5ec4ad1a5a6..00000000000 --- a/source/_cookbook/configuration_yaml_by_fredsmith.markdown +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Configuration.yaml by fredsmith" -description: "" -ha_category: Example configuration.yaml -ha_external_link: https://git.smith.bz/derf/homeautomation ---- - diff --git a/source/_cookbook/configuration_yaml_by_mf_social.markdown b/source/_cookbook/configuration_yaml_by_mf_social.markdown deleted file mode 100644 index a986491238e..00000000000 --- a/source/_cookbook/configuration_yaml_by_mf_social.markdown +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Configuration.yaml by mf_social" -description: "" -ha_category: Example configuration.yaml -ha_external_link: https://github.com/mf-social/Home-Assistant ---- From 7e5c79d15a0da32d45608b200b4b591673a33232 Mon Sep 17 00:00:00 2001 From: Sean Mooney Date: Tue, 16 Jul 2019 03:28:38 -0400 Subject: [PATCH 07/24] Update socialblade.markdown (#9857) Streamlined the page a little bit. Corrected capitalizations in brand names, corrected some confusing info (at one point it refers to it as a "social blade channel ID" even though it's a YouTube channel ID). Fixed some typos, shortened instructions a bit, removed a duplicate line at the end (since it's mentioned in the intro already). Also in the example config changed "YOUR_CHANNEL_NUMBER " to "YOUTUBE_CHANNEL_ID" because you can use any channel, not just "your" own. Channel ID's contain letters too so "number" isn't really accurate, better to just say ID. --- source/_components/socialblade.markdown | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/source/_components/socialblade.markdown b/source/_components/socialblade.markdown index a9db5e45ba4..ddd2ce5ae46 100644 --- a/source/_components/socialblade.markdown +++ b/source/_components/socialblade.markdown @@ -10,11 +10,11 @@ redirect_from: - /components/sensor.socialblade/ --- -The `socialblade` sensor platform allows you get updates on a Youtube channel using your social blade channel ID. The sensor gets the subscribers and total views count from [Social Blade Website](https://socialblade.com). +The `socialblade` sensor platform allows you to monitor a YouTube channels subscriber count and total views count. The sensor retrieves data from the [Social Blade website](https://socialblade.com). ## Setup -To get the channel ID you can go to [Social Blade Website](https://socialblade.com) and search for Youtube channel by username, then select the channel and grab the ID from the URL. The channel ID will be the last part of the URL: `https://socialblade.com/youtube/channel/{channel_id}` +To get the YouTube channel ID, search for and select the channel on the [Social Blade website](https://socialblade.com). The channel ID will be at the end of the Social Blade URL: `https://socialblade.com/youtube/channel/{channel_id}` ## Configuration @@ -24,14 +24,12 @@ To enable the sensor, add the following lines to your `configuration.yaml` file: # Example configuration.yaml entry sensor: - platform: socialblade - channel_id: YOUR_CHANNEL_NUMBER + channel_id: YOUTUBE_CHANNEL_ID ``` {% configuration %} channel_id: - description: Channel id number optained from the URL when you access Social Blade web client. + description: YouTube channel ID. required: true type: string {% endconfiguration %} - -All the data will be fetch from [Social Blade]( https://socialblade.com/). From 608e2771458eb08f5720781141e28906174224ed Mon Sep 17 00:00:00 2001 From: Matt Swan Date: Tue, 16 Jul 2019 18:02:28 +1000 Subject: [PATCH 08/24] serial_sensor Added splitting string example, fixed Arduino ex (#9845) * Added splitting string example, fixed Arduino ex * fixed raw tags * :pencil2: Tweak * Added sample return string from serial device * Change heading (it's an anchor) --- source/_components/serial.markdown | 57 +++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/source/_components/serial.markdown b/source/_components/serial.markdown index c7ac5fb383d..a0a49243a7c 100644 --- a/source/_components/serial.markdown +++ b/source/_components/serial.markdown @@ -63,7 +63,7 @@ value_template: ### Arduino -For controllers of the Arduino family a possible sketch to read the temperature and the humidity could look like the sample below. +For controllers of the Arduino family, a possible sketch to read the temperature and the humidity could look like the sample below.The returned data is in JSON format and can be split into the individual sensor values using a [template](/docs/configuration/templating/#processing-incoming-data). ```c #include @@ -73,21 +73,54 @@ void setup() { } void loop() { - StaticJsonBuffer<100> jsonBuffer; - JsonObject& json = prepareResponse(jsonBuffer); - json.printTo(Serial); - Serial.println(); - delay(2000); -} + StaticJsonDocument<100> jsonBuffer; -JsonObject& prepareResponse(JsonBuffer& jsonBuffer) { - JsonObject& root = jsonBuffer.createObject(); - root["temperature"] = analogRead(A0); - root["humidity"] = analogRead(A1); - return root; + jsonBuffer["temperature"] = analogRead(A0); + jsonBuffer["humidity"] = analogRead(A1); + + serializeJson(jsonBuffer, Serial); + Serial.println(); + + delay(1000); } ``` +### Devices returning multiple sensors as a text string + +For devices that return multiple sensors as a concatenated string of values with a delimiter, (i.e., the returned string is not JSON formatted) you can make several template sensors, all using the same serial response. For example, a stream from the [Sparkfun USB Weather Board](https://www.sparkfun.com/products/retired/9800) includes temperature, humidity and barometric pressure within it returned text string. Sample returned data: + +```c +$,24.1,50,12.9,1029.83,0.0,0.00,* +$,24.3,51,12.8,1029.76,0.0,0.00,* +``` + +To parse this into individual sensors, split using the comma delimiter and then create a template sensor for each item of interest. + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: serial + serial_port: /dev/ttyUSB0 + baudrate: 9600 + + - platform: template + sensors: + my_temperature_sensor: + friendly_name: Temperature + unit_of_measurement: "°C" + value_template: "{{ states('sensor.serial_sensor').split(',')[1] | float }}" + my_humidity_sensor: + friendly_name: Humidity + unit_of_measurement: "%" + value_template: "{{ states('sensor.serial_sensor').split(',')[2] | float }}" + my_barometer: + friendly_name: Barometer + unit_of_measurement: "mbar" + value_template: "{{ states('sensor.serial_sensor').split(',')[4] | float }}" +``` +{% endraw %} + ### Digispark USB Development Board This [blog post](/blog/2017/10/23/simple-analog-sensor/) describes the setup with a Digispark USB Development Board. From 73a8cc662cba8e2de51d20e03e32b23a73075469 Mon Sep 17 00:00:00 2001 From: ferdinand Date: Tue, 16 Jul 2019 10:06:03 +0200 Subject: [PATCH 09/24] Update mitemp_bt component documentation (#9859) * Update mitemp_bt component documentation Fixed the full example and added the default values for force_update and median. * :pencil2: Tweak --- source/_components/mitemp_bt.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/mitemp_bt.markdown b/source/_components/mitemp_bt.markdown index 46d44d831cf..593e49531dc 100644 --- a/source/_components/mitemp_bt.markdown +++ b/source/_components/mitemp_bt.markdown @@ -81,10 +81,12 @@ name: force_update: description: Sends update events even if the value hasn't changed. required: false + default: false type: boolean median: description: "Sometimes the sensor measurements show spikes. Using this parameter, the poller will report the median of the last 3 (you can also use larger values) measurements. This filters out single spikes. Median: 5 will also filter double spikes. If you never have problems with spikes, `median: 1` will work fine." required: false + default: 3 type: integer timeout: description: Define the timeout value in seconds when polling. @@ -121,7 +123,8 @@ sensor: - platform: mitemp_bt mac: 'xx:xx:xx:xx:xx:xx' name: Kids Room Temp - force_up median: 3 + force_update: true + median: 1 monitored_conditions: - temperature - humidity From e6b31733e688555e27e25b1b7723522e33d5cafd Mon Sep 17 00:00:00 2001 From: J3n50m4t Date: Tue, 16 Jul 2019 10:07:51 +0200 Subject: [PATCH 10/24] Update Homekit Docs (#9858) * Update Homekit Docs Homeassistant 0.95.x throws warning "Please remove homekit from your discovery.enable configuration as it is now enabled by default" if enable homekit is added to discovery component * :pencil2: Tweak --- source/_components/homekit_controller.markdown | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index f1f089aee77..c595c781d09 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -37,12 +37,6 @@ There is currently support for the following device types within Home Assistant: - Binary Sensor (HomeKit motion sensors) - Sensor (HomeKit humidity, temperature, and light level sensors) -The integration will be automatically configured if the [`discovery:`](/components/discovery/) integration is enabled and an enable entry added for HomeKit: - -```yaml -discovery: - enable: - - homekit -``` +The integration will be automatically configured if the [`discovery`](/components/discovery/) integration is enabled. For each detected HomeKit accessory, a configuration prompt will appear in the web front end. Use this to provide the HomeKit PIN. Note that HomeKit accessories can only be paired to one device at once. If your device is currently paired with Siri, you will need to reset it in order to pair it with Home Assistant. Once Home Assistant is configured to work with the device, you can export it back to Siri with the [`HomeKit`](/components/homekit/) component. From 5902df139344ee23e5e5eb55b829582639cbf602 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 16 Jul 2019 17:15:44 +0200 Subject: [PATCH 11/24] Move setup details up --- source/_components/cups.markdown | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/_components/cups.markdown b/source/_components/cups.markdown index 3b8e0fb9524..1a5380a7052 100644 --- a/source/_components/cups.markdown +++ b/source/_components/cups.markdown @@ -13,12 +13,18 @@ redirect_from: The `cups` sensor platform is using the open source printing system [CUPS](https://www.cups.org/) to show details about your printers. +## Setup + +You will need to install the `python3-dev` or `python3-devel` pacakge and the development files for CUPS (`libcups2-dev` or`cups-devel`) on your system manually (e.g., `sudo apt-get install python3-dev libcups2-dev` or `sudo dnf -y install python3-devel cups-devel`) along with a compiler (`gcc`). This integration doesn't work out-of-the-box in a container-based setup. + To set up the sensor the "Queue Name" of the printer is needed. The fastest way to get it, is to visit the CUPS web interface at "http://[IP ADDRESS PRINT SERVER]:631" and go to "Printers".

+## Configuration + To enable the CUPS sensor, add the following lines to your `configuration.yaml`: ```yaml @@ -47,8 +53,3 @@ port: default: 631 {% endconfiguration %} -
- -You will need to install the `python3-dev` or `python3-devel` and the development files for CUPS (`libcups2-dev` or`cups-devel`) package on your system manually (eg. `sudo apt-get install python3-dev libcups2-dev` or `sudo dnf -y install python3-devel cups-devel`) along with a compiler (`gcc`). - -
From 42842f64a632996860494f1cc003d2c99065ed33 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 16 Jul 2019 22:58:38 +0200 Subject: [PATCH 12/24] Collection of configuration block fixes (#9874) --- source/_components/airvisual.markdown | 18 +++++++------- .../alarm_control_panel.mqtt.markdown | 2 +- source/_components/alert.markdown | 2 +- source/_components/alpha_vantage.markdown | 6 ++--- source/_components/amazon_polly.markdown | 2 +- source/_components/ambient_station.markdown | 2 +- source/_components/android_ip_webcam.markdown | 1 + source/_components/androidtv.markdown | 4 ++-- source/_components/apple_tv.markdown | 1 + source/_components/aqualogic.markdown | 2 +- source/_components/aquostv.markdown | 2 +- source/_components/arduino.markdown | 8 +++---- source/_components/arest.markdown | 2 +- source/_components/aws.markdown | 12 +++++----- source/_components/bayesian.markdown | 12 +++++----- .../_components/binary_sensor.mqtt.markdown | 4 ++-- .../_components/binary_sensor.rest.markdown | 4 ++-- .../_components/binary_sensor.rflink.markdown | 2 +- .../binary_sensor.template.markdown | 2 +- source/_components/bitcoin.markdown | 2 +- source/_components/blackbird.markdown | 10 ++++---- source/_components/blockchain.markdown | 2 +- source/_components/bom.markdown | 4 ++-- source/_components/broadlink.markdown | 8 +++---- source/_components/brottsplatskartan.markdown | 2 ++ source/_components/calendar.google.markdown | 3 ++- source/_components/camera.mqtt.markdown | 2 +- source/_components/clicksend.markdown | 3 +-- source/_components/climate.knx.markdown | 2 +- source/_components/climate.mqtt.markdown | 10 ++++---- source/_components/cover.group.markdown | 2 +- source/_components/cover.mqtt.markdown | 2 +- source/_components/crimereports.markdown | 2 ++ source/_components/currencylayer.markdown | 3 +-- source/_components/epsonworkforce.markdown | 2 +- source/_components/evohome.markdown | 4 ++-- source/_components/fan.mqtt.markdown | 6 ++--- source/_components/fan.template.markdown | 2 +- source/_components/feedreader.markdown | 2 +- source/_components/fibaro.markdown | 4 ++-- source/_components/filesize.markdown | 2 +- source/_components/filter.markdown | 2 +- source/_components/flunearyou.markdown | 8 +++---- source/_components/flux.markdown | 1 + source/_components/freedns.markdown | 2 +- .../_components/generic_thermostat.markdown | 1 + source/_components/glances.markdown | 2 +- source/_components/google_assistant.markdown | 1 + source/_components/google_domains.markdown | 2 +- source/_components/google_wifi.markdown | 2 +- source/_components/greeneye_monitor.markdown | 2 +- source/_components/group.markdown | 2 ++ source/_components/harmony.markdown | 1 + source/_components/hikvision.markdown | 2 ++ source/_components/homeworks.markdown | 2 +- source/_components/http.markdown | 6 ++--- source/_components/huawei_lte.markdown | 6 ++--- source/_components/hue.markdown | 2 ++ source/_components/hyperion.markdown | 6 ++--- source/_components/idteck_prox.markdown | 2 +- source/_components/ihc.markdown | 1 + source/_components/influxdb.markdown | 8 +++---- source/_components/input_boolean.markdown | 2 +- source/_components/input_datetime.markdown | 4 ++-- source/_components/input_number.markdown | 2 +- source/_components/input_text.markdown | 8 +++---- source/_components/insteon.markdown | 24 +++++++++---------- source/_components/integration.markdown | 5 ++-- source/_components/iss.markdown | 2 +- source/_components/jewish_calendar.markdown | 3 ++- source/_components/knx.markdown | 1 + source/_components/kodi.markdown | 1 + source/_components/konnected.markdown | 2 +- source/_components/lacrosse.markdown | 1 + source/_components/lastfm.markdown | 2 +- source/_components/lcn.markdown | 12 +++++----- source/_components/lifx.markdown | 2 +- source/_components/light.group.markdown | 2 +- source/_components/light.mqtt.markdown | 6 ++--- source/_components/lock.mqtt.markdown | 2 +- source/_components/luftdaten.markdown | 2 +- source/_components/manual_mqtt.markdown | 2 +- source/_components/netgear_lte.markdown | 2 +- source/_components/nuheat.markdown | 2 +- source/_components/oasa_telematics.markdown | 2 +- source/_components/pencom.markdown | 4 ++-- source/_components/person.markdown | 2 +- source/_components/ptvsd.markdown | 2 +- source/_components/qwikswitch.markdown | 2 +- source/_components/rainmachine.markdown | 2 +- source/_components/recorder.markdown | 2 +- source/_components/rest.markdown | 4 ++-- source/_components/rmvtransport.markdown | 2 +- source/_components/route53.markdown | 2 +- .../_components/sensor.command_line.markdown | 2 +- source/_components/sensor.mqtt.markdown | 4 ++-- source/_components/spaceapi.markdown | 18 +++++++------- source/_components/switch.mqtt.markdown | 2 +- source/_components/switch.rest.markdown | 2 +- source/_components/syncthru.markdown | 2 +- source/_components/synology_srm.markdown | 2 +- source/_components/template.markdown | 2 +- source/_components/tplink_lte.markdown | 2 +- source/_components/yale_smart_alarm.markdown | 2 +- source/_docs/z-wave/installation.markdown | 2 +- 105 files changed, 202 insertions(+), 179 deletions(-) diff --git a/source/_components/airvisual.markdown b/source/_components/airvisual.markdown index d14e53c3d9a..daf4d9a9a5b 100644 --- a/source/_components/airvisual.markdown +++ b/source/_components/airvisual.markdown @@ -35,44 +35,44 @@ sensor: {% configuration %} api_key: description: Your AirVisual API key. - required: required + required: true type: string monitored_conditions: description: "The air quality standard(s) to use (`us` for U.S., `cn` for Chinese)." - required: required + required: true type: list default: ['us', 'cn'] show_on_map: description: "Whether to show a marker on the map at the specified location." - required: optional + required: false type: boolean default: true scan_interval: description: "The rate in seconds at which AirVisual should be polled for new data." - required: optional + required: false type: integer default: 600 latitude: description: The latitude of the location to monitor. - required: optional + required: false type: string default: "The latitude defined under the `homeassistant` key in `configuration.yaml`." longitude: description: The longitude of the location to monitor. - required: optional + required: false type: string default: "The longitude defined under the `homeassistant` key in `configuration.yaml`." city: description: The city to monitor. - required: optional + required: false type: string state: description: The state the city belongs to. - required: optional + required: false type: string country: description: The country the state belongs to. - required: optional + required: false type: string {% endconfiguration %} diff --git a/source/_components/alarm_control_panel.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index be3d84e22a3..2b7e42baecc 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -129,7 +129,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [list, string] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index b16b9e5b627..2097ba258c8 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -64,7 +64,7 @@ repeat: Number of minutes before the notification should be repeated. Can be either a number or a list of numbers. required: true - type: [int, list] + type: [integer, list] can_acknowledge: description: Allows the alert to be unacknowledgeable. required: false diff --git a/source/_components/alpha_vantage.markdown b/source/_components/alpha_vantage.markdown index fbd026df3f4..31b3b8c1383 100644 --- a/source/_components/alpha_vantage.markdown +++ b/source/_components/alpha_vantage.markdown @@ -51,7 +51,7 @@ symbols: default: USD symbol: description: The stock market symbol for the given company. - required: required + required: true type: string foreign_exchange: description: List of currencies. @@ -64,11 +64,11 @@ foreign_exchange: type: string from: description: The source currency. - required: required + required: true type: string to: description: The target currency. - required: required + required: true type: string {% endconfiguration %} diff --git a/source/_components/amazon_polly.markdown b/source/_components/amazon_polly.markdown index ff8c6854caa..5252e003db2 100644 --- a/source/_components/amazon_polly.markdown +++ b/source/_components/amazon_polly.markdown @@ -46,7 +46,7 @@ profile_name: region_name: description: The region identifier to connect to. required: false - type: string or list + type: [string, list] default: us-east-1 name: description: "Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`." diff --git a/source/_components/ambient_station.markdown b/source/_components/ambient_station.markdown index 56fe6c37cd4..4529897565d 100644 --- a/source/_components/ambient_station.markdown +++ b/source/_components/ambient_station.markdown @@ -42,7 +42,7 @@ app_key: type: string monitored_conditions: description: Weather conditions to track. - required: optional + required: false type: list keys: 24hourrainin: diff --git a/source/_components/android_ip_webcam.markdown b/source/_components/android_ip_webcam.markdown index 6af8fdf435c..1a383feb3c2 100644 --- a/source/_components/android_ip_webcam.markdown +++ b/source/_components/android_ip_webcam.markdown @@ -122,6 +122,7 @@ motion_sensor: description: Activate motion sensor if `auto_discovery` is disabled. required: false type: boolean + default: false {% endconfiguration %}
diff --git a/source/_components/androidtv.markdown b/source/_components/androidtv.markdown index 891ed85c0d9..84fa928582a 100644 --- a/source/_components/androidtv.markdown +++ b/source/_components/androidtv.markdown @@ -76,7 +76,7 @@ adb_server_port: description: The port for the ADB server. required: false default: 5037 - type: port + type: integer get_sources: description: Whether or not to retrieve the running apps as the list of sources for Fire TV devices; not used for Android TV devices. required: false @@ -86,7 +86,7 @@ apps: description: A dictionary where the keys are app IDs and the values are app names that will be displayed in the UI; see example below. required: false default: {} - type: dict + type: map device_class: description: "The type of device: `auto` (detect whether it is an Android TV or Fire TV device), `androidtv`, or `firetv`." required: false diff --git a/source/_components/apple_tv.markdown b/source/_components/apple_tv.markdown index 4521dd353c2..52d74a6b3a8 100644 --- a/source/_components/apple_tv.markdown +++ b/source/_components/apple_tv.markdown @@ -66,6 +66,7 @@ start_off: description: Set to true if the device should start in fake standby. required: false type: boolean + default: false credentials: description: Credentials used for AirPlay playback. required: false diff --git a/source/_components/aqualogic.markdown b/source/_components/aqualogic.markdown index f8f2a8ff09e..eb0f2168f6e 100644 --- a/source/_components/aqualogic.markdown +++ b/source/_components/aqualogic.markdown @@ -39,7 +39,7 @@ host: port: description: The port provided by the RS-485 to Ethernet adapter. required: true - type: int + type: integer {% endconfiguration %} ## Sensor diff --git a/source/_components/aquostv.markdown b/source/_components/aquostv.markdown index 92e8ed3714d..179ed0a8ed3 100644 --- a/source/_components/aquostv.markdown +++ b/source/_components/aquostv.markdown @@ -32,7 +32,7 @@ port: description: The port of the Sharp Aquos TV. required: false default: 10002 - type: int + type: integer username: description: The username of the Sharp Aquos TV. required: false diff --git a/source/_components/arduino.markdown b/source/_components/arduino.markdown index c2fcc88fc63..b84be2acc40 100644 --- a/source/_components/arduino.markdown +++ b/source/_components/arduino.markdown @@ -92,7 +92,7 @@ pins: type: map keys: name: - default: Name that will be used in the frontend for the pin. + description: Name that will be used in the frontend for the pin. type: string {% endconfiguration %} @@ -129,16 +129,16 @@ pins: type: map keys: name: - default: Name that will be used in the frontend for the pin. + description: Name that will be used in the frontend for the pin. type: string required: false initial: - default: The initial value for this port. + description: The initial value for this port. type: boolean required: false default: false negate: - default: If this pin should be inverted. + description: If this pin should be inverted. type: boolean required: false default: false diff --git a/source/_components/arest.markdown b/source/_components/arest.markdown index 6ef611b608b..57282ff7410 100644 --- a/source/_components/arest.markdown +++ b/source/_components/arest.markdown @@ -214,7 +214,7 @@ resource: type: string name: description: Let you overwrite the name of the device. By default *name* from the device is used. - required: optional + required: false type: string pins: description: An array with all used pins. diff --git a/source/_components/aws.markdown b/source/_components/aws.markdown index 13be11a9526..80bc9627e64 100644 --- a/source/_components/aws.markdown +++ b/source/_components/aws.markdown @@ -42,12 +42,12 @@ name: required: true type: string aws_access_key_id: - description: Your AWS Access Key ID. If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name`. - required: Required if aws_secret_access_key is provided + description: Your AWS Access Key ID. If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name`. Required if `aws_secret_access_key` is provided. + required: false type: string aws_secret_access_key: - description: Your AWS Secret Access Key. If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`. - required: Required if aws_access_key_id is provided + description: Your AWS Secret Access Key. If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`. Required if `aws_access_key_id` is provided. + required: false type: string profile_name: description: A credentials profile name. @@ -80,8 +80,8 @@ aws_access_key_id: required: false type: string aws_secret_access_key: - description: Your AWS Secret Access Key. If provided, you must also provide an `aws_access_key_id`. - required: Required if aws_access_key_id is provided + description: Your AWS Secret Access Key. If provided, you must also provide an `aws_access_key_id`. Required if aws_access_key_id is provided. + required: false type: string profile_name: description: A credentials profile name. diff --git a/source/_components/bayesian.markdown b/source/_components/bayesian.markdown index 9457d01ec09..b12e2f856b5 100644 --- a/source/_components/bayesian.markdown +++ b/source/_components/bayesian.markdown @@ -62,12 +62,12 @@ observations: required: true type: string entity_id: - description: Name of the entity to monitor. - required: true (for `state` and `numeric_state`) + description: Name of the entity to monitor. Required for `state` and `numeric_state`. + required: false type: string value_template: - description: Defines the template to be used. - required: true (for `template`) + description: Defines the template to be used. Required for `template`. + required: false type: template prob_given_true: description: The probability of the observation occurring, given the event is `true`. @@ -79,8 +79,8 @@ observations: type: float default: "`1 - prob_given_true` if `prob_given_false` is not set" to_state: - description: The target state. - required: true (for `state`) + description: The target state. Required (for `state`). + required: false type: string {% endconfiguration %} diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 850c7111eb9..2e66c2e9778 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -105,11 +105,11 @@ device: identifiers: description: A list of IDs that uniquely identify the device. For example a serial number. required: false - type: list, string + type: [list, string] connections: description: "A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `'connections': ['mac', '02:5b:26:a8:dc:12']`." required: false - type: list, tuple + type: [list, map] manufacturer: description: The manufacturer of the device. required: false diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index f5a627b58a5..f941901f6dc 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -88,7 +88,7 @@ verify_ssl: timeout: description: Defines max time to wait data from the endpoint. required: false - type: positive integer + type: integer default: 10 authentication: description: "Type of the HTTP authentication. `basic` or `digest`." @@ -105,7 +105,7 @@ password: headers: description: The headers for the requests. required: false - type: list, string + type: [list, string] {% endconfiguration %}
diff --git a/source/_components/binary_sensor.rflink.markdown b/source/_components/binary_sensor.rflink.markdown index 1dc88061438..90c9f65f4e9 100644 --- a/source/_components/binary_sensor.rflink.markdown +++ b/source/_components/binary_sensor.rflink.markdown @@ -55,7 +55,7 @@ devices: off_delay: description: For sensors that only sends 'On' state updates, this variable sets a delay after which the sensor state will be updated back to 'Off'. required: false - type: int + type: integer force_update: description: Sends update events even if the value has not changed. Useful for sensors that only sends `On`. required: false diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index a69a3edeedd..d57dd513cdf 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -48,7 +48,7 @@ sensors: entity_id: description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false - type: string, list + type: [string, list] device_class: description: Sets the [class of the device](/components/binary_sensor/), changing the device state and icon that is displayed on the frontend. required: false diff --git a/source/_components/bitcoin.markdown b/source/_components/bitcoin.markdown index 97fba709f76..96982e1be3e 100644 --- a/source/_components/bitcoin.markdown +++ b/source/_components/bitcoin.markdown @@ -33,7 +33,7 @@ currency: display_options: description: Options to display in the frontend. required: true - type: map + type: list keys: exchangerate: description: Exchange rate of 1 BTC diff --git a/source/_components/blackbird.markdown b/source/_components/blackbird.markdown index a85601370fe..5236d4f88a6 100644 --- a/source/_components/blackbird.markdown +++ b/source/_components/blackbird.markdown @@ -39,17 +39,19 @@ host: zones: description: This is the list of zones available. Valid zones are 1, 2, 3, 4, 5, 6, 7, 8. Each zone must have a name assigned to it. required: true - type: integer + type: map keys: - name: + ZONE_NUMBER: description: The name of the zone. + type: string sources: description: The list of sources available. Valid source numbers are 1, 2, 3, 4, 5, 6, 7, 8. Each source number corresponds to the input number on the Blackbird matrix switch. Similar to zones, each source must have a name assigned to it. required: true - type: integer + type: map keys: - name: + ZONE_NUMBER: description: The name of the source. + type: string {% endconfiguration %} ### Service `media_player.blackbird_set_all_zones` diff --git a/source/_components/blockchain.markdown b/source/_components/blockchain.markdown index 5d54a0f1752..855d6f354d0 100644 --- a/source/_components/blockchain.markdown +++ b/source/_components/blockchain.markdown @@ -28,6 +28,6 @@ sensor: addresses: description: List of bitcoin wallet addresses to watch. required: true - type: string, list + type: [string, list] {% endconfiguration %} diff --git a/source/_components/bom.markdown b/source/_components/bom.markdown index 65be758b080..e8e86e3b870 100644 --- a/source/_components/bom.markdown +++ b/source/_components/bom.markdown @@ -33,11 +33,11 @@ weather: {% configuration %} name: description: The name you would like to give to the weather station. - required: optional + required: false type: string station: description: "The station ID string. See the [`sensor.bom` docs](#sensor) for details on how to find the ID of a station." - required: optional + required: false type: string default: The closest station {% endconfiguration %} diff --git a/source/_components/broadlink.markdown b/source/_components/broadlink.markdown index d9e9fc9ee62..ff8b32e040e 100644 --- a/source/_components/broadlink.markdown +++ b/source/_components/broadlink.markdown @@ -46,7 +46,7 @@ name: description: Sensor name. required: false default: Broadlink sensor - type: String + type: string scan_interval: description: Time in seconds to fetch data from sensors. required: false @@ -155,12 +155,12 @@ friendly_name: type: string type: description: "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`." - required: true/false + required: true type: string switches: description: The array that contains all switches. required: false - type: array + type: map keys: identifier: description: Name of the command switch as slug. Multiple entries are possible. @@ -182,7 +182,7 @@ switches: slots: description: Friendly names of 4 slots of MP1 power strip. If not configured, slot name will be `switch's friendly_name + 'slot {slot_index}'`. e.g 'MP1 slot 1' required: false - type: array + type: map keys: slot_1: description: Friendly names of slot 1 diff --git a/source/_components/brottsplatskartan.markdown b/source/_components/brottsplatskartan.markdown index c314abf8a96..2a27ef21ec1 100644 --- a/source/_components/brottsplatskartan.markdown +++ b/source/_components/brottsplatskartan.markdown @@ -34,10 +34,12 @@ area: latitude: description: Latitude for sensor. required: false + type: float default: Your home zone latitude defined in your configuration. longitude: description: Longitude for sensor. required: false + type: float default: Your home zone longitude defined in your configuration. {% endconfiguration %} diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 95e970a84b2..1c54c4fdc0a 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -121,6 +121,7 @@ entities: description: "Should we create a sensor `true` or ignore it `false`?" required: true type: boolean + default: true search: description: If set will only trigger for matched events. required: false @@ -141,7 +142,7 @@ entities: max_results: description: "Max number of entries to retrieve" required: false - type: int + type: integer default: 5 {% endconfiguration %} diff --git a/source/_components/camera.mqtt.markdown b/source/_components/camera.mqtt.markdown index 7c9f77894a3..68a06eb5659 100644 --- a/source/_components/camera.mqtt.markdown +++ b/source/_components/camera.mqtt.markdown @@ -44,7 +44,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [list, string] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.' required: false diff --git a/source/_components/clicksend.markdown b/source/_components/clicksend.markdown index 7181e862c44..3e63c1a7fe2 100644 --- a/source/_components/clicksend.markdown +++ b/source/_components/clicksend.markdown @@ -9,7 +9,6 @@ redirect_from: - /components/notify.clicksend/ --- - The `clicksend` platform uses [ClickSend](https://clicksend.com) to deliver notifications from Home Assistant. ## Prerequisites @@ -54,7 +53,7 @@ api_key: recipient: description: "A single or multiple phone numbers. This is where you want to send your SMS notification messages, e.g., `09171234567` or `[09171234567, 09177654321]`." required: true - type: string or list + type: [string, list] sender: description: The name or number of the sender. required: false diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown index 35c4430d96b..15d683e1084 100644 --- a/source/_components/climate.knx.markdown +++ b/source/_components/climate.knx.markdown @@ -152,7 +152,7 @@ operation_mode_comfort_address: operation_modes: description: Overrides the supported operation modes. required: false - type: array + type: list on_off_address: description: KNX address for switching the climate device on/off. required: false diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index b079f3e0166..b5f2559ca88 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -52,7 +52,7 @@ send_if_off: initial: description: Set the initial target temperature. required: false - type: number + type: integer default: 21 payload_on: description: The payload that represents enabled state. @@ -211,15 +211,15 @@ aux_state_template: type: template min_temp: description: Minimum set point available. - type: number + type: float required: false max_temp: description: Maximum set point available. - type: number + type: float required: false temp_step: description: Step size for temperature set point. - type: number + type: float required: false default: 1 json_attributes_topic: @@ -238,7 +238,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [list, string] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false diff --git a/source/_components/cover.group.markdown b/source/_components/cover.group.markdown index 2dc8398bd70..999daeee25b 100644 --- a/source/_components/cover.group.markdown +++ b/source/_components/cover.group.markdown @@ -31,7 +31,7 @@ cover: entities: description: List of all cover entities you want to control. required: true - type: [string | list] + type: [string, list] {% endconfiguration %} ## Functionality diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 1a36e78afe0..5d47ba55b8c 100644 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -196,7 +196,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [list, string] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.' required: false diff --git a/source/_components/crimereports.markdown b/source/_components/crimereports.markdown index c49d4ee5471..ea63c57fd2a 100644 --- a/source/_components/crimereports.markdown +++ b/source/_components/crimereports.markdown @@ -35,10 +35,12 @@ radius: latitude: description: Latitude for sensor. required: false + type: float default: Your home zone latitude defined in your configuration. longitude: description: Longitude for sensor. required: false + type: float default: Your home zone longitude defined in your configuration. include: description: List of incident types to include. See below for a list of valid incidents. diff --git a/source/_components/currencylayer.markdown b/source/_components/currencylayer.markdown index 8b6a3a6cb76..cc3221508cf 100644 --- a/source/_components/currencylayer.markdown +++ b/source/_components/currencylayer.markdown @@ -36,7 +36,7 @@ api_key: quote: description: The symbol(s) of the quote or target currencies. required: false - type: string, list + type: [string, list] default: Exchange rate base: description: The symbol of the base currency. @@ -44,4 +44,3 @@ base: type: string default: USD {% endconfiguration %} - diff --git a/source/_components/epsonworkforce.markdown b/source/_components/epsonworkforce.markdown index 0ec93e5a5e0..aaa6c43cd61 100644 --- a/source/_components/epsonworkforce.markdown +++ b/source/_components/epsonworkforce.markdown @@ -35,7 +35,7 @@ host: monitored_conditions: description: The cartridge colours to monitor. required: true - type: map + type: list keys: black: description: The black ink cartridge diff --git a/source/_components/evohome.markdown b/source/_components/evohome.markdown index 4da7be6d8cd..15df1375410 100644 --- a/source/_components/evohome.markdown +++ b/source/_components/evohome.markdown @@ -44,12 +44,12 @@ password: location_idx: description: Used to select which location to use, if your login has access to more than one location. Multiple locations at one time are not supported. required: false - type: int + type: integer default: 0 scan_interval: description: How often updates are retreived from Honeywell's web servers. The minimum value is 180 seconds, rounded up to the nearest minute. required: false - type: int + type: integer default: 300 {% endconfiguration %} diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index fedbe0a5f36..60471283ece 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -122,7 +122,7 @@ speed_value_template: speeds: description: "List of speeds this fan is capable of running at. Valid entries are `off`, `low`, `medium` and `high`." required: false - type: string list + type: [string, list] availability_topic: description: The MQTT topic subscribed to receive availability (online/offline) updates. required: false @@ -157,11 +157,11 @@ device: identifiers: description: A list of IDs that uniquely identify the device. For example a serial number. required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false - type: list, tuple + type: [list, map] manufacturer: description: The manufacturer of the device. required: false diff --git a/source/_components/fan.template.markdown b/source/_components/fan.template.markdown index 2f1e5790f8c..077030cd16f 100644 --- a/source/_components/fan.template.markdown +++ b/source/_components/fan.template.markdown @@ -100,6 +100,6 @@ fan: speeds: description: List of speeds the fan is capable of running at. required: false - type: string list + type: [string, list] default: ['low', 'medium', 'high'] {% endconfiguration %} diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index 57e5d8abd6e..98b1b7fcd6d 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -29,7 +29,7 @@ feedreader: description: Defines the update interval of the feeds. required: false default: 1 hour - type: interval + type: time max_entries: description: The maximum number of entries to extract from each feed. required: false diff --git a/source/_components/fibaro.markdown b/source/_components/fibaro.markdown index dc021312ace..72ea2d53ece 100644 --- a/source/_components/fibaro.markdown +++ b/source/_components/fibaro.markdown @@ -64,7 +64,7 @@ gateways: url: description: The URL for your Fibaro HomeCenter device. required: true - type: url + type: string username: description: The username for your Fibaro account. required: true @@ -76,7 +76,7 @@ password: plugins: description: Whether to import plugin-generated devices from Fibaro HomeCenter, such as Netatmo and Sonos devices, etc. required: false - type: bool + type: boolean default: false device_config: description: Lists device specific parameter or behaviour overrides. diff --git a/source/_components/filesize.markdown b/source/_components/filesize.markdown index 32773c80885..666ba7a2f8a 100644 --- a/source/_components/filesize.markdown +++ b/source/_components/filesize.markdown @@ -27,5 +27,5 @@ sensor: file_paths: description: The absolute path to the file. required: true - type: list of strings + type: list {% endconfiguration %} diff --git a/source/_components/filter.markdown b/source/_components/filter.markdown index b05e2a8a3b5..9bd8417f0e1 100644 --- a/source/_components/filter.markdown +++ b/source/_components/filter.markdown @@ -73,7 +73,7 @@ filters: window_size: description: Size of the window of previous states. Time based filters such as `time_simple_moving_average` will require a time period (size in time), while other filters such as `outlier` will require an integer (size in number of states) required: false - type: [int, time] + type: [integer, time] default: 1 precision: description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round(). diff --git a/source/_components/flunearyou.markdown b/source/_components/flunearyou.markdown index 3b790a2ac2e..3837099eb72 100644 --- a/source/_components/flunearyou.markdown +++ b/source/_components/flunearyou.markdown @@ -33,13 +33,13 @@ monitored_conditions: default: ['cdc_report', 'user_report'] latitude: description: The latitude of the location to monitor. - required: optional - type: string + required: false + type: float default: The latitude defined under the `homeassistant` key in `configuration.yaml`. longitude: description: The longitude of the location to monitor. - required: optional - type: string + required: false + type: float default: The longitude defined under the `homeassistant` key in `configuration.yaml`. {% endconfiguration %} diff --git a/source/_components/flux.markdown b/source/_components/flux.markdown index db5c6d0aa21..98df65023e1 100644 --- a/source/_components/flux.markdown +++ b/source/_components/flux.markdown @@ -72,6 +72,7 @@ disable_brightness_adjust: description: If true, brightness will not be adjusted besides color temperature. required: false type: boolean + default: false mode: description: Select how color temperature is passed to lights. Valid values are `xy`, `mired` and `rgb`. required: false diff --git a/source/_components/freedns.markdown b/source/_components/freedns.markdown index f356c7becfa..bf1dec6b950 100644 --- a/source/_components/freedns.markdown +++ b/source/_components/freedns.markdown @@ -42,6 +42,6 @@ freedns: scan_interval: description: How often to call the update service. required: false - type: time period + type: time default: 10 minutes {% endconfiguration %} diff --git a/source/_components/generic_thermostat.markdown b/source/_components/generic_thermostat.markdown index c90e67006e9..086e7f697e3 100644 --- a/source/_components/generic_thermostat.markdown +++ b/source/_components/generic_thermostat.markdown @@ -53,6 +53,7 @@ ac_mode: description: Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device. required: false type: boolean + default: false min_cycle_duration: description: Set a minimum amount of time that the switch specified in the *heater* option must be in its current state prior to being switched either off or on. required: false diff --git a/source/_components/glances.markdown b/source/_components/glances.markdown index 2d69cab8532..a2892121058 100644 --- a/source/_components/glances.markdown +++ b/source/_components/glances.markdown @@ -91,7 +91,7 @@ version: resources: description: Entries to monitor. required: false - type: map + type: list default: disk_use keys: disk_use_percent: diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 451a0466be7..8a252217d98 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -170,6 +170,7 @@ entity_config: description: Force an entity to be exposed/excluded. required: false type: boolean + default: true aliases: description: Aliases that can also be used to refer to this entity required: false diff --git a/source/_components/google_domains.markdown b/source/_components/google_domains.markdown index dddb8f31dd9..568344e69e7 100644 --- a/source/_components/google_domains.markdown +++ b/source/_components/google_domains.markdown @@ -37,6 +37,6 @@ google_domains: timeout: description: Timeout (in seconds) for the API calls. required: false - type: number + type: integer default: 10 {% endconfiguration %} diff --git a/source/_components/google_wifi.markdown b/source/_components/google_wifi.markdown index 867867838cd..4125cbaf46e 100644 --- a/source/_components/google_wifi.markdown +++ b/source/_components/google_wifi.markdown @@ -37,7 +37,7 @@ name: monitored_conditions: description: Defines the data to monitor as sensors. Defaults to all of the listed options below. required: false - type: map + type: list keys: current_version: description: Current firmware version of the router. diff --git a/source/_components/greeneye_monitor.markdown b/source/_components/greeneye_monitor.markdown index 9a753a3dfae..fea6c213fe6 100644 --- a/source/_components/greeneye_monitor.markdown +++ b/source/_components/greeneye_monitor.markdown @@ -70,7 +70,7 @@ monitors: net_metering: description: Set to `true` if the channel is configured for net metering in the GEM, otherwise `false`. required: false - type: bool + type: boolean default: false temperature_sensors: description: Configuration for temperature sensors diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 834acf23396..d56e3f7fdea 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -44,6 +44,7 @@ all: description: Set this to `true` if the group state should only turn *on* if **all** grouped entities are *on*. required: false type: boolean + default: false icon: description: The icon that shows in the front end. **The rest of this only applies to the deprecated UI `/states`**. If the group is a view, this icon will show at the top in the frontend instead of the name. If the group is a view and both name and icon have been specified, the icon will appear at the top of the frontend and the name will be displayed as the mouse-over text. required: false @@ -52,6 +53,7 @@ view: description: "**Only applies to the deprecated UI `/states`**. If yes then the entry will be shown as a view (tab) at the top. Groups that are set to `view: true` cannot be used as entities in other views. *Does not apply to Lovelace.*" required: false type: boolean + default: false control: description: "**Only applies to the deprecated UI `/states`**. Set value to `hidden`. If hidden then the group switch will be hidden. *Does not apply to Lovelace.*" required: false diff --git a/source/_components/harmony.markdown b/source/_components/harmony.markdown index 454b92cee5c..a6051b217ce 100644 --- a/source/_components/harmony.markdown +++ b/source/_components/harmony.markdown @@ -66,6 +66,7 @@ delay_secs: hold_secs: description: Default duration in seconds between sending the "press" command and sending the "release" command. required: false + type: integer default: 0 {% endconfiguration %} diff --git a/source/_components/hikvision.markdown b/source/_components/hikvision.markdown index 7babd945f67..518a8cdaa0f 100644 --- a/source/_components/hikvision.markdown +++ b/source/_components/hikvision.markdown @@ -99,6 +99,7 @@ ssl: description: "`true` if you want to connect with https. Be sure to set the port also." required: false type: boolean + default: false customize: description: > This attribute contains sensor-specific override values. @@ -112,6 +113,7 @@ customize: the Web Interface and no events are generated for it. required: false type: boolean + default: false delay: description: > Specify the delay to wait after a sensor event ends before notifying diff --git a/source/_components/homeworks.markdown b/source/_components/homeworks.markdown index d9d1e221935..23a533cddff 100644 --- a/source/_components/homeworks.markdown +++ b/source/_components/homeworks.markdown @@ -49,7 +49,7 @@ host: port: description: The port of the ethernet to serial adapter. required: true - type: port + type: integer dimmers: description: List of dimmers. required: false diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 5b6f8f70b55..2309d2ff386 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -67,7 +67,7 @@ ssl_key: cors_allowed_origins: description: "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, Authorization`. 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`." required: false - type: string, list + type: [string, list] use_x_forwarded_for: description: "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 for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored." required: false @@ -76,11 +76,11 @@ use_x_forwarded_for: trusted_proxies: description: "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." required: false - type: string, list + type: [string, list] trusted_networks: description: "**Deprecated since 0.89 release. Configuration moved to [Trusted Networks auth provider](/docs/authentication/providers/#trusted-networks).** 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` and `trusted_proxies` options 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." required: false - type: string, list + type: [string, list] ip_ban_enabled: description: Flag indicating whether additional IP filtering is enabled. required: false diff --git a/source/_components/huawei_lte.markdown b/source/_components/huawei_lte.markdown index af151bb189b..b8b05e1dea3 100644 --- a/source/_components/huawei_lte.markdown +++ b/source/_components/huawei_lte.markdown @@ -42,7 +42,7 @@ huawei_lte: url: description: URL of the router web interface. required: true - type: url + type: string username: description: The username used for the router web interface. required: true @@ -93,7 +93,7 @@ notify: recipient: description: The phone number of a default recipient or a list with multiple recipients. required: true - type: string, list + type: [string, list] name: description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. required: false @@ -102,7 +102,7 @@ name: url: description: The router to use. Not needed if you only have one. required: false - type: url + type: string {% endconfiguration %} To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index 48f757b524a..acf9948460f 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -44,6 +44,7 @@ allow_unreachable: description: This will allow unreachable bulbs to report their state correctly. required: false type: boolean + default: false filename: description: Make this unique if specifying multiple Hue hubs. required: false @@ -52,6 +53,7 @@ allow_hue_groups: description: Disable this to stop Home Assistant from importing the groups defined on the Hue bridge. required: false type: boolean + default: true {% endconfiguration %} ## Examples diff --git a/source/_components/hyperion.markdown b/source/_components/hyperion.markdown index 3763f9864aa..52e545ed375 100644 --- a/source/_components/hyperion.markdown +++ b/source/_components/hyperion.markdown @@ -31,7 +31,7 @@ light: port: description: The port used to communicate with the Hyperion service. required: false - type: int + type: integer default: 19444 name: description: The name of the device used in the frontend. @@ -40,12 +40,12 @@ light: priority: description: The priority of the Hyperion instance make sure this is higher then the system prio in hyperion itself. required: false - type: int + type: integer default: 128 hdmi_priority: description: The priority of the HDMI grabber of this Hyperion instance, note that this priority must be higher than all other priorities used for correct behavior. required: false - type: int + type: integer default: 880 default_color: description: The color of the light. diff --git a/source/_components/idteck_prox.markdown b/source/_components/idteck_prox.markdown index 66fc22403cd..8c744ad54ce 100644 --- a/source/_components/idteck_prox.markdown +++ b/source/_components/idteck_prox.markdown @@ -33,7 +33,7 @@ host: port: description: The port of the ethernet to serial adapter required: true - type: port + type: integer name: description: The name of the prox card reader required: true diff --git a/source/_components/ihc.markdown b/source/_components/ihc.markdown index 097a7d01206..fb67037d428 100644 --- a/source/_components/ihc.markdown +++ b/source/_components/ihc.markdown @@ -61,6 +61,7 @@ info: description: Shows the IHC "name", "note" and "position" attributes of each component. This will make it easier to identify the IHC products within Home Assistant. required: false type: boolean + default: true {% endconfiguration %} ## Auto setup of IHC products diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index 0664cb2e1f6..0bcbe91280a 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -101,19 +101,19 @@ include: required: false keys: entities: - type: string, list + type: [string, list] description: The list of entity ids to be included in recording to InfluxDB. required: false domains: - type: string, list + type: [string, list] description: The list of domains to be included in recording to InfluxDB. required: false tags: - type: string, list + type: [string, list] description: Tags to mark the data. default: 0 tags_attributes: - type: string, list + type: [string, list] description: The list of attribute names which should be reported as tags and not fields to InfluxDB. For example, if set to `friendly_name`, it will be possible to group by entities' friendly names as well, in addition to their ids. required: false default: 0 diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown index caeebd29f51..004535156ee 100644 --- a/source/_components/input_boolean.markdown +++ b/source/_components/input_boolean.markdown @@ -30,7 +30,7 @@ input_boolean: name: description: Friendly name of the input. required: false - type: String + type: string initial: description: Initial value when Home Assistant starts. required: false diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index 40e9d4cd062..ee0dbcc51dd 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -39,7 +39,7 @@ input_datetime: name: description: Friendly name of the datetime input. required: false - type: String + type: string has_time: description: Set to `true` if the input should have a time. At least one `has_time` or `has_date` must be defined. required: false @@ -53,7 +53,7 @@ input_datetime: initial: description: Set the initial value of this input, depending on `has_time` and `has_date`. required: false - type: datetime | time | date + type: [datetime, time, date] default: 1970-01-01 00:00 | 1970-01-01 | 00:00 {% endconfiguration %} diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 819772ed8b2..0aedabe819c 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -68,7 +68,7 @@ input_number: mode: description: Can specify `box` or `slider`. required: false - type: box | slider + type: string default: slider unit_of_measurement: description: Unit of measurement in which the value of the slider is expressed in. diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index 5fb4a0c7ab8..c765307a3c1 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -37,7 +37,7 @@ input_text: name: description: Friendly name of the text input. required: false - type: String + type: string min: description: Minimum length for the text value. required: false @@ -51,17 +51,17 @@ input_text: initial: description: Initial value when Home Assistant starts. required: false - type: String + type: string default: empty pattern: description: Regex pattern for client side validation. required: false - type: String + type: string default: empty mode: description: Can specify `text` or `password`. Elements of type "password" provide a way for the user to securely enter a value. required: false - type: String + type: string default: text {% endconfiguration %} diff --git a/source/_components/insteon.markdown b/source/_components/insteon.markdown index fa4f02cb8b3..bbb917f8be1 100644 --- a/source/_components/insteon.markdown +++ b/source/_components/insteon.markdown @@ -95,28 +95,28 @@ insteon: {% configuration %} port: - description: The serial or USB port for your device, e.g., `/dev/ttyUSB0` or `COM3`. - required: Required for PLM setup + description: The serial or USB port for your device, e.g., `/dev/ttyUSB0` or `COM3`. Required for PLM setup. + required: false type: string host: - description: The host name or IP address of the Hub. - required: Required for Hub setup + description: The host name or IP address of the Hub. Required with Hub. + required: false type: string ip_port: - description: The IP port number of the Hub. For Hub model [2245] (i.e. Hub version 2) the default port is 25105. For the Hub model [2242] (i.e. Hub version 1) the default port is 9761. Use the Insteon app to find the port number for your specific Hub. - required: Optional for Hub setup + description: The IP port number of the Hub. For Hub model [2245] (i.e. Hub version 2) the default port is 25105. For the Hub model [2242] (i.e. Hub version 1) the default port is 9761. Use the Insteon app to find the port number for your specific Hub. Optional with Hub. + required: true type: integer username: - description: The username to login in to the local Hub. You can find your Hub username on the bottom of the Hub or you can use the Insteon app. - required: Required for Hub version 2 setup + description: The username to login in to the local Hub. You can find your Hub username on the bottom of the Hub or you can use the Insteon app. Required for Hub version 2 setup. + required: false type: string password: - description: The password to login in to the local Hub. You can find your Hub password on the bottom of the Hub or you can use the Insteon app. - required: Required for Hub version 2 setup + description: The password to login in to the local Hub. You can find your Hub password on the bottom of the Hub or you can use the Insteon app. Required for Hub version 2 setup. + required: false type: string hub_version: - description: The Hub version number where model [2242] is Hub version 1 and model [2245] is Hub version 2. - required: Required for Hub version 1 setup + description: The Hub version number where model [2242] is Hub version 1 and model [2245] is Hub version 2. Required for Hub version 1 setup. + required: false default: 2 type: integer device_override: diff --git a/source/_components/integration.markdown b/source/_components/integration.markdown index ddfd49a110a..4bd42ad4d20 100644 --- a/source/_components/integration.markdown +++ b/source/_components/integration.markdown @@ -44,12 +44,12 @@ unit_prefix: description: Metric unit to prefix the integration result. Available units are k, M, G, T. required: false default: None - type: unit + type: string unit_time: description: SI unit of time to integrate over. Available units are s, min, h, d. required: false default: h - type: unit + type: string unit: description: Unit of Measurement to be used for the integration. required: false @@ -57,6 +57,7 @@ unit: method: description: Riemann sum method to be used. Available methods are trapezoidal, left, right. required: false + type: string default: trapezoidal {% endconfiguration %} diff --git a/source/_components/iss.markdown b/source/_components/iss.markdown index e3c64bc8089..ca17b3ee159 100644 --- a/source/_components/iss.markdown +++ b/source/_components/iss.markdown @@ -37,7 +37,7 @@ name: default: ISS show_on_map: description: Option to show the position of the ISS on the map. - required: optional + required: false type: boolean default: false {% endconfiguration %} diff --git a/source/_components/jewish_calendar.markdown b/source/_components/jewish_calendar.markdown index b114d80836c..c990209ca3d 100644 --- a/source/_components/jewish_calendar.markdown +++ b/source/_components/jewish_calendar.markdown @@ -53,9 +53,10 @@ havdalah_minutes_after_sunset: default: 0 type: integer sensors: + description: List of available sensors. required: false default: date - description: List of available sensors. + type: list keys: date: description: Show the hebrew date for today. diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index 41a0d403fe9..35e0a02c3fd 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -104,6 +104,7 @@ fire_event: description: If set to True, platform will write all received KNX messages to event bus required: inclusive type: boolean + default: false fire_event_filter: description: If `fire_event` is set `fire_event_filter` has to be specified. `fire_event_filter` defines a list of patterns for filtering KNX addresses. Only telegrams which match this pattern are sent to the HOme Assistant event bus. required: inclusive diff --git a/source/_components/kodi.markdown b/source/_components/kodi.markdown index 0c22ec71d05..9301bf6aa49 100644 --- a/source/_components/kodi.markdown +++ b/source/_components/kodi.markdown @@ -370,6 +370,7 @@ message: required: true type: string data: + description: Configure message properties required: false type: map keys: diff --git a/source/_components/konnected.markdown b/source/_components/konnected.markdown index 9c237048c15..f5533ff0974 100644 --- a/source/_components/konnected.markdown +++ b/source/_components/konnected.markdown @@ -62,7 +62,7 @@ access_token: api_host: description: Override the IP address/host (and port number) of Home Assistant that the Konnected device(s) will use to communicate sensor state updates. If omitted, this is defaulted to the value of `base_url` in the `http` component. If you've set `base_url` to an external hostname, then you'll want to set this value back to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`). required: false - type: url + type: string default: value of `base_url` devices: description: A list of Konnected devices that you have on your network. diff --git a/source/_components/lacrosse.markdown b/source/_components/lacrosse.markdown index ff0888c267f..25eb572d847 100644 --- a/source/_components/lacrosse.markdown +++ b/source/_components/lacrosse.markdown @@ -54,6 +54,7 @@ sensor: description: Activate or deactivate the Jeelink LED. required: false type: boolean + default: false frequency: description: Initial frequency in 5kHz steps. required: false diff --git a/source/_components/lastfm.markdown b/source/_components/lastfm.markdown index 487302ff40f..9d69e126750 100644 --- a/source/_components/lastfm.markdown +++ b/source/_components/lastfm.markdown @@ -38,7 +38,7 @@ api_key: users: description: List of users. required: true - type: map + type: list keys: username: description: Username of the user to monitor. diff --git a/source/_components/lcn.markdown b/source/_components/lcn.markdown index 36713f33b28..8153567d862 100644 --- a/source/_components/lcn.markdown +++ b/source/_components/lcn.markdown @@ -199,7 +199,7 @@ climates: lockable: description: "Climate control can be locked." required: false - type: bool + type: boolean default: false covers: @@ -240,12 +240,12 @@ lights: dimmable: description: Enable the dimming feature for this light. required: false - type: bool + type: boolean default: false transition: description: Transition (ramp) time in seconds. required: false - type: int + type: integer default: 0 scenes: @@ -264,11 +264,11 @@ scenes: register: description: Number of scene register (0..9). required: true - type: int + type: integer scene: description: Number of scene (0..9). required: true - type: int + type: integer outputs: description: "List of ports ([OUTPUT_PORT](#ports), [RELAY_PORT](#ports))." required: false @@ -276,7 +276,7 @@ scenes: transition: description: Transition (ramp) time in seconds. required: false - type: int + type: integer default: None sensors: diff --git a/source/_components/lifx.markdown b/source/_components/lifx.markdown index bd82d153145..dcb92804928 100644 --- a/source/_components/lifx.markdown +++ b/source/_components/lifx.markdown @@ -125,7 +125,7 @@ server: port: description: The UDP port for discovery. Will listen on a random port if omitted. required: false - type: port + type: integer broadcast: description: The broadcast address for discovering lights. Can also set this to the IP address of a bulb to skip discovery. required: false diff --git a/source/_components/light.group.markdown b/source/_components/light.group.markdown index d3cebe4421f..d1b2edb6b2c 100644 --- a/source/_components/light.group.markdown +++ b/source/_components/light.group.markdown @@ -33,7 +33,7 @@ light: entities: description: A list of entities to be included in the light group. required: true - type: string list + type: [string, list] {% endconfiguration %}

diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 3f525b02452..8dbd5badb50 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -237,7 +237,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false @@ -501,7 +501,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false @@ -779,7 +779,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index afbb64d58e6..4683450a2ab 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -104,7 +104,7 @@ device: identifiers: description: 'A list of IDs that uniquely identify the device. For example a serial number.' required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false diff --git a/source/_components/luftdaten.markdown b/source/_components/luftdaten.markdown index 6744422be14..9caf6cd49af 100644 --- a/source/_components/luftdaten.markdown +++ b/source/_components/luftdaten.markdown @@ -44,7 +44,7 @@ sensor_id: type: string show_on_map: description: Option to show the position of the sensor on the map. - required: optional + required: false default: false type: boolean scan_interval: diff --git a/source/_components/manual_mqtt.markdown b/source/_components/manual_mqtt.markdown index a9279c4ddd0..eb4adeb9cfa 100644 --- a/source/_components/manual_mqtt.markdown +++ b/source/_components/manual_mqtt.markdown @@ -123,7 +123,7 @@ command_topic: qos: description: The maximum QoS level for subscribing and publishing to MQTT messages. required: false - type: int + type: integer default: 0 payload_disarm: description: The payload to disarm this Alarm Panel. diff --git a/source/_components/netgear_lte.markdown b/source/_components/netgear_lte.markdown index fe414c6b482..0c1f7e61bdd 100644 --- a/source/_components/netgear_lte.markdown +++ b/source/_components/netgear_lte.markdown @@ -63,7 +63,7 @@ notify: recipient: description: The phone number of a default recipient or a list with multiple recipients. required: false - type: string, list + type: [string, list] name: description: The name of the notification service. required: false diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index 57da10c93bc..3b2ad80cf79 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -48,7 +48,7 @@ password: devices: description: The serial number/ID of each thermostat you would like to integrate. required: true - type: [string, int] + type: [string, integer] {% endconfiguration %} ## Concepts diff --git a/source/_components/oasa_telematics.markdown b/source/_components/oasa_telematics.markdown index 5dfd7d71158..b71b3b986db 100644 --- a/source/_components/oasa_telematics.markdown +++ b/source/_components/oasa_telematics.markdown @@ -41,7 +41,7 @@ Next, get the `stop_id` from this link: route_id: description: The id of the public transport route. required: true - type: int + type: integer stop_id: description: The id of the public transport stop. required: true diff --git a/source/_components/pencom.markdown b/source/_components/pencom.markdown index 394b23b8dc5..623f3c33d4a 100644 --- a/source/_components/pencom.markdown +++ b/source/_components/pencom.markdown @@ -41,7 +41,7 @@ host: port: description: The port of the ethernet to serial adapter. required: true - type: port (positive integer between 1-65535) + type: integer (positive integer between 1-65535) boards: description: Number of boards daisy-chained together (default is 1). required: false @@ -58,7 +58,7 @@ relays: addr: description: The relay on the board starting with 0. required: true - type: int + type: integer board: description: The board number (defaults to 1). required: false diff --git a/source/_components/person.markdown b/source/_components/person.markdown index 03d7d39311b..8c523124714 100644 --- a/source/_components/person.markdown +++ b/source/_components/person.markdown @@ -67,7 +67,7 @@ person: device_trackers: description: A list of device tracker entity ids to track. These will represent the state of the person. required: false - type: list, string + type: [string, list] {% endconfiguration %} An extended example would look like the following sample: diff --git a/source/_components/ptvsd.markdown b/source/_components/ptvsd.markdown index a68ec77eea7..dfc2bcf651a 100644 --- a/source/_components/ptvsd.markdown +++ b/source/_components/ptvsd.markdown @@ -30,7 +30,7 @@ port: description: Port to listen on. required: false default: 5678 - type: port + type: integer wait: description: If true, wait for the debugger to connect before starting up home assistant. required: false diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index 6111a2e6672..56b08c28e58 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -78,7 +78,7 @@ sensors: description: The channel of interest. Refer to type above. required: false default: 1 - type: int + type: integer invert: description: Invert the open/close state. Only applicable to binary_sensors required: false diff --git a/source/_components/rainmachine.markdown b/source/_components/rainmachine.markdown index 1fe06c4fbe9..0bf918b6511 100644 --- a/source/_components/rainmachine.markdown +++ b/source/_components/rainmachine.markdown @@ -52,7 +52,7 @@ rainmachine: {% configuration %} ip_address: description: The IP address or hostname of your RainMachine unit. - required: optional + required: false type: string password: description: Your RainMachine password. diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 65769d139a9..d5892755c0c 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -30,7 +30,7 @@ recorder: db_url: description: The URL that points to your database. required: false - type: URL + type: string purge_keep_days: description: Specify the number of history days to keep in recorder database after a purge. required: false diff --git a/source/_components/rest.markdown b/source/_components/rest.markdown index 3694f515490..0f3fa3acff8 100644 --- a/source/_components/rest.markdown +++ b/source/_components/rest.markdown @@ -89,11 +89,11 @@ password: headers: description: The headers for the requests. required: false - type: list, string + type: [string, list] json_attributes: description: A list of keys to extract values from a JSON dictionary result and then set as sensor attributes. reqired: false - type: list, string + type: [string, list] force_update: description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. reqired: false diff --git a/source/_components/rmvtransport.markdown b/source/_components/rmvtransport.markdown index 120fa55969b..2a39a015828 100644 --- a/source/_components/rmvtransport.markdown +++ b/source/_components/rmvtransport.markdown @@ -59,7 +59,7 @@ next_departure: lines: description: "One or more line numbers, e.g., `'S8'` or `['S8', 'RB33', '41']`" required: false - type: [string, int] + type: [string, integer] products: description: "One or more modes of transport `['U-Bahn', 'Tram', 'Bus', 'S-Bahn', 'RB', 'RE', 'EC', 'IC', 'ICE']`." required: false diff --git a/source/_components/route53.markdown b/source/_components/route53.markdown index d8f6361059f..805ba63fa7f 100644 --- a/source/_components/route53.markdown +++ b/source/_components/route53.markdown @@ -98,6 +98,6 @@ records: ttl: description: The TTL value for the DNS records. required: false - type: int + type: integer default: 300 {% endconfiguration %} diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index f191bf0ba60..f1c16e2bf37 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -52,7 +52,7 @@ command_timeout: json_attributes: description: Defines a list of keys to extract values from a JSON dictionary result and then set as sensor attributes. required: false - type: string, list + type: [string, list] {% endconfiguration %} ## Examples diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index f6ab9cb4d3d..0dda9a30b76 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -82,7 +82,7 @@ json_attributes_template: json_attributes: description: (Deprecated, replaced by json_attributes_topic) A list of keys to extract values from a JSON dictionary payload and then set as sensor attributes. required: false - type: list, string + type: [string, list] unique_id: description: "An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception." required: false @@ -100,7 +100,7 @@ device: identifiers: description: A list of IDs that uniquely identify the device. For example a serial number. required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown index dbc88088745..1d6f67c3350 100644 --- a/source/_components/spaceapi.markdown +++ b/source/_components/spaceapi.markdown @@ -37,11 +37,11 @@ space: logo: description: URL which is publicly accessible of the logo. required: true - type: URL + type: string logo: description: URL of the hackerspace's web site. required: true - type: URL + type: string location: description: Location of the Hackerspace. required: true @@ -50,7 +50,7 @@ location: address: description: The physical address of the Hackerspace. required: true - type: String + type: string contact: description: Contact information of the Hackerspace. required: true @@ -59,19 +59,19 @@ contact: email: description: The email address of the Hackerspace. required: true - type: String + type: string irc: description: The IRC channel of the Hackerspace required: false - type: String + type: string mailing_list: description: The mailing list of the Hackerspace. required: false - type: String + type: string twitter: description: The Twitter account of the Hackerspace. required: false - type: String + type: string issue_report_channels: description: "The reporting channel for issues. Pick an entity from `contact:`." required: true @@ -88,11 +88,11 @@ state: icon_open: description: The URL which is publicly accessible of the icon for the open Hackerspace. required: false - type: URL + type: string icon_closed: description: The URL which is publicly accessible of the icon for the closed Hackerspace. required: false - type: URL + type: string sensors: description: List of sensors to expose. required: false diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 729ec0ad574..cf03d2fa10b 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -114,7 +114,7 @@ device: identifiers: description: A list of IDs that uniquely identify the device. For example a serial number. required: false - type: list, string + type: [string, list] connections: description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": [["mac", "02:5b:26:a8:dc:12"]]`.' required: false diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index b22189d9f85..2fec6559fbb 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -66,7 +66,7 @@ password: headers: description: The headers for the request. required: false - type: list, string + type: [string, list] verify_ssl: description: Verify the SSL certificate of the endpoint. required: false diff --git a/source/_components/syncthru.markdown b/source/_components/syncthru.markdown index d4cdfa9b77c..278495c78db 100644 --- a/source/_components/syncthru.markdown +++ b/source/_components/syncthru.markdown @@ -33,7 +33,7 @@ sensor: description: The address for connecting to the printer. Equal to the SyncThru Webservice address. required: true default: false - type: url + type: string name: description: A user specified name for the printer. Defaults to "Samsung Printer" and the friendly name will be the name of the printer model. required: false diff --git a/source/_components/synology_srm.markdown b/source/_components/synology_srm.markdown index a155eb0a6da..60eeb162853 100644 --- a/source/_components/synology_srm.markdown +++ b/source/_components/synology_srm.markdown @@ -32,7 +32,7 @@ port: description: The port to connect to the Synology SRM router. required: false default: 8001 - type: int + type: integer username: description: The username of a user with administrative privileges. required: false diff --git a/source/_components/template.markdown b/source/_components/template.markdown index 7480e2dafc8..cf0155e14b2 100644 --- a/source/_components/template.markdown +++ b/source/_components/template.markdown @@ -50,7 +50,7 @@ sensor: entity_id: description: A list of entity IDs so the sensor only reacts to state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities. required: false - type: string, list + type: [string, list] unit_of_measurement: description: "Defines the units of measurement of the sensor, if any. This will also influence the graphical presentation in the history visualization as a continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values." required: false diff --git a/source/_components/tplink_lte.markdown b/source/_components/tplink_lte.markdown index e58f60639b4..596ac218ecd 100644 --- a/source/_components/tplink_lte.markdown +++ b/source/_components/tplink_lte.markdown @@ -48,7 +48,7 @@ notify: target: description: The phone number of a default recipient or a list with multiple recipients. required: true - type: string, list + type: [string, list] name: description: The name of the notification service. required: false diff --git a/source/_components/yale_smart_alarm.markdown b/source/_components/yale_smart_alarm.markdown index ab04d23c7fb..6845261902d 100644 --- a/source/_components/yale_smart_alarm.markdown +++ b/source/_components/yale_smart_alarm.markdown @@ -42,7 +42,7 @@ password: area_id: description: Area ID of the device when talking to Yale's API if required. required: false - type: int + type: integer default: 1 {% endconfiguration %} diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 54877fe3a68..1b8caee77ae 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -49,7 +49,7 @@ autoheal: device_config / device_config_domain / device_config_glob: description: "This attribute contains node-specific override values. NOTE: This needs to be specified if you are going to use any of the following options. See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format." required: false - type: string, list + type: [string, list] keys: ignored: description: Ignore this entity completely. It won't be shown in the Web Interface and no events are generated for it. From 392633450ace20e3a3517bd336b540f92354ac5d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Jul 2019 20:11:36 -0700 Subject: [PATCH 13/24] Update post --- source/_posts/2019-07-17-release-96.markdown | 56 +++++++++++++++--- .../blog/2019-07-release-96/components.png | Bin 0 -> 85194 bytes .../blog/2019-07-release-96/demo-sidebar.png | Bin 0 -> 23856 bytes 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 source/images/blog/2019-07-release-96/components.png create mode 100644 source/images/blog/2019-07-release-96/demo-sidebar.png diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index f152f1ebdbf..187ceb4e03a 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -2,18 +2,47 @@ layout: post title: "0.96: TBD - UPDATE DATE" description: "TBD." -date: 2019-07-08 04:11:03 +date: 2019-07-17 00:11:03 date_formatted: "July 17, 2019" author: Paulus Schoutsen author_twitter: balloob comments: true categories: Release-Notes -og_image: /images/blog/2019-07-release-96/social.png +og_image: /images/blog/2019-07-release-96/demo-sidebar.png --- -Climate has been completely revamped. Please test out any climate integration that you use and report if it is broken. +It's time for Home Assistant 0.96. It's a great release, but we also made some changes, so please pay attention. + +## Sidebar + +We have a new sidebar! Idea started with [a mockup by @JuanMTech on Twitter](https://twitter.com/JuanMTech/status/1143757213971943424) and grew into a full blown implementation. The sidebar will now always be visible in a minimized mode. Hovering it will expand it. The developer tool buttons have been collapsed into a single menu item. The dev tools will now store it's exact state when you navigate away, included the dev tool that is open. We've also taken the opportunity to make notifications accessible from the sidebar, instead of only via the Lovelace UI. + +On mobile devices the sidebar will behave like it previously did. Check [the demo](https://demo.home-assistant.io) for a preview. + +

+ +Screenshot of the demo with the new sidebar. +Screenshot of the demo with the new sidebar. Click to open. + +

+ +## Climate + +This release includes a major clean up of our climate integration, correcting some architectural flaws from the past. We've done a lot of testing during the beta, but there might still be things that don't work as expected. Please report if you notice anything. + +For a breakdown of what was driving the change, [check our blog post on the dev blog](https://developers.home-assistant.io/blog/2019/07/03/climate-cleanup.html). + +The following things have been changed: + + - `operation_mode` has been renamed to `hvac_mode` to emphasize what the mode is for. + - The state of a climate entity is now always equal to the hvac mode. + - `hvac_action` is introduced for integrations that know the current action: heating, cooling, idle. + - `set_away_mode` and `set_hold_mode` have been merged into `set_preset_mode`. So instead of `turn_away_mode_on()`, we will now call `set_preset_mode("away")`. + - The `is_on` property has been removed. If a device is able to turn off, it should include the hvac mode `HVAC_MODE_OFF`. + - Property names have been aligned, anything ending with "_list" is now named "_modes". + - Integrations are only allowed to represent functionality that is present in the API. It is not allowed to add your own fake away mode. Huge thanks to the following people: @@ -27,14 +56,27 @@ Huge thanks to the following people: - [@OnFreund] - [@pvizeli] - [@SukramJ] -- [@Swamp-lg] - [@zxdavb] -We have a new sidebar! Started with a mockup by [@JuanMTech] and grew into a full blown implementation. Check [the demo](https://demo.home-assistant.io) for a preview. +[@JuanMTech]: https://github.com/JuanMTech +[@Jc2k]: https://github.com/Jc2k +[@marvin-w]: https://github.com/marvin-w +[@OnFreund]: https://github.com/OnFreund +[@SukramJ]: https://github.com/SukramJ -Big shout out to [@frenck] who has been doing a lot of clean up on the website. +## Advanced mode -If you missed the announcement, we showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), the new interface that runs on Chromecast devices. +As part of Home Assistant 1.0 effort, we're simplifying the default user interface. We're doing this by hiding certain configuration options like the customize panel behind a new "advanced mode" toggle. You can find this toggle on your profile page. + +Advanced mode is only available to admin users and is a per-user setting. Enabling it for yourself won't enable it for other admins. + +## Website maintenance + +Big shout out to [@frenck] who has been doing a lot of clean up on the website. Like, a lot lot. He has removed over 20.000 unused lines of code, and has simplified how we render code blocks, pages and headers. Our Jekyll build is now down to a mere 14 seconds! It used to be 6 minutes! 😲 + +## In other news… + +If you missed the announcement, we showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), a new interface for Home Assistant that runs on Chromecast devices. ## New Integrations diff --git a/source/images/blog/2019-07-release-96/components.png b/source/images/blog/2019-07-release-96/components.png new file mode 100644 index 0000000000000000000000000000000000000000..998b3b4fbfd6e575cf3b452de99c345009b68b7c GIT binary patch literal 85194 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�!0P9vA^icw@NtNl^0 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 FV1nglpP&E$ literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-07-release-96/demo-sidebar.png b/source/images/blog/2019-07-release-96/demo-sidebar.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd1f28e2b6c7a8ec7c27d99c93ac3fd0bbbcb17 GIT binary patch literal 23856 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 Date: Tue, 16 Jul 2019 20:28:03 -0700 Subject: [PATCH 14/24] More tweaks --- source/_posts/2019-07-17-release-96.markdown | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 187ceb4e03a..f7eb78e3616 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -1,7 +1,7 @@ --- layout: post -title: "0.96: TBD - UPDATE DATE" -description: "TBD." +title: "0.96: Notion, updated sidebar, advanced mode" +description: "We have cleaned up the climate integration and the UI." date: 2019-07-17 00:11:03 date_formatted: "July 17, 2019" author: Paulus Schoutsen @@ -15,9 +15,9 @@ og_image: /images/blog/2019-07-release-96/demo-sidebar.png It's time for Home Assistant 0.96. It's a great release, but we also made some changes, so please pay attention. -## Sidebar +## Pimp my Sidebar -We have a new sidebar! Idea started with [a mockup by @JuanMTech on Twitter](https://twitter.com/JuanMTech/status/1143757213971943424) and grew into a full blown implementation. The sidebar will now always be visible in a minimized mode. Hovering it will expand it. The developer tool buttons have been collapsed into a single menu item. The dev tools will now store it's exact state when you navigate away, included the dev tool that is open. We've also taken the opportunity to make notifications accessible from the sidebar, instead of only via the Lovelace UI. +The sidebar has gotten an improved look! Idea started with [a mockup by @JuanMTech on Twitter](https://twitter.com/JuanMTech/status/1143757213971943424) and grew into a full blown implementation. The sidebar will now always be visible in a minimized mode. Hovering it will expand it. The developer tool buttons have been collapsed into a single menu item. The dev tools will now store it's exact state when you navigate away, included the dev tool that is open. We've also taken the opportunity to make notifications accessible from the sidebar, instead of only via the Lovelace UI. On mobile devices the sidebar will behave like it previously did. Check [the demo](https://demo.home-assistant.io) for a preview. @@ -30,7 +30,7 @@ Screenshot of the demo with the new sidebar. Click to open. ## Climate -This release includes a major clean up of our climate integration, correcting some architectural flaws from the past. We've done a lot of testing during the beta, but there might still be things that don't work as expected. Please report if you notice anything. +This release includes a major clean up of our climate integration, correcting some architectural flaws from the past. The goal of this clean up was to a better job at providing an abstraction layer that fits many devices. This will improve compatibility with services that interact with Home Assistant (like Alexa/Google) and will allow us to make sure the UI works for everyone. We've done a lot of testing during the beta, but there might still be things that don't work as expected. If you notice anything, please report by [**opening a bug report**](https://github.com/home-assistant/home-assistant/issues). For a breakdown of what was driving the change, [check our blog post on the dev blog](https://developers.home-assistant.io/blog/2019/07/03/climate-cleanup.html). @@ -44,7 +44,7 @@ The following things have been changed: - Property names have been aligned, anything ending with "_list" is now named "_modes". - Integrations are only allowed to represent functionality that is present in the API. It is not allowed to add your own fake away mode. -Huge thanks to the following people: +Huge thanks to [@pvizeli] who drove the core implementation and to the following people for helping getting it past the finish line: - [@andrewsayre] - [@balloob] @@ -54,7 +54,6 @@ Huge thanks to the following people: - [@Jc2k] - [@marvin-w] - [@OnFreund] -- [@pvizeli] - [@SukramJ] - [@zxdavb] From 58f71bdca4fd982214fc8431c9a1137620d2982a Mon Sep 17 00:00:00 2001 From: cogneato Date: Tue, 16 Jul 2019 22:23:16 -0600 Subject: [PATCH 15/24] breaking change descriptions added --- source/_posts/2019-07-17-release-96.markdown | 39 +++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index f7eb78e3616..147c8ff08ca 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -106,16 +106,35 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes -- Multiple devices support for opentherm_gw ([@mvn23] - [#22932]) ([opentherm_gw docs]) (breaking change) -- Change Ambient solar radiation units to lx ([@bachya] - [#24690]) ([ambient_station docs]) (breaking change) -- Changed default encoding to mp3 ([@GrandNewbien] - [#24808]) ([google_cloud docs]) (breaking change) -- Remove temperature attribute from SimpliSafe alarm control panel ([@bachya] - [#24833]) ([simplisafe docs]) (breaking change) -- Upgrade luftdaten to 0.6.1 ([@fabaff] - [#24842]) ([luftdaten docs]) (breaking change) -- Velbus: autodiscover covers ([@Cereal2nd] - [#24877]) ([velbus docs]) (breaking change) -- Remove ZHA device entity ([@dmulcahey] - [#24909]) ([zha docs]) (breaking change) -- Implement ADR0003 for Netatmo sensor ([@cgtobi] - [#24944]) ([netatmo docs]) (breaking change) -- Fix Netatmo climate presets ([@cgtobi] - [#25029]) ([netatmo docs]) (breaking change) -- updated geojson_client library to version 0.4 ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) (breaking change) +- __OpenTherm__ - Adds support for more than one OpenTherm Gateway device which changes the configuration structure. ([@mvn23] - [#22932]) ([opentherm_gw docs]) + + Example configuration: + ``` + opentherm_gw: + living_room: + device: /dev/ttyUSB0 + +- __Ambient Weather Station__ - By default, the Ambient solar radiation (i.e., brightness) sensor is measured in W/m². Since this unit of measurement is not used anywhere else, this change updates the sensor to use the more prevalent lx unit. Any automations that use this sensor should be updated accordingly. ([@bachya] - [#24690]) ([ambient_station docs]) + + + - __Google Cloud__ - Changed the default encoding to mp3 from opus ogg, allowing it to support many more media players. ([@GrandNewbien] - [#24808]) ([google_cloud docs]) + + Example configuration: + ``` + tts: + - platform: google_cloud + key_file: googlecloud.json + encoding: mp3 # The new default, which can still be changed to opus ogg or linear16 + ``` + + +- __SimpliSafe__ - The SimpliSafe alarm control panel no longer shows a temperature attribute. ([@bachya] - [#24833]) ([simplisafe docs]) +- __Luftdaten__ - The under-laying Python module is now limited to the P1 (particles 10 microns and below) and P2 (particles 2.5 microns and below), which means you have to recreate your sensors. ([@fabaff] - [#24842]) ([luftdaten docs]) + +- __Velbus__ - Added autodicovery for covers in velbus and bumped the python velbus version ([@Cereal2nd] - [#24877]) ([velbus docs]) +- __ZHA__ - ZHA entities are being removed and battery sensors are being added. We have been asked several times to remove the ZHA domain entities because they do not follow the HA standards. They were originally used to show device online / offline status, rssi, lqi and last seen. They were eventually expanded to hold battery information as well because many Zigbee devices have several power configuration clusters. Online and offline handling, rssi, lqi last seen and the handling of device availability have all been moved to the device object and battery information has been split back out into its own sensor. Any users that created template sensors that leveraged the data in the ZHA entities will be affected by this change. ([@dmulcahey] - [#24909]) ([zha docs]) +- __Netatmo__ - If the module type can not be determined the climate device will default to the type "valve" as it implements a subset of "thermostat". Consequently those devices wont be able to be turned off. This should not be a major issue and should only happen when there are issues with the data retrieved form the Netatmo API. ([@cgtobi] - [#25029]) ([netatmo docs]) +- __GeoJSON Events__- Update geojson_client library to version 0.4.This changes the access to the external feed from HTTP to HTTPS for the nsw_rural_fire_service_feed platform. This should normally not make any difference to anyone consuming this feed. Only if for example you have set up a template sensor or automation that reads the external_id attribute of a geo_location entity and compare it against a pattern, would you need to change this. ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) ## All changes From 9119baf6b3f24af3dcc781252f9bab02a05ab2ac Mon Sep 17 00:00:00 2001 From: cogneato Date: Tue, 16 Jul 2019 22:26:27 -0600 Subject: [PATCH 16/24] typo fix --- source/_posts/2019-07-17-release-96.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 147c8ff08ca..4efde42f70e 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -134,7 +134,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - __Velbus__ - Added autodicovery for covers in velbus and bumped the python velbus version ([@Cereal2nd] - [#24877]) ([velbus docs]) - __ZHA__ - ZHA entities are being removed and battery sensors are being added. We have been asked several times to remove the ZHA domain entities because they do not follow the HA standards. They were originally used to show device online / offline status, rssi, lqi and last seen. They were eventually expanded to hold battery information as well because many Zigbee devices have several power configuration clusters. Online and offline handling, rssi, lqi last seen and the handling of device availability have all been moved to the device object and battery information has been split back out into its own sensor. Any users that created template sensors that leveraged the data in the ZHA entities will be affected by this change. ([@dmulcahey] - [#24909]) ([zha docs]) - __Netatmo__ - If the module type can not be determined the climate device will default to the type "valve" as it implements a subset of "thermostat". Consequently those devices wont be able to be turned off. This should not be a major issue and should only happen when there are issues with the data retrieved form the Netatmo API. ([@cgtobi] - [#25029]) ([netatmo docs]) -- __GeoJSON Events__- Update geojson_client library to version 0.4.This changes the access to the external feed from HTTP to HTTPS for the nsw_rural_fire_service_feed platform. This should normally not make any difference to anyone consuming this feed. Only if for example you have set up a template sensor or automation that reads the external_id attribute of a geo_location entity and compare it against a pattern, would you need to change this. ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) +- __GeoJSON Events__ - Update geojson_client library to version 0.4.This changes the access to the external feed from HTTP to HTTPS for the nsw_rural_fire_service_feed platform. This should normally not make any difference to anyone consuming this feed. Only if for example you have set up a template sensor or automation that reads the external_id attribute of a geo_location entity and compare it against a pattern, would you need to change this. ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) ## All changes From d4a16fe1548a9b2d8857fb4637a4658ab85c7249 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Jul 2019 23:20:43 -0700 Subject: [PATCH 17/24] Update in other news --- source/_posts/2019-07-17-release-96.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 4efde42f70e..f2364194c00 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -69,13 +69,13 @@ As part of Home Assistant 1.0 effort, we're simplifying the default user interfa Advanced mode is only available to admin users and is a per-user setting. Enabling it for yourself won't enable it for other admins. -## Website maintenance - -Big shout out to [@frenck] who has been doing a lot of clean up on the website. Like, a lot lot. He has removed over 20.000 unused lines of code, and has simplified how we render code blocks, pages and headers. Our Jekyll build is now down to a mere 14 seconds! It used to be 6 minutes! 😲 - ## In other news… -If you missed the announcement, we showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), a new interface for Home Assistant that runs on Chromecast devices. +Raspberry Pi 4 support has arrived in beta. [@pvizeli] has been hard at work and the first beta release [is available](https://github.com/home-assistant/hassos/releases/tag/3.3). If you flash this image, you will be able to update to a stable release later from within the UI. + +Big shout out to [@frenck] who has been doing a lot of clean up on the website. Like, a lot lot. He has removed over 20.000 unused lines of code, and has simplified how we render code blocks, pages and headers. It takes Jekyll now a mere 14 seconds to generate the whole website! It used to be 6 minutes! 😲 + +Last week [@balloob] showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), a new interface for Home Assistant that runs on Chromecasts and Google Assistant devices with screens. ## New Integrations @@ -116,9 +116,9 @@ Experiencing issues introduced by this release? Please report them in our [issue - __Ambient Weather Station__ - By default, the Ambient solar radiation (i.e., brightness) sensor is measured in W/m². Since this unit of measurement is not used anywhere else, this change updates the sensor to use the more prevalent lx unit. Any automations that use this sensor should be updated accordingly. ([@bachya] - [#24690]) ([ambient_station docs]) - + - __Google Cloud__ - Changed the default encoding to mp3 from opus ogg, allowing it to support many more media players. ([@GrandNewbien] - [#24808]) ([google_cloud docs]) - + Example configuration: ``` tts: From d3b515593fa4aa993e86c58a5b832308f03945a3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Jul 2019 23:48:01 -0700 Subject: [PATCH 18/24] Clarify auto mode --- source/_posts/2019-07-17-release-96.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index f2364194c00..b563205f813 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -37,10 +37,11 @@ For a breakdown of what was driving the change, [check our blog post on the dev The following things have been changed: - `operation_mode` has been renamed to `hvac_mode` to emphasize what the mode is for. - - The state of a climate entity is now always equal to the hvac mode. + - We split HVAC mode `auto` into `auto` and `heat_cool`. If it's `heat_cool`, the user has set a temperature range the device has to use heating and cooling to stay within. Auto mode is now limited to devices that are running on a schedule or AI. + - The state of a climate entity is now always equal to the HVAC mode. - `hvac_action` is introduced for integrations that know the current action: heating, cooling, idle. - `set_away_mode` and `set_hold_mode` have been merged into `set_preset_mode`. So instead of `turn_away_mode_on()`, we will now call `set_preset_mode("away")`. - - The `is_on` property has been removed. If a device is able to turn off, it should include the hvac mode `HVAC_MODE_OFF`. + - The `is_on` property has been removed. If a device is able to turn off, it should include the HVAC mode `HVAC_MODE_OFF`. - Property names have been aligned, anything ending with "_list" is now named "_modes". - Integrations are only allowed to represent functionality that is present in the API. It is not allowed to add your own fake away mode. From 564ecbc417f5ba4ba60f9c14a7dbe0715502e6b0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Jul 2019 23:54:02 -0700 Subject: [PATCH 19/24] Add teachingbirds tweet --- source/_posts/2019-07-17-release-96.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index b563205f813..26336874cba 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -63,6 +63,7 @@ Huge thanks to [@pvizeli] who drove the core implementation and to the following [@marvin-w]: https://github.com/marvin-w [@OnFreund]: https://github.com/OnFreund [@SukramJ]: https://github.com/SukramJ +[@teachingbirds]: https://github.com/teachingbirds ## Advanced mode @@ -78,6 +79,11 @@ Big shout out to [@frenck] who has been doing a lot of clean up on the website. Last week [@balloob] showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), a new interface for Home Assistant that runs on Chromecasts and Google Assistant devices with screens. +[@teachingbirds] has redone her Lovelace UI and it is looking fabulous! + + + ## New Integrations - Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) From 3eea288934bfcf5998fd8be7af52a4af4ae31ec0 Mon Sep 17 00:00:00 2001 From: Daniel Lando Date: Wed, 17 Jul 2019 09:28:56 +0200 Subject: [PATCH 20/24] Added Zwave2Mqtt to hass mqtt discovery third-party tools (#9876) --- source/_docs/mqtt/discovery.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 8e3e6ec9fb5..70fca524001 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -226,6 +226,7 @@ The following software has built-in support for MQTT discovery: - [Arilux AL-LC0X LED controllers](https://github.com/mertenats/Arilux_AL-LC0X) - [room-assistant](https://github.com/mKeRix/room-assistant) (starting with 1.1.0) - [Zigbee2mqtt](https://github.com/koenkk/zigbee2mqtt) +- [Zwave2Mqtt](https://github.com/OpenZWave/Zwave2Mqtt) (starting with 2.0.1) ### Examples From fc8c1b1938038cf5e1019f2b3b2cd7ce0b8a4584 Mon Sep 17 00:00:00 2001 From: tomlut <10679300+tomlut@users.noreply.github.com> Date: Wed, 17 Jul 2019 17:44:05 +1000 Subject: [PATCH 21/24] Corected template example (#9875) The two templates under 'Considerations were identical'. --- source/_components/switch.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index ec083f7a53b..d98e57f85eb 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -76,7 +76,7 @@ switch: ## Considerations -If you are using the state of a platform that takes extra time to load, the Template Switch may get an `unknown` state during startup. This results in error messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an unknown result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} +If you are using the state of a platform that takes extra time to load, the Template Switch may get an `unknown` state during startup. This results in error messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ states.switch.source.state == 'on') }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an unknown result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} ## Examples From f2d15e0158d5ff5b259b64be531b43cb6b888b7c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 17 Jul 2019 13:51:33 -0700 Subject: [PATCH 22/24] Final update --- source/_posts/2019-07-17-release-96.markdown | 146 ++++++++++++++++++- 1 file changed, 141 insertions(+), 5 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 26336874cba..95804099b0e 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -86,7 +86,7 @@ Last week [@balloob] showed a preview of the upcoming [Home Assistant Cast](/blo ## New Integrations -- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) +- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) - Add integration for Vallox Ventilation Units ([@andre-richter] - [#24660]) ([vallox docs]) (new-integration) - Add support for aurora ABB Powerone solar photovoltaic inverter ([@davet2001] - [#24809]) ([aurora_abb_powerone docs]) (new-integration) - Add support for arcam fmj receivers ([@elupus] - [#24621]) ([arcam_fmj docs]) (new-integration) @@ -95,11 +95,12 @@ Last week [@balloob] showed a preview of the upcoming [Home Assistant Cast](/blo ## New Platforms -- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) - Add template vacuum support ([@luukd] - [#22904]) ([template docs]) (new-platform) - Fronius (solar energy and inverter) component ([@nielstron] - [#22316]) ([sensor docs]) (new-platform) - New scanner device tracker and ZHA device tracker support ([@dmulcahey] - [#24584]) ([device_tracker docs]) ([zha docs]) (new-platform) - [climate] Bugfix honeywell misleading error message ([@zxdavb] - [#25048]) ([evohome docs]) ([honeywell docs]) (new-platform) +- [climate] Add water_heater to evohome ([@zxdavb] - [#25035]) ([evohome docs]) (beta fix) (new-platform) +- [Climate] Hive Add water heater Component post the refresh of the climate component. ([@KJonline] - [#25148]) ([hive docs]) (beta fix) (new-platform) ## If you need help... @@ -124,7 +125,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - __Ambient Weather Station__ - By default, the Ambient solar radiation (i.e., brightness) sensor is measured in W/m². Since this unit of measurement is not used anywhere else, this change updates the sensor to use the more prevalent lx unit. Any automations that use this sensor should be updated accordingly. ([@bachya] - [#24690]) ([ambient_station docs]) - - __Google Cloud__ - Changed the default encoding to mp3 from opus ogg, allowing it to support many more media players. ([@GrandNewbien] - [#24808]) ([google_cloud docs]) +- __Google Cloud__ - Changed the default encoding to mp3 from opus ogg, allowing it to support many more media players. ([@GrandNewbien] - [#24808]) ([google_cloud docs]) Example configuration: ``` @@ -143,6 +144,43 @@ Experiencing issues introduced by this release? Please report them in our [issue - __Netatmo__ - If the module type can not be determined the climate device will default to the type "valve" as it implements a subset of "thermostat". Consequently those devices wont be able to be turned off. This should not be a major issue and should only happen when there are issues with the data retrieved form the Netatmo API. ([@cgtobi] - [#25029]) ([netatmo docs]) - __GeoJSON Events__ - Update geojson_client library to version 0.4.This changes the access to the external feed from HTTP to HTTPS for the nsw_rural_fire_service_feed platform. This should normally not make any difference to anyone consuming this feed. Only if for example you have set up a template sensor or automation that reads the external_id attribute of a geo_location entity and compare it against a pattern, would you need to change this. ([@exxamalte] - [#25039]) ([geo_json_events docs]) ([nsw_rural_fire_service_feed docs]) ([usgs_earthquakes_feed docs]) +## Beta Fixes + +- Add websocket API command for Z-Wave network status ([@cgarwood] - [#25066]) ([zwave docs]) (beta fix) +- Do not reverse open/close calls ([@balloob] - [#24879]) ([tahoma docs]) (breaking change) (beta fix) +- Add support for on/off climate ([@pvizeli] - [#25026]) ([climate docs]) (beta fix) +- Change unique_id formula for Notion entities ([@bachya] - [#25076]) ([notion docs]) (beta fix) +- Fix powercontrol media player alexa ([@pvizeli] - [#25080]) ([alexa docs]) (beta fix) +- Support podcast episodes as Sonos favorites ([@amelchio] - [#25087]) ([sonos docs]) (beta fix) +- Guard module being None ([@balloob] - [#25077]) (beta fix) +- [climate] Add water_heater to evohome ([@zxdavb] - [#25035]) ([evohome docs]) (beta fix) (new-platform) +- Fix Netatmo climate issue when device out of reach ([@cgtobi] - [#25096]) ([netatmo docs]) (beta fix) +- Add turn on/off to coolmaster ([@OnFreund] - [#25097]) ([coolmaster docs]) (beta fix) +- Fix window exception in WWLLN ([@bachya] - [#25100]) ([wwlln docs]) (beta fix) +- Fix missing sensor unit in RainMachine ([@bachya] - [#25101]) ([rainmachine docs]) (beta fix) +- Add climate related services to Homematic IP Cloud ([@SukramJ] - [#25079]) ([homematicip_cloud docs]) (beta fix) +- Simplify Alexa/Google for new climate turn_on/off ([@balloob] - [#25115]) ([alexa docs]) ([google_assistant docs]) (beta fix) +- Verify cloud user exists during boot ([@balloob] - [#25119]) ([cloud docs]) (beta fix) +- Allow area ID in service call schemas ([@balloob] - [#25121]) ([light docs]) ([switch docs]) (beta fix) +- Load requirements for platforms ([@elupus] - [#25133]) (beta fix) +- Handle Sonos connection errors during setup ([@amelchio] - [#25135]) ([sonos docs]) (beta fix) +- [climate-1.0] Bugfix evohome showstopper ([@zxdavb] - [#25139]) ([evohome docs]) (beta fix) +- remove comfort mode ([@SukramJ] - [#25140]) ([homematicip_cloud docs]) (beta fix) +- [climate-1.0] Add RoundThermostat to evohome ([@zxdavb] - [#25141]) ([evohome docs]) (beta fix) +- [Climate] Hive Add water heater Component post the refresh of the climate component. ([@KJonline] - [#25148]) ([hive docs]) (beta fix) (new-platform) +- Remove check and restore temp/mode changes ([@andersonshatch] - [#25149]) ([tado docs]) (beta fix) +- Update pyhomematic to 0.1.60 ([@danielperna84] - [#25152]) ([homematic docs]) (beta fix) +- Version sensor update ([@ludeeus] - [#25162]) ([version docs]) (beta fix) +- Make dev tools titlte translatable ([@balloob] - [#25166]) ([frontend docs]) (beta fix) +- Fix device types for some HomeMatic IP sensors ([@danielperna84] - [#25167]) ([homematic docs]) (beta fix) +- Update pysonos to 0.0.21 ([@amelchio] - [#25168]) (beta fix) +- Fix climate is_aux_heat type hint. ([@Adminiuga] - [#25170]) ([climate docs]) (beta fix) +- Upgrade luftdaten to 0.6.2 ([@fabaff] - [#25177]) ([luftdaten docs]) (beta fix) +- Correctly set property decorator on preset modes ([@balloob] - [#25151]) ([fritzbox docs]) (beta fix) +- Fix device name customization on ZHA add devices page ([@dmulcahey] - [#25180]) ([zha docs]) (beta fix) +- [climate] Tweak evohome migration ([@zxdavb] - [#25187]) ([evohome docs]) (beta fix) +- Only include target temp if has right support flag ([@balloob] - [#25193]) ([climate docs]) (beta fix) + ## All changes - Fix AttributeError: 'NoneType' object has no attribute 'group' with sytadin component ([@foreign-sub] - [#24652]) ([sytadin docs]) @@ -164,7 +202,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix PS4 entities with shared host not updating and latency with multiple connections ([@ktnrg45] - [#24642]) ([ps4 docs]) - Add initial support for remote dev container ([@pvizeli] - [#24681]) - Expose ports 8123, 8300 and 51827 in Dockerfile ([@johnluetke] - [#24389]) -- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) (new-platform) +- Add Trafikverket train component ([@endor-force] - [#23470]) ([trafikverket_train docs]) (new-integration) - Add 'unique_id' Property to Inverter Sensors ([@squishykid] - [#24707]) ([solax docs]) - Remove device and entity registry entries when removing a ZHA device ([@dmulcahey] - [#24369]) ([zha docs]) - Add support for sensor state STATE_UNAVAILABLE ([@cnrd] - [#24641]) ([plant docs]) @@ -188,6 +226,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Remove temperature attribute from SimpliSafe alarm control panel ([@bachya] - [#24833]) ([simplisafe docs]) (breaking change) - Fronius (solar energy and inverter) component ([@nielstron] - [#22316]) ([sensor docs]) (new-platform) - Add template support to template trigger's for option ([@pnbruckner] - [#24810]) ([automation docs]) +- Upgrade sisyphus-control to 2.2 ([@jkeljo] - [#24837]) ([sisyphus docs]) +- Fix yeelight color temp getter ([@zewelor] - [#24830]) ([yeelight docs]) - Upgrade luftdaten to 0.6.1 ([@fabaff] - [#24842]) ([luftdaten docs]) (breaking change) - Upgrade sqlalchemy to 1.3.5 ([@fabaff] - [#24844]) ([recorder docs]) ([sql docs]) - Upgrade numpy to 1.16.4 ([@fabaff] - [#24845]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) @@ -218,15 +258,18 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix 'same state' monitoring in state trigger ([@pnbruckner] - [#24904]) ([automation docs]) - Add missing trigger.for variable to template trigger ([@pnbruckner] - [#24893]) ([automation docs]) - Add ability to send attachments in pushover notifications ([@kreegahbundolo] - [#24806]) ([pushover docs]) +- Fix home coach discovery ([@cgtobi] - [#24902]) ([netatmo docs]) - New languages that looks like supported by Google but not documented: ([@lufton] - [#24881]) ([google_cloud docs]) - Remove ZHA device entity ([@dmulcahey] - [#24909]) ([zha docs]) (breaking change) - Bump androidtv to 0.0.18 ([@JeffLIrion] - [#24927]) ([androidtv docs]) - Update pysonos to 0.0.19 ([@amelchio] - [#24930]) ([sonos docs]) - Add support for Yale YRL256 lock ([@ctso] - [#24932]) ([zwave docs]) +- Fix exclusion of routes with excl_filter ([@gadgetchnnel] - [#24928]) ([waze_travel_time docs]) - New scanner device tracker and ZHA device tracker support ([@dmulcahey] - [#24584]) ([device_tracker docs]) ([zha docs]) (new-platform) - Allow updating of via_device in device registry ([@bachya] - [#24921]) - Update pyHik library to 0.2.3 ([@mezz64] - [#24957]) ([hikvision docs]) - Implement ADR0003 for Netatmo sensor ([@cgtobi] - [#24944]) ([netatmo docs]) (breaking change) +- Fix monitoring of trays in syncthru component ([@nielstron] - [#24961]) ([syncthru docs]) - Batch of Component(s) -> Integration(s) ([@frenck] - [#24972]) - Add sonos.play_queue service ([@apeeters] - [#24974]) ([sonos docs]) - Fix errors if rest source becomes unavailable ([@slackr31337] - [#24986]) ([scrape docs]) @@ -288,9 +331,43 @@ Experiencing issues introduced by this release? Please report them in our [issue - Change phrases in the logbook component for persons and binary_sensors ([@Martijn02] - [#25053]) ([logbook docs]) - Make sure volume level is valid when incrementing/decrementing ([@JeffLIrion] - [#25061]) ([vizio docs]) - Complete OPERATION_MODES ([@monte-monte] - [#25069]) ([knx docs]) -- Add websocket API command for Z-Wave network status ([@cgarwood] - [#25066]) ([zwave docs]) +- Add websocket API command for Z-Wave network status ([@cgarwood] - [#25066]) ([zwave docs]) (beta fix) - Correctly store removed entities for restore state ([@balloob] - [#25073]) - Restore automation last_triggered as datetime & fix test ([@pnbruckner] - [#24951]) ([automation docs]) +- Support hass-release inside devcontainer ([@pvizeli] - [#25090]) +- Do not reverse open/close calls ([@balloob] - [#24879]) ([tahoma docs]) (breaking change) (beta fix) +- Add support for on/off climate ([@pvizeli] - [#25026]) ([climate docs]) (beta fix) +- Change unique_id formula for Notion entities ([@bachya] - [#25076]) ([notion docs]) (beta fix) +- Fix powercontrol media player alexa ([@pvizeli] - [#25080]) ([alexa docs]) (beta fix) +- Support podcast episodes as Sonos favorites ([@amelchio] - [#25087]) ([sonos docs]) (beta fix) +- Guard module being None ([@balloob] - [#25077]) (beta fix) +- [climate] Add water_heater to evohome ([@zxdavb] - [#25035]) ([evohome docs]) (beta fix) (new-platform) +- Fix Netatmo climate issue when device out of reach ([@cgtobi] - [#25096]) ([netatmo docs]) (beta fix) +- Add turn on/off to coolmaster ([@OnFreund] - [#25097]) ([coolmaster docs]) (beta fix) +- Fix window exception in WWLLN ([@bachya] - [#25100]) ([wwlln docs]) (beta fix) +- Fix missing sensor unit in RainMachine ([@bachya] - [#25101]) ([rainmachine docs]) (beta fix) +- Add climate related services to Homematic IP Cloud ([@SukramJ] - [#25079]) ([homematicip_cloud docs]) (beta fix) +- Simplify Alexa/Google for new climate turn_on/off ([@balloob] - [#25115]) ([alexa docs]) ([google_assistant docs]) (beta fix) +- Verify cloud user exists during boot ([@balloob] - [#25119]) ([cloud docs]) (beta fix) +- Allow area ID in service call schemas ([@balloob] - [#25121]) ([light docs]) ([switch docs]) (beta fix) +- Load requirements for platforms ([@elupus] - [#25133]) (beta fix) +- Handle Sonos connection errors during setup ([@amelchio] - [#25135]) ([sonos docs]) (beta fix) +- [climate-1.0] Bugfix evohome showstopper ([@zxdavb] - [#25139]) ([evohome docs]) (beta fix) +- remove comfort mode ([@SukramJ] - [#25140]) ([homematicip_cloud docs]) (beta fix) +- [climate-1.0] Add RoundThermostat to evohome ([@zxdavb] - [#25141]) ([evohome docs]) (beta fix) +- [Climate] Hive Add water heater Component post the refresh of the climate component. ([@KJonline] - [#25148]) ([hive docs]) (beta fix) (new-platform) +- Remove check and restore temp/mode changes ([@andersonshatch] - [#25149]) ([tado docs]) (beta fix) +- Update pyhomematic to 0.1.60 ([@danielperna84] - [#25152]) ([homematic docs]) (beta fix) +- Version sensor update ([@ludeeus] - [#25162]) ([version docs]) (beta fix) +- Make dev tools titlte translatable ([@balloob] - [#25166]) ([frontend docs]) (beta fix) +- Fix device types for some HomeMatic IP sensors ([@danielperna84] - [#25167]) ([homematic docs]) (beta fix) +- Update pysonos to 0.0.21 ([@amelchio] - [#25168]) (beta fix) +- Fix climate is_aux_heat type hint. ([@Adminiuga] - [#25170]) ([climate docs]) (beta fix) +- Upgrade luftdaten to 0.6.2 ([@fabaff] - [#25177]) ([luftdaten docs]) (beta fix) +- Correctly set property decorator on preset modes ([@balloob] - [#25151]) ([fritzbox docs]) (beta fix) +- Fix device name customization on ZHA add devices page ([@dmulcahey] - [#25180]) ([zha docs]) (beta fix) +- [climate] Tweak evohome migration ([@zxdavb] - [#25187]) ([evohome docs]) (beta fix) +- Only include target temp if has right support flag ([@balloob] - [#25193]) ([climate docs]) (beta fix) [#22316]: https://github.com/home-assistant/home-assistant/pull/22316 [#22904]: https://github.com/home-assistant/home-assistant/pull/22904 @@ -349,7 +426,9 @@ Experiencing issues introduced by this release? Please report them in our [issue [#24812]: https://github.com/home-assistant/home-assistant/pull/24812 [#24821]: https://github.com/home-assistant/home-assistant/pull/24821 [#24829]: https://github.com/home-assistant/home-assistant/pull/24829 +[#24830]: https://github.com/home-assistant/home-assistant/pull/24830 [#24833]: https://github.com/home-assistant/home-assistant/pull/24833 +[#24837]: https://github.com/home-assistant/home-assistant/pull/24837 [#24840]: https://github.com/home-assistant/home-assistant/pull/24840 [#24842]: https://github.com/home-assistant/home-assistant/pull/24842 [#24844]: https://github.com/home-assistant/home-assistant/pull/24844 @@ -366,6 +445,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#24875]: https://github.com/home-assistant/home-assistant/pull/24875 [#24877]: https://github.com/home-assistant/home-assistant/pull/24877 [#24878]: https://github.com/home-assistant/home-assistant/pull/24878 +[#24879]: https://github.com/home-assistant/home-assistant/pull/24879 [#24880]: https://github.com/home-assistant/home-assistant/pull/24880 [#24881]: https://github.com/home-assistant/home-assistant/pull/24881 [#24882]: https://github.com/home-assistant/home-assistant/pull/24882 @@ -374,6 +454,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#24892]: https://github.com/home-assistant/home-assistant/pull/24892 [#24893]: https://github.com/home-assistant/home-assistant/pull/24893 [#24894]: https://github.com/home-assistant/home-assistant/pull/24894 +[#24902]: https://github.com/home-assistant/home-assistant/pull/24902 [#24904]: https://github.com/home-assistant/home-assistant/pull/24904 [#24905]: https://github.com/home-assistant/home-assistant/pull/24905 [#24909]: https://github.com/home-assistant/home-assistant/pull/24909 @@ -382,6 +463,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#24917]: https://github.com/home-assistant/home-assistant/pull/24917 [#24921]: https://github.com/home-assistant/home-assistant/pull/24921 [#24927]: https://github.com/home-assistant/home-assistant/pull/24927 +[#24928]: https://github.com/home-assistant/home-assistant/pull/24928 [#24930]: https://github.com/home-assistant/home-assistant/pull/24930 [#24932]: https://github.com/home-assistant/home-assistant/pull/24932 [#24941]: https://github.com/home-assistant/home-assistant/pull/24941 @@ -391,6 +473,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#24955]: https://github.com/home-assistant/home-assistant/pull/24955 [#24957]: https://github.com/home-assistant/home-assistant/pull/24957 [#24958]: https://github.com/home-assistant/home-assistant/pull/24958 +[#24961]: https://github.com/home-assistant/home-assistant/pull/24961 [#24963]: https://github.com/home-assistant/home-assistant/pull/24963 [#24971]: https://github.com/home-assistant/home-assistant/pull/24971 [#24972]: https://github.com/home-assistant/home-assistant/pull/24972 @@ -414,10 +497,12 @@ Experiencing issues introduced by this release? Please report them in our [issue [#25019]: https://github.com/home-assistant/home-assistant/pull/25019 [#25023]: https://github.com/home-assistant/home-assistant/pull/25023 [#25024]: https://github.com/home-assistant/home-assistant/pull/25024 +[#25026]: https://github.com/home-assistant/home-assistant/pull/25026 [#25027]: https://github.com/home-assistant/home-assistant/pull/25027 [#25028]: https://github.com/home-assistant/home-assistant/pull/25028 [#25029]: https://github.com/home-assistant/home-assistant/pull/25029 [#25030]: https://github.com/home-assistant/home-assistant/pull/25030 +[#25035]: https://github.com/home-assistant/home-assistant/pull/25035 [#25036]: https://github.com/home-assistant/home-assistant/pull/25036 [#25037]: https://github.com/home-assistant/home-assistant/pull/25037 [#25039]: https://github.com/home-assistant/home-assistant/pull/25039 @@ -438,6 +523,37 @@ Experiencing issues introduced by this release? Please report them in our [issue [#25067]: https://github.com/home-assistant/home-assistant/pull/25067 [#25069]: https://github.com/home-assistant/home-assistant/pull/25069 [#25073]: https://github.com/home-assistant/home-assistant/pull/25073 +[#25076]: https://github.com/home-assistant/home-assistant/pull/25076 +[#25077]: https://github.com/home-assistant/home-assistant/pull/25077 +[#25079]: https://github.com/home-assistant/home-assistant/pull/25079 +[#25080]: https://github.com/home-assistant/home-assistant/pull/25080 +[#25087]: https://github.com/home-assistant/home-assistant/pull/25087 +[#25090]: https://github.com/home-assistant/home-assistant/pull/25090 +[#25096]: https://github.com/home-assistant/home-assistant/pull/25096 +[#25097]: https://github.com/home-assistant/home-assistant/pull/25097 +[#25100]: https://github.com/home-assistant/home-assistant/pull/25100 +[#25101]: https://github.com/home-assistant/home-assistant/pull/25101 +[#25115]: https://github.com/home-assistant/home-assistant/pull/25115 +[#25119]: https://github.com/home-assistant/home-assistant/pull/25119 +[#25121]: https://github.com/home-assistant/home-assistant/pull/25121 +[#25133]: https://github.com/home-assistant/home-assistant/pull/25133 +[#25135]: https://github.com/home-assistant/home-assistant/pull/25135 +[#25139]: https://github.com/home-assistant/home-assistant/pull/25139 +[#25140]: https://github.com/home-assistant/home-assistant/pull/25140 +[#25141]: https://github.com/home-assistant/home-assistant/pull/25141 +[#25148]: https://github.com/home-assistant/home-assistant/pull/25148 +[#25149]: https://github.com/home-assistant/home-assistant/pull/25149 +[#25151]: https://github.com/home-assistant/home-assistant/pull/25151 +[#25152]: https://github.com/home-assistant/home-assistant/pull/25152 +[#25162]: https://github.com/home-assistant/home-assistant/pull/25162 +[#25166]: https://github.com/home-assistant/home-assistant/pull/25166 +[#25167]: https://github.com/home-assistant/home-assistant/pull/25167 +[#25168]: https://github.com/home-assistant/home-assistant/pull/25168 +[#25170]: https://github.com/home-assistant/home-assistant/pull/25170 +[#25177]: https://github.com/home-assistant/home-assistant/pull/25177 +[#25180]: https://github.com/home-assistant/home-assistant/pull/25180 +[#25187]: https://github.com/home-assistant/home-assistant/pull/25187 +[#25193]: https://github.com/home-assistant/home-assistant/pull/25193 [@Adminiuga]: https://github.com/Adminiuga [@Cereal2nd]: https://github.com/Cereal2nd [@Chris-Johnston]: https://github.com/Chris-Johnston @@ -445,10 +561,13 @@ Experiencing issues introduced by this release? Please report them in our [issue [@Emilv2]: https://github.com/Emilv2 [@GrandNewbien]: https://github.com/GrandNewbien [@JeffLIrion]: https://github.com/JeffLIrion +[@KJonline]: https://github.com/KJonline [@Martijn02]: https://github.com/Martijn02 [@Matte23]: https://github.com/Matte23 +[@OnFreund]: https://github.com/OnFreund [@PaulAnnekov]: https://github.com/PaulAnnekov [@StevenLooman]: https://github.com/StevenLooman +[@SukramJ]: https://github.com/SukramJ [@Swamp-Ig]: https://github.com/Swamp-Ig [@alain57]: https://github.com/alain57 [@alengwenus]: https://github.com/alengwenus @@ -467,6 +586,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@cnrd]: https://github.com/cnrd [@ctso]: https://github.com/ctso [@cybe]: https://github.com/cybe +[@danielperna84]: https://github.com/danielperna84 [@davet2001]: https://github.com/davet2001 [@dmulcahey]: https://github.com/dmulcahey [@dreed47]: https://github.com/dreed47 @@ -476,8 +596,10 @@ Experiencing issues introduced by this release? Please report them in our [issue [@fabaff]: https://github.com/fabaff [@foreign-sub]: https://github.com/foreign-sub [@frenck]: https://github.com/frenck +[@gadgetchnnel]: https://github.com/gadgetchnnel [@h3ndrik]: https://github.com/h3ndrik [@jesserizzo]: https://github.com/jesserizzo +[@jkeljo]: https://github.com/jkeljo [@jlrgraham]: https://github.com/jlrgraham [@jmw6773]: https://github.com/jmw6773 [@johnluetke]: https://github.com/johnluetke @@ -506,6 +628,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@zombielinux]: https://github.com/zombielinux [@zxdavb]: https://github.com/zxdavb [alert docs]: /components/alert/ +[alexa docs]: /components/alexa/ [ambiclimate docs]: /components/ambiclimate/ [ambient_station docs]: /components/ambient_station/ [androidtv docs]: /components/androidtv/ @@ -515,7 +638,9 @@ Experiencing issues introduced by this release? Please report them in our [issue [braviatv docs]: /components/braviatv/ [cert_expiry docs]: /components/cert_expiry/ [climate docs]: /components/climate/ +[cloud docs]: /components/cloud/ [config docs]: /components/config/ +[coolmaster docs]: /components/coolmaster/ [cups docs]: /components/cups/ [deutsche_bahn docs]: /components/deutsche_bahn/ [device_tracker docs]: /components/device_tracker/ @@ -525,15 +650,19 @@ Experiencing issues introduced by this release? Please report them in our [issue [ecobee docs]: /components/ecobee/ [enphase_envoy docs]: /components/enphase_envoy/ [evohome docs]: /components/evohome/ +[fritzbox docs]: /components/fritzbox/ [frontend docs]: /components/frontend/ [geniushub docs]: /components/geniushub/ [geo_json_events docs]: /components/geo_json_events/ [geo_location docs]: /components/geo_location/ [glances docs]: /components/glances/ +[google_assistant docs]: /components/google_assistant/ [google_cloud docs]: /components/google_cloud/ [hikvision docs]: /components/hikvision/ +[hive docs]: /components/hive/ [homekit docs]: /components/homekit/ [homematic docs]: /components/homematic/ +[homematicip_cloud docs]: /components/homematicip_cloud/ [honeywell docs]: /components/honeywell/ [input_datetime docs]: /components/input_datetime/ [insteon docs]: /components/insteon/ @@ -542,6 +671,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [knx docs]: /components/knx/ [lcn docs]: /components/lcn/ [life360 docs]: /components/life360/ +[light docs]: /components/light/ [logbook docs]: /components/logbook/ [luftdaten docs]: /components/luftdaten/ [media_extractor docs]: /components/media_extractor/ @@ -565,6 +695,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensibo docs]: /components/sensibo/ [sensor docs]: /components/sensor/ [simplisafe docs]: /components/simplisafe/ +[sisyphus docs]: /components/sisyphus/ [sleepiq docs]: /components/sleepiq/ [sma docs]: /components/sma/ [smartthings docs]: /components/smartthings/ @@ -572,10 +703,13 @@ Experiencing issues introduced by this release? Please report them in our [issue [sonos docs]: /components/sonos/ [sql docs]: /components/sql/ [steam_online docs]: /components/steam_online/ +[switch docs]: /components/switch/ [switchmate docs]: /components/switchmate/ +[syncthru docs]: /components/syncthru/ [systemmonitor docs]: /components/systemmonitor/ [sytadin docs]: /components/sytadin/ [tado docs]: /components/tado/ +[tahoma docs]: /components/tahoma/ [template docs]: /components/template/ [tensorflow docs]: /components/tensorflow/ [toon docs]: /components/toon/ @@ -588,8 +722,10 @@ Experiencing issues introduced by this release? Please report them in our [issue [vallox docs]: /components/vallox/ [velbus docs]: /components/velbus/ [vera docs]: /components/vera/ +[version docs]: /components/version/ [vizio docs]: /components/vizio/ [watson_tts docs]: /components/watson_tts/ +[waze_travel_time docs]: /components/waze_travel_time/ [wwlln docs]: /components/wwlln/ [yeelight docs]: /components/yeelight/ [zestimate docs]: /components/zestimate/ From 3825aa3ccf3129d857030fea5a1ca0b49eeaa965 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 17 Jul 2019 13:53:07 -0700 Subject: [PATCH 23/24] Fix code blocks in breaking changes --- source/_posts/2019-07-17-release-96.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 95804099b0e..4ac0558101c 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -117,10 +117,12 @@ Experiencing issues introduced by this release? Please report them in our [issue - __OpenTherm__ - Adds support for more than one OpenTherm Gateway device which changes the configuration structure. ([@mvn23] - [#22932]) ([opentherm_gw docs]) Example configuration: - ``` + + ```yaml opentherm_gw: living_room: device: /dev/ttyUSB0 + ``` - __Ambient Weather Station__ - By default, the Ambient solar radiation (i.e., brightness) sensor is measured in W/m². Since this unit of measurement is not used anywhere else, this change updates the sensor to use the more prevalent lx unit. Any automations that use this sensor should be updated accordingly. ([@bachya] - [#24690]) ([ambient_station docs]) @@ -128,7 +130,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - __Google Cloud__ - Changed the default encoding to mp3 from opus ogg, allowing it to support many more media players. ([@GrandNewbien] - [#24808]) ([google_cloud docs]) Example configuration: - ``` + + ```yaml tts: - platform: google_cloud key_file: googlecloud.json From cb455a2bdb2c3cc4a798f801aedfc3d37787e857 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 17 Jul 2019 14:25:07 -0700 Subject: [PATCH 24/24] Add Py35 msg --- source/_posts/2019-07-17-release-96.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 4ac0558101c..00ee3d2ea97 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -15,6 +15,12 @@ og_image: /images/blog/2019-07-release-96/demo-sidebar.png It's time for Home Assistant 0.96. It's a great release, but we also made some changes, so please pay attention. +## Last release that supports Python 3.5 + +This will be the last release that supports Python 3.5. Home Assistant 0.97 will require at least Python 3.6. If you are using Hass.io or Docker, you will not have to do anything. If you are running Hassbian, [upgrade instructions are here](https://github.com/home-assistant/hassbian-scripts/blob/dev/docs/suites/python.md). If you run Home Assistant inside a virtual environment, please follow the instructions for your OS to update. + +Home Assistant has adopted a new [Python support strategy](https://github.com/home-assistant/architecture/blob/master/adr/0002-minimum-supported-python-version.md). Starting August 1, we will now support the last two minor stable releases of Python. This is currently Python 3.6 and Python 3.7. Python 3.8 is expected to be released near the end of the year. Once that is released, Python 3.6 support is deprecated and removed 2 months later. + ## Pimp my Sidebar The sidebar has gotten an improved look! Idea started with [a mockup by @JuanMTech on Twitter](https://twitter.com/JuanMTech/status/1143757213971943424) and grew into a full blown implementation. The sidebar will now always be visible in a minimized mode. Hovering it will expand it. The developer tool buttons have been collapsed into a single menu item. The dev tools will now store it's exact state when you navigate away, included the dev tool that is open. We've also taken the opportunity to make notifications accessible from the sidebar, instead of only via the Lovelace UI.