From 720e1cf36744a075de7095c187bd8c94fcfec1a2 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 3 Nov 2018 13:56:21 +0100
Subject: [PATCH 01/58] Add stub release notes
---
_config.yml | 8 +-
source/_posts/2018-11-08-release-82.markdown | 587 +++++++++++++++++++
2 files changed, 591 insertions(+), 4 deletions(-)
create mode 100644 source/_posts/2018-11-08-release-82.markdown
diff --git a/_config.yml b/_config.yml
index 9fb7a2b9e92..a4baa0cb34c 100644
--- a/_config.yml
+++ b/_config.yml
@@ -141,14 +141,14 @@ social:
# Home Assistant release details
current_major_version: 0
-current_minor_version: 81
-current_patch_version: 4
-date_released: 2018-11-02
+current_minor_version: 82
+current_patch_version: 0
+date_released: 2018-11-08
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
# Major release:
-patch_version_notes: "#release-0814---november-3"
+patch_version_notes: "#"
# Minor release (Example #release-0431---april-25):
# Date we moved to Discourse for comments
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
new file mode 100644
index 00000000000..dc62d064274
--- /dev/null
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -0,0 +1,587 @@
+---
+layout: post
+title: "0.82: TBD - update date"
+description: "TBD"
+date: 2018-11-03 00:01:00
+date_formatted: "November 8, 2018"
+author: Paulus Schoutsen
+author_twitter: balloob
+comments: true
+categories: Release-Notes
+og_image: /images/blog/2018-11-release-82/components.png
+---
+
+???
+
+Alpha edit mode for Lovelace.
+
+## {% linkable_title New Platforms %}
+
+- Add device tracking for the BT Smart Hub router ([@jxwolstenholme] - [#17158]) ([device_tracker docs]) (new-platform)
+- Météo-france sensor : current weather and 1 hour rain forecast ([@victorcerutti] - [#17773]) ([sensor.meteo_france docs]) (new-platform)
+- Support for WeMo Humidifier ([@sqldiablo] - [#17996]) ([wemo docs]) ([fan.wemo docs]) (new-platform)
+- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) ([sensor.greeneye_monitor_current docs]) ([sensor.greeneye_monitor_pulse docs]) ([sensor.greeneye_monitor_temperature docs]) (new-platform)
+- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs]) ([climate.velbus docs]) (new-platform)
+- TensorFlow image_processing component ([@hunterjm] - [#17795]) ([image_processing.tensorflow docs]) (new-platform)
+
+## {% linkable_title If you need help... %}
+
+...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
+
+## {% linkable_title Reporting Issues %}
+
+Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template.
+
+
+
+## {% linkable_title Breaking Changes %}
+
+- Migrate Mailgun to use the webhook component ([@rohankapoorcom] - [#17464]) ([ifttt docs]) ([mailgun docs]) ([notify docs]) ([automation.webhook docs]) (breaking change)
+- Migrate twilio webhooks to the webhook component ([@rohankapoorcom] - [#17715]) ([twilio docs]) (breaking change)
+- Fix Vera climate component to use correct states ([@sqldiablo] - [#17892]) ([climate.vera docs]) (breaking change)
+- Migrate dialogflow over to the new webhook component ([@rohankapoorcom] - [#17804]) ([dialogflow docs]) ([http docs]) (breaking change)
+- Update to DoorBirdPy v2 (again) ([@Klikini] - [#14933]) ([doorbird docs]) ([switch.doorbird docs]) (breaking change)
+- Add binary sensors for sense energy monitor ([@kbickar] - [#17645]) ([sensor.sense docs]) (breaking change)
+- Update Pollen.com to use numpy for trend analysis ([@bachya] - [#18107]) ([sensor.pollen docs]) (breaking change)
+
+## {% linkable_title All changes %}
+
+- Mill, support more heater types ([@Danielhiversen] - [#17676]) ([climate.mill docs])
+- Add missing hangouts data/image to notify service ([@quazzie] - [#17576]) ([notify docs])
+- Fix Mexican Spanish identifier ([@manuel-jrs] - [#17674]) ([tts docs])
+- Add readthedoc.yml file to specify the version of python to run during documentation building. ([@tmonck] - [#17642])
+- All supported domains should be exposed by default ([@doudz] - [#17579]) ([google_assistant docs])
+- Updated simplisafe-python to 3.1.13 ([@bachya] - [#17696]) ([simplisafe docs])
+- Upgrade Sphinx to 1.8.1 ([@fabaff] - [#17701])
+- Away mode temperature fix for generic thermostat ([@estevez-dev] - [#17641]) ([climate.generic_thermostat docs])
+- Async version for asuswrt ([@kennedyshead] - [#17692]) ([device_tracker docs])
+- Migrate Mailgun to use the webhook component ([@rohankapoorcom] - [#17464]) ([ifttt docs]) ([mailgun docs]) ([notify docs]) ([automation.webhook docs]) (breaking change)
+- Only strip from the bluetooth name if it isn't None ([@d0ugal] - [#17719]) ([device_tracker docs])
+- Just use debug instead of error if the binary_sensor does not get data ([@kennedyshead] - [#17720]) ([openuv docs])
+- clean up clicksend ([@Danielhiversen] - [#17723]) ([notify docs])
+- Set available property ([@ehendrix23] - [#17706]) ([august docs]) ([binary_sensor.august docs]) ([lock.august docs])
+- Removes re-init ([@kennedyshead] - [#17724]) ([device_tracker docs])
+- Don't call off_delay_listener if not needed ([@foxel] - [#17712]) ([binary_sensor.mqtt docs])
+- Rename readthedocs file ([@fabaff] - [#17718])
+- Add device tracking for the BT Smart Hub router ([@jxwolstenholme] - [#17158]) ([device_tracker docs]) (new-platform)
+- Upgrade pytest to 3.9.2 ([@scop] - [#17736])
+- Upgrade mypy to 0.641 ([@scop] - [#17734])
+- IGD review fixes ([@StevenLooman] - [#17400]) ([upnp docs])
+- Pytest tests ([@balloob] - [#17750])
+- Remove webhook_id from yaml config for mailgun ([@rohankapoorcom] - [#17732]) ([mailgun docs])
+- Update zha __init__.py to reflect new Zigbee name stylization by the Zigbee Alliance ([@Hedda] - [#17751]) ([zha docs])
+- Clean up clicksend_tts ([@Danielhiversen] - [#17749]) ([notify docs])
+- Convert auth websocket commands to use async_response decorator ([@balloob] - [#17755]) ([auth docs])
+- Update name (fixes #17752) ([@fabaff] - [#17756]) ([zigbee docs]) ([binary_sensor.zha docs]) ([binary_sensor.zigbee docs]) ([switch.xiaomi_aqara docs]) ([switch.zigbee docs])
+- Async tests for MQTT lock ([@kennedyshead] - [#17763])
+- Async MQTT sensor room ([@kennedyshead] - [#17765])
+- Add Mexican Spanish language ([@manuel-jrs] - [#17735]) ([tts docs])
+- Add wind gust (fixes #17766) ([@fabaff] - [#17774]) ([sensor.darksky docs])
+- Remove username from log entry ([@fabaff] - [#17777]) ([vacuum.roomba docs])
+- Migrate twilio webhooks to the webhook component ([@rohankapoorcom] - [#17715]) ([twilio docs]) (breaking change)
+- Testing async in MQTT_json lights ([@kennedyshead] - [#17768])
+- This makes mqtt_template tests async ([@kennedyshead] - [#17784])
+- Restore manual alarm-control-panel state using async_get_last_state ([@liaanvdm] - [#17521]) ([alarm_control_panel.manual docs])
+- typo ([@janvanhelvoort] - [#17787]) ([zwave docs])
+- Fix device reg considered changed ([@balloob] - [#17764])
+- Allow creating signed urls ([@balloob] - [#17759]) ([auth docs]) ([http docs])
+- Add contact sensors to alexa smart home ([@abmantis] - [#17704]) ([alexa docs])
+- Upgrade flake8 to 3.6.0 ([@scop] - [#17770])
+- Install face_recognition on Docker build ([@lights0123] - [#17502])
+- Delete sensor.yahoo_finance ([@rohankapoorcom] - [#17805]) ([sensor.yahoo_finance docs])
+- deCONZ: configure service can now use 'field' as a subpath together with 'entity' ([@lbschenkel] - [#17722]) ([deconz docs])
+- Bumped NDMS2 client to 0.0.5 to fix unicode characters support ([@foxel] - [#17803]) ([device_tracker docs])
+- Upgrade numpy to 1.15.3 ([@fabaff] - [#17796]) ([binary_sensor.trend docs]) ([image_processing.opencv docs])
+- MQTT Vacuum now passes error messages. ([@jeroenterheerdt] - [#17685]) ([vacuum.mqtt docs])
+- Convert automation tests to async ([@balloob] - [#17794])
+- Lovelace ws: add move command ([@bramkragten] - [#17806]) ([lovelace docs])
+- Convert MQTT Light tests to async ([@balloob] - [#17754])
+- Bumping aioasuswrt version ([@kennedyshead] - [#17814]) ([device_tracker docs])
+- Minor changes ([@fabaff] - [#17812]) ([switch.dlink docs])
+- Add snow to Openweathermap precipitation forecast ([@sgttrs] - [#17551]) ([weather.openweathermap docs])
+- Add delete command ([@bramkragten] - [#17816]) ([lovelace docs])
+- Raise PlatformNotReady for RMVtransport if API not available ([@cgtobi] - [#17635]) ([sensor.rmvtransport docs])
+- Added vacuum dock and pause/unpause traits ([@mariuszluciow] - [#17657]) ([google_assistant docs])
+- Minor changes to the config validation ([@fabaff] - [#17808]) ([sensor.sma docs])
+- Alexa motion sensor ([@abmantis] - [#17798]) ([alexa docs])
+- Mill device state attributes ([@Danielhiversen] - [#17834]) ([climate.mill docs])
+- Fix Alexa unsupported operation_mode off ([@rwagoner] - [#17844]) ([alexa docs])
+- adding myself as yessssms codeowner ([@flowolf] - [#17862])
+- Switch to using Client from twilio.rest rather than the deleted TwilioRestClient ([@rohankapoorcom] - [#17883]) ([twilio docs])
+- Fix Vera climate component to use correct states ([@sqldiablo] - [#17892]) ([climate.vera docs]) (breaking change)
+- Add myself to CODEOWNERS for Yeelight Sunflower light platform ([@lindsaymarkward] - [#17896])
+- Fix logi_circle sensor update method naming ([@evanjd] - [#17909]) ([sensor.logi_circle docs])
+- Fix RFLink issue #17875 ([@emontnemery] - [#17889]) ([rflink docs])
+- Corrected fan device type in google assistant to fan ([@mariuszluciow] - [#17792]) ([google_assistant docs])
+- Migrate dialogflow over to the new webhook component ([@rohankapoorcom] - [#17804]) ([dialogflow docs]) ([http docs]) (breaking change)
+- Fixes Telegram webhooks ([@luca-angemi] - [#17554]) ([telegram_bot docs])
+- Start type annotating/testing helpers ([@scop] - [#17858])
+- updated version of xknx ([@Julius2342] - [#17912]) ([knx docs])
+- Updated Brunt code owner ([@eavanvalkenburg] - [#17854])
+- Monitor all sensor types by default to rtorrent ([@terorie] - [#17894]) ([sensor.rtorrent docs])
+- Merge conflicting changes ([@kennedyshead] - [#17761])
+- Axis - prepare for config entry ([@Kane610] - [#17566]) ([axis docs]) ([binary_sensor.axis docs])
+- Upgrade pytest to 3.9.3 ([@scop] - [#17921])
+- Extract entity ids from all templates ([@amelchio] - [#17902]) ([binary_sensor.template docs])
+- Make light.yeelight stop doing IO when accessing properties ([@rohankapoorcom] - [#17917]) ([light.yeelight docs])
+- Fixes for upnp-component/#17753 and missing hass-data when only setup from config entry ([@StevenLooman] - [#17868]) ([upnp docs]) ([media_player.dlna_dmr docs]) ([sensor.igd docs])
+- Fix for verify_ssl in the pi_hole sensor. ([@ludeeus] - [#17910]) ([sensor.pi_hole docs])
+- Permissions improv ([@balloob] - [#17811])
+- Fix incorrect chevy discovery ([@balloob] - [#17942]) ([mychevy docs])
+- Fix venv check ([@balloob] - [#17939]) ([updater docs])
+- Disable upnp from being discovered ([@balloob] - [#17937])
+- Added codeowner for bt_smarthub ([@jxwolstenholme] - [#17947])
+- Fixed copy-paste errors ([@mariuszluciow] - [#17948])
+- Fix spelling error in log output ([@bitglue] - [#17963])
+- Fix operation mode for Alexa thermostat ([@balloob] - [#17972]) ([alexa docs])
+- Change source, add attributes, and improve state of DirecTV ([@ehendrix23] - [#17536]) ([media_player.directv docs])
+- Update Alexa tests to async syntax ([@bitglue] - [#17965])
+- Météo-france sensor : current weather and 1 hour rain forecast ([@victorcerutti] - [#17773]) ([sensor.meteo_france docs]) (new-platform)
+- Updated ring_doorbell dependency to 0.2.2 ([@evanjd] - [#17945]) ([ring docs])
+- Update Avi-On to work with latest API ([@antsar] - [#17780]) ([light.avion docs])
+- Mill service ([@Danielhiversen] - [#17971]) ([climate.mill docs])
+- Refactor Alexa API, fix thermostats ([@bitglue] - [#17969]) ([alexa docs])
+- Upgrade aiofreepybox ([@stilllman] - [#17989]) ([device_tracker docs])
+- Reverse out change #14234 BOM Weather throttle fix ([@nickw444] - [#17468]) ([sensor.bom docs])
+- RFC: Static templates match no entities, not all ([@amelchio] - [#17991])
+- Switch mailgun webhooks to the new Mailgun webhook api ([@rohankapoorcom] - [#17919]) ([mailgun docs])
+- Change hebrew date at sunset ([@tsvi] - [#17449]) ([sensor.jewish_calendar docs])
+- Import homeassistant domain instead of hardcoding it ([@scop] - [#17985]) ([websocket_api docs])
+- Allow jinja namespace command to work. ([@NeilCrosby] - [#18011])
+- Support for WeMo Humidifier ([@sqldiablo] - [#17996]) ([wemo docs]) ([fan.wemo docs]) (new-platform)
+- Fix Bloomsky api call ([@dshokouhi] - [#18016]) ([bloomsky docs])
+- Async version of melissa ([@kennedyshead] - [#17721])
+- Upgrade to asuswrt 1.1.1 to better handle mac addresses with letters in them ([@halkeye] - [#18030]) ([device_tracker docs])
+- Add SMA sensor SSL verification option ([@PhilRW] - [#18033]) ([sensor.sma docs])
+- Use const.SUN_EVENT_* more ([@scop] - [#18039]) ([device_sun_light_trigger docs]) ([sun docs]) ([sensor.jewish_calendar docs]) ([switch.flux docs])
+- Bumping aioasuswrt to 1.1.2 ([@kennedyshead] - [#18042]) ([device_tracker docs])
+- Add services.yaml entry for new WeMo Humidifier platform service ([@sqldiablo] - [#18032])
+- Add opentherm_gw services ([@mvn23] - [#17762]) ([opentherm_gw docs])
+- Extract ruamel.yaml to util with secrets, lovelace ws decorators ([@bramkragten] - [#17958]) ([lovelace docs])
+- Report correct thermostat mode to Alexa ([@bitglue] - [#18053]) ([alexa docs])
+- Update SMA sensor to pysma 0.2.2 ([@kellerza] - [#17988]) ([sensor.sma docs])
+- Mill, support opeation mode ([@Danielhiversen] - [#18059]) ([climate.mill docs])
+- deCONZ - retry if setup fails ([@Kane610] - [#17772]) ([deconz docs]) ([binary_sensor.deconz docs]) ([cover.deconz docs]) ([light.deconz docs]) ([scene.deconz docs]) ([sensor.deconz docs]) ([switch.deconz docs])
+- Add functionality to the version sensor ([@ludeeus] - [#18067]) ([sensor.version docs])
+- remove schedule_update_ha_state from mill ([@Danielhiversen] - [#18080]) ([climate.mill docs])
+- Fix camera mjpeg stream handling ([@awarecan] - [#18076]) ([camera docs]) ([camera.amcrest docs]) ([camera.arlo docs]) ([camera.canary docs]) ([camera.mjpeg docs]) ([camera.onvif docs]) ([camera.ring docs]) ([camera.synology docs]) ([camera.xiaomi docs]) ([camera.yi docs])
+- Change test to parametrized test using pytest ([@tsvi] - [#18047])
+- Add view commands to Lovelace ([@bramkragten] - [#18063]) ([lovelace docs])
+- Add message template support for alert component ([@thoscut] - [#17516]) ([alert docs])
+- Added identifier and name to connect/disconnect events ([@jaredquinn] - [#18078]) ([keyboard_remote docs])
+- Fix in Daikin.py for set swing_mode and speed ([@MatteGary] - [#18013]) ([climate.daikin docs])
+- Allow different types to match in pilight ([@akloeckner] - [#17922]) ([binary_sensor.pilight docs])
+- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) ([sensor.greeneye_monitor_current docs]) ([sensor.greeneye_monitor_pulse docs]) ([sensor.greeneye_monitor_temperature docs]) (new-platform)
+- HomematicIP_Cloud fix test ([@mxworm] - [#17376]) ([homematicip_cloud docs])
+- Upgrade locationsharinglib to 3.0.7 ([@fabaff] - [#18083]) ([device_tracker docs])
+- Upgrade sqlalchemy to 1.2.13 ([@fabaff] - [#18084]) ([sensor.sql docs])
+- Upgrade youtube_dl to 2018.10.29 ([@fabaff] - [#18085]) ([media_extractor docs])
+- Pass though file_url from extended data attrs ([@cmsimike] - [#17801]) ([notify docs])
+- Upgrade psutil to 5.4.8 ([@fabaff] - [#18086]) ([sensor.systemmonitor docs])
+- sensor/wunderground add device_class ([@simonvanderveldt] - [#18072]) ([sensor.wunderground docs])
+- Upgrade restrictedpython to 4.0b6 ([@fabaff] - [#18087]) ([python_script docs])
+- Upgrade georss_client to 0.4 ([@exxamalte] - [#18088]) ([geo_location docs])
+- Catch KeyError if data is not available (fixes #18082) ([@fabaff] - [#18089]) ([sensor.openweathermap docs])
+- Bump python-miio version ([@syssi] - [#18095]) ([device_tracker docs]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([remote.xiaomi_miio docs]) ([sensor.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs])
+- Update Pollen.com sensor platform to include asthma info ([@bachya] - [#18024]) ([sensor.pollen docs])
+- Use a fixture for dialogflow calls in unit tests ([@rohankapoorcom] - [#17999])
+- Don't try to re-add existing Z-Wave entities ([@cgarwood] - [#17995]) ([zwave docs])
+- Always save current position if payload is numeric value ([@pszafer] - [#16148]) ([cover.mqtt docs])
+- Darksky: Fetch summary for daily forecasts ([@leppa] - [#18031]) ([sensor.darksky docs])
+- Update to DoorBirdPy v2 (again) ([@Klikini] - [#14933]) ([doorbird docs]) ([switch.doorbird docs]) (breaking change)
+- Ignore min_cycle_duration when manually controlling the thermostat. ([@aronsky] - [#16128]) ([climate.generic_thermostat docs])
+- Add surround programs to zone 2+ ([@Petro31] - [#17445]) ([media_player.yamaha docs])
+- Removed assumptions about provided upnp data ([@WoLpH] - [#17604]) ([upnp docs])
+- Add binary sensors for sense energy monitor ([@kbickar] - [#17645]) ([sensor.sense docs]) (breaking change)
+- Use ssdp udn uuid as Samsung TV unique id ([@scop] - [#18022]) ([media_player.samsungtv docs])
+- Allow MS face detection to handle updating entities when no face is detected ([@NeilCrosby] - [#17593]) ([image_processing.microsoft_face_detect docs]) ([image_processing.microsoft_face_identify docs])
+- Added service select_video_output and video_out attribute ([@leothlon] - [#18081]) ([media_player.onkyo docs])
+- Darksky: Round all temperatures to 1 decimal place ([@leppa] - [#18119]) ([sensor.darksky docs])
+- Convert nsw rural fire tests to async ([@armills] - [#18112])
+- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs]) ([climate.velbus docs]) (new-platform)
+- Changed from pifacecommon 4.1.2 to 4.2.2 to make the piface digital i/o boards work on rpi like 3 ([@vacumet] - [#18101]) ([rpi_pfio docs])
+- Update Pollen.com to use numpy for trend analysis ([@bachya] - [#18107]) ([sensor.pollen docs]) (breaking change)
+- Exposes initial attribute on the entity. ([@ludeeus] - [#18123]) ([input_number docs])
+- Async generic thermostat tests ([@armills] - [#18111])
+- Update fan/demo tests to async ([@armills] - [#18109])
+- Don't create a switch for POE device if said device is Cloud key ([@Kane610] - [#18117]) ([switch.unifi docs])
+- TensorFlow image_processing component ([@hunterjm] - [#17795]) ([image_processing.tensorflow docs]) (new-platform)
+- Fix DTE Energy Bridge V2 scaling issue. (#18124) ([@mtl010957] - [#18129]) ([sensor.dte_energy_bridge docs])
+- Add optional ttl config to route53 component ([@pascal-de-ladurantaye] - [#18135]) ([route53 docs])
+- Allow disabling WeMo Discovery ([@sqldiablo] - [#18079]) ([wemo docs])
+- Fix typos and update docstrings ([@fabaff] - [#18137]) ([lovelace docs])
+- Fix hassio command timeout ([@alex9446] - [#17567]) ([hassio docs])
+
+[#14933]: https://github.com/home-assistant/home-assistant/pull/14933
+[#16128]: https://github.com/home-assistant/home-assistant/pull/16128
+[#16148]: https://github.com/home-assistant/home-assistant/pull/16148
+[#16378]: https://github.com/home-assistant/home-assistant/pull/16378
+[#17158]: https://github.com/home-assistant/home-assistant/pull/17158
+[#17376]: https://github.com/home-assistant/home-assistant/pull/17376
+[#17400]: https://github.com/home-assistant/home-assistant/pull/17400
+[#17445]: https://github.com/home-assistant/home-assistant/pull/17445
+[#17449]: https://github.com/home-assistant/home-assistant/pull/17449
+[#17464]: https://github.com/home-assistant/home-assistant/pull/17464
+[#17468]: https://github.com/home-assistant/home-assistant/pull/17468
+[#17502]: https://github.com/home-assistant/home-assistant/pull/17502
+[#17516]: https://github.com/home-assistant/home-assistant/pull/17516
+[#17521]: https://github.com/home-assistant/home-assistant/pull/17521
+[#17536]: https://github.com/home-assistant/home-assistant/pull/17536
+[#17551]: https://github.com/home-assistant/home-assistant/pull/17551
+[#17554]: https://github.com/home-assistant/home-assistant/pull/17554
+[#17566]: https://github.com/home-assistant/home-assistant/pull/17566
+[#17567]: https://github.com/home-assistant/home-assistant/pull/17567
+[#17576]: https://github.com/home-assistant/home-assistant/pull/17576
+[#17579]: https://github.com/home-assistant/home-assistant/pull/17579
+[#17593]: https://github.com/home-assistant/home-assistant/pull/17593
+[#17604]: https://github.com/home-assistant/home-assistant/pull/17604
+[#17635]: https://github.com/home-assistant/home-assistant/pull/17635
+[#17641]: https://github.com/home-assistant/home-assistant/pull/17641
+[#17642]: https://github.com/home-assistant/home-assistant/pull/17642
+[#17645]: https://github.com/home-assistant/home-assistant/pull/17645
+[#17657]: https://github.com/home-assistant/home-assistant/pull/17657
+[#17674]: https://github.com/home-assistant/home-assistant/pull/17674
+[#17676]: https://github.com/home-assistant/home-assistant/pull/17676
+[#17685]: https://github.com/home-assistant/home-assistant/pull/17685
+[#17692]: https://github.com/home-assistant/home-assistant/pull/17692
+[#17696]: https://github.com/home-assistant/home-assistant/pull/17696
+[#17701]: https://github.com/home-assistant/home-assistant/pull/17701
+[#17704]: https://github.com/home-assistant/home-assistant/pull/17704
+[#17706]: https://github.com/home-assistant/home-assistant/pull/17706
+[#17712]: https://github.com/home-assistant/home-assistant/pull/17712
+[#17715]: https://github.com/home-assistant/home-assistant/pull/17715
+[#17718]: https://github.com/home-assistant/home-assistant/pull/17718
+[#17719]: https://github.com/home-assistant/home-assistant/pull/17719
+[#17720]: https://github.com/home-assistant/home-assistant/pull/17720
+[#17721]: https://github.com/home-assistant/home-assistant/pull/17721
+[#17722]: https://github.com/home-assistant/home-assistant/pull/17722
+[#17723]: https://github.com/home-assistant/home-assistant/pull/17723
+[#17724]: https://github.com/home-assistant/home-assistant/pull/17724
+[#17732]: https://github.com/home-assistant/home-assistant/pull/17732
+[#17734]: https://github.com/home-assistant/home-assistant/pull/17734
+[#17735]: https://github.com/home-assistant/home-assistant/pull/17735
+[#17736]: https://github.com/home-assistant/home-assistant/pull/17736
+[#17749]: https://github.com/home-assistant/home-assistant/pull/17749
+[#17750]: https://github.com/home-assistant/home-assistant/pull/17750
+[#17751]: https://github.com/home-assistant/home-assistant/pull/17751
+[#17754]: https://github.com/home-assistant/home-assistant/pull/17754
+[#17755]: https://github.com/home-assistant/home-assistant/pull/17755
+[#17756]: https://github.com/home-assistant/home-assistant/pull/17756
+[#17759]: https://github.com/home-assistant/home-assistant/pull/17759
+[#17761]: https://github.com/home-assistant/home-assistant/pull/17761
+[#17762]: https://github.com/home-assistant/home-assistant/pull/17762
+[#17763]: https://github.com/home-assistant/home-assistant/pull/17763
+[#17764]: https://github.com/home-assistant/home-assistant/pull/17764
+[#17765]: https://github.com/home-assistant/home-assistant/pull/17765
+[#17768]: https://github.com/home-assistant/home-assistant/pull/17768
+[#17770]: https://github.com/home-assistant/home-assistant/pull/17770
+[#17772]: https://github.com/home-assistant/home-assistant/pull/17772
+[#17773]: https://github.com/home-assistant/home-assistant/pull/17773
+[#17774]: https://github.com/home-assistant/home-assistant/pull/17774
+[#17777]: https://github.com/home-assistant/home-assistant/pull/17777
+[#17780]: https://github.com/home-assistant/home-assistant/pull/17780
+[#17784]: https://github.com/home-assistant/home-assistant/pull/17784
+[#17787]: https://github.com/home-assistant/home-assistant/pull/17787
+[#17792]: https://github.com/home-assistant/home-assistant/pull/17792
+[#17794]: https://github.com/home-assistant/home-assistant/pull/17794
+[#17795]: https://github.com/home-assistant/home-assistant/pull/17795
+[#17796]: https://github.com/home-assistant/home-assistant/pull/17796
+[#17798]: https://github.com/home-assistant/home-assistant/pull/17798
+[#17801]: https://github.com/home-assistant/home-assistant/pull/17801
+[#17803]: https://github.com/home-assistant/home-assistant/pull/17803
+[#17804]: https://github.com/home-assistant/home-assistant/pull/17804
+[#17805]: https://github.com/home-assistant/home-assistant/pull/17805
+[#17806]: https://github.com/home-assistant/home-assistant/pull/17806
+[#17808]: https://github.com/home-assistant/home-assistant/pull/17808
+[#17811]: https://github.com/home-assistant/home-assistant/pull/17811
+[#17812]: https://github.com/home-assistant/home-assistant/pull/17812
+[#17814]: https://github.com/home-assistant/home-assistant/pull/17814
+[#17816]: https://github.com/home-assistant/home-assistant/pull/17816
+[#17834]: https://github.com/home-assistant/home-assistant/pull/17834
+[#17844]: https://github.com/home-assistant/home-assistant/pull/17844
+[#17854]: https://github.com/home-assistant/home-assistant/pull/17854
+[#17858]: https://github.com/home-assistant/home-assistant/pull/17858
+[#17862]: https://github.com/home-assistant/home-assistant/pull/17862
+[#17868]: https://github.com/home-assistant/home-assistant/pull/17868
+[#17883]: https://github.com/home-assistant/home-assistant/pull/17883
+[#17889]: https://github.com/home-assistant/home-assistant/pull/17889
+[#17892]: https://github.com/home-assistant/home-assistant/pull/17892
+[#17894]: https://github.com/home-assistant/home-assistant/pull/17894
+[#17896]: https://github.com/home-assistant/home-assistant/pull/17896
+[#17902]: https://github.com/home-assistant/home-assistant/pull/17902
+[#17909]: https://github.com/home-assistant/home-assistant/pull/17909
+[#17910]: https://github.com/home-assistant/home-assistant/pull/17910
+[#17912]: https://github.com/home-assistant/home-assistant/pull/17912
+[#17917]: https://github.com/home-assistant/home-assistant/pull/17917
+[#17919]: https://github.com/home-assistant/home-assistant/pull/17919
+[#17921]: https://github.com/home-assistant/home-assistant/pull/17921
+[#17922]: https://github.com/home-assistant/home-assistant/pull/17922
+[#17937]: https://github.com/home-assistant/home-assistant/pull/17937
+[#17939]: https://github.com/home-assistant/home-assistant/pull/17939
+[#17942]: https://github.com/home-assistant/home-assistant/pull/17942
+[#17945]: https://github.com/home-assistant/home-assistant/pull/17945
+[#17947]: https://github.com/home-assistant/home-assistant/pull/17947
+[#17948]: https://github.com/home-assistant/home-assistant/pull/17948
+[#17958]: https://github.com/home-assistant/home-assistant/pull/17958
+[#17963]: https://github.com/home-assistant/home-assistant/pull/17963
+[#17965]: https://github.com/home-assistant/home-assistant/pull/17965
+[#17969]: https://github.com/home-assistant/home-assistant/pull/17969
+[#17971]: https://github.com/home-assistant/home-assistant/pull/17971
+[#17972]: https://github.com/home-assistant/home-assistant/pull/17972
+[#17985]: https://github.com/home-assistant/home-assistant/pull/17985
+[#17988]: https://github.com/home-assistant/home-assistant/pull/17988
+[#17989]: https://github.com/home-assistant/home-assistant/pull/17989
+[#17991]: https://github.com/home-assistant/home-assistant/pull/17991
+[#17995]: https://github.com/home-assistant/home-assistant/pull/17995
+[#17996]: https://github.com/home-assistant/home-assistant/pull/17996
+[#17999]: https://github.com/home-assistant/home-assistant/pull/17999
+[#18011]: https://github.com/home-assistant/home-assistant/pull/18011
+[#18013]: https://github.com/home-assistant/home-assistant/pull/18013
+[#18016]: https://github.com/home-assistant/home-assistant/pull/18016
+[#18022]: https://github.com/home-assistant/home-assistant/pull/18022
+[#18024]: https://github.com/home-assistant/home-assistant/pull/18024
+[#18030]: https://github.com/home-assistant/home-assistant/pull/18030
+[#18031]: https://github.com/home-assistant/home-assistant/pull/18031
+[#18032]: https://github.com/home-assistant/home-assistant/pull/18032
+[#18033]: https://github.com/home-assistant/home-assistant/pull/18033
+[#18039]: https://github.com/home-assistant/home-assistant/pull/18039
+[#18042]: https://github.com/home-assistant/home-assistant/pull/18042
+[#18047]: https://github.com/home-assistant/home-assistant/pull/18047
+[#18053]: https://github.com/home-assistant/home-assistant/pull/18053
+[#18059]: https://github.com/home-assistant/home-assistant/pull/18059
+[#18063]: https://github.com/home-assistant/home-assistant/pull/18063
+[#18067]: https://github.com/home-assistant/home-assistant/pull/18067
+[#18072]: https://github.com/home-assistant/home-assistant/pull/18072
+[#18076]: https://github.com/home-assistant/home-assistant/pull/18076
+[#18078]: https://github.com/home-assistant/home-assistant/pull/18078
+[#18079]: https://github.com/home-assistant/home-assistant/pull/18079
+[#18080]: https://github.com/home-assistant/home-assistant/pull/18080
+[#18081]: https://github.com/home-assistant/home-assistant/pull/18081
+[#18083]: https://github.com/home-assistant/home-assistant/pull/18083
+[#18084]: https://github.com/home-assistant/home-assistant/pull/18084
+[#18085]: https://github.com/home-assistant/home-assistant/pull/18085
+[#18086]: https://github.com/home-assistant/home-assistant/pull/18086
+[#18087]: https://github.com/home-assistant/home-assistant/pull/18087
+[#18088]: https://github.com/home-assistant/home-assistant/pull/18088
+[#18089]: https://github.com/home-assistant/home-assistant/pull/18089
+[#18095]: https://github.com/home-assistant/home-assistant/pull/18095
+[#18100]: https://github.com/home-assistant/home-assistant/pull/18100
+[#18101]: https://github.com/home-assistant/home-assistant/pull/18101
+[#18107]: https://github.com/home-assistant/home-assistant/pull/18107
+[#18109]: https://github.com/home-assistant/home-assistant/pull/18109
+[#18111]: https://github.com/home-assistant/home-assistant/pull/18111
+[#18112]: https://github.com/home-assistant/home-assistant/pull/18112
+[#18117]: https://github.com/home-assistant/home-assistant/pull/18117
+[#18119]: https://github.com/home-assistant/home-assistant/pull/18119
+[#18123]: https://github.com/home-assistant/home-assistant/pull/18123
+[#18129]: https://github.com/home-assistant/home-assistant/pull/18129
+[#18135]: https://github.com/home-assistant/home-assistant/pull/18135
+[#18137]: https://github.com/home-assistant/home-assistant/pull/18137
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Danielhiversen]: https://github.com/Danielhiversen
+[@Hedda]: https://github.com/Hedda
+[@Julius2342]: https://github.com/Julius2342
+[@Kane610]: https://github.com/Kane610
+[@Klikini]: https://github.com/Klikini
+[@MatteGary]: https://github.com/MatteGary
+[@NeilCrosby]: https://github.com/NeilCrosby
+[@Petro31]: https://github.com/Petro31
+[@PhilRW]: https://github.com/PhilRW
+[@StevenLooman]: https://github.com/StevenLooman
+[@WoLpH]: https://github.com/WoLpH
+[@abmantis]: https://github.com/abmantis
+[@akloeckner]: https://github.com/akloeckner
+[@alex9446]: https://github.com/alex9446
+[@amelchio]: https://github.com/amelchio
+[@antsar]: https://github.com/antsar
+[@armills]: https://github.com/armills
+[@aronsky]: https://github.com/aronsky
+[@awarecan]: https://github.com/awarecan
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bitglue]: https://github.com/bitglue
+[@bramkragten]: https://github.com/bramkragten
+[@cgarwood]: https://github.com/cgarwood
+[@cgtobi]: https://github.com/cgtobi
+[@cmsimike]: https://github.com/cmsimike
+[@d0ugal]: https://github.com/d0ugal
+[@doudz]: https://github.com/doudz
+[@dshokouhi]: https://github.com/dshokouhi
+[@eavanvalkenburg]: https://github.com/eavanvalkenburg
+[@ehendrix23]: https://github.com/ehendrix23
+[@emontnemery]: https://github.com/emontnemery
+[@estevez-dev]: https://github.com/estevez-dev
+[@evanjd]: https://github.com/evanjd
+[@exxamalte]: https://github.com/exxamalte
+[@fabaff]: https://github.com/fabaff
+[@flowolf]: https://github.com/flowolf
+[@foxel]: https://github.com/foxel
+[@halkeye]: https://github.com/halkeye
+[@hunterjm]: https://github.com/hunterjm
+[@janvanhelvoort]: https://github.com/janvanhelvoort
+[@jaredquinn]: https://github.com/jaredquinn
+[@jeroenterheerdt]: https://github.com/jeroenterheerdt
+[@jkeljo]: https://github.com/jkeljo
+[@jxwolstenholme]: https://github.com/jxwolstenholme
+[@kbickar]: https://github.com/kbickar
+[@kellerza]: https://github.com/kellerza
+[@kennedyshead]: https://github.com/kennedyshead
+[@lbschenkel]: https://github.com/lbschenkel
+[@leothlon]: https://github.com/leothlon
+[@leppa]: https://github.com/leppa
+[@liaanvdm]: https://github.com/liaanvdm
+[@lights0123]: https://github.com/lights0123
+[@lindsaymarkward]: https://github.com/lindsaymarkward
+[@luca-angemi]: https://github.com/luca-angemi
+[@ludeeus]: https://github.com/ludeeus
+[@manuel-jrs]: https://github.com/manuel-jrs
+[@mariuszluciow]: https://github.com/mariuszluciow
+[@mtl010957]: https://github.com/mtl010957
+[@mvn23]: https://github.com/mvn23
+[@mxworm]: https://github.com/mxworm
+[@nickw444]: https://github.com/nickw444
+[@pascal-de-ladurantaye]: https://github.com/pascal-de-ladurantaye
+[@pszafer]: https://github.com/pszafer
+[@quazzie]: https://github.com/quazzie
+[@rohankapoorcom]: https://github.com/rohankapoorcom
+[@rwagoner]: https://github.com/rwagoner
+[@scop]: https://github.com/scop
+[@sgttrs]: https://github.com/sgttrs
+[@simonvanderveldt]: https://github.com/simonvanderveldt
+[@sqldiablo]: https://github.com/sqldiablo
+[@stilllman]: https://github.com/stilllman
+[@syssi]: https://github.com/syssi
+[@terorie]: https://github.com/terorie
+[@thoscut]: https://github.com/thoscut
+[@tmonck]: https://github.com/tmonck
+[@tsvi]: https://github.com/tsvi
+[@vacumet]: https://github.com/vacumet
+[@victorcerutti]: https://github.com/victorcerutti
+[alarm_control_panel.manual docs]: /components/alarm_control_panel.manual/
+[alert docs]: /components/alert/
+[alexa docs]: /components/alexa/
+[august docs]: /components/august/
+[auth docs]: /components/auth/
+[automation.webhook docs]: /docs/automation/trigger/#webhook-trigger
+[axis docs]: /components/axis/
+[binary_sensor.august docs]: /components/binary_sensor.august/
+[binary_sensor.axis docs]: /components/binary_sensor.axis/
+[binary_sensor.deconz docs]: /components/binary_sensor.deconz/
+[binary_sensor.mqtt docs]: /components/binary_sensor.mqtt/
+[binary_sensor.pilight docs]: /components/binary_sensor.pilight/
+[binary_sensor.template docs]: /components/binary_sensor.template/
+[binary_sensor.trend docs]: /components/binary_sensor.trend/
+[binary_sensor.zha docs]: /components/binary_sensor.zha/
+[binary_sensor.zigbee docs]: /components/binary_sensor.zigbee/
+[bloomsky docs]: /components/bloomsky/
+[camera docs]: /components/camera/
+[camera.amcrest docs]: /components/camera.amcrest/
+[camera.arlo docs]: /components/camera.arlo/
+[camera.canary docs]: /components/camera.canary/
+[camera.mjpeg docs]: /components/camera.mjpeg/
+[camera.onvif docs]: /components/camera.onvif/
+[camera.ring docs]: /components/camera.ring/
+[camera.synology docs]: /components/camera.synology/
+[camera.xiaomi docs]: /components/camera.xiaomi/
+[camera.yi docs]: /components/camera.yi/
+[climate.daikin docs]: /components/climate.daikin/
+[climate.generic_thermostat docs]: /components/climate.generic_thermostat/
+[climate.mill docs]: /components/climate.mill/
+[climate.velbus docs]: /components/climate.velbus/
+[climate.vera docs]: /components/climate.vera/
+[cover.deconz docs]: /components/cover.deconz/
+[cover.mqtt docs]: /components/cover.mqtt/
+[deconz docs]: /components/deconz/
+[device_sun_light_trigger docs]: /components/device_sun_light_trigger/
+[device_tracker docs]: /components/device_tracker/
+[dialogflow docs]: /components/dialogflow/
+[doorbird docs]: /components/doorbird/
+[fan.wemo docs]: /components/fan.wemo/
+[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/
+[geo_location docs]: /components/geo_location/
+[google_assistant docs]: /components/google_assistant/
+[greeneye_monitor docs]: /components/greeneye_monitor/
+[hassio docs]: /components/hassio/
+[homematicip_cloud docs]: /components/homematicip_cloud/
+[http docs]: /components/http/
+[ifttt docs]: /components/ifttt/
+[image_processing.microsoft_face_detect docs]: /components/image_processing.microsoft_face_detect/
+[image_processing.microsoft_face_identify docs]: /components/image_processing.microsoft_face_identify/
+[image_processing.opencv docs]: /components/image_processing.opencv/
+[image_processing.tensorflow docs]: /components/image_processing.tensorflow/
+[input_number docs]: /components/input_number/
+[keyboard_remote docs]: /components/keyboard_remote/
+[knx docs]: /components/knx/
+[light.avion docs]: /components/light.avion/
+[light.deconz docs]: /components/light.deconz/
+[light.xiaomi_miio docs]: /components/light.xiaomi_miio/
+[light.yeelight docs]: /components/light.yeelight/
+[lock.august docs]: /components/lock.august/
+[lovelace docs]: /components/lovelace/
+[mailgun docs]: /components/mailgun/
+[media_extractor docs]: /components/media_extractor/
+[media_player.directv docs]: /components/media_player.directv/
+[media_player.dlna_dmr docs]: /components/media_player.dlna_dmr/
+[media_player.onkyo docs]: /components/media_player.onkyo/
+[media_player.samsungtv docs]: /components/media_player.samsungtv/
+[media_player.yamaha docs]: /components/media_player.yamaha/
+[mychevy docs]: /components/mychevy/
+[notify docs]: /components/notify/
+[opentherm_gw docs]: /components/opentherm_gw/
+[openuv docs]: /components/openuv/
+[python_script docs]: /components/python_script/
+[remote.xiaomi_miio docs]: /components/remote.xiaomi_miio/
+[rflink docs]: /components/rflink/
+[ring docs]: /components/ring/
+[route53 docs]: /components/route53/
+[rpi_pfio docs]: /components/rpi_pfio/
+[scene.deconz docs]: /components/scene.deconz/
+[sensor.bom docs]: /components/sensor.bom/
+[sensor.darksky docs]: /components/sensor.darksky/
+[sensor.deconz docs]: /components/sensor.deconz/
+[sensor.dte_energy_bridge docs]: /components/sensor.dte_energy_bridge/
+[sensor.greeneye_monitor_current docs]: /components/sensor.greeneye_monitor_current/
+[sensor.greeneye_monitor_pulse docs]: /components/sensor.greeneye_monitor_pulse/
+[sensor.greeneye_monitor_temperature docs]: /components/sensor.greeneye_monitor_temperature/
+[sensor.igd docs]: /components/sensor.igd/
+[sensor.jewish_calendar docs]: /components/sensor.jewish_calendar/
+[sensor.logi_circle docs]: /components/sensor.logi_circle/
+[sensor.meteo_france docs]: /components/sensor.meteo_france/
+[sensor.openweathermap docs]: /components/sensor.openweathermap/
+[sensor.pi_hole docs]: /components/sensor.pi_hole/
+[sensor.pollen docs]: /components/sensor.pollen/
+[sensor.rmvtransport docs]: /components/sensor.rmvtransport/
+[sensor.rtorrent docs]: /components/sensor.rtorrent/
+[sensor.sense docs]: /components/sensor.sense/
+[sensor.sma docs]: /components/sensor.sma/
+[sensor.sql docs]: /components/sensor.sql/
+[sensor.systemmonitor docs]: /components/sensor.systemmonitor/
+[sensor.version docs]: /components/sensor.version/
+[sensor.wunderground docs]: /components/sensor.wunderground/
+[sensor.xiaomi_miio docs]: /components/sensor.xiaomi_miio/
+[sensor.yahoo_finance docs]: /components/sensor.yahoo_finance/
+[simplisafe docs]: /components/simplisafe/
+[sun docs]: /components/sun/
+[switch.deconz docs]: /components/switch.deconz/
+[switch.dlink docs]: /components/switch.dlink/
+[switch.doorbird docs]: /components/switch.doorbird/
+[switch.flux docs]: /components/switch.flux/
+[switch.unifi docs]: /components/switch.unifi/
+[switch.xiaomi_aqara docs]: /components/switch.xiaomi_aqara/
+[switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/
+[switch.zigbee docs]: /components/switch.zigbee/
+[telegram_bot docs]: /components/telegram_bot/
+[tts docs]: /components/tts/
+[twilio docs]: /components/twilio/
+[updater docs]: /components/updater/
+[upnp docs]: /components/upnp/
+[vacuum.mqtt docs]: /components/vacuum.mqtt/
+[vacuum.roomba docs]: /components/vacuum.roomba/
+[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/
+[velbus docs]: /components/velbus/
+[weather.openweathermap docs]: /components/weather.openweathermap/
+[websocket_api docs]: /components/websocket_api/
+[wemo docs]: /components/wemo/
+[zha docs]: /components/zha/
+[zigbee docs]: /components/zigbee/
+[zwave docs]: /components/zwave/
From 72b4206dc66bc79a768978887452f916d6013cb8 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 3 Nov 2018 13:57:43 +0100
Subject: [PATCH 02/58] Add link to frontend release notes
---
source/_posts/2018-11-08-release-82.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
index dc62d064274..80cb7a35fcb 100644
--- a/source/_posts/2018-11-08-release-82.markdown
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -15,6 +15,8 @@ og_image: /images/blog/2018-11-release-82/components.png
Alpha edit mode for Lovelace.
+Frontend release notes are here: https://github.com/home-assistant/home-assistant-polymer/pull/1974
+
## {% linkable_title New Platforms %}
- Add device tracking for the BT Smart Hub router ([@jxwolstenholme] - [#17158]) ([device_tracker docs]) (new-platform)
From aded48823d2e52bafd87597d5da5bbb8fa26eb66 Mon Sep 17 00:00:00 2001
From: Daniel <44697375+azrarel783@users.noreply.github.com>
Date: Wed, 7 Nov 2018 09:23:27 +0100
Subject: [PATCH 03/58] Update light.deconz.markdown (#7341)
I am using 3 Milliskin lights and one A19 light from Philips all controlled by Busch Jaeger ZigBee light link equipment. Works fine for me. Thought it could be nice to have this in the docs.
---
source/_components/light.deconz.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_components/light.deconz.markdown b/source/_components/light.deconz.markdown
index 8bafa152397..f8949b0432b 100644
--- a/source/_components/light.deconz.markdown
+++ b/source/_components/light.deconz.markdown
@@ -27,3 +27,5 @@ The `entity_id` names will be `light.device_name`, where `device_name` is define
- OSRAM Gardenpole RGBW
- Philips Hue White A19
- Philips Hue White Ambiance A19
+- Philips Hue Hue White ambiance Milliskin (recessed spotlight) LTW013
+- Busch Jaeger ZigBee Light Link univ. relai (6711 U) with ZigBee Light Link control element 6735-84
From d9ff3195115e4b300fced7f3e98ff05386e27058 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Wed, 7 Nov 2018 09:31:25 +0100
Subject: [PATCH 04/58] Changed on/off to true/false (#7335)
---
source/_components/group.markdown | 20 ++++++++++----------
source/_components/scene.markdown | 8 ++++----
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/source/_components/group.markdown b/source/_components/group.markdown
index 81098bd5765..30d3bb01485 100644
--- a/source/_components/group.markdown
+++ b/source/_components/group.markdown
@@ -12,7 +12,7 @@ ha_category: Organization
ha_qa_scale: internal
---
-Groups allow the user to combine multiple entities into one. A group can be promoted to a **view** by setting `view: yes` under the group definition. This will make the group available as a new tab in the frontend.
+Groups allow the user to combine multiple entities into one. A group can be promoted to a **view** by setting `view: true` under the group definition. This will make the group available as a new tab in the frontend.
Check the **Set State**
page from the **Developer Tools** and browse the **Current entities:** listing for all available entities.
@@ -22,7 +22,7 @@ By default, every group appears in the HOME tab. If you create a group `default_
# Example configuration.yaml entry
group:
default_view:
- view: yes
+ view: true
icon: mdi:home
entities:
- group.kitchen
@@ -35,7 +35,7 @@ group:
upstairs:
name: Kids
icon: mdi:account-multiple
- view: yes
+ view: true
entities:
- input_boolean.notify_home
- camera.demo_camera
@@ -43,13 +43,13 @@ group:
- group.garden
climate:
name: Climate
- view: no
+ view: false
entities:
- sensor.bedroom_temp
- sensor.porch_temp
awesome_people:
name: Awesome People
- view: no
+ view: false
entities:
- device_tracker.dad_smith
- device_tracker.mom_smith
@@ -78,7 +78,7 @@ entities:
type: list
all:
description: Set this to `true` if the group state should only turn *on* if **all** grouped entities are *on*.
- required: false
+ required: false
type: boolean
{% endconfiguration %}
@@ -89,7 +89,7 @@ Example of groups shown as views in the frontend.
If all entities in a group are switches or lights then Home Assistant adds a switch at the top of the card that turns them all on/off at once. If you want to hide this switch, set `control` to `hidden`.
-You can create views (tabs) that contain other groups (but not other groups which are marked as `view: yes`).
+You can create views (tabs) that contain other groups (but not other groups which are marked as `view: true`).
Notice in the example below that in order to refer to the group "Living Room", you use `group.living_room` (lowercase and spaces replaced with underscores).
```yaml
@@ -101,7 +101,7 @@ Notice in the example below that in order to refer to the group "Living Room", y
- binary_sensor.motion_living
Bedroom: light.light_bedroom, switch.sleeping
Rooms:
- view: yes
+ view: true
name: Rooms
entities:
- group.living_room
@@ -132,7 +132,7 @@ customize:
group:
automation_view:
name: Automation
- view: yes
+ view: true
entities:
- group.all_automations
- group.all_scripts
@@ -155,7 +155,7 @@ customize:
group:
automation_view:
name: Automation
- view: yes
+ view: true
entities:
- group.all_automations
- group.all_scripts
diff --git a/source/_components/scene.markdown b/source/_components/scene.markdown
index f0bb6a2b479..69e07dea785 100644
--- a/source/_components/scene.markdown
+++ b/source/_components/scene.markdown
@@ -19,17 +19,17 @@ You can create scenes that capture the states you want certain entities to be. F
scene:
- name: Romantic
entities:
- light.tv_back_light: on
+ light.tv_back_light: true
light.ceiling:
- state: on
+ state: true
xy_color: [0.33, 0.66]
brightness: 200
- name: Movies
entities:
light.tv_back_light:
- state: on
+ state: true
brightness: 100
- light.ceiling: off
+ light.ceiling: false
media_player.sony_bravia_tv:
source: HDMI 1
```
From 4e9efe20b9e34cb77620f71c60e771b134bc7344 Mon Sep 17 00:00:00 2001
From: Courtenay
Date: Wed, 7 Nov 2018 00:34:14 -0800
Subject: [PATCH 05/58] add basic "only what's needed" example (#7327)
* add basic "only what's needed" example
* Move the example up
---
source/lovelace/index.markdown | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown
index e48aa75e1ff..674a1391d70 100644
--- a/source/lovelace/index.markdown
+++ b/source/lovelace/index.markdown
@@ -48,6 +48,25 @@ Visual comparison of old configuration versus new configuration
Create a new file `/ui-lovelace.yaml` and add the following content. Adjust the entity names to entities that exist in your Home Assistant installation.
+As a super minimal example, here's the bare minimum you will need for this to work:
+
+```yaml
+title: My Awesome Home
+views:
+ # View tab title.
+ - title: Example
+ panel: true
+ # Makes the first card fill the view
+ cards:
+ # The markdown card will render markdown text.
+ - type: markdown
+ title: Lovelace
+ content: >
+ Welcome to your **Lovelace UI**.
+```
+
+A slightly more advanced example shows additional elements which can be used to customize your frontend.
+
```yaml
title: My Awesome Home
# Include external resources
From 3ed12bb90847a1b3df0eb6d7af6c7a154f726353 Mon Sep 17 00:00:00 2001
From: Josh Cooper
Date: Wed, 7 Nov 2018 08:36:55 +0000
Subject: [PATCH 06/58] Made clear that the router is not a IOT devices (#7226)
* Made clear that this is not a IOT device
Change display title... to include device tracking.
Added section with bullet points indicating where the bulbs and switches are located.
* italics on the word not
* rename title
title to be named TP-Link Router (Presence Detection)
* recommendation from thomas
---
source/_components/device_tracker.tplink.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown
index f342e447eaa..0e8a14dc09f 100644
--- a/source/_components/device_tracker.tplink.markdown
+++ b/source/_components/device_tracker.tplink.markdown
@@ -1,6 +1,6 @@
---
layout: page
-title: "TP-Link"
+title: "TP-Link Router"
description: "Instructions on how to integrate TP-Link routers into Home Assistant."
date: 2015-06-22 10:30
sidebar: true
@@ -13,7 +13,7 @@ ha_release: pre 0.7
---
-The `tplink` platform allows you to detect presence by looking at connected devices to a [TP-Link](https://www.tp-link.com) device.
+The `tplink` platform allows you to detect presence by looking at connected devices to a [TP-Link](https://www.tp-link.com) router.
Currently supported devices includes the following:
From f824c1cbd79df92f68c9198ac20d8c23ba8ccb40 Mon Sep 17 00:00:00 2001
From: Johann Kellerman
Date: Wed, 7 Nov 2018 10:37:33 +0200
Subject: [PATCH 07/58] Update qwikswitch.markdown (#7206)
* Update qwikswitch.markdown
New style configuration variables #6385
* Update qwikswitch.markdown
---
source/_components/qwikswitch.markdown | 78 +++++++++++++++++++-------
1 file changed, 57 insertions(+), 21 deletions(-)
diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown
index e915be3979f..b176681d03e 100644
--- a/source/_components/qwikswitch.markdown
+++ b/source/_components/qwikswitch.markdown
@@ -17,7 +17,7 @@ The `qwikswitch` component is the main component to integrate various [QwikSwitc
The `qwikswitch` component discovers all devices from QS Mobile. Currently, Relays and LED dimmers are discovered in Home Assistant. Relay devices are [lights](/components/light.qwikswitch/) by default, and can be configured as [switches](/components/switch.qwikswitch/).
-Example configuration:
+{% linkable_title Configuration %}
```yaml
# Example configuration.yaml entry
@@ -25,13 +25,61 @@ qwikswitch:
url: http://127.0.0.1:2020
```
-Configuration variables:
-
-- **url** (*Required*): The URL including the port of your QwikSwitch hub.
-- **dimmer_adjust** (*Optional*): A decimal value to adjust the brightness of the dimmer exponentially. Increasing this value allows dimmers that reach full brightness with low values in QS Mobile to appear more linear in Home Assistant. Recommended values between 1 and 2 and the default is 1.
-- **button_events** (*Optional*): A comma-separated list of button types that will generate events. See [QwikSwitch Events] for detail.
-- **switches** (*Optional*): A list of device QS_id's that should be switches, and not lights (i.e. `['@0dev01', '@0dev02']`)
-- **sensors** (*Optional*): A dictionary of sensors. In the format of {entity_id: QS_id}. (i.e. `{door_sensor: '@0dev03'}`)
+{% configuration %}
+url:
+ description: The URL including the port of your QwikSwitch hub.
+ required: true
+ type: string
+dimmer_adjust:
+ description: A decimal value to adjust the brightness of the dimmer exponentially. Increasing this value allows dimmers that reach full brightness with low values in QS Mobile to appear more linear in Home Assistant. Recommended values between 1 and 2 and the default is 1.
+ required: false
+ type: float
+ default: 1
+button_events:
+ description: A comma-separated list of button types that will generate events. See [QwikSwitch Events] for detail.
+ required: false
+ default: TOGGLE,SCENE EXE,LEVEL
+ type: string
+switches:
+ description: A list of device QS_id's that should be switches, and not lights (i.e. `['@0dev01', '@0dev02']`)
+ required: false
+ type: list
+sensors:
+ description: A dictionary of sensors.
+ required: false
+ type: list
+ keys:
+ name:
+ description: The sensor name from which the entity_id will be derived.
+ required: true
+ id:
+ description: A QS_Id
+ required: true
+ type: string
+ type:
+ description: |
+ The Qwikswitch sensor type. These could include:
+ - imod (binary_sensor, up to 6 channels)
+ - door (binary_sensor, single channel)
+ - qwikcord (Channel 1 = CTavg, Channel 2 = CTsum)
+ required: true
+ type: string
+ channel:
+ description: The channel of interest. Refer to type above.
+ required: false
+ default: 1
+ type: int
+ invert:
+ description: Invert the open/close state. Only applicable to binary_sensors
+ required: false
+ default: false
+ type: string
+ class:
+ description: The [class](https://www.home-assistant.io/components/binary_sensor) or binary_sensor. Only applicable to binary_sensors.
+ required: false
+ default: door
+ type: string
+{% endconfiguration %}
### {% linkable_title QwikSwitch Events %}
@@ -60,19 +108,7 @@ On some QS Mobile servers button events are only generated for switches added to
### {% linkable_title Qwikswitch Sensors %}
-The sensor configuration is a list of sensors. Depending on the type, it will be a sensor or binary_sensor. Each sensor is configured with the following parameters:
-
-- **name** (*Required*): The sensor name from which the entity_id will be derived.
-- **id** (*Required*): A QS_Id
-- **type** (*Required*): The Qwikswitch sensor type. These could include:
- - imod (binary_sensor, up to 6 channels)
- - door (binary_sensor, single channel)
- - qwikcord (Channel 1 = CTavg, Channel 2 = CTsum)
-- **channel** (*Optional, default=1*): The channel of interest. Refer to type above.
-
-The following parameters are only applicabe to binary_sensors (i.e. door/imod).
-- **invert** (*Optional, default=False): Invert the open/close state.
-- **class** (*Optional, default=door): The [class](https://www.home-assistant.io/components/binary_sensor) or binary_sensor.
+The sensor configuration is a list of sensors. Depending on the type of sensor, it will be a sensor or binary_sensor.
Example sensor configuration:
From 32c6a303eb7fcaa66009ece0f382a1adf86b43da Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Wed, 7 Nov 2018 09:38:51 +0100
Subject: [PATCH 08/58] Remove incorrect LL FAQ entry (#7414)
---
source/lovelace/index.markdown | 6 ------
1 file changed, 6 deletions(-)
diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown
index 674a1391d70..a0c04bf77ea 100644
--- a/source/lovelace/index.markdown
+++ b/source/lovelace/index.markdown
@@ -174,9 +174,3 @@ frontend:
Given examples refer to `/local/example_image.jpg`. That means you should have `www` directory next to your HA `configuration.yaml`. An image kept in `HA_configuration_dir/www/example_image.jpg` will be shown after refreshing Lovelace page.
Restart Home Assistant after creating the `www` directory. Otherwise, HA will not know that you created this directory.
-
-### {% linkable_title My `ui-lovelace.yaml` file suddenly has ID's added to all cards and views! %}
-
-Since version 0.81 we started preparing for the ability to edit you Lovelace UI from the UI itself. To be able to do this every view and card should have a unique ID. If your cards or views do not have an ID, Home Assistant will add a random one. You can edit the ID, the only restriction is that it is unique.
-
-If you don't want Home Assistant to write to your `ui-lovelace.yaml` file, make sure all your views and cards have an ID, then Home Assistant will not touch your file.
From 73f93834d1e005dd5c952272081c4bd1cbf6b9a5 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:02:56 +0100
Subject: [PATCH 09/58] Update google_assistant add-on component configuration
(#7432)
---
source/_addons/google_assistant.markdown | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/source/_addons/google_assistant.markdown b/source/_addons/google_assistant.markdown
index 2c8e0adba2e..6a629336211 100644
--- a/source/_addons/google_assistant.markdown
+++ b/source/_addons/google_assistant.markdown
@@ -68,10 +68,14 @@ Configuration example that uses the USB microphone and the built-in headset audi
}
```
-Configuration variables:
-
-- **mic**: This is the hardware address of your microphone. Look at the add-on output
-- **speaker**: This is the hardware address of your speakers. Look at the add-on output
+{% configuration %}
+mic:
+ description: This is the hardware address of your microphone. Look at the add-on output.
+ type: float
+speaker:
+ description: This is the hardware address of your speakers. Look at the add-on output.
+ type: float
+{% endconfiguration %}
### {% linkable_title Home Assistant configuration %}
From 8bb9f77ec3631d650a9b3277af285bbea046e6eb Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:04:01 +0100
Subject: [PATCH 10/58] Update check_config add-on component configuration
(#7430)
---
source/_addons/check_config.markdown | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/source/_addons/check_config.markdown b/source/_addons/check_config.markdown
index 1ef8abd754a..a11232b5ea3 100644
--- a/source/_addons/check_config.markdown
+++ b/source/_addons/check_config.markdown
@@ -17,6 +17,9 @@ You can use this add-on to check whether your configuration files are valid agai
}
```
-Configuration variables:
-
-- **version** (*Required*): Version of Home Assistant that you plan to install.
+{% configuration %}
+version:
+ description: Version of Home Assistant that you plan to install.
+ required: true
+ type: string
+{% endconfiguration %}
From ca0379872a3c1f65880a76a0916d648c5878e750 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:05:57 +0100
Subject: [PATCH 11/58] Update message_bird notify component configuration
(#7428)
---
.../_components/notify.message_bird.markdown | 21 ++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/source/_components/notify.message_bird.markdown b/source/_components/notify.message_bird.markdown
index 2234a86310e..24672b77a64 100644
--- a/source/_components/notify.message_bird.markdown
+++ b/source/_components/notify.message_bird.markdown
@@ -24,11 +24,22 @@ notify:
api_key: YOUR_API_KEY
```
-Configuration variables:
-
-- **api_key** (*Required*): Enter the API key for MessageBird. Go to https://www.messagebird.com/ to retrieve your API key.
-- **name** (*Optional*): 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`.
-- **sender** (*Optional*): Setting the optional parameter `sender`. This will be the sender of the SMS. It may be either a telephone number (e.g., `+4915112345678`) or a text with a maximum length of 11 characters. Defaults to `HA`.
+{% configuration %}
+api_key:
+ description: "Enter the API key for MessageBird. Go to https://www.messagebird.com/ to retrieve your API key."
+ required: true
+ type: string
+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
+ default: notify
+ type: string
+sender:
+ description: Setting the optional parameter `sender`. This will be the sender of the SMS. It may be either a telephone number (e.g., `+4915112345678`) or a text with a maximum length of 11 characters.
+ required: false
+ default: HA
+ type: string
+{% endconfiguration %}
### {% linkable_title Usage %}
From 411266e4700c49fe315f2f1e7ff23a7a0e558d45 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:07:37 +0100
Subject: [PATCH 12/58] Update nfandroidtv notify component configuration
(#7425)
---
.../_components/notify.nfandroidtv.markdown | 60 +++++++++++++++----
1 file changed, 48 insertions(+), 12 deletions(-)
diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown
index 2933ca01789..3db2f5fca1c 100644
--- a/source/_components/notify.nfandroidtv.markdown
+++ b/source/_components/notify.nfandroidtv.markdown
@@ -12,7 +12,6 @@ ha_category: Notifications
ha_release: 0.32
---
-
Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). You can use this plarform to send notifications to your Android TV device. An overlay with the message content will appear for a configurable amount of seconds and then disapper again. Sending images (e.g., security cam) is supported too.
The notifications are in the global scope of your Android TV device. They will be displayed regardless of which application is running.
@@ -29,16 +28,52 @@ notify:
host: 192.168.1.12
```
-Configuration variables:
-
-- **name** (*Optional*): 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`.
-- **host** (*Required*): IP address of the Android TV / FireTV device.
-- **duration** (*Optional*): The duration in seconds for which the notification will be displayed. Default is 5 seconds.
-- **fontsize** (*Optional*): Has to be one of: small, medium (default), large, max
-- **position** (*Optional*): Has to be one of: bottom-right (default), bottom-left, top-right, top-left, center
-- **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink
-- **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100%
-- **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g., Netflix), this may stop playback.
+{% configuration %}
+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
+ default: notify
+ type: string
+host:
+ description: IP address of the Android TV / FireTV device.
+ required: true
+ type: string
+duration:
+ description: The duration in seconds for which the notification will be displayed.
+ required: false
+ default: 5
+ type: integer
+fontsize:
+ description: "Has to be one of: `small`, `medium`, `large` or `max`."
+ required: false
+ default: medium
+ type: string
+position:
+ description: "Has to be one of: `bottom-right`, `bottom-left`, `top-right`, `top-left` or `center`."
+ required: false
+ default: bottom-right
+ type: string
+color:
+ description: "Has to be one of: `grey`, `black`, `indigo`, `green`, `red`, `cyan`, `teal`, `amber` or `pink`."
+ required: false
+ default: grey
+ type: string
+transparency:
+ description: "Has to be one of: `0%`, `25%`, `50%`, `75%` or `100%`."
+ required: false
+ default: 25%
+ type: string
+timeout:
+ description: The timeout in seconds.
+ required: false
+ default: 5
+ type: integer
+interrupt:
+ description: If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g., Netflix), this may stop playback.
+ required: false
+ default: false
+ type: boolean
+{% endconfiguration %}
The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service.
This is a fully customized JSON you can use to test how the final notification will look like:
@@ -65,7 +100,7 @@ The following attributes can be placed inside `data` to send images.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `file` | yes | Groups the attributes for file upload. If present, either `url` or `path` have to be provided.
-| `path ` | yes | Local path of an image file. Is placed inside `file`.
+| `path` | yes | Local path of an image file. Is placed inside `file`.
| `url` | yes | URL of an image file. Is placed inside `file`.
| `username` | yes | Username if the url requires authentication. Is placed inside `file`.
| `password` | yes | Password if the url requires authentication. Is placed inside `file`.
@@ -101,4 +136,5 @@ Example for posting file from local path:
}
}
```
+
Please note that `path` is validated against the `whitelist_external_dirs` in the `configuration.yaml`.
From 699d9af012af473647a2cc0ba65b44262ce57163 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:08:11 +0100
Subject: [PATCH 13/58] Update panel_custom component configuration (#7423)
---
source/_components/panel_custom.markdown | 57 +++++++++++++++++++-----
1 file changed, 45 insertions(+), 12 deletions(-)
diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown
index 34f8ec63e2f..0199458e5ba 100644
--- a/source/_components/panel_custom.markdown
+++ b/source/_components/panel_custom.markdown
@@ -33,15 +33,48 @@ panel_custom:
Store your custom panels in `/www` to make them available in the frontend at the path `/local`.
-Configuration variables:
-
-- **name** (*Required*): Name of the web component that renders your panel.
-- **sidebar_title** (*Optional*): Friendly title for the panel in the sidebar. Omitting it means no sidebar entry (but still accessible through the URL).
-- **sidebar_icon** (*Optional*): Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
-- **url_path** (*Optional*): The URL your panel will be available on in the frontend. If omitted will default to the panel name.
-- **js_url** (*Required*): The URL that contains the JavaScript of your panel. This is exclusive to `module_url` and `webcomponent_path`.
-- **module_url** (*Optional*): The URL that contains the JavaScript module of your panel. Loaded as a JavaScript module instead of a script. This is exclusive to `js_url` and `webcomponent_path`.
-- **config** (*Optional*): Configuration to be passed into your web component when being instantiated.
-- **embed_iframe** (*Optional*): Set to `true` to embed panel in iframe. This is necessary if the panel is using the React framework or if it contains conflicting web components.
-- **trust_external_script** (*Optional*): By default the user has to confirm before loading a script from an external source. Setting this to `true` will omit this confirmation.
-- **webcomponent_path** (*Optional* *DEPRECATED*): The HTML path to your component. If omitted will default to `/panels/.html` This is exclusive to `js_url` and `module_url`.
+{% configuration %}
+name:
+ description: Name of the web component that renders your panel.
+ required: true
+ type: string
+sidebar_title:
+ description: Friendly title for the panel in the sidebar. Omitting it means no sidebar entry (but still accessible through the URL).
+ required: false
+ type: string
+sidebar_icon:
+ description: Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
+ required: false
+ default: "mdi:bookmark"
+ type: icon
+url_path:
+ description: The URL your panel will be available on in the frontend. If omitted will default to the panel name.
+ required: false
+ type: string
+js_url:
+ description: The URL that contains the JavaScript of your panel. This is exclusive to `module_url` and `webcomponent_path`.
+ required: exclusive
+ type: string
+module_url:
+ description: The URL that contains the JavaScript module of your panel. Loaded as a JavaScript module instead of a script. This is exclusive to `js_url` and `webcomponent_path`.
+ required: exclusive
+ type: string
+config:
+ description: Configuration to be passed into your web component when being instantiated.
+ required: false
+ type: list
+embed_iframe:
+ description: Set to `true` to embed panel in iframe. This is necessary if the panel is using the React framework or if it contains conflicting web components.
+ required: false
+ default: false
+ type: boolean
+trust_external_script:
+ description: By default the user has to confirm before loading a script from an external source. Setting this to `true` will omit this confirmation.
+ required: false
+ default: false
+ type: boolean
+webcomponent_path:
+ description: The HTML path to your component. If omitted will default to `/panels/.html` This is exclusive to `js_url` and `module_url`.
+ required: exclusive *DEPRECATED*
+ type: string
+{% endconfiguration %}
From 257a179bf2b9e8a6adfc43323135ca97fee5ba5e Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:10:42 +0100
Subject: [PATCH 14/58] Update prometheus component configuration (#7418)
---
source/_components/prometheus.markdown | 59 +++++++++++++++++++-------
1 file changed, 43 insertions(+), 16 deletions(-)
diff --git a/source/_components/prometheus.markdown b/source/_components/prometheus.markdown
index ea36b0278df..f6e09c07ba3 100644
--- a/source/_components/prometheus.markdown
+++ b/source/_components/prometheus.markdown
@@ -21,16 +21,43 @@ To use the `prometheus` component in your installation, add the following to you
prometheus:
```
-Configuration variables:
-
-- **namespace** (*Optional*): The "namespace" that will be assigned to all the Prometheus metrics. This is the prefix of the metric name. E.g., having `myhass` as the namespace will cause the device tracker metrics to be `myhass_device_tracker_state`, the switch metrics to be `myhass_switch_state` and so on. The default is to not add any prefix to the metrics name. (available in version 0.73.0 and later)
-- **filter** (*Optional*): Filtering directives for the components which should be included or excluded from recording.
- - **exclude** (*Optional*): Excluded from recording.
- - **entities** (*Optional*): The list of entity ids to be excluded from recording.
- - **domains** (*Optional*): The list of domains to be excluded from recording.
- - **include** (*Optional*): Included in recordings. If set, all other entities will not be recorded. Values set by the **exclude** option will prevail.
- - **entities** (*Optional*): The list of entity ids to be included from recordings.
- - **domains** (*Optional*): The list of domains to be included from recordings.
+{% configuration %}
+namespace:
+ description: The "namespace" that will be assigned to all the Prometheus metrics. This is the prefix of the metric name. E.g., having `myhass` as the namespace will cause the device tracker metrics to be `myhass_device_tracker_state`, the switch metrics to be `myhass_switch_state` and so on. The default is to not add any prefix to the metrics name. (available in version 0.73.0 and later)
+ required: false
+ type: string
+filter:
+ description: Filtering directives for the components which should be included or excluded from recording.
+ required: false
+ type: list
+ keys:
+ exclude:
+ description: Excluded from recording.
+ required: false
+ type: list
+ keys:
+ entities:
+ description: The list of entity ids to be excluded from recording.
+ required: false
+ type: list
+ domains:
+ description: The list of domains to be excluded from recording.
+ required: false
+ type: list
+ include:
+ description: Included in recordings. If set, all other entities will not be recorded. Values set by the **exclude** option will prevail.
+ required: false
+ type: list
+ keys:
+ entities:
+ description: The list of entity ids to be included from recordings.
+ required: false
+ type: list
+ domains:
+ description: The list of domains to be included from recordings.
+ required: false
+ type: list
+{% endconfiguration %}
You can then configure Prometheus to fetch metrics from Home Assistant by adding to its `scrape_configs` configuration.
@@ -39,14 +66,14 @@ You can then configure Prometheus to fetch metrics from Home Assistant by adding
- job_name: 'hass'
scrape_interval: 60s
metrics_path: /api/prometheus
-
+
# Legacy api password
params:
api_password: ['PASSWORD']
-
+
# Long-Lived Access Token
- bearer_token: 'your.longlived.token
-
+ bearer_token: 'your.longlived.token'
+
scheme: https
static_configs:
- targets: ['HOSTNAME:8123']
@@ -54,7 +81,7 @@ You can then configure Prometheus to fetch metrics from Home Assistant by adding
When looking into the metrics on the Prometheus side, there will be:
- - All Home Assistant domains, which can be easily found through the common **namespace** prefix, if defined.
- - The [client library](https://github.com/prometheus/client_python) provided metrics, which are a bunch of **process_\*** and also a single pseudo-metric **python_info** which contains (not as value but as labels) information about the Python version of the client, i.e., the Home Assistant Python interpreter.
+- All Home Assistant domains, which can be easily found through the common **namespace** prefix, if defined.
+- The [client library](https://github.com/prometheus/client_python) provided metrics, which are a bunch of **process_\*** and also a single pseudo-metric **python_info** which contains (not as value but as labels) information about the Python version of the client, i.e., the Home Assistant Python interpreter.
Typically, you will only be interested in the first set of metrics.
From 0699356655f1360212613b829c756f3c0d34e280 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:24:40 +0100
Subject: [PATCH 15/58] Update rpi_gpio_pwm light component configuration
(#7433)
* Update rpi_gpio_pwm light component configuration
* Remove period
---
.../_components/light.rpi_gpio_pwm.markdown | 42 +++++++++++++++----
1 file changed, 33 insertions(+), 9 deletions(-)
diff --git a/source/_components/light.rpi_gpio_pwm.markdown b/source/_components/light.rpi_gpio_pwm.markdown
index d292b213a54..6d0fe793249 100644
--- a/source/_components/light.rpi_gpio_pwm.markdown
+++ b/source/_components/light.rpi_gpio_pwm.markdown
@@ -33,15 +33,39 @@ light:
type: simple
```
-Configuration variables:
-
-- **leds** array (*Required*): Can contain multiple LEDs.
- - **name** (*Required*): The name of the LED.
- - **driver** (*Required*): The driver which controls the LED. Choose either `gpio` or `pca9685`.
- - **pins** (*Required*): The pins connected to the LED as a list.. The order of pins is determined by the specified type.
- - **type** (*Required*): The type of LED. Choose either `rgb`, `rgbw` or `simple`.
- - **freq** (*Optional*): The PWM frequency. (Default: `200`)
- - **address** (*Optional*): The address of the PCA9685 driver. (Default: `0x40`)
+{% configuration %}
+leds:
+ description: Can contain multiple LEDs.
+ required: true
+ type: list
+ keys:
+ name:
+ description: The name of the LED.
+ required: true
+ type: string
+ driver:
+ description: The driver which controls the LED. Choose either `gpio` or `pca9685`.
+ required: true
+ type: string
+ pins:
+ description: The pins connected to the LED as a list. The order of pins is determined by the specified type.
+ required: true
+ type: [list, integer]
+ type:
+ description: The type of LED. Choose either `rgb`, `rgbw` or `simple`.
+ required: true
+ type: string
+ freq:
+ description: The PWM frequency.
+ required: false
+ default: 200
+ type: integer
+ address:
+ description: The address of the PCA9685 driver.
+ required: false
+ default: 0x40
+ type: string
+{% endconfiguration %}
## {% linkable_title Examples %}
From 0bcf8824ec3ed49de6e0cf21a1c7234f1627a601 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:24:55 +0100
Subject: [PATCH 16/58] Update dhcp_server add-on component configuration
(#7431)
* Update dhcp_server add-on component configuration
* Minor changes
---
source/_addons/dhcp_server.markdown | 76 +++++++++++++++++++++++------
1 file changed, 60 insertions(+), 16 deletions(-)
diff --git a/source/_addons/dhcp_server.markdown b/source/_addons/dhcp_server.markdown
index 1f0df69183c..c35d2fc201c 100644
--- a/source/_addons/dhcp_server.markdown
+++ b/source/_addons/dhcp_server.markdown
@@ -36,19 +36,63 @@ Create a simple DHCP server for your network and allow setting fixed IPs for dev
}
```
-Configuration variables:
-
-- **domain** (*Required*): Your network domain name.
-- **dns** (*Required*): A list of DNS server for your network.
-- **networks** (*Optional*): A list of network to provide DHCP.
- - **subnet** (*Required*): Your network schema.
- - **netmask** (*Required*): Your network netmask.
- - **range_start** (*Required*): Start address for dhcp leases.
- - **range_end** (*Required*): End address for dhcp leases.
- - **broadcast** (*Required*): Network broadcast address.
- - **gateway** (*Required*): A List of gateways.
- - **interface** (*Required*): Interface on that will be listen. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection.
-- **hosts** (*Optional*): A list of fixed IPs for devices.
- - **name** (*Required*): Name/hostname of your device.
- - **mac** (*Required*): Mac address of your device.
- - **ip** (*Required*): Fix ip address for device.
+{% configuration %}
+domain:
+ description: Your network domain name.
+ required: true
+ type: string
+dns:
+ description: A list of DNS server for your network.
+ required: true
+ type: list
+networks:
+ description: A list of network to provide DHCP.
+ required: false
+ type: list
+ keys:
+ subnet:
+ description: Your network schema.
+ required: true
+ type: string
+ netmask:
+ description: Your network netmask.
+ required: true
+ type: string
+ range_start:
+ description: Start address for DHCP leases.
+ required: true
+ type: string
+ range_end:
+ description: End address for DHCP leases.
+ required: true
+ type: string
+ broadcast:
+ description: Network broadcast address.
+ required: true
+ type: string
+ gateway:
+ description: A List of gateways.
+ required: true
+ type: list
+ interface:
+ description: Interface on that will be listen. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection.
+ required: true
+ type: string
+hosts:
+ description: A list of fixed IPs for devices.
+ required: false
+ type: list
+ keys:
+ name:
+ description: Name/hostname of your device.
+ required: true
+ type: string
+ mac:
+ description: Mac address of your device.
+ required: true
+ type: string
+ ip:
+ description: Fix ip address for device.
+ required: true
+ type: string
+{% endconfiguration %}
From 1c1dbd25cb668ae45526a2825e3ce8c5fff21fd9 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:25:11 +0100
Subject: [PATCH 17/58] Update group notify component configuration (#7429)
* Update group notify component configuration
* Minor changes
---
source/_components/notify.group.markdown | 25 ++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown
index 943eb26961b..30464666bf6 100644
--- a/source/_components/notify.group.markdown
+++ b/source/_components/notify.group.markdown
@@ -29,9 +29,22 @@ notify:
- service: html5_nexus
```
-Configuration variables:
-
-- **name** (*Required*): Setting the parameter `name` sets the name of the group.
-- **services** (*Required*): A list of all the services to be included in the group.
- - **service** (*Required*): The service part of an entity ID, i.e. if you use `notify.html5` normally, just put `html5`. Note that you must put everything in lower case here. Although you might have capitals written in the actual notification services!
- - **data** (*Optional*): A dictionary containing parameters to add to all notify payloads. This can be anything that is valid to use in a payload, such as `data`, `message`, `target`, `title`.
+{% configuration %}
+name:
+ description: Setting the parameter `name` sets the name of the group.
+ required: true
+ type: string
+services:
+ description: A list of all the services to be included in the group.
+ required: true
+ type: list
+ keys:
+ service:
+ description: The service part of an entity ID, e.g. if you use `notify.html5` normally, just put `html5`. Note that you must put everything in lower case here. Although you might have capitals written in the actual notification services!
+ required: true
+ type: string
+ data:
+ description: A dictionary containing parameters to add to all notify payloads. This can be anything that is valid to use in a payload, such as `data`, `message`, `target` or `title`.
+ required: false
+ type: string
+{% endconfiguration %}
From f85740dfd85267a9417f32ee651e339c10a439b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20M=C3=BCller?=
Date: Thu, 8 Nov 2018 09:25:43 +0100
Subject: [PATCH 18/58] Change Reserve Proxy setup with DSM 6.2.1. (#7426)
* Change Reserve Proxy setup with DSM 6.2.1.
Synology made it a lot easier to use a websocket in their reverse proxy. It's not necessary anymore to log in to ssh so it should be much saver and easier to setup.
* Remove formatting
---
source/_docs/ecosystem/synology.markdown | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/source/_docs/ecosystem/synology.markdown b/source/_docs/ecosystem/synology.markdown
index ba2c69f04ae..f9864c8d79d 100644
--- a/source/_docs/ecosystem/synology.markdown
+++ b/source/_docs/ecosystem/synology.markdown
@@ -12,6 +12,16 @@ redirect_from: /ecosystem/synology/
Synology NAS are the perfect companion to running Home Assistant. But by default, the DSM Reverse Proxy does not configure its NGINX settings to allow WebSocket, and some extra configuration will be required to get the Home Assistant frontend working with the DSM.
+### {% linkable_title Setup headers %}
+
+Starting with DSM 6.2.1+, you can create "custom headers" in the Application Portal:
+* Go to Application Portal and edit your entry
+* Click on "custom headers" tab and click the dropdon on the "Create" button
+* Select "Websocket". This will automaticly add the required headers for websocket to this reverse proxy.
+* Click "OK". Home Assistant should work now with the reverse proxy.
+
+It's not necessary anymore to change the template anymore since Version DSM 6.2.1. Changing the `Portal.mustache` is not recommended! You should use the following part only if you're using a Version before DSM 6.2.1. on your Synology.
+
### {% linkable_title Template change %}
To allow WebSocket by default for all service exposed by NGINX, you can enable it in the template file located in `/usr/syno/share/nginx/Portal.mustache`. Please be really careful in editing this file since you may break access to the DSM UI. Please backup this file before any edition.
From 1d2c1118a07a6e55a13742237dbef92c3d952277 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:28:55 +0100
Subject: [PATCH 19/58] Fix remember_the_milk component configuration (#7417)
---
source/_components/remember_the_milk.markdown | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown
index 96840dc1cba..f27a0bbcc99 100644
--- a/source/_components/remember_the_milk.markdown
+++ b/source/_components/remember_the_milk.markdown
@@ -32,8 +32,6 @@ remember_the_milk:
```
-Configuration variables:
-
{% configuration %}
name:
description: Name of the RTM account, as you can have several accounts in RTM. The name must be unique.
@@ -70,7 +68,7 @@ The task creation supports the "smart syntax", so to create a task with the tag
**Note:**
At the moment, smart syntax is *not* supported when updating tasks. All smart syntax commands are ignored during the update and will end up as normal text in the name of the task.
-|Service data attribute | Optional | Description | Example |
+|Service data attribute | Optional | Description | Example |
|-----------------------|----------|-------------|---------|
| name | no | Name of the new task, you can use the smart syntax here. | "do this ^today #from_hass" |
| id | yes | Identifier for the task you're creating, can be used to update or complete the task later on | "myid" |
@@ -79,9 +77,9 @@ At the moment, smart syntax is *not* supported when updating tasks. All smart sy
Complete a tasks that was privously created from Home Assistant. You can not complete tasks that were created outside of Home Assistant.
-If you have created your task with an ```id```, calling ```_complete_task``` with the parameter ```id``` will then complete your task.
+If you have created your task with an ```id```, calling ```_complete_task``` with the parameter ```id``` will then complete your task.
-|Service data attribute | Optional | Description | Example |
+|Service data attribute | Optional | Description | Example |
|-----------------------|----------|-------------|---------|
| id | no | Identifier that was defined when creating the task | "myid" |
@@ -89,7 +87,6 @@ If you have created your task with an ```id```, calling ```_complete_ta
Here's an example for an automation that creates a new task whenever ```sensor.mysensor``` is ```on``` and completes it when the sensor reports ```off```. This way it reminds you to switch it off. By using the ```entity_id``` as id for the task, you can use the same rule also for multiple sensors.
-
```yaml
- id: mysensor_on
trigger:
@@ -113,7 +110,6 @@ Here's an example for an automation that creates a new task whenever ```sensor.m
```
-
-
## {% linkable_title Disclaimer %}
+
This product uses the Remember The Milk API but is not endorsed or certified by Remember The Milk.
From eb19c4a93486ac64c14fc83890797377e51f80d6 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:29:19 +0100
Subject: [PATCH 20/58] Update itach remote component configuration (#7416)
---
source/_components/remote.itach.markdown | 59 +++++++++++++++++++-----
1 file changed, 47 insertions(+), 12 deletions(-)
diff --git a/source/_components/remote.itach.markdown b/source/_components/remote.itach.markdown
index 5dd51679a23..fcdbc308265 100644
--- a/source/_components/remote.itach.markdown
+++ b/source/_components/remote.itach.markdown
@@ -13,7 +13,6 @@ ha_iot_class: "Assumed State"
ha_release: 0.39
---
-
The `itach` remote platform allows you to control IR devices with a [Global Caché iTach Device](https://www.globalcache.com/products/itach/ip2irspecs) and GC-100 devices. The Global Cache IR API are similar across their product line. See API documentation links at the end of this page.
In order to utilize the digital input (binary sensor) and relay (switch) features of your Global Cache device you will need to use the [gc100 component](/components/gc100) and associated platforms.
@@ -36,22 +35,58 @@ remote:
data: "0000 006D 0000 0022 00AC 00AC 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0040 0015 0040 0015 0015 0015 0689"
```
-Configuration variables:
-- **name** (*Optional*): The iTach's name to display in the front end.
-- **host** (*Required*): The iTach's IP address.
-- **port** (*Optional*): The iTach's port. 4998 is default.
-- **devices** array (*Required*): Devices controlled by the iTach.
- - **name** (*Required*): Name of the device.
- - **modaddr** (*Optional*): iTach module address for the IR emitter. 1 is default.
- - **connaddr** (*Required*): iTach connection location for the IR emitter. (Note connaddr is a misleading label. Do not put the connection address here. Technically the connection address is the combination of the module address plus the connection location).
- - **commands** array (*Required*): Commands available to send to the device.
- - **name** (*Required*): Command name.
- - **data** (*Required*): Hex command data.
+{% configuration %}
+name:
+ description: The iTach's name to display in the front end.
+ required: false
+ type: string
+host:
+ description: The iTach's IP address.
+ required: true
+ type: string
+port:
+ description: The iTach's port.
+ required: false
+ default: 4998
+ type: integer
+devices:
+ description: Devices controlled by the iTach.
+ required: true
+ type: list
+ keys:
+ name:
+ description: Name of the device.
+ required: true
+ type: string
+ modaddr:
+ description: iTach module address for the IR emitter.
+ required: false
+ default: 1
+ type: integer
+ connaddr:
+ description: iTach connection location for the IR emitter. (Note connaddr is a misleading label. Do not put the connection address here. Technically the connection address is the combination of the module address plus the connection location).
+ required: true
+ type: integer
+ commands:
+ description: Commands available to send to the device.
+ required: true
+ type: list
+ keys:
+ name:
+ description: Command name.
+ required: true
+ type: string
+ data:
+ description: Hex command data.
+ required: true
+ type: string
+{% endconfiguration %}
An example to call the component from developer tools using the `remote.send_command` service: `{ "entity_id":"remote.tv", "command":"menu" }`
Note: Global Cache devices expect data in their own format of "sendir...". This component converts hex code to Global Cache IR form.
API Docs:
+
- [iTach](https://www.globalcache.com/files/docs/API-iTach.pdf)
- [GC-100](http://www.globalcache.com/files/docs/API-GC-100.pdf)
From fb4d4c87161b5fe1a134e736f405e55411a73b05 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Thu, 8 Nov 2018 09:30:31 +0100
Subject: [PATCH 21/58] Update rss_feed_template component configuration
(#7415)
---
source/_components/rss_feed_template.markdown | 36 ++++++++++++++-----
1 file changed, 28 insertions(+), 8 deletions(-)
diff --git a/source/_components/rss_feed_template.markdown b/source/_components/rss_feed_template.markdown
index 36fcddfc51f..8272e106476 100644
--- a/source/_components/rss_feed_template.markdown
+++ b/source/_components/rss_feed_template.markdown
@@ -30,11 +30,31 @@ rss_feed_template:
description: "{% raw %}{% if is_state('sensor.temp_outside','unknown') %}---{% else %}{{states.sensor.temp_outside.state}} °C{% endif %}{% endraw %}"
```
-Configuration variables:
-
-- **requires_api_password:** (*Optional*): If true and an API password is set, the password must be passed via '?api_password=...' parameter (Default: True)
-- **feed_id** (*Required*): The key is used as the ID of the feed. The feed can be accessed at /api/rss_template/feed_id (example: 'garden')
-- **title** (*Optional*): The title of the feed, which is parsed as [template](/topics/templating/).
-- **items** (*Required*): A list of feed items.
-- **items/title** (*Optional*): The title of the item, which is parsed as [template](/topics/templating/).
-- **items/description** (*Optional*): The description of the item, which is parsed as [template](/topics/templating/).
+{% configuration %}
+requires_api_password:
+ description: If true and an API password is set, the password must be passed via '?api_password=...' parameter.
+ required: false
+ default: true
+ type: boolean
+feed_id:
+ description: "The key is used as the ID of the feed. The feed can be accessed at /api/rss_template/feed_id (example: 'garden')."
+ required: true
+ type: string
+title:
+ description: The title of the feed, which is parsed as [template](/topics/templating/).
+ required: false
+ type: template
+items:
+ description: A list of feed items.
+ required: true
+ type: list
+ keys:
+ title:
+ description: The title of the item, which is parsed as [template](/topics/templating/).
+ required: false
+ type: template
+ description:
+ description: The description of the item, which is parsed as [template](/topics/templating/).
+ required: false
+ type: template
+{% endconfiguration %}
From 4d4e0f040c80ecae16bb5500bb74c9776be3eacc Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Thu, 8 Nov 2018 09:32:36 +0100
Subject: [PATCH 22/58] Minor changes
---
source/_components/notify.message_bird.markdown | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/source/_components/notify.message_bird.markdown b/source/_components/notify.message_bird.markdown
index 24672b77a64..255e8b2d272 100644
--- a/source/_components/notify.message_bird.markdown
+++ b/source/_components/notify.message_bird.markdown
@@ -14,6 +14,12 @@ ha_release: 0.16
The `MessageBird` notification platform sends notifications as SMS messages using [MessageBird](https://www.messagebird.com/) to your mobile phone.
+## {% linkable_title Setup %}
+
+Go to https://www.messagebird.com/ to retrieve your API key.
+
+## {% linkable_title Configuration %}
+
To enable MessageBird notifications in your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -26,7 +32,7 @@ notify:
{% configuration %}
api_key:
- description: "Enter the API key for MessageBird. Go to https://www.messagebird.com/ to retrieve your API key."
+ description: Your MessageBird API key.
required: true
type: string
name:
From 16d585baa66c530044a40fe3faa67d385df22bda Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Thu, 8 Nov 2018 11:32:25 +0100
Subject: [PATCH 23/58] Add new entry
---
source/help/index.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/help/index.markdown b/source/help/index.markdown
index fdc9cabb62f..d2e6f41bbf8 100644
--- a/source/help/index.markdown
+++ b/source/help/index.markdown
@@ -54,6 +54,7 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)?
Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/).
- [Build a wireless MQTT weather sensor for your Home Assistant](https://www.smartlab.at/build-a-wireless-mqtt-temperature-and-humidity-sensor-for-your-home-assistant/) - October 2018
+- [Nominations for the DINACon award 2018](https://www.netzwoche.ch/news/2018-09-04/das-sind-die-nominierten-fuer-die-dinacon-awards-2018) - September 2018
- [Building a better thermostat with Home Assistant](https://opensource.com/article/18/8/build-thermostat-open-source-tools) - August 2018
- [Home Assistant lets you automate your smart home without giving up privacy](https://www.the-ambient.com/features/home-assistant-automation-privacy-582) - May 2018
- [HackSpace magazine #6](https://s3-eu-west-1.amazonaws.com/rpi-magazines/issues/full_pdfs/000/000/013/original/HS_6_Digital_Optimised.pdf?1524495009) - May 2018
From 6328288cf8f3d4725702f964eb0953915d55e178 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:40:01 +0100
Subject: [PATCH 24/58] Update lannouncer notify component configuration
(#7442)
---
source/_components/notify.lannouncer.markdown | 22 ++++++++++++++-----
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/source/_components/notify.lannouncer.markdown b/source/_components/notify.lannouncer.markdown
index 5aba4e41f9e..f21c152455b 100644
--- a/source/_components/notify.lannouncer.markdown
+++ b/source/_components/notify.lannouncer.markdown
@@ -12,7 +12,6 @@ ha_category: Notifications
ha_release: 0.36
---
-
The `lannouncer` notification platform allows you to play spoken messages (TTS) or sounds on an Android device running [Lannouncer](http://www.keybounce.com/lannouncer/). This can be useful when you have a wall mounted Android tablet, or an Android device that is permanently powered and turned on and want to use that to play notifications.
To enable Lannouncer notifications in your installation, add the following to your `configuration.yaml` file:
@@ -25,11 +24,22 @@ notify:
host: HOSTNAME_OR_IP
```
-Configuration variables:
-
-- **name** (*Optional*): 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`.
-- **host** (*Required*): The hostname or IP-address of the Android device that is running Lannouncer.
-- **port** (*Optional*): The port on which Lannouncer is running. By default this is `1035`.
+{% configuration %}
+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
+ default: notify
+ type: string
+host:
+ description: The hostname or IP-address of the Android device that is running Lannouncer.
+ required: true
+ type: string
+port:
+ description: The port on which Lannouncer is running.
+ required: false
+ default: 1035
+ type: integer
+{% endconfiguration %}
### {% linkable_title Installation %}
From 39a91e1cb0752194fb20a541789aaee23dc98eaa Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:40:30 +0100
Subject: [PATCH 25/58] Update denonavr media_player component configuration
(#7441)
---
.../media_player.denonavr.markdown | 44 ++++++++++++++-----
1 file changed, 34 insertions(+), 10 deletions(-)
diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown
index 6c4d2d81957..14aedd8ee0f 100644
--- a/source/_components/media_player.denonavr.markdown
+++ b/source/_components/media_player.denonavr.markdown
@@ -28,7 +28,7 @@ Supported devices:
- Marantz M-CR603
- Marantz M-RC610
- Marantz SR5008
-- Marantz SR6007 - SR6010
+- Marantz SR6007 - SR6010
- Marantz NR1506
- Marantz NR1604
- Other Denon AVR receivers (untested)
@@ -53,15 +53,39 @@ media_player:
name: NAME
```
-Configuration variables:
-
-- **host** (*Optional*): IP address of the device. Example: 192.168.1.32. If not set, auto-discovery is used.
-- **name** (*Optional*): Name of the device. If not set, friendlyName of the receiver is used.
-- **show_all_sources** (*Optional*): If True all sources are displayed in sources list even if they are marked as deleted in the receiver. If False deleted sources are not displayed (default). Some receivers have a bug that marks all sources as deleted in the interface. In this case, this option could help.
-- **timeout** (*Optional*): Timeout for HTTP requests to the receiver. Defaults to 2 seconds if not provided.
-- **zones** (*Optional*): List of additional zones to be activated. They are displayed as additional media players with the same functionality Main Zone of the device supports
- - **zone**: Zone which should be activated. Valid options are Zone2 and Zone3
- - **name** (*Optional*): Name of the zone. If not set the name of the main device + zone as a suffix is taken.
+{% configuration %}
+host:
+ description: IP address of the device, e.g., 192.168.1.32. If not set, auto-discovery is used.
+ required: false
+ type: string
+name:
+ description: Name of the device. If not set, friendlyName of the receiver is used.
+ required: false
+ type: string
+show_all_sources:
+ description: If True all sources are displayed in sources list even if they are marked as deleted in the receiver. If False deleted sources are not displayed. Some receivers have a bug that marks all sources as deleted in the interface. In this case, this option could help.
+ required: false
+ default: false
+ type: boolean
+timeout:
+ description: Timeout in seconds for HTTP requests to the receiver.
+ required: false
+ default: 2
+ type: integer
+zones:
+ description: List of additional zones to be activated. They are displayed as additional media players with the same functionality Main Zone of the device supports.
+ required: false
+ type: list
+ keys:
+ zone:
+ description: Zone which should be activated. Valid options are `Zone2` and `Zone3`.
+ required: true
+ type: string
+ name:
+ description: Name of the zone. If not set the name of the main device + zone as a suffix is taken.
+ required: false
+ type: string
+{% endconfiguration %}
A few notes:
From 824dc4eda1b1112274a1af6bfc6e053299aa17c5 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:41:05 +0100
Subject: [PATCH 26/58] Update limitlessled light component configuration
(#7440)
---
.../_components/light.limitlessled.markdown | 67 ++++++++++++++-----
1 file changed, 50 insertions(+), 17 deletions(-)
diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown
index 426ea1e0569..9d6e3d8d8ed 100644
--- a/source/_components/light.limitlessled.markdown
+++ b/source/_components/light.limitlessled.markdown
@@ -14,9 +14,9 @@ ha_iot_class: "Assumed State"
ha_release: pre 0.7
---
-`limitlessled` can control your LimitlessLED lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, [MiLight](http://www.milight.com/), LEDme, dekolight, or iLight.
+`limitlessled` can control your LimitlessLED lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, [MiLight](http://www.milight.com/), LEDme, dekolight, or iLight.
-LimitlessLED bulbs are controlled via groups, so you can only control an individual bulb via the bridge if it is in a group by itself.
+LimitlessLED bulbs are controlled via groups, so you can only control an individual bulb via the bridge if it is in a group by itself.
Note: you can assign an `rgbw`, `rgbww`, `white` and `dimmer` group to the same group number, effectively allowing up to 16 groups (4 `rgbww`, 4 `rgbw`, 4 `white` and 4 `dimmer`) per bridge.
@@ -24,7 +24,7 @@ An archive of the extensive API can be found [here](https://github.com/Fantasmos
### {% linkable_title Setup %}
-Before configuring Home Assistant, make sure you can control your bulbs or LEDs with the MiLight mobile application. Next, discover your bridge(s) IP address. You can do this via your router or a mobile application like Fing ([android](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) or [iTunes](https://itunes.apple.com/us/app/fing-network-scanner/id430921107?mt=8)).
+Before configuring Home Assistant, make sure you can control your bulbs or LEDs with the MiLight mobile application. Next, discover your bridge(s) IP address. You can do this via your router or a mobile application like Fing ([android](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) or [iTunes](https://itunes.apple.com/us/app/fing-network-scanner/id430921107?mt=8)).
To add `limitlessled` to your installation, add the following to your `configuration.yaml` file:
@@ -43,7 +43,7 @@ light:
- number: 3
type: rgbw
name: Kitchen
- fade: on
+ fade: true
- number: 4
type: dimmer
name: Livingroom
@@ -56,17 +56,50 @@ light:
name: Bridge Light
```
-Configuration variables:
-
-- **bridges** array (*Required*):
- - **host** (*Required*): IP address of the device, eg. `192.168.1.32`
- - **version** (*Optional*): Bridge version (default is `6`).
- - **port** (*Optional*): Bridge port. Defaults to `5987`. For older bridges than `v6` choose `8899`.
- - **groups** array (*Required*): The list of available groups.
- - **number** (*Required*): Group number (`1`-`4`). Corresponds to the group number on the remote. These numbers may overlap only if the type is different.
- - **name** (*Required*): Any name you'd like. Must be unique among all configured groups.
- - **type** (*Optional*): Type of group. Choose either `rgbww`, `rgbw`, `white`, `bridge-led` or `dimmer`. `rgbw` is the default if you don't specify this entry. Use `bridge-led` to control the built-in LED of newer WiFi bridges.
- - **fade** (*Optional*): Fade behavior. Defaults to `off`. If turned on, the group is faded out before being turned off. This makes for a more pleasing transition at the expense of wall switch usability since the light will turn back on at the lowest brightness if it is power cycled.
+{% configuration %}
+bridges:
+ description: A list of bridges.
+ required: true
+ type: list
+ keys:
+ host:
+ description: IP address of the device, e.g., `192.168.1.32`.
+ required: true
+ type: string
+ version:
+ description: Bridge version.
+ required: false
+ default: 6
+ type: integer
+ port:
+ description: Bridge port. For older bridges than `v6` choose `8899`.
+ required: false
+ default: 5987
+ type: integer
+ groups:
+ description: The list of available groups.
+ required: true
+ type: list
+ keys:
+ number:
+ description: Group number (`1`-`4`). Corresponds to the group number on the remote. These numbers may overlap only if the type is different.
+ required: true
+ type: integer
+ name:
+ description: Any name you'd like. Must be unique among all configured groups.
+ required: true
+ type: string
+ type:
+ description: Type of group. Choose either `rgbww`, `rgbw`, `white`, `bridge-led` or `dimmer`. Use `bridge-led` to control the built-in LED of newer WiFi bridges.
+ required: false
+ default: rgbw
+ type: string
+ fade:
+ description: Fade behavior. If turned on (true), the group is faded out before being turned off. This makes for a more pleasing transition at the expense of wall switch usability since the light will turn back on at the lowest brightness if it is power cycled.
+ required: false
+ default: false
+ type: boolean
+{% endconfiguration %}
### {% linkable_title Night Effect %}
@@ -102,8 +135,8 @@ Refer to the [light]({{site_root}}/components/light/) documentation for general
- *Temperature*: Wifi bridge v6 supports 101 temperature steps; older versions only 10.
- *Brightness*: Wifi bridge v6 supports 101 brightness steps; older versions only 10.
- **Dimmer** (Only supported on v6 bridges)
- - This type is for a single color LED dimmer like the 1CH MiLight dimmer module or similar. This type is only supported by the version 6 Wifi bridges.
- - *Brightness*: Wifi bridge v6 supports 101 brightness steps.
+ - This type is for a single color LED dimmer like the 1CH MiLight dimmer module or similar. This type is only supported by the version 6 Wifi bridges.
+ - *Brightness*: Wifi bridge v6 supports 101 brightness steps.
- **Transitions**
- If a transition time is set, the group will transition between the current settings and the target settings for the duration specified. Transitions from or to white are not possible - the color will change immediately.
From 012a9de352d4c5172269bb20489cc1982e69be3b Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:41:26 +0100
Subject: [PATCH 27/58] Update scsgate cover component configuration (#7439)
---
source/_components/cover.scsgate.markdown | 27 +++++++++++++++++------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/source/_components/cover.scsgate.markdown b/source/_components/cover.scsgate.markdown
index 96b49a71584..fa5ab21969d 100644
--- a/source/_components/cover.scsgate.markdown
+++ b/source/_components/cover.scsgate.markdown
@@ -26,14 +26,27 @@ cover:
scs_id: XXXXX
```
-Configuration variables:
-
-- **devices** array (*Required*): A list of devices.
- - **[slug]** (*Required*): Slug of the device.
- - **name** (*Required*): Name to use in the frontend.
- - **scs_id** (*Required*): The ID of your SCSGate device.
+{% configuration %}
+devices:
+ description: A list of devices.
+ required: true
+ type: list
+ keys:
+ slug:
+ description: Slug of the device.
+ required: true
+ type: list
+ keys:
+ name:
+ description: Name to use in the frontend.
+ required: true
+ type: string
+ scs_id:
+ description: The ID of your SCSGate device.
+ required: true
+ type: string
+{% endconfiguration %}
**Known limitation:** It is not possible to know the current state of the cover.
-
From 82e77824a4396cf50373b326e14854eddf04af14 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:41:53 +0100
Subject: [PATCH 28/58] Update eq3btsmart climate component configuration
(#7438)
---
.../_components/climate.eq3btsmart.markdown | 29 +++++++++++++------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/source/_components/climate.eq3btsmart.markdown b/source/_components/climate.eq3btsmart.markdown
index ce833566ff4..292b58fdbf7 100644
--- a/source/_components/climate.eq3btsmart.markdown
+++ b/source/_components/climate.eq3btsmart.markdown
@@ -18,7 +18,8 @@ The current functionality allows setting the temperature as well as controlling
As the device doesn't contain a temperature sensor ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)),
we report target temperature also as current one.
-### Testing the connectivity ###
+### {% linkable_title Testing the connectivity %}
+
Before configuring Home Assistant you should check that connectivity with the thermostat is working, which can be done with the eq3cli tool:
```bash
@@ -32,9 +33,9 @@ Boost: False
Current target temp: 21.0
Current mode: auto dst
Valve: 0
-```
+```
-### Configuration ###
+### {% linkable_title Configuration %}
```yaml
# Example configuration.yaml entry
@@ -45,9 +46,19 @@ climate:
mac: '00:11:22:33:44:55'
```
-Configuration variables:
-
-- **devices** array (*Required*): List of thermostats.
- - **[device-name]** (*Required*): The name to use for the thermostat.
- - **mac** (*Required*): MAC address of the thermostat.
-
+{% configuration %}
+devices:
+ description: List of thermostats.
+ required: true
+ type: list
+ keys:
+ name:
+ description: The name to use for the thermostat.
+ required: true
+ type: string
+ keys:
+ mac:
+ description: MAC address of the thermostat.
+ required: true
+ type: string
+{% endconfiguration %}
From 9668c7de619acb17277457d216d7328bf2145dca Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:42:46 +0100
Subject: [PATCH 29/58] Update snips add-on component configuration (#7437)
---
source/_addons/snips.markdown | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/source/_addons/snips.markdown b/source/_addons/snips.markdown
index f7c86cecf11..6b09b585b59 100644
--- a/source/_addons/snips.markdown
+++ b/source/_addons/snips.markdown
@@ -51,12 +51,20 @@ Now it's time to start Snips for the first time. You can configure the microphon
}
```
-Configuration variables:
-
-- **assistant**: The name of your custom assistant in `/share`. If no assistant is found then a default assistant will be used.
-- **language**: Language. This is used to select the default custom assistant, Currently `en`, `de` and `fr` are supported.
-- **custom_tts**: Whether to use a TTS provider from Home Assistant for a variety of voices.
-- **tts_platform**: Which TTS platform to use.
+{% configuration %}
+assistant:
+ description: The name of your custom assistant in `/share`. If no assistant is found then a default assistant will be used.
+ type: string
+language:
+ description: Language. This is used to select the default custom assistant, Currently `en`, `de` and `fr` are supported.
+ type: string
+custom_tts:
+ description: Whether to use a TTS provider from Home Assistant for a variety of voices.
+ type: boolean
+tts_platform:
+ description: Which TTS platform to use.
+ type: string
+{% endconfiguration %}
### {% linkable_title Home Assistant configuration %}
@@ -89,6 +97,7 @@ Next create a weather sensor, e.g., one for (Dark Sky)[/components/sensor.darksk
- temperature_max
- temperature_min
```
+
Next add this to your `configuration.yaml` file to reference a new `intent_script` component. This is a good practice to [split your configuration files](/docs/configuration/splitting_configuration/) up.
```yaml
@@ -98,6 +107,7 @@ intent_script: !include intent_script.yaml
Finally, create this `intent_script.yaml` file in your configuration directory.
{% raw %}
+
```yaml
searchWeatherForecast:
speech:
@@ -110,6 +120,7 @@ searchWeatherForecast:
{{ states('sensor.dark_sky_weather_daily_high_temperature') | round(0)}}
and {{ states('sensor.dark_sky_weather_hourly_summary') }}
```
+
{% endraw %}
Now just restart HassIO and ask it what the weather is like.
From 79f832bc2d1c787d07b1e59845e1efabea6846e4 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Fri, 9 Nov 2018 09:43:04 +0100
Subject: [PATCH 30/58] Update dnsmasq add-on component configuration (#7436)
---
source/_addons/dnsmasq.markdown | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown
index d894320ab02..13553302a8d 100644
--- a/source/_addons/dnsmasq.markdown
+++ b/source/_addons/dnsmasq.markdown
@@ -23,8 +23,17 @@ Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS serv
}
```
-Configuration variables:
-
-- **defaults** (*Required*): A list of DNS servers to forward default requests to.
-- **forwards** (*Optional*): A list of domains that will forward to a specific server.
-- **hosts** (*Optional*): A list of hosts to resolve statically.
+{% configuration %}
+defaults:
+ description: A list of DNS servers to forward default requests to.
+ required: true
+ type: list
+forwards:
+ description: A list of domains that will forward to a specific server.
+ required: false
+ type: list
+hosts:
+ description: A list of hosts to resolve statically.
+ required: false
+ type: list
+{% endconfiguration %}
From 3e76d03ab10463b56ffb73ea0a2b5f027fb9432b Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Fri, 9 Nov 2018 12:07:48 +0100
Subject: [PATCH 31/58] Add DINAcon award
---
source/help/index.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/help/index.markdown b/source/help/index.markdown
index d2e6f41bbf8..f2bc298249a 100644
--- a/source/help/index.markdown
+++ b/source/help/index.markdown
@@ -53,6 +53,7 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)?
Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/).
+- [DINAcon begeistert 200 Teilnehmende und die Award-Gewinner 2018](https://dinacon.ch/wp-content/uploads/sites/4/2018/10/2018-10-19_DINAcon2018_Medienmitteilung.pdf) - October 2018
- [Build a wireless MQTT weather sensor for your Home Assistant](https://www.smartlab.at/build-a-wireless-mqtt-temperature-and-humidity-sensor-for-your-home-assistant/) - October 2018
- [Nominations for the DINACon award 2018](https://www.netzwoche.ch/news/2018-09-04/das-sind-die-nominierten-fuer-die-dinacon-awards-2018) - September 2018
- [Building a better thermostat with Home Assistant](https://opensource.com/article/18/8/build-thermostat-open-source-tools) - August 2018
From 06de4338f9a4b62d2b86f3ebd898d3641d80a3c1 Mon Sep 17 00:00:00 2001
From: Jason Hunter
Date: Mon, 5 Nov 2018 09:32:47 -0500
Subject: [PATCH 32/58] TensorFlow image_processing component (#7083)
* initial documentation for image_processing.tensorflow
* add raw tag to fix template errors
* changes per review
* update documentation to reflect latest component changes and pull script out to gist
* do not use deps folder as default, as it should only be managed by HA. Update to have tensorflow in root config directory
* make gist a link, remove additional deps references
* add additional cameras to example config, shorten model selection section, add warning at top for Hass.io
* Update warning adding further Hassbian instructions
* changes per PR review
* fix init location in docs
* fix spelling of raspberry
* Update image_processing.tensorflow.markdown
* Minor changes
* Add class
* add link to tensorflow install site for additional installation options
---
.../image_processing.tensorflow.markdown | 163 ++++++++++++++++++
source/images/supported_brands/tensorflow.png | Bin 0 -> 23652 bytes
2 files changed, 163 insertions(+)
create mode 100644 source/_components/image_processing.tensorflow.markdown
create mode 100644 source/images/supported_brands/tensorflow.png
diff --git a/source/_components/image_processing.tensorflow.markdown b/source/_components/image_processing.tensorflow.markdown
new file mode 100644
index 00000000000..81c9324007b
--- /dev/null
+++ b/source/_components/image_processing.tensorflow.markdown
@@ -0,0 +1,163 @@
+---
+layout: page
+title: "TensorFlow"
+description: "Detect and recognize objects with TensorFlow."
+date: 2018-10-24 00:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: tensorflow.png
+ha_category: Image Processing
+ha_iot_class: "Local Polling"
+ha_release: 0.82
+---
+
+The `tensorflow` image processing platform allows you to detect and recognize objects in a camera image using [TensorFlow](https://www.tensorflow.org/). The state of the entity is the number of objects detected, and recognized objects are listed in the `summary` attribute along with quantity. The `matches` attribute provides the confidence `score` for recognition and the bounding `box` of the object for each detection category.
+
+
+ The following packages must be installed on Hassbian after following the setup for the component to work:
+ `$ sudo apt-get install libatlas-base-dev libopenjp2-7 libtiff5`
+
+
+## {% linkable_title Setup %}
+
+You need to install the `tensorflow` Python packages with: `$ pip3 install tensorflow`. The wheel is not available for all platforms. See [the official install guide](https://www.tensorflow.org/install/) for other options. Hass.io has this package pre-installed.
+
+This component requires files to be downloaded, compiled on your computer, and added to the Home Assistant configuration directory. These steps can be performed using the sample script at [this gist](https://gist.github.com/hunterjm/6f9332f92b60c3d5e448ad936d7353c3). Alternatively, if you wish to perform the process manually, the process is as follows:
+
+- Clone [tensorflow/models](https://github.com/tensorflow/models/tree/master/research/object_detection)
+- Compile protobuf models located in `research/object_detection/protos` with `protoc`
+- Create the following directory structure inside your config directory:
+
+```bash
+ |- {config_dir}
+ | - tensorflow/
+ |- object_detection/
+ |- __init__.py
+```
+
+- Copy required object_detection dependancies to the `object_detection` folder inside of the `tensorflow` folder:
+
+ - `research/object_detection/data`
+ - `research/object_detection/utils`
+ - `research/object_detection/protos`
+
+## {% linkable_title Model Selection %}
+
+Lastly, it is time to pick a model. It is recommended to start with one of the COCO models available in the [Model Detection Zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md).
+
+The trade-off between the different models is accuracy vs speed. Users with a decent CPU should start with the `faster_rcnn_inception_v2_coco` model. If you are running on an ARM device like a Raspberry Pi, start with the `ssd_mobilenet_v2_coco` model.
+
+Whichever model you choose, download it and place the `frozen_inference_graph.pb` file in the `tensorflow` folder in your configuration directory.
+
+## {% linkable_title Configuration %}
+
+To enable this platform in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+image_processing:
+ - platform: tensorflow
+ source:
+ - entity_id: camera.local_file
+ model:
+ graph: /home/homeassistant/.homeassistant/tensorflow/frozen_inference_graph.pb
+```
+
+{% configuration %}
+source:
+ description: The list of image sources.
+ required: true
+ type: map
+ keys:
+ entity_id:
+ description: A camera entity id to get picture from.
+ required: true
+ type: string
+ name:
+ description: This parameter allows you to override the name of your `image_processing` entity.
+ required: false
+ type: string
+file_out:
+ description: A [template](/docs/configuration/templating/#processing-incoming-data) for the component to save processed images including bounding boxes. `camera_entity` is available as the `entity_id` string of the triggered source camera.
+ required: false
+ type: list
+model:
+ description: Information about the TensorFlow model.
+ required: true
+ type: map
+ keys:
+ graph:
+ description: Full path to `frozen_inference_graph.pb`.
+ required: true
+ type: string
+ labels:
+ description: Full path to a `*label_map.pbtext`.
+ required: false
+ type: string
+ default: tensorflow/object_detection/data/mscoco_label_map.pbtxt
+ model_dir:
+ description: Full path to tensorflow models directory.
+ required: false
+ type: string
+ default: /tensorflow inside config
+ area:
+ description: Custom detection area. Only objects fully in this box will be reported. Top of image is 0, bottom is 1. Same left to right.
+ required: false
+ type: map
+ keys:
+ top:
+ description: Top line defined as % from top of image.
+ required: false
+ type: float
+ default: 0
+ left:
+ description: Left line defined as % from left of image.
+ required: false
+ type: float
+ default: 0
+ bottom:
+ description: Bottom line defined as % from top of image.
+ required: false
+ type: float
+ default: 1
+ right:
+ description: Right line defined as % from left of image.
+ required: false
+ type: float
+ default: 1
+ categories:
+ description: List of categories to include in object detection. Can be seen in the file provided to `labels`.
+ type: list
+ required: false
+{% endconfiguration %}
+
+`categories` can also be defined as dictionary providing an `area` for each category as seen in the advanced configuration below:
+
+```yaml
+# Example advanced configuration.yaml entry
+image_processing:
+ - platform: tensorflow
+ source:
+ - entity_id: camera.driveway
+ - entity_id: camera.backyard
+ file_out:
+ - "/tmp/{% raw %}{{ camera_entity.split('.')[1] }}{% endraw %}_latest.jpg"
+ - "/tmp/{% raw %}{{ camera_entity.split('.')[1] }}_{{ now().strftime('%Y%m%d_%H%M%S') }}{% endraw %}.jpg"
+ model:
+ graph: /home/homeassistant/.homeassistant/tensorflow/frozen_inference_graph.pb
+ categories:
+ - category: person
+ area:
+ # Exclude top 10% of image
+ top: 0.1
+ # Exclude right 15% of image
+ right: 0.85
+ - car
+ - truck
+```
+
+## {% linkable_title Optimising resources %}
+
+[Image processing components](https://www.home-assistant.io/components/image_processing/) process the image from a camera at a fixed period given by the `scan_interval`. This leads to excessive processing if the image on the camera hasn't changed, as the default `scan_interval` is 10 seconds. You can override this by adding to your config `scan_interval: 10000` (setting the interval to 10,000 seconds), and then call the `image_processing.scan` service when you actually want to perform processing.
diff --git a/source/images/supported_brands/tensorflow.png b/source/images/supported_brands/tensorflow.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7208340a2c3ab68f163f407eb2f088f38a0dc9b
GIT binary patch
literal 23652
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
Hu0mjfx(@i{
literal 0
HcmV?d00001
From 589d2700a9a35ad5bfbc71f3e4e3b5570698f74e Mon Sep 17 00:00:00 2001
From: Rohan Kapoor
Date: Wed, 7 Nov 2018 00:45:26 -0800
Subject: [PATCH 33/58] Update Dialogflow with the webhook changes (#7109)
---
source/_components/dialogflow.markdown | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/source/_components/dialogflow.markdown b/source/_components/dialogflow.markdown
index bf2cc4b4e61..beb5f795656 100644
--- a/source/_components/dialogflow.markdown
+++ b/source/_components/dialogflow.markdown
@@ -20,7 +20,7 @@ Before 0.56 this component was named `apiai`.
The `dialogflow` component is designed to be used with the [webhook](https://dialogflow.com/docs/fulfillment#webhook) integration of [Dialogflow](https://dialogflow.com/). When a conversation ends with a user, Dialogflow sends an action and parameters to the webhook.
-Dialogflow requires a public endpoint (HTTPS recommended), so your Home Assistant should be exposed to the Internet. Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds).
+To be able to receive messages from DialogFlow, your Home Assistant instance needs to be accessible from the web ([Hass.io instructions](/addons/duckdns/)) and you need to have the `base_url` configured for the HTTP component ([docs](https://www.home-assistant.io/components/http/#base_url)). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds).
Dialogflow could be [integrated](https://dialogflow.com/docs/integrations/) with many popular messaging, virtual assistant and IoT platforms.
@@ -40,6 +40,8 @@ Using Dialogflow will be easy to create conversations like:
To use this integration, you should define a conversation (intent) in Dialogflow, configure Home Assistant with the speech to return and, optionally, the action to execute.
+To get the webhook url, go to the integrations page in the configuration screen and find Dialogflow. Click on configure. Follow the instructions on the screen.
+
### {% linkable_title Configuring your Dialogflow account %}
- [Login](https://console.dialogflow.com/) with your Google account
@@ -47,7 +49,7 @@ To use this integration, you should define a conversation (intent) in Dialogflow
- Select name, language (if you are planning to use Google Actions check their [supported languages](https://support.google.com/assistant/answer/7108196?hl=en)) and time zone
- Click "Save"
- Go to "Fulfillment" (in the left menu)
-- Enable Webhook and set your Home Assistant URL with the Dialogflow endpoint, e.g., `https://myhome.duckdns.org/api/dialogflow?api_password=HA_PASSWORD`
+- Enable Webhook and set your Dialogflow webhook url as the endpoint, e.g., `https://myhome.duckdns.org/api/webhook/800b4cb4d27d078a8871656a90854a292651b20635685f8ea23ddb7a09e8b417`
- Click "Save"
- Create a new intent
- Below "User says" write one phrase that you, the user, will tell Dialogflow, e.g., `What is the temperature at home?`
From 1fd03693194b76d9ccb18cb57ccfd1563dfe9b80 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Thu, 8 Nov 2018 11:18:02 +0100
Subject: [PATCH 34/58] Unpublish velbus climate (#7435)
---
source/_components/climate.velbus.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_components/climate.velbus.markdown b/source/_components/climate.velbus.markdown
index a24345f49cb..45ca48a54b1 100644
--- a/source/_components/climate.velbus.markdown
+++ b/source/_components/climate.velbus.markdown
@@ -11,6 +11,7 @@ logo: velbus.png
ha_category: Climate
ha_iot_class: "Local Push"
ha_release: 0.82
+published: false
---
The `velbus` climate devices allow you to control [Velbus](http://www.velbus.eu) connected thermostats.
From d0a773bd4817ab183c0e7ddece7c448bb06efe9e Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Fri, 9 Nov 2018 16:09:05 +0100
Subject: [PATCH 35/58] Update notes
---
source/_posts/2018-11-08-release-82.markdown | 62 +++++++++++++++++++-
1 file changed, 60 insertions(+), 2 deletions(-)
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
index 80cb7a35fcb..18ba051fc50 100644
--- a/source/_posts/2018-11-08-release-82.markdown
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -15,15 +15,18 @@ og_image: /images/blog/2018-11-release-82/components.png
Alpha edit mode for Lovelace.
+Soft-fork of OZW to add Barrier.
+
Frontend release notes are here: https://github.com/home-assistant/home-assistant-polymer/pull/1974
+Tensorflow.
+
## {% linkable_title New Platforms %}
- Add device tracking for the BT Smart Hub router ([@jxwolstenholme] - [#17158]) ([device_tracker docs]) (new-platform)
- Météo-france sensor : current weather and 1 hour rain forecast ([@victorcerutti] - [#17773]) ([sensor.meteo_france docs]) (new-platform)
- Support for WeMo Humidifier ([@sqldiablo] - [#17996]) ([wemo docs]) ([fan.wemo docs]) (new-platform)
- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) ([sensor.greeneye_monitor_current docs]) ([sensor.greeneye_monitor_pulse docs]) ([sensor.greeneye_monitor_temperature docs]) (new-platform)
-- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs]) ([climate.velbus docs]) (new-platform)
- TensorFlow image_processing component ([@hunterjm] - [#17795]) ([image_processing.tensorflow docs]) (new-platform)
## {% linkable_title If you need help... %}
@@ -45,6 +48,25 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Update to DoorBirdPy v2 (again) ([@Klikini] - [#14933]) ([doorbird docs]) ([switch.doorbird docs]) (breaking change)
- Add binary sensors for sense energy monitor ([@kbickar] - [#17645]) ([sensor.sense docs]) (breaking change)
- Update Pollen.com to use numpy for trend analysis ([@bachya] - [#18107]) ([sensor.pollen docs]) (breaking change)
+- Remove config (breaking change) ([@jjlawren] - [#18153]) ([ffmpeg docs]) (breaking change) (beta fix)
+
+## {% linkable_title Beta Fixes %}
+
+- SMA: Optional import in schema & backoff fix ([@kellerza] - [#18099]) (beta fix)
+- Remove config (breaking change) ([@jjlawren] - [#18153]) ([ffmpeg docs]) (breaking change) (beta fix)
+- Handle TensorFlow like OpenCV ([@pvizeli] - [#18185]) ([image_processing.tensorflow docs]) (beta fix)
+- Add support for TensorFlow in official docker ([@pvizeli] - [#18191]) (beta fix)
+- Cloud conf ([@balloob] - [#18216]) ([cloud docs]) (beta fix)
+- Check if os has chown ([@bramkragten] - [#18229]) (beta fix)
+- Update pynetgear to 0.5.1 ([@Arkkimaagi] - [#18238]) ([device_tracker docs]) (beta fix)
+- Migrate python-openzwave to homeassistant-pyozw ([@pvizeli] - [#18268]) (beta fix)
+- SMA Guard against older pysma ([@kellerza] - [#18278]) ([sensor.sma docs]) (beta fix)
+- Bump pyotgw to 0.3b1 ([@mvn23] - [#18286]) ([opentherm_gw docs]) (beta fix)
+- Fix log error message ([@pvizeli] - [#18305]) ([hassio docs]) (beta fix)
+- Bump pyhaversion to 2.0.2 ([@ludeeus] - [#18318]) ([sensor.version docs]) (beta fix)
+- Fix xiaomi binary_sensor warning ([@Danielhiversen] - [#18280]) ([binary_sensor.xiaomi_aqara docs]) (beta fix)
+- Remove Velbus climate platform ([@balloob] - [#18319]) ([velbus docs]) ([climate.velbus docs]) (beta fix)
+- fix last device ignored ([@abmantis] - [#18329]) ([device_tracker docs]) (beta fix)
## {% linkable_title All changes %}
@@ -200,7 +222,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Added service select_video_output and video_out attribute ([@leothlon] - [#18081]) ([media_player.onkyo docs])
- Darksky: Round all temperatures to 1 decimal place ([@leppa] - [#18119]) ([sensor.darksky docs])
- Convert nsw rural fire tests to async ([@armills] - [#18112])
-- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs]) ([climate.velbus docs]) (new-platform)
+- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs]) ([climate.velbus docs])
- Changed from pifacecommon 4.1.2 to 4.2.2 to make the piface digital i/o boards work on rpi like 3 ([@vacumet] - [#18101]) ([rpi_pfio docs])
- Update Pollen.com to use numpy for trend analysis ([@bachya] - [#18107]) ([sensor.pollen docs]) (breaking change)
- Exposes initial attribute on the entity. ([@ludeeus] - [#18123]) ([input_number docs])
@@ -213,6 +235,21 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Allow disabling WeMo Discovery ([@sqldiablo] - [#18079]) ([wemo docs])
- Fix typos and update docstrings ([@fabaff] - [#18137]) ([lovelace docs])
- Fix hassio command timeout ([@alex9446] - [#17567]) ([hassio docs])
+- SMA: Optional import in schema & backoff fix ([@kellerza] - [#18099]) (beta fix)
+- Remove config (breaking change) ([@jjlawren] - [#18153]) ([ffmpeg docs]) (breaking change) (beta fix)
+- Handle TensorFlow like OpenCV ([@pvizeli] - [#18185]) ([image_processing.tensorflow docs]) (beta fix)
+- Add support for TensorFlow in official docker ([@pvizeli] - [#18191]) (beta fix)
+- Cloud conf ([@balloob] - [#18216]) ([cloud docs]) (beta fix)
+- Check if os has chown ([@bramkragten] - [#18229]) (beta fix)
+- Update pynetgear to 0.5.1 ([@Arkkimaagi] - [#18238]) ([device_tracker docs]) (beta fix)
+- Migrate python-openzwave to homeassistant-pyozw ([@pvizeli] - [#18268]) (beta fix)
+- SMA Guard against older pysma ([@kellerza] - [#18278]) ([sensor.sma docs]) (beta fix)
+- Bump pyotgw to 0.3b1 ([@mvn23] - [#18286]) ([opentherm_gw docs]) (beta fix)
+- Fix log error message ([@pvizeli] - [#18305]) ([hassio docs]) (beta fix)
+- Bump pyhaversion to 2.0.2 ([@ludeeus] - [#18318]) ([sensor.version docs]) (beta fix)
+- Fix xiaomi binary_sensor warning ([@Danielhiversen] - [#18280]) ([binary_sensor.xiaomi_aqara docs]) (beta fix)
+- Remove Velbus climate platform ([@balloob] - [#18319]) ([velbus docs]) ([climate.velbus docs]) (beta fix)
+- fix last device ignored ([@abmantis] - [#18329]) ([device_tracker docs]) (beta fix)
[#14933]: https://github.com/home-assistant/home-assistant/pull/14933
[#16128]: https://github.com/home-assistant/home-assistant/pull/16128
@@ -367,6 +404,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[#18088]: https://github.com/home-assistant/home-assistant/pull/18088
[#18089]: https://github.com/home-assistant/home-assistant/pull/18089
[#18095]: https://github.com/home-assistant/home-assistant/pull/18095
+[#18099]: https://github.com/home-assistant/home-assistant/pull/18099
[#18100]: https://github.com/home-assistant/home-assistant/pull/18100
[#18101]: https://github.com/home-assistant/home-assistant/pull/18101
[#18107]: https://github.com/home-assistant/home-assistant/pull/18107
@@ -379,6 +417,21 @@ Experiencing issues introduced by this release? Please report them in our [issue
[#18129]: https://github.com/home-assistant/home-assistant/pull/18129
[#18135]: https://github.com/home-assistant/home-assistant/pull/18135
[#18137]: https://github.com/home-assistant/home-assistant/pull/18137
+[#18153]: https://github.com/home-assistant/home-assistant/pull/18153
+[#18185]: https://github.com/home-assistant/home-assistant/pull/18185
+[#18191]: https://github.com/home-assistant/home-assistant/pull/18191
+[#18216]: https://github.com/home-assistant/home-assistant/pull/18216
+[#18229]: https://github.com/home-assistant/home-assistant/pull/18229
+[#18238]: https://github.com/home-assistant/home-assistant/pull/18238
+[#18268]: https://github.com/home-assistant/home-assistant/pull/18268
+[#18278]: https://github.com/home-assistant/home-assistant/pull/18278
+[#18280]: https://github.com/home-assistant/home-assistant/pull/18280
+[#18286]: https://github.com/home-assistant/home-assistant/pull/18286
+[#18305]: https://github.com/home-assistant/home-assistant/pull/18305
+[#18318]: https://github.com/home-assistant/home-assistant/pull/18318
+[#18319]: https://github.com/home-assistant/home-assistant/pull/18319
+[#18329]: https://github.com/home-assistant/home-assistant/pull/18329
+[@Arkkimaagi]: https://github.com/Arkkimaagi
[@Cereal2nd]: https://github.com/Cereal2nd
[@Danielhiversen]: https://github.com/Danielhiversen
[@Hedda]: https://github.com/Hedda
@@ -423,6 +476,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[@janvanhelvoort]: https://github.com/janvanhelvoort
[@jaredquinn]: https://github.com/jaredquinn
[@jeroenterheerdt]: https://github.com/jeroenterheerdt
+[@jjlawren]: https://github.com/jjlawren
[@jkeljo]: https://github.com/jkeljo
[@jxwolstenholme]: https://github.com/jxwolstenholme
[@kbickar]: https://github.com/kbickar
@@ -444,6 +498,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[@nickw444]: https://github.com/nickw444
[@pascal-de-ladurantaye]: https://github.com/pascal-de-ladurantaye
[@pszafer]: https://github.com/pszafer
+[@pvizeli]: https://github.com/pvizeli
[@quazzie]: https://github.com/quazzie
[@rohankapoorcom]: https://github.com/rohankapoorcom
[@rwagoner]: https://github.com/rwagoner
@@ -473,6 +528,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[binary_sensor.pilight docs]: /components/binary_sensor.pilight/
[binary_sensor.template docs]: /components/binary_sensor.template/
[binary_sensor.trend docs]: /components/binary_sensor.trend/
+[binary_sensor.xiaomi_aqara docs]: /components/binary_sensor.xiaomi_aqara/
[binary_sensor.zha docs]: /components/binary_sensor.zha/
[binary_sensor.zigbee docs]: /components/binary_sensor.zigbee/
[bloomsky docs]: /components/bloomsky/
@@ -491,6 +547,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[climate.mill docs]: /components/climate.mill/
[climate.velbus docs]: /components/climate.velbus/
[climate.vera docs]: /components/climate.vera/
+[cloud docs]: /components/cloud/
[cover.deconz docs]: /components/cover.deconz/
[cover.mqtt docs]: /components/cover.mqtt/
[deconz docs]: /components/deconz/
@@ -500,6 +557,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[doorbird docs]: /components/doorbird/
[fan.wemo docs]: /components/fan.wemo/
[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/
+[ffmpeg docs]: /components/ffmpeg/
[geo_location docs]: /components/geo_location/
[google_assistant docs]: /components/google_assistant/
[greeneye_monitor docs]: /components/greeneye_monitor/
From 4f8193e66d98dc2364456fa4e64dfdc3a1e672fa Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Fri, 9 Nov 2018 17:30:25 +0100
Subject: [PATCH 36/58] Yo
---
source/_posts/2018-11-08-release-82.markdown | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
index 18ba051fc50..be6c57ea0b3 100644
--- a/source/_posts/2018-11-08-release-82.markdown
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -1,9 +1,9 @@
---
layout: post
-title: "0.82: TBD - update date"
+title: "0.82: TensorFlow, Z-Wave Barrier Class, "
description: "TBD"
-date: 2018-11-03 00:01:00
-date_formatted: "November 8, 2018"
+date: 2018-11-09 00:01:00
+date_formatted: "November 9, 2018"
author: Paulus Schoutsen
author_twitter: balloob
comments: true
@@ -11,6 +11,15 @@ categories: Release-Notes
og_image: /images/blog/2018-11-release-82/components.png
---
+It's time for another great release. As this includes the tail-end of HacktoberFest, it's packed again with stuff. Hope you like stuff.
+
+First cool new feature is that you can now use TensorFlow, a machine learning framework, to detect objects on your cameras thanks to the hard work by [@hunterjm].
+
+
+more webhooks
+
+
+
???
Alpha edit mode for Lovelace.
From 4a6d3f5f35e1b9f47898b92290373580e0401771 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Fri, 9 Nov 2018 22:40:17 +0100
Subject: [PATCH 37/58] Add frontend piece
---
source/_posts/2018-11-08-release-82.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
index be6c57ea0b3..45540e0aae4 100644
--- a/source/_posts/2018-11-08-release-82.markdown
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -15,6 +15,10 @@ It's time for another great release. As this includes the tail-end of HacktoberF
First cool new feature is that you can now use TensorFlow, a machine learning framework, to detect objects on your cameras thanks to the hard work by [@hunterjm].
+Next up is that [@rohankapoorcom] has been working hard on converting more integrations to the Webhook format. This allows for easy setting up via the UI and generates difficult to guess urls. This release includes Mailgun, Twilio and DialogFlow.
+
+The frontend team has been [BUSY](https://github.com/home-assistant/home-assistant-polymer/pull/1974). We're prepping Lovelace for general release and slowly all pieces are coming together. This release introduces an experimental alpha ultra-raw UI editor for Lovelace cards. It requires that your card has an ID but then, it just works. Including a live preview of the config you're editing.
+
more webhooks
From e55015ecd30fa9f33b4de188dde83cc9252f8878 Mon Sep 17 00:00:00 2001
From: Adam Belebczuk
Date: Fri, 9 Nov 2018 16:35:32 -0500
Subject: [PATCH 38/58] Documentation update for WeMo disable_discovery
configuration variable (#7314)
* WeMo - Disable Discovery - Documentation Update
* WeMo - Disable Discovery - Correct typos
* WeMo - Disable Discovery - Corrected bad default value for static
---
source/_components/wemo.markdown | 36 +++++++++++++++++++-------------
1 file changed, 21 insertions(+), 15 deletions(-)
diff --git a/source/_components/wemo.markdown b/source/_components/wemo.markdown
index 62cd2b5e2f6..a9e2758387f 100644
--- a/source/_components/wemo.markdown
+++ b/source/_components/wemo.markdown
@@ -2,7 +2,7 @@
layout: page
title: "Belkin WeMo"
description: "Instructions on how to integrate Belkin WeMo devices into Home Assistant."
-date: 2016-02-20 00:41
+date: 2018-11-01 01:53
sidebar: true
comments: false
sharing: true
@@ -17,41 +17,47 @@ The `wemo` component is the main component to integrate various [Belkin WeMo](ht
## {% linkable_title Configuration %}
-Supported devices will be automatically discovered if the discovery component is enabled. Loading the `wemo` component will scan the local network for WeMo devices, even if you are not using the discovery component
-
-```yaml
-# Example configuration.yaml entry
-wemo:
-```
-
{% configuration %}
static:
description: One or more static IP adresses for WeMo to use
required: false
type: list
- default: 1
+ disable_discovery:
+ description: Setting this value to true will prevent the automatic discovery of WeMo devices by the wemo platform and the discovery platform (static devices will still be discovered)
+ required: false
+ type: boolean
+ default: false
{% endconfiguration %}
-Alternately, WeMo devices that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, or devices in a remote location reachable over a VPN, you will need to configure them manually. This is also useful if you wish to disable discovery for some WeMo's, even if they are local. Example static configuration:
+Supported devices will be automatically discovered if the optional `disable_discovery` configuration item is omitted or set to false or if the `discovery` component is enabled. If the `disable_discovery` configuration item is set to true, then automatic discovery of WeMo devices is disabled both for the `wemo` component and for the `discovery` component. Loading the `wemo` component with the `disable_discovery` configuration item omitted or set to false will scan the local network for WeMo devices, even if you are not using the `discovery` component.
```yaml
+# Example configuration.yaml entry with automatic discovery enabled
wemo:
+ disable_discovery: false
+```
+
+Alternately, WeMo devices that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, or devices in a remote location reachable over a VPN, you will need to configure them manually. Statically configured devices may be used with or without automatic discovery enabled. Example static configuration:
+
+```yaml
+# Example configuration.yaml entry with automatic discovery disabled, and 2 statically configured devices
+wemo:
+ disable_discovery: true
static:
- 192.168.1.23
- 192.168.52.172
```
-Any WeMo devices that are not statically configured but reachable via discovery will still be added automatically.
+Note that if you use static device entries, you may want to set up your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability.
-Note that if you use this, you may want to set up your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability.
-
-If the device doesn't seem to work and all you see is the state "unavailable" on your dashboard, check that your firewall doesn't block incoming request on port 8989 since this is the address to which the WeMo devices send their update.
+If the device doesn't seem to work and all you see is the state "unavailable" on your dashboard, check that your firewall doesn't block incoming requests on port 8989, since this is the port to which the WeMo devices send their updates.
## {% linkable_title Emulated devices %}
-Various software that emulates WeMo devices often uses alternative ports. Static configuration should include the port value:
+Various software that emulate WeMo devices often use alternative ports. Static configuration should include the port value:
```yaml
+# Example configuration.yaml entry with static device entries that include non-standard port numbers
wemo:
static:
- 192.168.1.23:52001
From 8288be14eff722a5384f258b47b05c7628002d03 Mon Sep 17 00:00:00 2001
From: Adam Belebczuk
Date: Sat, 10 Nov 2018 02:18:07 -0500
Subject: [PATCH 39/58] WeMo - Change name of discovery option (#7453)
---
source/_components/wemo.markdown | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/source/_components/wemo.markdown b/source/_components/wemo.markdown
index a9e2758387f..fb16345b383 100644
--- a/source/_components/wemo.markdown
+++ b/source/_components/wemo.markdown
@@ -22,19 +22,22 @@ The `wemo` component is the main component to integrate various [Belkin WeMo](ht
description: One or more static IP adresses for WeMo to use
required: false
type: list
- disable_discovery:
- description: Setting this value to true will prevent the automatic discovery of WeMo devices by the wemo platform and the discovery platform (static devices will still be discovered)
+ discovery:
+ description: Setting this value to false will prevent the automatic discovery of WeMo devices by the wemo platform and the discovery platform (static devices will still be discovered)
required: false
type: boolean
- default: false
+ default: true
{% endconfiguration %}
-Supported devices will be automatically discovered if the optional `disable_discovery` configuration item is omitted or set to false or if the `discovery` component is enabled. If the `disable_discovery` configuration item is set to true, then automatic discovery of WeMo devices is disabled both for the `wemo` component and for the `discovery` component. Loading the `wemo` component with the `disable_discovery` configuration item omitted or set to false will scan the local network for WeMo devices, even if you are not using the `discovery` component.
+Supported devices will be automatically discovered if the optional `discovery` configuration item is omitted or set to true or if the `discovery` component is enabled. If the `discovery` configuration item is set to false, then automatic discovery of WeMo devices is disabled both for the `wemo` component and for the `discovery` component. Loading the `wemo` component with the `discovery` configuration item omitted or set to true will scan the local network for WeMo devices, even if you are not using the `discovery` component.
```yaml
-# Example configuration.yaml entry with automatic discovery enabled
+# Example configuration.yaml entry with automatic discovery enabled (by omitting the discovery configuration item)
wemo:
- disable_discovery: false
+
+# Example configuration.yaml entry with automatic discovery enabled (by explicitly setting the discovery configuration item)
+wemo:
+ discovery: true
```
Alternately, WeMo devices that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, or devices in a remote location reachable over a VPN, you will need to configure them manually. Statically configured devices may be used with or without automatic discovery enabled. Example static configuration:
@@ -42,7 +45,7 @@ Alternately, WeMo devices that are not discoverable can be statically configured
```yaml
# Example configuration.yaml entry with automatic discovery disabled, and 2 statically configured devices
wemo:
- disable_discovery: true
+ discovery: false
static:
- 192.168.1.23
- 192.168.52.172
From 3fe9c0159880b0405af4e5adcd223a03dfb58040 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 10 Nov 2018 09:36:37 +0100
Subject: [PATCH 40/58] Fix brokne links
---
...rance.markdown => sensor.meteo_france.markdown} | 0
source/_posts/2018-11-08-release-82.markdown | 14 +++++++-------
2 files changed, 7 insertions(+), 7 deletions(-)
rename source/_components/{sensor.meteofrance.markdown => sensor.meteo_france.markdown} (100%)
diff --git a/source/_components/sensor.meteofrance.markdown b/source/_components/sensor.meteo_france.markdown
similarity index 100%
rename from source/_components/sensor.meteofrance.markdown
rename to source/_components/sensor.meteo_france.markdown
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
index 45540e0aae4..c6556eedda3 100644
--- a/source/_posts/2018-11-08-release-82.markdown
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -39,7 +39,7 @@ Tensorflow.
- Add device tracking for the BT Smart Hub router ([@jxwolstenholme] - [#17158]) ([device_tracker docs]) (new-platform)
- Météo-france sensor : current weather and 1 hour rain forecast ([@victorcerutti] - [#17773]) ([sensor.meteo_france docs]) (new-platform)
- Support for WeMo Humidifier ([@sqldiablo] - [#17996]) ([wemo docs]) ([fan.wemo docs]) (new-platform)
-- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) ([sensor.greeneye_monitor_current docs]) ([sensor.greeneye_monitor_pulse docs]) ([sensor.greeneye_monitor_temperature docs]) (new-platform)
+- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) (new-platform)
- TensorFlow image_processing component ([@hunterjm] - [#17795]) ([image_processing.tensorflow docs]) (new-platform)
## {% linkable_title If you need help... %}
@@ -78,7 +78,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Fix log error message ([@pvizeli] - [#18305]) ([hassio docs]) (beta fix)
- Bump pyhaversion to 2.0.2 ([@ludeeus] - [#18318]) ([sensor.version docs]) (beta fix)
- Fix xiaomi binary_sensor warning ([@Danielhiversen] - [#18280]) ([binary_sensor.xiaomi_aqara docs]) (beta fix)
-- Remove Velbus climate platform ([@balloob] - [#18319]) ([velbus docs]) ([climate.velbus docs]) (beta fix)
+- Remove Velbus climate platform ([@balloob] - [#18319]) ([velbus docs]) (beta fix)
- fix last device ignored ([@abmantis] - [#18329]) ([device_tracker docs]) (beta fix)
## {% linkable_title All changes %}
@@ -125,7 +125,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Add contact sensors to alexa smart home ([@abmantis] - [#17704]) ([alexa docs])
- Upgrade flake8 to 3.6.0 ([@scop] - [#17770])
- Install face_recognition on Docker build ([@lights0123] - [#17502])
-- Delete sensor.yahoo_finance ([@rohankapoorcom] - [#17805]) ([sensor.yahoo_finance docs])
+- Delete sensor.yahoo_finance ([@rohankapoorcom] - [#17805])
- deCONZ: configure service can now use 'field' as a subpath together with 'entity' ([@lbschenkel] - [#17722]) ([deconz docs])
- Bumped NDMS2 client to 0.0.5 to fix unicode characters support ([@foxel] - [#17803]) ([device_tracker docs])
- Upgrade numpy to 1.15.3 ([@fabaff] - [#17796]) ([binary_sensor.trend docs]) ([image_processing.opencv docs])
@@ -161,7 +161,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Upgrade pytest to 3.9.3 ([@scop] - [#17921])
- Extract entity ids from all templates ([@amelchio] - [#17902]) ([binary_sensor.template docs])
- Make light.yeelight stop doing IO when accessing properties ([@rohankapoorcom] - [#17917]) ([light.yeelight docs])
-- Fixes for upnp-component/#17753 and missing hass-data when only setup from config entry ([@StevenLooman] - [#17868]) ([upnp docs]) ([media_player.dlna_dmr docs]) ([sensor.igd docs])
+- Fixes for upnp-component/#17753 and missing hass-data when only setup from config entry ([@StevenLooman] - [#17868]) ([upnp docs]) ([media_player.dlna_dmr docs])
- Fix for verify_ssl in the pi_hole sensor. ([@ludeeus] - [#17910]) ([sensor.pi_hole docs])
- Permissions improv ([@balloob] - [#17811])
- Fix incorrect chevy discovery ([@balloob] - [#17942]) ([mychevy docs])
@@ -208,7 +208,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Added identifier and name to connect/disconnect events ([@jaredquinn] - [#18078]) ([keyboard_remote docs])
- Fix in Daikin.py for set swing_mode and speed ([@MatteGary] - [#18013]) ([climate.daikin docs])
- Allow different types to match in pilight ([@akloeckner] - [#17922]) ([binary_sensor.pilight docs])
-- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) ([sensor.greeneye_monitor_current docs]) ([sensor.greeneye_monitor_pulse docs]) ([sensor.greeneye_monitor_temperature docs]) (new-platform)
+- Add a component for GreenEye Monitor ([@jkeljo] - [#16378]) ([greeneye_monitor docs]) (new-platform)
- HomematicIP_Cloud fix test ([@mxworm] - [#17376]) ([homematicip_cloud docs])
- Upgrade locationsharinglib to 3.0.7 ([@fabaff] - [#18083]) ([device_tracker docs])
- Upgrade sqlalchemy to 1.2.13 ([@fabaff] - [#18084]) ([sensor.sql docs])
@@ -235,7 +235,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Added service select_video_output and video_out attribute ([@leothlon] - [#18081]) ([media_player.onkyo docs])
- Darksky: Round all temperatures to 1 decimal place ([@leppa] - [#18119]) ([sensor.darksky docs])
- Convert nsw rural fire tests to async ([@armills] - [#18112])
-- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs]) ([climate.velbus docs])
+- Adding climate.velbus support ([@Cereal2nd] - [#18100]) ([velbus docs])
- Changed from pifacecommon 4.1.2 to 4.2.2 to make the piface digital i/o boards work on rpi like 3 ([@vacumet] - [#18101]) ([rpi_pfio docs])
- Update Pollen.com to use numpy for trend analysis ([@bachya] - [#18107]) ([sensor.pollen docs]) (breaking change)
- Exposes initial attribute on the entity. ([@ludeeus] - [#18123]) ([input_number docs])
@@ -261,7 +261,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Fix log error message ([@pvizeli] - [#18305]) ([hassio docs]) (beta fix)
- Bump pyhaversion to 2.0.2 ([@ludeeus] - [#18318]) ([sensor.version docs]) (beta fix)
- Fix xiaomi binary_sensor warning ([@Danielhiversen] - [#18280]) ([binary_sensor.xiaomi_aqara docs]) (beta fix)
-- Remove Velbus climate platform ([@balloob] - [#18319]) ([velbus docs]) ([climate.velbus docs]) (beta fix)
+- Remove Velbus climate platform ([@balloob] - [#18319]) ([velbus docs]) (beta fix)
- fix last device ignored ([@abmantis] - [#18329]) ([device_tracker docs]) (beta fix)
[#14933]: https://github.com/home-assistant/home-assistant/pull/14933
From 84779e85b6d6c9c73bcf4fa20ef28c07b7c9f5b5 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Sat, 10 Nov 2018 09:51:46 +0100
Subject: [PATCH 41/58] Fixes
---
source/_posts/2018-11-08-release-82.markdown | 31 ++++++++----------
.../blog/2018-11-release-82/lovelace-edit.png | Bin 0 -> 42150 bytes
2 files changed, 14 insertions(+), 17 deletions(-)
create mode 100644 source/images/blog/2018-11-release-82/lovelace-edit.png
diff --git a/source/_posts/2018-11-08-release-82.markdown b/source/_posts/2018-11-08-release-82.markdown
index c6556eedda3..7d49a470d33 100644
--- a/source/_posts/2018-11-08-release-82.markdown
+++ b/source/_posts/2018-11-08-release-82.markdown
@@ -1,38 +1,34 @@
---
layout: post
-title: "0.82: TensorFlow, Z-Wave Barrier Class, "
-description: "TBD"
+title: "0.82: TensorFlow, Lovelace UI edit, Z-Wave Barrier Class"
+description: "We are glad to inform you that yet another epic release has landed."
date: 2018-11-09 00:01:00
date_formatted: "November 9, 2018"
author: Paulus Schoutsen
author_twitter: balloob
comments: true
categories: Release-Notes
-og_image: /images/blog/2018-11-release-82/components.png
+og_image: /images/blog/2018-11-release-82/lovelace-edit.png
---
It's time for another great release. As this includes the tail-end of HacktoberFest, it's packed again with stuff. Hope you like stuff.
-First cool new feature is that you can now use TensorFlow, a machine learning framework, to detect objects on your cameras thanks to the hard work by [@hunterjm].
+I want to do a shout out to all the people who help with the documentation. Since the beginning of HacktoberFest, we've seen [953 PRs](https://github.com/home-assistant/home-assistant.io/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+closed%3A%3E2018-10-01) get merged, 953! Especially thanks to [@klaasnicolaas] who has converted 240 pages to the new configuration format. DAAAAANG.
+
+We also got some cool new features. The first one being that you can now use TensorFlow, a machine learning framework, to detect objects on your cameras thanks to the hard work by [@hunterjm]. Check out [the docs][image_processing.tensorflow docs] for more info.
Next up is that [@rohankapoorcom] has been working hard on converting more integrations to the Webhook format. This allows for easy setting up via the UI and generates difficult to guess urls. This release includes Mailgun, Twilio and DialogFlow.
-The frontend team has been [BUSY](https://github.com/home-assistant/home-assistant-polymer/pull/1974). We're prepping Lovelace for general release and slowly all pieces are coming together. This release introduces an experimental alpha ultra-raw UI editor for Lovelace cards. It requires that your card has an ID but then, it just works. Including a live preview of the config you're editing.
+The frontend team has been [BUSY](https://github.com/home-assistant/home-assistant-polymer/pull/1974). We're prepping Lovelace for general release and slowly all pieces are coming together. This release introduces an experimental, alpha, ultra-raw, (enough warnings already?) UI editor for Lovelace cards. It requires that your card has an ID but then, it just works. Including a live preview of the config you're editing.
+
+
+ Screenshot of editing a Lovelace card.
+
-more webhooks
+Also frontend related, in version 0.81 we removed all config splitting functions for ui-lovelace.yaml, we are happy to report that we managed to add back support for `!secret` and `!include`. The rest of the config splitting commands you are used to in `configuration.yaml` will not be available for Lovelace. Mind that you can not edit content in `!include` from the UI, and `!secret` cannot be used in the UI or preview at the moment.
-
-
-???
-
-Alpha edit mode for Lovelace.
-
-Soft-fork of OZW to add Barrier.
-
-Frontend release notes are here: https://github.com/home-assistant/home-assistant-polymer/pull/1974
-
-Tensorflow.
+And we have one more thing… we have soft-forked Open Z-Wave and have added support for the barrier command class! This means that now you will be able to control your garage doors from Z-Wave without compiling Open Z-Wave yourself. We'll continue to monitor what other features we can add to our fork while remaining close to the OZW project.
## {% linkable_title New Platforms %}
@@ -444,6 +440,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[#18318]: https://github.com/home-assistant/home-assistant/pull/18318
[#18319]: https://github.com/home-assistant/home-assistant/pull/18319
[#18329]: https://github.com/home-assistant/home-assistant/pull/18329
+[@klaasnicolaas]: https://github.com/klaasnicolaas
[@Arkkimaagi]: https://github.com/Arkkimaagi
[@Cereal2nd]: https://github.com/Cereal2nd
[@Danielhiversen]: https://github.com/Danielhiversen
diff --git a/source/images/blog/2018-11-release-82/lovelace-edit.png b/source/images/blog/2018-11-release-82/lovelace-edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f64e8e4d0a25a418b3720f50e1bca7855a4abd8
GIT binary patch
literal 42150
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%0Dpoto47zu#NS)e%AL4VD5+m
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