From 952aaf8aa0389e5bbfa540dd0f86a27484695c19 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 20 Apr 2018 14:36:47 -0400 Subject: [PATCH 01/71] Add release blog post --- source/_posts/2018-04-27-release-68.markdown | 489 +++++++++++++++++++ 1 file changed, 489 insertions(+) create mode 100644 source/_posts/2018-04-27-release-68.markdown diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown new file mode 100644 index 0000000000..788e068c7e --- /dev/null +++ b/source/_posts/2018-04-27-release-68.markdown @@ -0,0 +1,489 @@ +--- +layout: post +title: "0.68: UPDATE DATE" +description: "UPDATE DATE" +date: 2018-04-20 00:01:00 +date_formatted: "April 27, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-04-0.68/components.png +--- + + + +Highlights: + +- Ability to _control_ HomeKit +- Eufy bulbs + +## New Platforms + +- Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) +- Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) +- Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) +- Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) +- Add AVM fritzbox smarthome component ([@hthiery] - [#10688]) ([fritzbox docs]) ([climate.fritzbox docs]) ([switch.fritzbox docs]) (new-platform) +- Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) +- Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) +- Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) + +## New Features + +- Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) +- Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) +- Support CO2/PM2.5/Light sensors in HomeKit ([@Yonsm] - [#13804]) ([homekit docs]) (new-feature) +- Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) +- Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) + +## {% 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. + + +## Breaking Changes + +- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) + +## Beta Fixes + +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) + +## All changes + +- Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) +- Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) +- Add option to ignore availability in google calendar events ([@cgtobi] - [#13714]) ([google docs]) ([calendar.google docs]) +- Allow use of date_string in service call ([@Juggels] - [#13256]) ([calendar.todoist docs]) +- Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) +- added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) +- Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) +- Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) +- Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) +- Brightness conversion for Abode dimmers ([@shred86] - [#13711]) ([light.abode docs]) +- Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) +- Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) +- Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) +- Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) +- Prepare entity component for config entries ([@balloob] - [#13730]) +- Check valid file on get_size ([@robmarkcole] - [#13756]) ([sensor.folder docs]) +- Qwikswitch sensors ([@kellerza] - [#13622]) ([sensor.qwikswitch docs]) +- Device type mapping introduced to avoid breaking change ([@syssi] - [#13765]) ([light.yeelight docs]) +- Only flag media position as updated when it really has ([@molobrakos] - [#13737]) ([media_player.squeezebox docs]) +- Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) +- Use config entry to setup platforms ([@balloob] - [#13752]) ([hue docs]) ([light docs]) ([light.hue docs]) +- Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) +- Snips sounds ([@tschmidty69] - [#13746]) ([snips docs]) +- Add missing DISCHRG state ([@swilson] - [#13787]) ([sensor.nut docs]) +- Improved upgradeability HomeKit security_systems ([@cdce8p] - [#13783]) ([homekit docs]) +- Qwikswitch Entity Register ([@kellerza] - [#13791]) ([qwikswitch docs]) ([sensor.qwikswitch docs]) +- Updated beacontools to 1.2.3 ([@citruz] - [#13792]) ([sensor.eddystone_temperature docs]) +- script/lazytox: Ensure Flake8 passes for tests/ ([@kellerza] - [#13794]) +- Fix bad metrics format for short metrics. ([@michaelkuty] - [#13778]) ([prometheus docs]) +- Update bellows to 0.5.2 ([@rcloran] - [#13800]) ([zha docs]) +- device_tracker.ubus: Handle devices not running DHCP ([@tobygray] - [#13579]) ([device_tracker docs]) +- Update yweather.py ([@wiuwiu] - [#13802]) ([weather.yweather docs]) +- Tibber lib update ([@Danielhiversen] - [#13811]) ([sensor.tibber docs]) +- Update pyhomematic to 0.1.41 ([@danielperna84] - [#13814]) ([homematic docs]) +- Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) +- Homekit refactor ([@cdce8p] - [#13707]) ([homekit docs]) +- HomeKit type_cover fix ([@cdce8p] - [#13832]) ([homekit docs]) +- Allow platform unloading ([@balloob] - [#13784]) ([hue docs]) ([light docs]) +- Support CO2/PM2.5/Light sensors in HomeKit ([@Yonsm] - [#13804]) ([homekit docs]) (new-feature) +- Clicksend: Added support for multiple recipients ([@xTCx] - [#13812]) ([notify docs]) +- Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) +- Abode better events ([@MisterWil] - [#13809]) ([abode docs]) +- UPnP async ([@dgomes] - [#13666]) ([upnp docs]) ([sensor.upnp docs]) +- Update example (fixes #13834) ([@fabaff] - [#13839]) +- Add support for deCONZ daylight sensor ([@marthoc] - [#13479]) ([deconz docs]) ([sensor.deconz docs]) +- initialize queue before filtering ([@dgomes] - [#13842]) ([sensor.filter docs]) +- Extract config flow to own module ([@balloob] - [#13840]) ([config docs]) ([deconz docs]) ([hue docs]) +- Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) +- bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) +- Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) +- Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) +- add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) +- Further untangle data entry flow ([@balloob] - [#13855]) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Added snips service descriptions ([@tschmidty69] - [#13883]) +- Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) +- Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) +- Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) +- Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) +- Add more math functions to templates ([@Shou] - [#13915]) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Add extra attributes for device scanner, Nmap and Unifi (IP, SSID, etc.) ([@stephanerosi] - [#13673]) ([device_tracker docs]) +- Fixed Capsman data not being used ([@Marco98] - [#13917]) ([device_tracker docs]) +- Broadlink Sensor - switch to connection-less mode ([@Paxy] - [#13761]) ([sensor.broadlink docs]) +- Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) +- Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) +- Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) +- Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) +- Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) +- Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) +- Update of python-mpd2 ([@karlkar] - [#13921]) ([media_player.mpd docs]) +- Add AVM fritzbox smarthome component ([@hthiery] - [#10688]) ([fritzbox docs]) ([climate.fritzbox docs]) ([switch.fritzbox docs]) (new-platform) +- Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) +- Upgrade aiohttp to 3.1.3 ([@fabaff] - [#13938]) +- Upgrade youtube_dl to 2018.04.16 ([@fabaff] - [#13937]) ([media_extractor docs]) +- Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) +- Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) +- Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) +- Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) +- Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) +- Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) +- Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +- Colorlog windows fix ([@veleek] - [#13929]) ([notify docs]) +- deCONZ migrate setup fully to config entry ([@Kane610] - [#13679]) ([deconz docs]) +- Alexa thermostat fails to properly parse 'value' field for climate ([@no2chem] - [#13958]) ([alexa docs]) +- renaming icons ([@NovapaX] - [#13982]) ([hdmi_cec docs]) ([vacuum docs]) ([vacuum.dyson docs]) ([vacuum.neato docs]) ([vacuum.roomba docs]) ([vacuum.xiaomi_miio docs]) +- Fix for Lokalise backend misinterpretation of keys ([@armills] - [#13986]) +- Bump locationsharinglib to 1.2.1 ([@thelittlefireman] - [#13980]) ([device_tracker docs]) +- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Add additional receiver for Onkyo zone 2 ([@koolsb] - [#13551]) ([media_player.onkyo docs]) +- Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) +- Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) +- Useless code removed ([@syssi] - [#13996]) ([maxcube docs]) +- Add Homematic HmIP-SWO-PR weather sensor support ([@pascalhahn] - [#13904]) ([homematic docs]) +- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Log an error instead of raising an exception ([@syssi] - [#14006]) ([sensor.sht31 docs]) +- Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) +- Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) +- Add sensor device classes ([@balloob] - [#14010]) ([sensor docs]) ([sensor.ecobee docs]) ([sensor.linux_battery docs]) ([sensor.nest docs]) + +[#10688]: https://github.com/home-assistant/home-assistant/pull/10688 +[#12224]: https://github.com/home-assistant/home-assistant/pull/12224 +[#12459]: https://github.com/home-assistant/home-assistant/pull/12459 +[#12831]: https://github.com/home-assistant/home-assistant/pull/12831 +[#12952]: https://github.com/home-assistant/home-assistant/pull/12952 +[#13075]: https://github.com/home-assistant/home-assistant/pull/13075 +[#13256]: https://github.com/home-assistant/home-assistant/pull/13256 +[#13318]: https://github.com/home-assistant/home-assistant/pull/13318 +[#13346]: https://github.com/home-assistant/home-assistant/pull/13346 +[#13357]: https://github.com/home-assistant/home-assistant/pull/13357 +[#13479]: https://github.com/home-assistant/home-assistant/pull/13479 +[#13497]: https://github.com/home-assistant/home-assistant/pull/13497 +[#13517]: https://github.com/home-assistant/home-assistant/pull/13517 +[#13534]: https://github.com/home-assistant/home-assistant/pull/13534 +[#13549]: https://github.com/home-assistant/home-assistant/pull/13549 +[#13551]: https://github.com/home-assistant/home-assistant/pull/13551 +[#13579]: https://github.com/home-assistant/home-assistant/pull/13579 +[#13622]: https://github.com/home-assistant/home-assistant/pull/13622 +[#13625]: https://github.com/home-assistant/home-assistant/pull/13625 +[#13666]: https://github.com/home-assistant/home-assistant/pull/13666 +[#13673]: https://github.com/home-assistant/home-assistant/pull/13673 +[#13679]: https://github.com/home-assistant/home-assistant/pull/13679 +[#13707]: https://github.com/home-assistant/home-assistant/pull/13707 +[#13711]: https://github.com/home-assistant/home-assistant/pull/13711 +[#13714]: https://github.com/home-assistant/home-assistant/pull/13714 +[#13716]: https://github.com/home-assistant/home-assistant/pull/13716 +[#13720]: https://github.com/home-assistant/home-assistant/pull/13720 +[#13727]: https://github.com/home-assistant/home-assistant/pull/13727 +[#13728]: https://github.com/home-assistant/home-assistant/pull/13728 +[#13730]: https://github.com/home-assistant/home-assistant/pull/13730 +[#13731]: https://github.com/home-assistant/home-assistant/pull/13731 +[#13732]: https://github.com/home-assistant/home-assistant/pull/13732 +[#13733]: https://github.com/home-assistant/home-assistant/pull/13733 +[#13735]: https://github.com/home-assistant/home-assistant/pull/13735 +[#13736]: https://github.com/home-assistant/home-assistant/pull/13736 +[#13737]: https://github.com/home-assistant/home-assistant/pull/13737 +[#13739]: https://github.com/home-assistant/home-assistant/pull/13739 +[#13741]: https://github.com/home-assistant/home-assistant/pull/13741 +[#13743]: https://github.com/home-assistant/home-assistant/pull/13743 +[#13744]: https://github.com/home-assistant/home-assistant/pull/13744 +[#13746]: https://github.com/home-assistant/home-assistant/pull/13746 +[#13752]: https://github.com/home-assistant/home-assistant/pull/13752 +[#13756]: https://github.com/home-assistant/home-assistant/pull/13756 +[#13761]: https://github.com/home-assistant/home-assistant/pull/13761 +[#13764]: https://github.com/home-assistant/home-assistant/pull/13764 +[#13765]: https://github.com/home-assistant/home-assistant/pull/13765 +[#13770]: https://github.com/home-assistant/home-assistant/pull/13770 +[#13773]: https://github.com/home-assistant/home-assistant/pull/13773 +[#13778]: https://github.com/home-assistant/home-assistant/pull/13778 +[#13783]: https://github.com/home-assistant/home-assistant/pull/13783 +[#13784]: https://github.com/home-assistant/home-assistant/pull/13784 +[#13787]: https://github.com/home-assistant/home-assistant/pull/13787 +[#13790]: https://github.com/home-assistant/home-assistant/pull/13790 +[#13791]: https://github.com/home-assistant/home-assistant/pull/13791 +[#13792]: https://github.com/home-assistant/home-assistant/pull/13792 +[#13794]: https://github.com/home-assistant/home-assistant/pull/13794 +[#13796]: https://github.com/home-assistant/home-assistant/pull/13796 +[#13800]: https://github.com/home-assistant/home-assistant/pull/13800 +[#13802]: https://github.com/home-assistant/home-assistant/pull/13802 +[#13804]: https://github.com/home-assistant/home-assistant/pull/13804 +[#13809]: https://github.com/home-assistant/home-assistant/pull/13809 +[#13811]: https://github.com/home-assistant/home-assistant/pull/13811 +[#13812]: https://github.com/home-assistant/home-assistant/pull/13812 +[#13814]: https://github.com/home-assistant/home-assistant/pull/13814 +[#13819]: https://github.com/home-assistant/home-assistant/pull/13819 +[#13824]: https://github.com/home-assistant/home-assistant/pull/13824 +[#13832]: https://github.com/home-assistant/home-assistant/pull/13832 +[#13839]: https://github.com/home-assistant/home-assistant/pull/13839 +[#13840]: https://github.com/home-assistant/home-assistant/pull/13840 +[#13842]: https://github.com/home-assistant/home-assistant/pull/13842 +[#13851]: https://github.com/home-assistant/home-assistant/pull/13851 +[#13854]: https://github.com/home-assistant/home-assistant/pull/13854 +[#13855]: https://github.com/home-assistant/home-assistant/pull/13855 +[#13862]: https://github.com/home-assistant/home-assistant/pull/13862 +[#13865]: https://github.com/home-assistant/home-assistant/pull/13865 +[#13882]: https://github.com/home-assistant/home-assistant/pull/13882 +[#13883]: https://github.com/home-assistant/home-assistant/pull/13883 +[#13884]: https://github.com/home-assistant/home-assistant/pull/13884 +[#13887]: https://github.com/home-assistant/home-assistant/pull/13887 +[#13888]: https://github.com/home-assistant/home-assistant/pull/13888 +[#13889]: https://github.com/home-assistant/home-assistant/pull/13889 +[#13895]: https://github.com/home-assistant/home-assistant/pull/13895 +[#13900]: https://github.com/home-assistant/home-assistant/pull/13900 +[#13903]: https://github.com/home-assistant/home-assistant/pull/13903 +[#13904]: https://github.com/home-assistant/home-assistant/pull/13904 +[#13905]: https://github.com/home-assistant/home-assistant/pull/13905 +[#13906]: https://github.com/home-assistant/home-assistant/pull/13906 +[#13908]: https://github.com/home-assistant/home-assistant/pull/13908 +[#13915]: https://github.com/home-assistant/home-assistant/pull/13915 +[#13917]: https://github.com/home-assistant/home-assistant/pull/13917 +[#13918]: https://github.com/home-assistant/home-assistant/pull/13918 +[#13920]: https://github.com/home-assistant/home-assistant/pull/13920 +[#13921]: https://github.com/home-assistant/home-assistant/pull/13921 +[#13929]: https://github.com/home-assistant/home-assistant/pull/13929 +[#13934]: https://github.com/home-assistant/home-assistant/pull/13934 +[#13935]: https://github.com/home-assistant/home-assistant/pull/13935 +[#13937]: https://github.com/home-assistant/home-assistant/pull/13937 +[#13938]: https://github.com/home-assistant/home-assistant/pull/13938 +[#13940]: https://github.com/home-assistant/home-assistant/pull/13940 +[#13942]: https://github.com/home-assistant/home-assistant/pull/13942 +[#13943]: https://github.com/home-assistant/home-assistant/pull/13943 +[#13946]: https://github.com/home-assistant/home-assistant/pull/13946 +[#13948]: https://github.com/home-assistant/home-assistant/pull/13948 +[#13958]: https://github.com/home-assistant/home-assistant/pull/13958 +[#13960]: https://github.com/home-assistant/home-assistant/pull/13960 +[#13970]: https://github.com/home-assistant/home-assistant/pull/13970 +[#13974]: https://github.com/home-assistant/home-assistant/pull/13974 +[#13980]: https://github.com/home-assistant/home-assistant/pull/13980 +[#13982]: https://github.com/home-assistant/home-assistant/pull/13982 +[#13986]: https://github.com/home-assistant/home-assistant/pull/13986 +[#13996]: https://github.com/home-assistant/home-assistant/pull/13996 +[#14003]: https://github.com/home-assistant/home-assistant/pull/14003 +[#14005]: https://github.com/home-assistant/home-assistant/pull/14005 +[#14006]: https://github.com/home-assistant/home-assistant/pull/14006 +[#14010]: https://github.com/home-assistant/home-assistant/pull/14010 +[#14013]: https://github.com/home-assistant/home-assistant/pull/14013 +[@B1tMaster]: https://github.com/B1tMaster +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@Danielhiversen]: https://github.com/Danielhiversen +[@Juggels]: https://github.com/Juggels +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Kirchoff]: https://github.com/Kirchoff +[@Marco98]: https://github.com/Marco98 +[@MisterWil]: https://github.com/MisterWil +[@NovapaX]: https://github.com/NovapaX +[@OttoWinter]: https://github.com/OttoWinter +[@Paxy]: https://github.com/Paxy +[@Shou]: https://github.com/Shou +[@TheCellMC]: https://github.com/TheCellMC +[@Yonsm]: https://github.com/Yonsm +[@aav7fl]: https://github.com/aav7fl +[@andersonshatch]: https://github.com/andersonshatch +[@armills]: https://github.com/armills +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@cgtobi]: https://github.com/cgtobi +[@citruz]: https://github.com/citruz +[@dangyuluo]: https://github.com/dangyuluo +[@danielperna84]: https://github.com/danielperna84 +[@dersger]: https://github.com/dersger +[@dgomes]: https://github.com/dgomes +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@escoand]: https://github.com/escoand +[@fabaff]: https://github.com/fabaff +[@geekofweek]: https://github.com/geekofweek +[@gerard33]: https://github.com/gerard33 +[@hmn]: https://github.com/hmn +[@hthiery]: https://github.com/hthiery +[@karlkar]: https://github.com/karlkar +[@kellerza]: https://github.com/kellerza +[@koolsb]: https://github.com/koolsb +[@marthoc]: https://github.com/marthoc +[@meauxt]: https://github.com/meauxt +[@michaelkuty]: https://github.com/michaelkuty +[@mjg59]: https://github.com/mjg59 +[@molobrakos]: https://github.com/molobrakos +[@nickw444]: https://github.com/nickw444 +[@no2chem]: https://github.com/no2chem +[@pascalhahn]: https://github.com/pascalhahn +[@philk]: https://github.com/philk +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@reefab]: https://github.com/reefab +[@robmarkcole]: https://github.com/robmarkcole +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@shred86]: https://github.com/shred86 +[@stephanerosi]: https://github.com/stephanerosi +[@swilson]: https://github.com/swilson +[@syssi]: https://github.com/syssi +[@thelittlefireman]: https://github.com/thelittlefireman +[@thrawnarn]: https://github.com/thrawnarn +[@titilambert]: https://github.com/titilambert +[@tobygray]: https://github.com/tobygray +[@tschmidty69]: https://github.com/tschmidty69 +[@veleek]: https://github.com/veleek +[@viorels]: https://github.com/viorels +[@wiuwiu]: https://github.com/wiuwiu +[@xTCx]: https://github.com/xTCx +[abode docs]: /components/abode/ +[alexa docs]: /components/alexa/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.hive docs]: /components/binary_sensor.hive/ +[binary_sensor.maxcube docs]: /components/binary_sensor.maxcube/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[calendar.google docs]: /components/calendar.google/ +[calendar.todoist docs]: /components/calendar.todoist/ +[climate.fritzbox docs]: /components/climate.fritzbox/ +[climate.hive docs]: /components/climate.hive/ +[climate.honeywell docs]: /components/climate.honeywell/ +[climate.maxcube docs]: /components/climate.maxcube/ +[climate.modbus docs]: /components/climate.modbus/ +[config docs]: /components/config/ +[cover.opengarage docs]: /components/cover.opengarage/ +[cover.tahoma docs]: /components/cover.tahoma/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[ecobee docs]: /components/ecobee/ +[eufy docs]: /components/eufy/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[fritzbox docs]: /components/fritzbox/ +[google docs]: /components/google/ +[hdmi_cec docs]: /components/hdmi_cec/ +[hive docs]: /components/hive/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[homematic docs]: /components/homematic/ +[hue docs]: /components/hue/ +[ihc docs]: /components/ihc/ +[light docs]: /components/light/ +[light.abode docs]: /components/light.abode/ +[light.aurora docs]: /components/light.aurora/ +[light.eufy docs]: /components/light.eufy/ +[light.hive docs]: /components/light.hive/ +[light.homekit_controller docs]: /components/light.homekit_controller/ +[light.hue docs]: /components/light.hue/ +[light.yeelight docs]: /components/light.yeelight/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[lutron_caseta docs]: /components/lutron_caseta/ +[maxcube docs]: /components/maxcube/ +[media_extractor docs]: /components/media_extractor/ +[media_player.blackbird docs]: /components/media_player.blackbird/ +[media_player.bluesound docs]: /components/media_player.bluesound/ +[media_player.cast docs]: /components/media_player.cast/ +[media_player.kodi docs]: /components/media_player.kodi/ +[media_player.mediaroom docs]: /components/media_player.mediaroom/ +[media_player.mpd docs]: /components/media_player.mpd/ +[media_player.onkyo docs]: /components/media_player.onkyo/ +[media_player.squeezebox docs]: /components/media_player.squeezebox/ +[media_player.webostv docs]: /components/media_player.webostv/ +[notify docs]: /components/notify/ +[notify.facebook docs]: /components/notify.facebook/ +[prometheus docs]: /components/prometheus/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor docs]: /components/sensor/ +[sensor.alpha_vantage docs]: /components/sensor.alpha_vantage/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: /components/sensor.broadlink/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.ebox docs]: /components/sensor.ebox/ +[sensor.ecobee docs]: /components/sensor.ecobee/ +[sensor.eddystone_temperature docs]: /components/sensor.eddystone_temperature/ +[sensor.filter docs]: /components/sensor.filter/ +[sensor.folder docs]: /components/sensor.folder/ +[sensor.foobot docs]: /components/sensor.foobot/ +[sensor.fritzbox_netmonitor docs]: /components/sensor.fritzbox_netmonitor/ +[sensor.hive docs]: /components/sensor.hive/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.linux_battery docs]: /components/sensor.linux_battery/ +[sensor.lmsensor docs]: /components/sensor.lmsensor/ +[sensor.miflora docs]: /components/sensor.miflora/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.nest docs]: /components/sensor.nest/ +[sensor.nut docs]: /components/sensor.nut/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ +[sensor.sht31 docs]: /components/sensor.sht31/ +[sensor.sigfox docs]: /components/sensor.sigfox/ +[sensor.smappee docs]: /components/sensor.smappee/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.tibber docs]: /components/sensor.tibber/ +[sensor.trafikverket_weatherstation docs]: /components/sensor.trafikverket_weatherstation/ +[sensor.upnp docs]: /components/sensor.upnp/ +[sensor.uscis docs]: /components/sensor.uscis/ +[skybell docs]: /components/skybell/ +[smappee docs]: /components/smappee/ +[snips docs]: /components/snips/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.edimax docs]: /components/switch.edimax/ +[switch.eufy docs]: /components/switch.eufy/ +[switch.fritzbox docs]: /components/switch.fritzbox/ +[switch.hive docs]: /components/switch.hive/ +[switch.vesync docs]: /components/switch.vesync/ +[tts docs]: /components/tts/ +[upnp docs]: /components/upnp/ +[vacuum docs]: /components/vacuum/ +[vacuum.dyson docs]: /components/vacuum.dyson/ +[vacuum.neato docs]: /components/vacuum.neato/ +[vacuum.roomba docs]: /components/vacuum.roomba/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[weather.yweather docs]: /components/weather.yweather/ +[zha docs]: /components/zha/ From 21ed92fb92b7b298c08a139842771032b133d46c Mon Sep 17 00:00:00 2001 From: Brian Hanifin Date: Sat, 21 Apr 2018 17:06:31 -0700 Subject: [PATCH 02/71] Change Page Title to "Homekit Switch" (#5222) * Change Page Title to "Homekit Switch" It was left titled "Homekit Light" when first published. * Minor cleanup --- source/_components/switch.homekit_controller.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.homekit_controller.markdown b/source/_components/switch.homekit_controller.markdown index 205316bdf2..43bf3be57b 100644 --- a/source/_components/switch.homekit_controller.markdown +++ b/source/_components/switch.homekit_controller.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "HomeKit Light" -description: "Instructions how to setup HomeKit switches within Home Assistant." +title: "HomeKit Switch" +description: "Instructions on how to setup HomeKit switches within Home Assistant." date: 2017-03-19 21:08 sidebar: true comments: false From c66272aa851b6e10cde38dd5514b1a677c3f9100 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 17:34:20 +0200 Subject: [PATCH 03/71] Fix release notes 0.68.0b0 (#5212) --- source/_posts/2018-04-27-release-68.markdown | 53 ++------------------ 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 788e068c7e..167a264a2a 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -18,7 +18,7 @@ Highlights: - Ability to _control_ HomeKit - Eufy bulbs -## New Platforms +## {% linkable_title New Platforms %} - Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) - Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) @@ -30,7 +30,7 @@ Highlights: - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) - Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) -## New Features +## {% linkable_title New Features %} - Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) - Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) @@ -47,35 +47,12 @@ Highlights: Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. -## Breaking Changes +## {% linkable_title Breaking Changes %} - Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) - Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) -## Beta Fixes - -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - -## All changes +## {% linkable_title All changes %} - Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) - Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) @@ -84,7 +61,6 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) - added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) - Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) - Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) - Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) - Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) @@ -92,7 +68,6 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) - Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) - Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) - Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) - Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) - Prepare entity component for config entries ([@balloob] - [#13730]) @@ -132,18 +107,13 @@ Experiencing issues introduced by this release? Please report them in our [issue - bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) - Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) - Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) - Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) - add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) - Further untangle data entry flow ([@balloob] - [#13855]) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) - Added snips service descriptions ([@tschmidty69] - [#13883]) - Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) - Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) - Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) - Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) - Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) - Add more math functions to templates ([@Shou] - [#13915]) @@ -154,10 +124,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) - Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) - Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) - Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) - Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) - Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) - Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) @@ -169,20 +137,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) - Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) - Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) - Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) - Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) - Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) - Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) From b455d059c8aa664d3e7164d683cfc545becd240e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 23 Apr 2018 13:42:55 -0400 Subject: [PATCH 04/71] Update 2018-04-27-release-68.markdown --- source/_posts/2018-04-27-release-68.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 167a264a2a..e8934b6296 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -17,6 +17,7 @@ Highlights: - Ability to _control_ HomeKit - Eufy bulbs +- Breaking MDI icons? ## {% linkable_title New Platforms %} From 033028b8819940641163f65fa7223cf903ef7866 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 23:39:04 +0200 Subject: [PATCH 05/71] Fix release version (#5236) --- _config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 38d26c045e..36d6b34978 100644 --- a/_config.yml +++ b/_config.yml @@ -139,9 +139,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 67 +current_minor_version: 68 current_patch_version: 0 -date_released: 2018-04-13 +date_released: 2018-04-27 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. From 5f7f542f680f5e194b156482a8ca54eaca34d687 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 23:30:23 -0400 Subject: [PATCH 06/71] Eufy update dates --- source/_components/eufy.markdown | 2 +- source/_components/light.eufy.markdown | 2 +- source/_components/switch.eufy.markdown | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown index c11870e401..294dd26902 100644 --- a/source/_components/eufy.markdown +++ b/source/_components/eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "Eufy" description: "Instructions on how to integrate Eufy devices into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown index 773d99f4aa..872526e1ed 100644 --- a/source/_components/light.eufy.markdown +++ b/source/_components/light.eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "EufyLights" description: "Instructions on how to integrate Eufy LED lights into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown index 22e56ae38b..0bfbae81e5 100644 --- a/source/_components/switch.eufy.markdown +++ b/source/_components/switch.eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "EufySwitch" description: "Instructions on how to integrate Eufy switches into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true From 0b948617b99cde82cabd88611b1c0119e692c6ef Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Wed, 25 Apr 2018 08:48:57 +0200 Subject: [PATCH 07/71] Updated release blog post for 0.68.0b1 (rc) (#5246) --- source/_posts/2018-04-27-release-68.markdown | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index e8934b6296..cc616913a5 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -30,6 +30,7 @@ Highlights: - Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) - Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) ## {% linkable_title New Features %} @@ -39,6 +40,15 @@ Highlights: - Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) - Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +## {% linkable_title Beta Fixes %} + +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) + ## {% 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. @@ -161,6 +171,12 @@ Experiencing issues introduced by this release? Please report them in our [issue - Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) - Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) - Add sensor device classes ([@balloob] - [#14010]) ([sensor docs]) ([sensor.ecobee docs]) ([sensor.linux_battery docs]) ([sensor.nest docs]) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) [#10688]: https://github.com/home-assistant/home-assistant/pull/10688 [#12224]: https://github.com/home-assistant/home-assistant/pull/12224 @@ -443,3 +459,22 @@ Experiencing issues introduced by this release? Please report them in our [issue [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [weather.yweather docs]: /components/weather.yweather/ [zha docs]: /components/zha/ +[#14008]: https://github.com/home-assistant/home-assistant/pull/14008 +[#14019]: https://github.com/home-assistant/home-assistant/pull/14019 +[#14025]: https://github.com/home-assistant/home-assistant/pull/14025 +[#14027]: https://github.com/home-assistant/home-assistant/pull/14027 +[#14041]: https://github.com/home-assistant/home-assistant/pull/14041 +[#14051]: https://github.com/home-assistant/home-assistant/pull/14051 +[@OttoWinter]: https://github.com/OttoWinter +[@balloob]: https://github.com/balloob +[@kellerza]: https://github.com/kellerza +[@marthoc]: https://github.com/marthoc +[@mjg59]: https://github.com/mjg59 +[@schmittx]: https://github.com/schmittx +[binary_sensor.qwikswitch docs]: /components/binary_sensor.qwikswitch/ +[config docs]: /components/config/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[media_player.cast docs]: /components/media_player.cast/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ From 73d436247a58bab4dc0185e925986d28658940e0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 26 Apr 2018 12:58:51 -0400 Subject: [PATCH 08/71] Add blog post about dev website --- .../_posts/2018-04-26-developer-site.markdown | 20 ++++++++++++++++++ .../2018-04-developer-website/screenshot.png | Bin 0 -> 67756 bytes 2 files changed, 20 insertions(+) create mode 100644 source/_posts/2018-04-26-developer-site.markdown create mode 100644 source/images/blog/2018-04-developer-website/screenshot.png diff --git a/source/_posts/2018-04-26-developer-site.markdown b/source/_posts/2018-04-26-developer-site.markdown new file mode 100644 index 0000000000..2895a83338 --- /dev/null +++ b/source/_posts/2018-04-26-developer-site.markdown @@ -0,0 +1,20 @@ +--- +layout: post +title: "New developer website" +description: "We have extracted the developer section of our website into its own website." +date: 2018-04-26 00:01:00 +date_formatted: "April 26, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcement +og_image: /images/blog/2018-04-developer-website/screenshot.png +--- + +When we launched the website in December 2014, we've only had a handful of components and usage instructions. Since then the website has grown to over a 1000 pages touching a wide range of topics. The growth, while great, also has put a lot of strain on how the docs are organised. One of the places that was especially suffering under the growth was the developer section. It was living under a single top menu item and had to contain everything in a single sidebar. + +To fix this, we're releasing a new website: [developers.home-assistant.io](https://developers.home-assistant.io). The website is aimed at people that are developing Home Assistant. It will contain resources how to setup your development environment, how to fix bugs, help with translations or improve the frontend. The main website will now solely be focused on Home Assistant users. + +Go check it out and let us know what you think: [developers.home-assistant.io](https://developers.home-assistant.io). + +Screenshot of the developer website diff --git a/source/images/blog/2018-04-developer-website/screenshot.png b/source/images/blog/2018-04-developer-website/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..faccecea640946f2dc86eb4019637cde7a56425b GIT binary patch literal 67756 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͗>e|250n8~6;h-Wi#N;?65w zve8poc9rs{$tpx~M@Y=)s&IpXP;}zp`#0`*1zTR2yjS#aHXGn(=}z|8V-zfhTUGsK z2E1G=Fr|PZGVh3)oYeJ?{l4ZMpLVPA8vx6bN?t(=cT_~g64>LMVm3#rK)W{gRHgdU zHRTPuEuacT@+B9DP{_$!$U>!bFtox7<`~daF=p$zk^D2gMID45u;h>F8DL^gO8RNb zKL;G~xxcn74N6%7&>2n_P^n4utP#W0S;UuorX^I0pI-)1n*>gWqSTR(r{X5Hb_r93<9+b`)!-L&wgCvVsq9+*jIflm}( z=po8$7G(aK0~yRQYJi84q(&bOujnD~|5_@%KgMG2G*Kk|v8`OBX~4Ay^2)!zD1+X~ z)*JVz`qg*E?=AcShW{)YJGA|AI^U#2Cb-;@*xJTKe;Cg|;Hxk^`?*m@EYIHC8^eLx zp-+H&>=Rn4Ot8*OG0bRUc>-3N4qmk>v<0=S_Nx8S%Xp`#y_2`)gzIobp8OBg>4C?d znPzxRw~x&v-xcKtr;^NjlvorAl;H2s-a^?lm=p6L^MB*qof=>*)P0WuAk?yv~3N%a*Dg9ofD)PVTn$NoA}8bHy^a29Xt<#rOfoN z%rPDBywEjezL@mshpSWkL6J<;;+nELC9=|ALhM~u5kkhZf^m@_W;`SM{hlyLDEy+u z+NYPZynWCl9(pgpa%ZZ0{$Ya1Ng?Y>X88kZ+dyKrVV}gC=WIEWWUnK;DF18I9Fl@c z^%-WZrTIf&^_`a|2hUnWRG4XCC&Ei2sw(xdpK2N!)YG^_44PG%-B*^*iJf7P^HUmCH-=r+mp=5RgA&ak4zvxUhVyUIj)JIPkhi>FnFe_I4xzkx1~0l|Td)q-^M?1*rn);{k8QXx2>1>*z<&t&flxVZwh>vc-h ztA!MRBv1&3QysF7r>YI|e9J#6PGl^tv4M!0|A)b7fU-ZhKpEjzPuJvNMvFAm4~ZKR z$1;HZDL0n{RiyHL+zz`()I?fI-c>}tk^;aOESTl03p4$S&_7I&$jHZU&#fc-jsHI! zf&tS%Ux~V}Uc@7iYIJB@@y{4|KKGeq2*ZUquqc{d#S4)+CX!2$boA#_RvtxWc}jQC zSf4m3^>SbM+M^MmF{0Tl%NUNd@>`?2gwsMY2unXXUs)aaJ%Ntul(&EjbBB*jV*i6C ztV~HM-93;BMci6E{ui6ZmpG`&Nj$?hg-C`=Nub=a)F2-uW5PAE;+3Op0Yh4<`XTlS ziI*1l!3F02Xy^MBXsZ`Ir;(mNw^xn5BWe5kWNnr&0G%ymDA~HZ)Q_!n z1#30`iAi~P!C*7pTupb9Gk}bn)sh1>SNf#RHsndhDX&1gK~TXkU9sRi@Ex?-3v>C!eakyE zQ~AeZjJ{&=^xk)D^l%eCJbRe&Ar4B6;^qp?z=QotG-s;c!VL#|mH%UnXO=04B=7vp_Pq zxnYtScF{PNNDLj(RQE2BgHaP9AERGI7k8^7}ehIk^^F)+XWTmKZzW?HYMYAs6{ z44<;Eq7A<=T@bN(np*=;6{6 zUV6F3+#a5E8kX={(#dkIC3Bo)O0{TZtlIP~Hl_;KNFYz(1>uR!gj6X5oaI_E>M&K& z|40$|clUADC43q}?v?50*|is)Lm6Gi(V4yRTh8SL8VWs(VsH`m4V)WTT7LS4eu#&% zy2B})8{^Tu^d6jKBn}4)e>_@gL1#5{r(fxNcFGs*E6{{ac!##7{|hfUb6gcDd@q;3sXj&5vcJnc(a<`LbOYPZ;?)@c&hXiCVo3(qd~QU( zS9sH?eNBj>W!#1@9_Hi+moBzR{_YO|wvv{8%^5L!s3+LTRFM!*SeAVV1ny3vv-<;fOLV zZgP;tcJ9x_66sa|z%A1Hs$1?slJdg{4|b za=4di{lVUjI3#NJl#w&^g)23$ zW`isKVep<3=HV04?|6T*QSZ$MS(PySO!1G^#QKoTh{h(vvE4X}FLnNk^p60xkzAl~ zcmi8@1A5;pDy#j>x5TOUwP*<|-#tY4d%a&oZwceZ?<=E>ynW`xNoC~6I82znPo%Ga zRdI()sC}Ig+zN_ua253x4j|g54Td{89LEZic=nFncZp9$J)L z(D4c6I`DwVD>2oX`;9Dmwa5hUthTr>p~aRB%?D}*_LjD`>9BxRh`vhTGp9L|hq>)7 z3*q^i3L+)I)ntrQ1-khoXy{W4dSj~aom=lysEL+J4hdp~)Rpv4_7*$T$tLGV?!3o*3h!*J-Hrh$eLpUGbJv5nug2 z!9{IEbJRh|e9q8?kT7-`kLgXV-1|yZZO^x@V8Gp14-jZe31xw~zdGp{I#Y}NOe3QQ zaQWAm4#htVXdaGe-N@;49XCRIIEs3KKo|1@Ld)~U7Kb@}dI^)2X9&<;_lGXAuk5_S zrWsvpnPyA0G!T_QBiTWj?$*~z$d=qMW7K9ZIM6<>7&LWP*6Y zmgAO_chWIG56@$~yZu=!#R6ZWE(4pLStg^MOG!uB4RXIm)h5K$fLqMSs#l=+qc25A;gChn-$RES|9-&b6{|m*w?dP;lhXKI<%)0cA}FD)fc*< zARHffT@iQ2&Ov6?cQtrP1FtbMzd2Uc$ZA*k@#%XK+1aj~(AOG*(yZ>w3+f@sDyJmq zM+W6TrV4e8gSFj-Exd!eyH5$b7`E$jnslf}F63IS^a|OGp~JFkbzna?LMrsLT3_Nf zGpSgpnK@}CAz&+L`fa?06{SbTahzITwD2HrXMttw75~lcg;l;qjhnG#(Tbjiyn;3 z{AC}C<58|dxC(KsVs9|sCX~GUmqa0;v{PoA&uxoBbPN8{&bSWpBc^Iuu_Bod$dR?jo!*O7N>}7UNI=ebk%rmQ8 zM7p9bHc;;rBb-L*aoHwV`g4x=h7a*e%gb?VGzG(>S#K`L)A9bf7f+pGe9<5n8imC1 z&2OVXU0cEENEFf@HVo>IC;JonBC|j>2{u8B+F{Fnj;yb%6CgairDYC?S7ubufAHIz z=Uq@rf-yebj`-FVnUv?h423gQ7IxW*BB109|LxVE?hJ+`UYib;u>~PWkAgoriux0v zj{Fs=m41amWh^msz@@{9(+mh<>9F_a0D@w{KXCjT9=Y#zrJuw+{}GF(8^ytp7^0cD z3wbdSQb*)$+_!r}Gp+45QYu`cibXE-@&y2gpphRsv4Za`6>UMudyzzk_RIZAe>TJp zx88wpQ(hTGzRdKVrx@-T<@2^lpVhff3)+$1t}`3u7fAD27sEG?6oq(Kd-Mr8AW6J< zPhtAXXCBWH*8#XApBpYrFH) z|3GSLq>iDmq3Z`7=DdW!i#N?#c2o8u$bjH4odkR#Ix?=)a*L0CCB=M-#gFVw?IU{6 z@;+_Q6P$H<7F&^u@-qF-LV(yzI$|gw{+jnh17Gqm@y331FNhOJd+7golRt#Wh52 zbVVI|Z(uP)$!mXITHhFK-0gHSV7pL6nxd~&`6fLldA&(_l7#ABAq!&$zxXEJ({k)g z>1wk0ax#1_Km`dxm5;)nj(o)(U_9J3hNWI;E-q#aunPOeBkIY5gMz%cf`DYkBs+nv zV8ovm$YtEzjbdJfsgY3yheXVS$>J0Twpvh zGJUaC>0@K9ofS>Uq4A(k5c#piADilDJS}>fP&UFkN_*W;G#YXrSN&u}YOFAmKWFU- z+sG7wGFG#8r1c^SC)y_gLI>wgbO!i5V#XWzuhrCvpJ)%cciP&noOTq_p_!gnV`ur1{E?lRd$xUi+9oel8(B zK}i|EpX-*lNnhbc&j1oh@-9AEJk;0>vZO+PPXzZf4_>@T64vY?y^ z2kyy#O6~IL8Hs$cX|hYwhzPk0Qua#i3TzQH$!`OqTWxGc?fVR#qr(e_$GLq(L?*eP zXOj}S%0;J>8{7QkG79rbqU{lg?ZejZNxISL#*yP5qs^56yej@9CLoeWsA3)suFaN3 z&$To>pwEZD@+yXs7uJPd?Z1|=jBlIctm%ag`4cVf?!h5)Bjb<--XX)p8*hqdBGU0N zg2-u(@^;?~%w^KR-o_P1=cK@Eyny6_T&o+)wYmZx=|VnmF=lLE4Scz=>}~1pwLiinIWlPj3d%?cWsLZ0g&9jV z39gVuyc=``Mn}+@6zzfc`TnKO=}(tEJdm6`HSX`EsN&5@!yU1#hJTLa>m@3_D7Vs_Yx zcA%>|0!v%SA$#1YAI-UW5m7ThW}C>*s(62{P@|~1)cS&x8REqvTE+gNx@j-TKZf35 zKIM@Hv)>Ond*m>BCfUc#%*;``K%Hln%hh&)7S^sK=~m`DSdJm$WR40xL>`%I+ z5thC~?#}aOMn(6?8M9MMMCT|Q`J=}nD&f{VgL6Bneh+P4l#>X_GW=5RjeE0(6sSAj zBX2G6DQOPZQG$_dEtnNZj&V}uN9jaxtIfzUwP_S^*4h(f4p)2UL)bJ-n{V7x&qVff zGm^ShK3NdX>(gYb$pT=UtCF-puX!9=OpJWHPOOxGH%PD>*NI8IOL;rCS~WPRv)p;L zG~*ce{W7VeqB)i&w@@i?@17Kjge7mUl4krOS2aJloB<^86a9BXlb2ap7H2irYCUC7 z1aI_fLR`sia;=?JR((MzQ&quWk{L;P%(Ym7-F1KaSJ^l?}>BhM`6d;bqpZynZV z^MniI?k=Uc7I$|iXmDwPV!c#fyLG`#a}4-(MjY`|R%Q z?9ASoow=VLCobdsuXGp^b98k3l*KehvS_Cw;Xam~P@!RNTa1Nk-wC4K^41R4p1Quv z8nO)Pk>*kW$k|gdYo*A4acZj!UVYB|M|!xVH5J&N_|#+XXjqmf5N&_nemV89#OEA& z?rxI>V&|iI*e>vPupyQrQxyR=v&t;1Zf#RqH<~ebS#mc64(jcEeP%@Faj%%leanth z)jbihVsn+U)`cpUs}&W}1>;SGM=|Up8JKB`YzmB!%$6PBvL@b|W3#XsOe8T_tB(3x zf2-j7{1lYJ8tmoJJ=X}%E`|@!@R9`tZVQGEICvGra7q0#ru!7kO9Fh;)IZ1T_Tt$A6$hRtK=i%y$b zC%K$o${5U^&vPre?3JTA43w;s*`QObRNP<}7LEX<1d6l7fw{iku#gCF)ahKp`ryH+ zE&h;WE0}5Uw4ndGjYSMeNBT`nSCf>pBejCi+YBm8iZ)?&z-f%JBnGAzQG_QQ7w0Bl zDYM%MY=qh)5CjBLw%&2?`3zLXq909V1VoSuPU{@mgY#keJYYirJJrRcYLuB+7dbv^`d* zzm4wO+nLhwWMB#Jakh-R|EOFJ7DUFx3_89R;!)t8{ngU`8*esp`up_2@C0!`KfgBn zi#8y7Kb!VU-dWF)8WLOIxp2=T<>eL!Ucrxa)FyM>)B_N5>MjI1U&NDk#Qx894Ooh@ z->CEl(N`MW!!9%{rW?N z=lQLNgQ_C}y$1vLns0{xw8rY^i^q74B}@CqAwWbAH~gldhF19i=NS=Dtk{)bOTYc> zpSC8dxg6?w+SYTP!fme>uN@|uZZ-DGaB__jq9QX*<3|M84~l)Dhf03gVA-dtT@)oA zN6`VI@I!i~U@J(FCa=&N|6`s6lg?-v)LB^Z!^|u(K{h`|v zU*yN5Q-i%GwASkf=5F!Ny56*I8K{VCBMEc-Z#|I9D@NIrre_?O&4kN}Pb5mq{Rqo* zK^xwQ_G-`OMfGwFxz0^{M~5G$TP%Q?qd+>PS}v7VFf85k*0ie%)yYEsRUJE_<@kQu z72e+XSd+<<%wlfnVEPML?XV=q1e0d%?pPyVlg^wc7FG5q5N9LoPKbp+*Dph-Lpb_i ztY5?;zVehl21JJSRbdtVxM^wN8(8t5&08LuTpO_A`>2ri+CA@_etA-K{R}%>+rnM- z1>ern;6N*MT+)NyO@7yUsxOpN8dT#Wn9bt8+>m>D zPcm-XHTm_zsvvnK_wN?`z|e?m6Wk892!Y|1x$I(|9L(&=yO8ZG>Bs-#Gps7%&6+)^ zm4H2DXS+@t;%~ma8_kb5gX4L=RmjoU**fQ}W{)y?O?eMHvHzVvI%H&qCdQm~W+wb` z-}N1U(kJ8Y@E_t^yAq|N3%9hZVSfFQuxQF69C{?Z-+xmHBaR(1!{DCV60I; zZBzO3onG}<&2a6pY@4zl;hC+fGE)Wkg#!-=HF+`kpJR!`BkcqNuGIerAyR=P6Q6Us zpp8R&H?OKtky*+0e@LM<*>l1J+Z`H_9I%tlH-2BM9f3EK`1}6{C}1w?AEFSl#b_e@ z*RFm0|F&x!5dnq-jX?-xKSlq~DDY*KN&h-Z!T^ljMEaNeh~ziD&oHFYwbT|)2q#U3 z7FPNSZH^F^#dA4uLBtgCZG^OjARr_P&Emd}qZ&HF?v*f<1(pDHuyj>Gjg7qkhWY(J zz)8@YT{+JZaw;+VsLY2v)AZlBo7E>+GvWW5bvwOSoCoNy#1wODY;N}!y@wjzqGMd4 zG?=1#}1RLM5JQ!Apv)}l<3sa^eq--QRF?I1(3_&EAl9a^j~oxjI+Z*gl}I{nkPZ? zq=}v1*~FBh?LA-rzFQt?7&#(j5^(Q-1wn_(B;j{ndRXZWx6959S(fAqXBcUhN%SOy z0&JlH_C$Q!9Ro|CB>deOJ zyCOiT_i1GWaLPGdB+w+V+l0|K??TviCZp^WjO<}e`|Ux?>%ovUJFtwewOJbExNRUo zdZ;}wQ={Rj@Z&j;Gw(yXG(qu8(UGXuvU>CopBy73Vff|i{dW(W2W{1R{RFyKfMmmy ztDpV|c?wqsR358KjSkmr38T*Jgooe*i&NPr|IZEmQa6oo zu|9CgBFhD~aSGpEY^t*Rcj$S-x&b|ba-f2rkhuUhzPxxLSX`5NSM;jEMzs7@@bxv) zED;q`XC$&Br?>I#mor`d0LtH~(WAV@8guQY>twxm5mH)CTIx#Qc!xUeCEbnZG1FH7 zh!S*WYV){R+{Y_`8&2axAQwRc#0Jm{VJ)DzF~aeQWC?D(eqPL9BRx_2;r?V}4sGN5 zj3+thjykws5U;>0G<~JMYjZ(%zFpK*-@?2PBRkn|uB5@({VRnPL*@LPH7t&6=skC{ zxhwslY{#f6_7A)dWaujWg)t}}3M=9*FB-Jtl#zRy_z84(if1zI*lIqjY722w5O4-MU?oAZ+@TxpY!5?<*Sph5pNWi%u~tuNiEQNff^uv)@_a{7oNLX7VNgeThQv zAkl42oazn4f(honi3}fE=S{4vZLM0BWAC zhX=SNK)?tK7`;RTQruhhXJ?L)%>%A`RDUS(>89!l1c9`;bg->yngl?W@zu2S_QIU$ zJ?7uub8U5C?y8E(eZ9*Hyv?|j>2x)%rqME+v*D!G#c4q37~+#yt$+U;!^6VTn|vS3 zx`MsL^dFSd(U^Y{G+)4qyZ~$21&Wd1GvqX?CwgwZXSknY)P7UeyCAH-! zSt3gam?@S?)JE5nIGQ9e$mO?gIL5q9rZ*Z_{a1DHz^ZZF0Bh2=EJbcJeudziF7EAuCrq}yC@g?Ky1Z^Vw7V`0 zLN@3fRe23?(53T(t9%{LR-K#+Wknm3`TmJwmD38b^3##d3~xM6@5DEfPzglfRHmBH zl=I-HvUX~V5jeurVdE3*k?tm3Aw{1#6LtWVw-Bx+BddP7Oj@Np3BQokUg3K(0zg=-lWZnO%KTxls#m z2v6E&FlQ<2#U)Xpf0So>2ZW^pMG^l@W6e=O7v35OiO=;S%(`OOu#Asz9{MBAD$F4G zLth`u74c8<-@qZrFrqMpDq}D~%<(SELK(2+k$^mU92VKzWOP{aR@_&Ia7`+1ovpTi zQRn}J)85g37y&t%+k^VfB@F##vJtKx=CoEjG5xpHb%qSp)7R5M2UY<@gVSyc9e3L!ay1s*Q$c`)|A*70Qck?F-_-X1~*o$$}oG1Nh~Wp~vf zwCiC6kdUeZE1@sE6Ff3Sn0K#DgWs;94l%{IVD5*YCe#}?XlicnFx9VRhjQ+FNe3Op zj3YX`P>I>sXJAP;g7$i2S`6f`hkI}lGT_d~RJB)Nnj8~?q4)?c{J0XzI&ax9v45@J z!0z++4d-A$cIv{;N0D>=gI=PCCxVoLmM3hSg_U02q#47Nhmzhsq=ohIzJ{-O4-Zs=~p-_1sQTFF5IjK71wt1IDTUmC-SD{@hCM4&|q{|-FP@-$UW*T ztek|2%j&%2L_2O|nePhP%}E!)2_=EWgK=NF?pbH2O9fdLtxyn*yF~d_a0?H*`D>n6 zqldOs22o9^34p$1FUNLo$Zmu*$~ge&jr5--KhK&2S`oJIAiXY!t+%Kwql5#v5Hvkj zD8{EB+zPf=PVn`a!f&XME1JJ?M{4_qY?)5*juY%IrR|;_@HBjzIlgCrhP+3d?JUfy zcvb_)NqI^KBhO0YmnzAaV0zSz_q>fd6xis@@98a-q@IRfNqpdcyyk62p=;Le`fl60 zNBulkaRM(PQ>;^QpFFJprK2Y4K4O>}h1|hj3u#GZRoa}bh_*Z1=UsA$Q4&AG)CEFH zJWgK#28ug3vG}`*QwUvl@B^b9ZfaCm;{pkkhMnol5~b5>*K*+$%(F#*+#WFR%Berv zXLm;CHvUcfX=Z#Wk1~5O>m(f)LYwfpkr_9|1*4yxgad@}5Q!*ZarKyyJ>n!lbGG6ZnmW6Bp^nhybc8)X|h1z4&D##N3+qYV14slAi~PV z>W0%bA=_L*{gR!Txm&&P^fMTiRL=hT$KfyB4-b-pY=$<38idFSYmkjvv5v-$nz{Xp zsyPz6(Gndz%$V1F%czDow9a>S5ZDw3|812m#-1mt{Max~#q8URj09Fo9$y0f(c$D* z{&1=tb!F=~vM0I>7Yn;JoUrBbH`Pd+_Y6Hv?fJJ4cR_DQTo%s0P)lvZ9M61nkdc@@ z1eO?Am6Y`5Y?>2d8D}$zie|nuXi%r(={)@XWUb4I_%W}ZaJYM9!h5CXX#rh@1!B?` zU+$Y$2{3ZMz}ZZ-MO_FE61gzmkGXi)FTg>m6nD*h^!?T8MGAJ7h0Ak0l@lnv*Kzrp z_kc*f8*F=y;|zxsN(1*(l)YP@y{}w?%%7B!MqHkAZLEL`-M%an#2)~gHg^Dl7XOH*ZA?ObWv6|BAkje#?kZjJj`}i>;<#JX&^-T(7 zEo&ia8ao^NY+Q!YNg^5;vx_YvM&Sn=(W9<=xL0dv+BZdbT>oEJEAp_Q^@9`^mZ+md zEL}wmhX0)w@imhlzW>-l2x<>?47*ci46WVtF)bM`LFL;x0{PUO6c&Ync!GFi`I;K# zcQL3%%w1QvS#3-|5-*fe?~2wZav*oS(U<$DtG}_XvK*j@rhL|9P$?B%zJ0S2vM7re z=W&k^2PjtGHGQl-wB12Bn%wWPnvN{$h*7kwfHl{z#^$&{TWPhI8TBgKTZmej-g4+z zW*Q-Z8*7%Bp$c;QSgRchh8i$IJ?AaCeifB5XG|5lCufJ^OY$XIv_?q%aek4WoCmCq z0*>Hp-$>r6;Vsw+Tuy#(wk2aiM|XfecRJ|m0=$F1&Ow!!FbdrLp>7+iQ?SaWhqd17 z#`mkey)!FG`m*TFziEmd2s-|lQg@`UIM;k!_IB%1 zcfE~Hhi?jyHMh8p5mZ#eH5VwCK0{b3IkcXPs90yy;%cG#bTEFtl1%i&^oP zMsZ&^&oHXcRvit`O@cD(Hzb$K5@E9K_9lN8agB;#)y$`ex8x7n@~%IY2vnoL@c*%$8S0g6XuW-io=~IR5thnU|{{ z(QJab&u`395cCxF-T^hX(nSl62swSl$0lK*sf|^do)DjO_Q%VEW$VsZI>8=8rS(a@ zFUhRnq2stmp@DbegEqh$dbFxBH3tT_dSBCe3V8cX=FjqxO;?*Je-!=uq>9P4(kVlW zXMy0RMiLJ)*o_0Zb?T&z_8N|<`U=W<8IAawNYh>E2(sma^(hb6ITCme_7@BJ;$_AV z+<2&1g>^I_?;Wv-zs?xFlOIDT%o{~E$QDYcI%3bZC^=l}L8!X=dl=K+ zv;gRlu3G@e@u+ube~#$Bxz_>!K2)GDQP0-H6X<Oe!bE2ohad67O^f@Lx(y3Iyg$9xe0fMNV~X3NttR0|2+G_$B}X*V??Ak<<@?c?`CwjwsV*agcOcGa_uu+>dfmV8U z=sQM>@up4h#LNCU1Bqs9_8Q4$2I$KqtTGs_w51M#M3!17-NT@h`2!R|Rf^jdN!Bj6^`x;96Bw$OrWUb2XEM zy`m&*gIB0BfHk~YcAo`vAb=tQ+hg-lp*N#dkDO||Iw>zS&5NZsK@>jVZP3xK0l6i^ zJ3bl2cuW%MjA^LDUN$Jl<7NHnZ5@PSNa8bFnHCw9pDWi8puip;Fm7)Cmj)Ul3cHn= z(lKsZDn`2KCw&?g;EpghfC4(N{B{pQk_yPyh~)Hi?GZl+_D!rQQk|o zYLnHAkm#~&v$Q9=GFs{cTaLN)ns~A7d{m!LVZtbax+3E>RLEF9NS-0BR_ad0j)Wwc zJ<{}|kdU&6$o4M|Sw5I}1W5sfZ;Z#&Ep`lR!8ma&Q(v}>Bb5d0eMR<{OTqJvncton zpaRdOm6_|!!^e*44(xRmUp7_0%Jq$2RoJS=(Ug+epO!fmh&Vr>rsi+n&LJG4ut zHyhM-PBFmk_A|q#BL-pj+9 zhY_@~uCqTtSX+6paSoC3d5EoB5;8j#2l&tAca$;mXoH3S_1A}-EGcAC@^;&xaD~R` zzddRRE)Wj1@d)@FBbPB)_!1*_XeiOhZcW~mW(=S;Zp`#_fL;gAA~*`?64TtG5b@7W zyF0~2N`3&8Xy9qDnhX+|9*}NZqF^6d|A0GeFcr+HNl_FQGGl#mmb}XA5c{D{7S#(^ zjg=}P4$L}4$n|%KKCHp?OzM=Rr7uNew=#;k3q-X9Bz$Vz`uyB09ylG;en4weHVOW5 z85mXQvN=sUI0op_cs-p}ig)|ftg#*N{kc&{N^{6Pc=M{w|HG43$J=YdSqGPX`xn!R zO-i1o57M~=9j99qSA@aW)ZFP1{W=O{++~xt^~IHq$16s$q-HW72Gn)()WqHRl^kDp zj2i$v6WJKxi$Nm7kB>n%$1V5L3P8SDgBl9tdO^N*Sn`{?90YVzr49FmZ&uv~Lzf>$ z*$DfeR~`r_6@oC2Weu%TglB(mOR)=UDaQtl! zm|`3dd|}ftTa9Sd`ot}qC3$sLt*E1aypRFl=)mpI&b#|)jNvYVG*(c%LYT{m(?deQ@$GLVb74FXw%)xB4g+B0OObJk2@Qg ze_d9(gjkdZsY9Womd&-Y^8gbVYKK2!rLH?7=?G|1pS%6Rkmn=4QzU(ETIr&pu~Zyq zIV^%N8|xkB23T%8x&qTTHJ=Z&1)tiTupe&e%29Kw|s7#tg@(!069fPLVRzKp8_)N<%>z#q=wtscNYqTowGnX0Drm*4VSUpiedd1Z)_<>rqd{m#RV4D} zqobLsH@%)cAzj01tC*BQILI>ajYjPJMa}P>fsO$STb0>Z6hEqOOFIn5&~s|X5hYS& zPFyqJ7u1}v(AJ_3bzdBw{MQL}hP4p4pmvi(CYxr~ybDYP+?qofSVC?ElkAmb7xHUf z6CT-bo&cdE4KyedZ)=D9y{pfXChsQe{@;&cSzVtFQ`h^a(Y}b;S#Sy|5RtE8`y4i~ z%zsr#7s;0K+#zb5GlcXy&c`WQB?gMu0VvCp1!nc71YiLWB{q?8%vAmq#n1ZQNs{?X z$cygBYz?vfb*Z{e)}mYmrTyXrRb-?d#$VB(WDgnY4AQl6~2{-=F za&V+iX@4}Ij>pVtt7oj%B~8S7w65_=4-um1!-ts4#1a@{bbh{>=^>T47lskF^vaDG zm>qSNog*B7ogWnT%@Ic1@R$@qI@p4T0rtU59RYlR|KQmMMdEL$pDlgLKEL38+XZDw zNgJQ6Pv(!mZtMiwi?eOqC3k2~k3hm@KXPT$_-N3}N6zN%wDUS8Q)uxy{k%IsBvi|idilHSB~wAUywo?CgIYTm zvf5IBv~)e9YvI1TE*DAqk?_hcNMK(QbvDsoH5|hp*HR@5?rDicf^!NH%*5GZ64&G| z31EiNl^hU@psMOr>fkYFu@8JKTv`r8HQwUKLn|zLC4~ohP~u)6j`mj-|7H~U6Ep)c zN^y{7p&+$-f$~n^1JoHzsmMqew2c=5DUwnwmR*){OgNVoqS6uP2x)4AvJSRdxf*)n zll0&XMFql;aOsW{*)^@jLm$mThX5_&&~D{Uc7auIQ_ z5{o3w1rKw=gTNHH@JDK6-^4N*I$t97gC!X;eq`n5&h4^-vz6DR$R9vqx_o-vWfR1J zwSIJM9N^uKk$?jqiB1QjM%h_QZ97*2KLF$#!)UI$_7=IPyOC3tja@pgctb6s|N3-@ z#S%*Yq3{GVa*Pzo${q?=B!Inz0!eY@uYKu+Q%q8jBxDn@ScGO*qU*?&Z^>Q1MfQ}k z1`8_R)I#z>E7`0nH51+Z$iVOMf3rRVaSv%8;ea7{oW>flHQ{t{HL76C0nBAP|GhF| z7TxaXFwl;9dz#?%A#+Z2ts?>DlmmR@)1mvqbe`( z*rGT=xcQz9S8t&mcWeo8bODSv!fwbw!pe)7&pO}(*J%D=Le#IJtZrr_i=7(ieEQcj ztbvX^9~LSdjiw`XbJ9O`RzKlF9FDdqn-#1^XTZDOQnE z%8wabg5c(b1-8E5s~hv(6xy1{;cVglVUGqCD7*u}7u@1#qX0!J>Cm7~-)P9e1hzMV z)aI8Xr6Q5Xu}v8MI8d#@_cPJt3yE)=>hnuUE^CJ-*Hw7707YiJ#<8gKS^PfVyWW+L zKJg{gCBC3B=_oPhqx7YVC-QR{+{6Uej?(fiR7O^w^fZ}~A@>on^KmQmMYAf4#1Y$L zn58W5@9!_~H%(Y}QbdBK`N|Z-s<;JY_EfkNxdD__|6BJe0$AdpN9XGKT~!4NROR}; zB9OEBlzG&kMwwPB0EJLLr%9EO9E>3CZZy9cZnyQ7nk0<%&l@v^uutHFZWZox5peC$ zQ$qH8Nd?@oHu)a^3TMT47a@l;Z8C6r`wRz_%kQ;*qW7OMKUUb-)4|U&b33Xf%3GF% zR>snQHL&1d(Btu9u4$ZrG-z-D2FrBHkIZa6xPj5+|Lq_pvjR%D|5jZ*0qVOt;G z&{D~#eLJx_!CL~36#7ji`kcl$P!)>ZFONB?cGlnSk?ikiG2kMMYn@DOKG;u{t~{SA8BGn_$H(!0FL z#nGRl&DLR)4 znutntwq9NT$^T~v_R=-8%E-O+++R6pA1pg@0U=Jo+B4AzqXs0GG0j>rV(_AVK3bXn1BD7t70&m)dxW6{*6V%w=SE* zTh?vN2dse=OL=|J!Be5b;iDa^x9>k)j1OQ?^egG&AI=Y}%dRaH$rjd0cebPaXghEI z8Smh8WXfeZA#}&y#^=e*LY}NT|I$c3$yzE)HVc)wl3WU6Dv1?-7ISeye);n8I z*Ep*)-gXSzs$`arr8oPyNDjr;9?AxNDWLF7Jr+ThLKSWHzak{%z;bHC`jF{FNao-X zDMarb65LFaBeEiV;d1rreVl^Z|7wOcTaN&^@6sJ*(ftpziE3NKzjhg*-u|h^E6!m3 zq5wlp4y#)?Ju(3&87qWA&Jd3{8C=+j03N&I|VmF@U7;A{SW;B_$U=t47b zCz~~Xz+OGF3i9otQk$J5-g8D^7KUl98w_hIwElxZaWJT>QE#J~Pt-2}g!N*Np~vTR z11vFQCpqcwvW*k|4;E+sKUmz{-!+a~a(G(;;dY*co|O-DY2UugW!fb)#;ZM*xRRXg z5jEPZ?361Gq&Bu)i~iL;JPb>BHhsb*K0KY)x}fsC&W8Sx&7CE793DnrHD%mDXL`4e z89(rFzH79i(2RiyFN$u?qag67Avr+m+DeST`h|s&(cbFX37u@RUQf#htJtXNJ5h zBnbnov)96CLM*u{>B?i{W!9SR?gDHDht*ZLeNBRsSh}ZnoQ>hoAmMsSd1}$yz^qd@ zsur!N6_{m`5K!$XLyVVpRhpsvQzU89kr`xo+L(b{@ZP)nL+c*|ij0ml%6!Is|SX^sUK>YP=`EYie`8d+g@Pug?N0k8eNT#p?w?ViZ^ z@y?k-la{5A>u>zs-UpWO%DGE=nO@2G%)GrQIOcrB4+2dp+?X#$(XQq<;OLCI{8mi?k!#cM1wtzGnmX6B@8B?}t#DZRR8`zXmb7x2b5}EfgqAGpiB8Tj`I~elt87P*O z{bf{CbVkSed+3ZE^czC8X4P1qT6kazK&in01)-~8b%5@}@#Z)o0{xmwl4EbmHr8H! z8J)ywS2BTGdf;Pa?q&q28-_r3mYBh2;N3A>Zo24gsz&?LA?s-w(aRbclwBY3|JaXS zclu#WG4oVqr!nL5!zLyG&uD&RV$?{1_O3<#{L+o z4G{QT#Qs)&e@(?q|AvyS$>*QIY-h-}6SGn(JPbF&S)UX@any%$GKRxC!mV|R| z?jh^C3>L4j-p)`O@Pcan+yJRovVwQ44>}9JGd^Ht3CRLqMHCSu%uAM{dCI&gCbA}D zGZ!Mpy!`vvUf1I;0DJ-w3Fadyu${2^g_GIvpmtcks2hHPx-l-L`I2YA`v?d|7_-x{*G4o>vLobWxG6dbHMIjf#VZ)8la79;1tl~A25(#!glmhA>W8RRervDGv_ zD0$Nm*xrbE_Gp#g-PK~>)XA#=A2)n=K1J&3_b2ar(~oPMlK5*wG#e6ANTY37$qO5V z4pX7ahn8lxytJtoGHKw*%hf%Pn|vi8JXh!RkxO&G4Z0fsL%zJ54dNxkwLf$MSu!-+ z;{6<6g-K^)pYhA)>oNFvCg!Wd{qOzQtL@h7y7HSKWt3Oiz4fOLgJ);4zwX@NsI@399*A%}f8bikHL zU7El6mvQY+9QzO9b}+{2<*jDC=U~y?hD< z4J0eJ9|inKdG-b`#sl0XfGq;5G(+3d`=er?iNk%ILEKo~#?d_l-f!fvup(Ks#-~W$ zha)QPpA}9+(Q#V9*HIf1*m~T}m^n!zEhOij%tJ6n1L4*Mhr@TdKzxT8|@x=2@w3Lk$3mSXL8|dNn<&$E!{eS8| zXdV6rHO4a<(UT6*vnL|ax~Xs^tZ3Nu|B6FagOa&=ZD78rai_I^2@tM6Q*g)){R7jy z$u$6X{(6BW)Esf}bk$Z|<~L6eyrDkteyMGz$kAh-AdkT&^(Tm6u?O|7yr83xbcB)E z{EE>hWiJG$?Fc92f~4W=B%T2VPtqrmf~8UO)Z==7ope!VQo`MBpEa+t=J)I$x$q#D zA+mqo+v$0wwxq&@jjnxf^)UKfQDsth3d{7HRqGcr(>Q#U(okdO*-BqJJ`Q@|>2Nx> ziu#A{Ty-%8t11JQdOcO>)RdLx$&sUA&IAEzj6bw2g|6D#J|Msg;nX>`nKsWBzE->t zuRY6>ci$E77j@<+ZbKD0o)l}{$En*LuV3#q zrdh2$6s5mTp98BBT4tTe7)npOm)@x6*Lhhj2I{6t=Y;hZmH%Sz&Ojv!yVC(c-z2qk zNLsa?w%yP05%a?@a^>`1(`r_yfDEWnxK3-*Sc!uJM>D<0d=d?KpNVNJqTHikuVOI# zeq}YHabSxNA&}#R>>%Q&RG^tL&t58%gEwnJd%?bb{KOtJ5i3>ixnYw0ZqE{j9Q0i{ z1`ah<*slCBDM1QTH|_G=JrfzAIa9^<094O6J64d|29j5n|26++J8`PpnwsCf{k5P> zaU3R1^MZmEM)@50=ZKf+>ir1O=N$;(C|A>0B)Rc@S&DLsObSbg;UpstUkzVC)CeXG z@U7M@VG!2~bZVo3bVp+~lhSkBTt#MLZP1uD}M%l{y%0yBFyErzQmWcncqHH2r?!n{3)Ih;}1*vIh9M-^F!2 zk?Z1--*RK{EnIrEOf=T# zlo=g6JUV4mRMM_r?KvAwT*q=%{RaU(e(sz189krx@*g+8C^Jx~4;({AOiJYGQVut7 z0h-E_x(oz~#g;dK{Tgk$6ycM&}d0D84&h|W;&{R%Y@Kbr#7*@$^ zsm#>@W(#~CuBdwcre~&FQ2?V^)Wy1AY!|Kt&whVQGq~WXEso3=C!WR66#TAy-E}2A9B5}cCnt9T)T0=sCiuh^q3`-rp>PAL$fJPtV{ zehnO-_s_o&C8j1d!jetiPUf?kW0aQOf}`>TYQ{x93DVjqw@#=gdz(yH9Q|24MQe0R zw0yd(J-%Yg1&@OBaPh%5a^MFC1+x2h172m44JN^vMz`#fUMI#M?E9MDD~erec*_Yf z3%gK>*f@e|qIoA$aaYgBXtqS@xQMj*a4nj?74Z$2Jd!-tQpp?t%yzX#W$d$NYKg>W z*7QOQ4C?KjD~nFX{lJrb;97*aYfSo`P{JPrg!k#Yic#mHr$$+4(e>#s3AK?#k?^{- zL(O6LUz-f+%KZIt^L$h{-xVXdZ-ivzC{{Jfr9gKt=ut-qEDucuwv06d)$;ql%LUQFx&$qSKv;Rd}00m21{_!iXN8=L*jdkm44 zV8>pH?cUDFu;0J=YQDzqG0eDeg(&8Vx5OCtJ`}xNzx&M}%$I$jRa8+BX7b3rCn86? zjl8cF!kVgLCla-WX8p^Q<~YXc*m&{ZR7EdsuRen&ulLtXp4#5uqDkL%h9?!os%9z)dz%MUH}R$BqI2!5S*yccOEu z8LZ%)Xu~JRYtz_kcj_x-+u_m51@$4&vopif>?|T2TTQ2bB9T~}k2ppmDYDu#ANls8 ziVNiol$)H~LKulF716a@LifBy^Nm-;n$1(%xAgpxQyXVn- zB7+u4iHFo$jO}3?Aqo5;^@-9QaNA({xbgnuVZgxNfWa(AFu|0bA{?j}JJ3YuBbuc=Y{+#z}l)?p~qwGX3>Ca;pu(+%TzI88y_7 z%;)!e)gRIsaFj2kPK*TDUtw-b>A6PRVlw^PiP3v`W3aKXaa0&soUF^$BA^{)f#IGU zS9#)sBOYR@HwFg|>wEyvQb$%E2Vf?j*^@DKKhc7#2F9X096vSc^2o1jIPxOQQoIV_ zLDLol5r6?X0Y%A!glH-J;pW*MxA;ZG~pg=fD zVsp*Pz?KcUf?^2uS2%D02HTNHwzt%HQNA;+czJ{ZC(ukTy*C6 zWd2McYEiJj2sGNAynSIh!1J0Gm(}BV?%jf8;d9WoD>`I%L~bv1JaxG;cmo*Dd>7xH z&Q(tbLa7Dhb)39$B_Zm~BEfaOYGLATriM-}Im1z>*!d8Du@yabNkjmAFIYRIsBr*w zUmL^tuS=H!ZC^pSg*sr9GU`!gG5Go;^Xw2>oElejemmMI%a%ug48%B6zYgSsSkR>V z5o{wNYR5(u2C}zDZ3it2<3KqiUXzp)pdT3vJwNqHyeICRGcq*DyE;s&`xMixxCOI_ zJ(wcZvhbP+tq4>2@xeN~bIU?akUvif>*1A?y5}@s#6l1{vLM?95BE+Z{LI|2eYUs! zM24Va2={(q$s#G!kl}suib>cA=A*%*c^q|-Pft0dD524|^uQzATz9{j%;~p)Vm}`l z{}p8`H57}=zO&QtYr6aDQ;vDsz2RbZkDQS?_-4)EukbFrp{{}Z!qm3pac6uo4wR^O zExJa1cLtce+}s1gAyGx2aK2lvvs-u(?27w@ksHPVA~|~qkSxp@Fs0GGBM<^w?eo8) z!m6lO9XcY!23`Is^>6jj5pKzOtlZ%G3L=>1RfXcD=gL#JSKlgTU(4>fC`n{Hq@zRckS z=gK9E#13;e@sQtIGvy#p=7wEQLD z>w5uv*$OZeoIP~J_dzhBMq2qHW}R=}`|35<*Y{%?M9I?izL!OX5r!B*H539ouE9C> zo$Wpsm#ozEDINrMwxSuxlj(S}im`_fn+|&-+K8vHzjp_-e2fuRDa!evg)fTuvP1F` zz(Sd8SZS9LeX4CXEQufjkJkv6keHOuO3UE>zj?r_#(ws7+(+Q0YE7nV!m8ZKBW_?% zFr?(Odc$hld6j?XgDARkT!_1*f{YrNWZnD&2k0W6y!($J8fDG)x^8;?64Wci0Uf}1 zqe`f|r(d_J-twNgvrxaSlZZ&(!z;1HfX*C2Cj7k0@m9WaK{w80L2@`ONM>t+-+6`I z1^8=j>ocin(dqs-Lqo3vS+N%%YvXoD$^JVbzLMyI6lMmQepuu%G9R>CKh%*&{$-Kq zNRt1X&7D7xG_%A~wC&f(^(r~vjw$eW%Z_u~>wepNleJK;-ubn&C`J3Bi(hC*0z5lK z=p3ktMG#FdyoGiv-U;Nz{$^I%SX$Vy7ggGf@R)oYDIfEP6wLHh!Qcf`w{u95O~fjR zQ939$Ok{<3P)Dk(;FIrr$%8q%=A!hv8YR5JZ%gkUI(7@E3tA!|t2PI|{N-*<)rJPpCEao&ZrLB@{{!RwearKe2feh z|5Ko9R^I1537kBR7Pv}rVvh`lLQ%ex`O(bjL1d~TKig~mPIhc2GY|}rovs0`rg>(8@$hiq=T|m?7fs-WvgTh{acw-!B3Qb42?GER} ztYf&0nH3trkodp-NWRS$6?;@~+scF*!%9+hJCi2{BTFR?u4j((UqG`4_Aiwe+=}Ol zlnsYRK|@$+K3z``45TMBz&0no*7l{#d{I1V+);J8ikx%p$J=5UvVP?VBCOz8vW9~~1NDgxj&&A_fmJYFi2;Uqu8v+eOt zr^E5?H8;LDi&&wgs zBiA^lp*LmUkSwcwpYzuYu3Cv{8Q}k?z^Yd=I}`ceNy}9qa7`cw^|$R|v^m67_z^Ya z@E*oYUN~~nh_+$jJGHj5Bl_4otS401*c40%pe%tb%vQ6z zaz2dxa$oSdyqEP+f^R^Le1ootg-!joucIV_A;(Z+wn;ycE+YA&{}g7x{~SiLus#%M zR7atJM%zX6(s2*Eh1vgJo%n2m!M}#Xeo*P~Ls1BwmP>J~iVp&TR$1?)@%UIea~m|yT@YS`sryhB#j`1mpwq@MKe!su9HA|n%j zty^8%{A9qP$l`Gis$U+?d7S7l8d`?rKuA+%es1vPb)SzjM2(T5rg(*`hQN+24<-$zyFi3IG^=Dk=46|g5&-ZPkD}S z|DW6J{U@9i9OxW!ISb?YK-u<#!aU|kKI?f1U4&I~!yVur=0lU&c^CfIg;mDIEuehq zpF2*2dEr_L;-Y${bB6=!o%Iv2dU?ww!`*5lzkO-{UkAFqSM%R@2bz|XO>{HaZYBeb zLk*jn+MMLk-Yi9YM5CX3RqH&AP1wZ>_IUV(J18~sClof)%br|DDJYt)zqk>6ltV_p zmx9f7{Gm#Fft(V>XH#C4Z^K0R_`KW{K4=Nx()*i0n_WsU4l4h%vzY4>Q$aU?u-rXm ze1N%SGjqRqr!DhR!_rhbSqZw=W$|&?&_|m&Q+^Oxnbvf^LF(4TYt9CICb~E=nkV+ z?DZ-xwq_jqJ^{Ar+YVK{n*VHNZh76#=b{V!@-Z;XlM931^i%II2oBi~8Z^nKwZ zp{LIzSFwhP@V=Xw}GA~ zwbWHk9PccfX9Lc>p|B^03DxNwtV4~>)y|efFeFJv?-V6$i5-Pj3)~mRLXYj4y7Oe# zg$rG2nIC}0r%Ik?wVcDu*OeZJNFcU= zd_Ar7RZ>?(f?%7Mzj>Y)?2~oc(rz(%mrJ5hJBl{IWZMwE7+^5lX~VnZZ}}5t?AMmjGs z4k^cG#OHv(vcxKzl(~qnw$OiSIH=M}+3lxL%&V8Him13uw(NiX9Y=^zULx=l6@*Jl7xvL74^ zTEgA<^9jm_44;Za1!rmLqt1aeg^=fVNPpC;@BBd9UMh*_&2;mRfnYC7+ha{Uyy_+1 z*6+ae^Eyu^O-f5&HSDSOgs|7Yk2{9&!#%T%Tg0E(ITOmo^9N3Ifw-{zCM`_FQK^|1 zzZ?i7zia2A<=B{%0tJ}0-Z*^@dmN^bIl++AX)m-?XF$tc>C*`gx~c*`ZK%07Y5MiKx`KkG7-Ahe9#U$F3%#ANQB| z&8~rpdyhwYa3eVc-(~<-k{L62%f=v_ixdAAQc0hy_#GWm8e!YB?}@b&n41@rEMBoW zl@H2A_-8;<83!vJ0vFDnQ{EaSv)>tRVA$blt_(*4AJ}p?%h(g#Gy8p_?Nf=5aS$;H zv-gJ$=r{=4TDez9^htaSM%uGcfTf$UF}9+jZ~{F=b99X}FMCm=q$ccaywk-}_k{-c zd+Ex?v%1?OkYc6}(tiWVUWZoGE47?=_v>5j3Zz$j4!vbxMO|Dc?gIq3N+F1V6WsQr z_3t@;RO@MC18{I-@04q{&|S1N&!(iHj!d8wi(Y;#*_XABGoaHMYd)?gpT3TF8YS78 zTA()Ysm-deU@>a&SfYvn10y`<_9U$|i~RvGuvq#4_!)IHxu)yY++bgTXQJZE?o;pg zY&noWm&pRH)~P?3<=`ARR1)>sTfZ6Ce}M;S36NRaM(}gYCwbX{C>!Uv5$;4o8UifO ziSg0v0I^_FbYUT$Fz^T!uH=6MoVnw%cOMIPFSaltN=;vgx9!{bs(V|697RMk&pK}d zb7&_^a5CtJNt+OZScOb(L;atqhcax4x3nR!xW!<<RA3_E z8I>dp(ATG#1OFQf(rq;l3uXCB|d5inxQf*7$0S53luHb3^J&O0k@t!PF~C|=^Eyb0bhMiyGfhf{&+re zf1y11C%CV1%b`R6{KzqveAQ#Cy1fW2C5`D-ZN zh0In5;%lXkT44+R?5-n%Ft?tQPy_3SB=(T>--<5DU{0vQ=DniLPu^pZku$0f`p$X~ zQgr;o+Yrv5TGn8KsmVy8q}SSA3MI?g>WkS6)gGbbZVZ1V|8PbPV~N0m8;R9;u2GU_ zDPrfmQIa23$$Wv&kLZb@#35KMuCaEhOsSKgR;Fy9j~HBc%hk;+sX8LS6)k6$&t;IxJd4lc4k$p%i_t}tnl1yDU^@1 z09>Pl#`fsSB%%L0-6DnmcR#o_FBQ_YP@GK8e*1Ze#yzt)s;FYKG!!J1$Gm5N!}{&Z&+^ZxN4{fPd47TmJ(x0IE<3G z)Le(gHZ}-_f@3UF0JJk^B4hT18mV1oFOV3lY>!p;h}-RukeU^=bEghm$`UGsy`DXt z5ughlLk+bme84g0Y{62O)TigsxAZqUgd@{xH`v>aI>!#RT#$uyC?@a?t|7v9n#2NOLoj(%F*AtP88) zN7;-0O;Cip?Ui@I##Bpe8Z*_c3AC|p^eeyUx(iKCww#EZ@Q4oVN*>m~;A6iG?K0*k zG-ipmGU2EZ?~=krV9Jb*p+`0S8TQpe2SAK%CKUXxX2sP;a8a8nhai^m&+g!(a#IQ* zOB#!FvIG|l*^GMg=N`hbF~saq7G560>Kupf?mkppS!FYa*p}WA@-Dvv{bL}e>>g6e zfr~3|Tm8-25x<*7Z%`Q8`R7V98S$hY$%&v|901cFXNX7j8lChH&73(F^=a2cV z?wJtFCghM%t7bo(hnOm!CL~mgpBSq$=g4%Dn{b6Oel*-@s_CyeGubY1(;SEtY&8HH z!95np5OWWo#QB3+yh07XM)Ud#V5hVDsL6-u)Jga#^z!qD$gKCj95N9{2u-3u@B{hm zaG#0ve};L5h#cYKuP$_nl0y&YdSbjjQnIMCdKPgu)qIr*DQLmE^>DbnM|!eMAu9z8 z=Kn+0g$XU172lo13Lkp&?Fx|GeNAv5*7HRs1RXwO^jO2$~8OAlFKD>oi>WOeO zlTY7YG<`RSL>GK-dG^snvP3E8wDzOzWY@I&2j!>QB49(S1fnhH^n+Nmqyng$0J-`) zbN8NPiP#eJFICh02YaW=KYXRTAJm`&r_+lY{)I_GYQdB_l}L1jbH~$nqwhyh_B`Om z56)4!Y#Yb_zW9R(m1*b5?tkwMCH>;%JV=HvsghGtLy_!LSZ8th|8z8+#Qt9XV*hqm1{457wr3Pf7i6Z=&mASL`A=h8yA2Dg zeGrQN?<3U-B+d!*9G-Lf(Ze)iulecY8=^(d=^P+Lam`ZTgDNOQ>eqjsOM9DD=Y(N6 zd<4!!{X>DO`VXDz?%mo;5fIWN<3B{AmbagJzx#6DbCc4U7o6_+2$4IPWsX?d+AXGc zlP0w{%69`5vrnV)zWi{(4=;kK(jROmOXlZoACHLig-sq|O48Tbxf3B%u1r6Z>~07b zX9pf>DM^U2T-O3gE(q=sQ0^>{RY{{_v!gR~;Ir7_`JX;|pndc~`?Y=^z;$dFnBW!{ ztmN09Fkybys?BM!LPu4rYO59T(I3Z|w}2aLUF*4GMwMqqy1^#0-rm`3f%f3_#yn-u zaM1MMUtbn4s*jz*>SiX%ONfBqD3<~I_CUbWGMf#lo{C?^AuE>{OB}bFXM)&5TAMQ? zHhE@J*VD)Uhhzc3i~?I^apQ{)jg}L2Dl*yGrX|+_Ai~=qyC>c>p9X%-QSGrTc3erS zgTbyRgw`g;)+pv@KJv_wZ2B%K@-<%ITZ0!*r2~`-QMnhoPDSH~=GX*b4tq$%koNEA zmXHz4@X#SC;X~{t3*p@%u|fuN7V;d~dL+>nfXU|kb=jRB2J6K;G7~bK*LM9uDW4co zE?DAG-iw+z-qJsALJt2C1_zwY)q5RW7LASHhAeGM)M@Rh)erFo{xtVfcvz+>yxa9|)RlN!H0Ww>$YcyZTsLaz>7Hm^J* zC{qd`-sEox*N)bn-I6CSu9ztIV!Y3YD@BEC6yD?|P2m3ZZJYk%assVYd`<=NryC=UbA7dlHHEg)E}(5>*Q0-S-ZdGOV;mNWtZVmKFbQL&%Y#mWRYGVeh7>Kd zZ_AM~YjPXEonC-llHkCb-J>pYcyXW%_^?0n%Hh23`>D>8`PHSWh!rTsE`%q21x$2G zc+UC0XiB<=$VI^MIA9J1EQcl6Wk1{^j`5VT%NC7~=C|+oY|TaQE@Z-t+KnMk=dvSD znzXS^P9!d1a+ceoS;{?stYAIN`71fvu_mk6==OeV|NQS!3<-lh5+1lNHfT@6W4fMx@IsuyuN=4`$p~UWYpKgG8*OQJ z8c8D#onyY5v3XY`%7+EyMibO+uNj68-W>jo>hGXk^MsQg`Os(X&#tErb$003nWz*; zFeXt&o2_!F>8zA#)D@F`QE!Umo!TNsSk`Ep1`?pg~tFPua2v>KO z1~`r2YNnUY$bX55F)zz8%*kH2_;C*q9}oRKF;l+>B7}WhdPrRk!BU%vW1G{>+<3YA z<@E(iWYUP{=ow0G=Pbn9@B%$_w0?;KVb^QDbX--sc8PL=AKOgDFZ2Ua3Dj6Yn?Rnp z>Ix%pTO0XzX9mRRBie3GTipil&$(f=Q9TK!z5@RmQQPhwxyiH&n!ZBk*>F!>EVLv# zeRn(-M}2cgMG#2ExvFZGEtN4(9shFZ;z$zigNG*G$|l zfj?>d4w0szKveePr%;*=HaYEROxI$3O)7VSUzb>b=9tVVv~g_yN6kq+EY{y9glE#) zd{zRh_J;d}-ukwAQ`>g=N?O9|Ox9Y;s2Ef7CVR-#iu|Rwi(w4ERD<_)dRv`O+0B{K z`e9BWT{#?&d^m1XV$Ec-Q=rGkr(lJd)b7sn6mxbZV5U+!(5TlC%G@FXYz-h;_|~W! zL28^8-wif}rSU_*eg3!#Q`T9D4o2s4v~r9y)=}R+K`s}I5`cJ&9=nD4 zj={0o_Mtq577FrbOm;sv?4)FLWlBpos`YfLMJ8&Vko_P<31gxE-NRI-|p8>Ke_>*%b|2NwR4k#<;Rct zLDXR-(93=1WXfDnBmpC-qe=fqOlBk=6H!z}BH=}r5wu0D!eK%KlwVq{S`V`+3#Yp* zH#)GHI>nAKW~F>k!;R%g>gkCtV!IV!C3+&~?A$?@$5an-tGOu3Mo)VNATsRJ%K~2! z^E1Ao7kBsdcI#PT`4&7qrgF`FS1eH|9P$Ab?B=JrJOtL3X$s^NvHVOH87Ntn(&OBu zKG(858=--#Hd~!wbXM@M9A#{(EkIk>Op)A|^s#a2P9nZ(nHS@(SFD37bJA74- zqFY|}!?S&k1vXfXf70vLD8Ub8Rf+{}ZxUBG&XP#~tI@1mrosqPT`;#8Y3ZX(SEA8T zEHw{HpNICB<)&i{nTREom2AdAFrzO^*SWf^&6=2rLq}iI(VV65JR?Vp&daKUAhWxN zMWh0NN~h>#=c;)#Nv(49Dkn!wxo@MJPq9P4PM|Mbnl@%hris^G+|^&?Da3BDebB)W z1MpZ7BnZXj^mNNF8Q^{}c+1={QfTU!T|H&3X~Maw15bc4D;(oQ!I;s$VA^eRDIp)%irH zxh%#@l3esy|1P#*m7cHtYRf!^t zfz{#9m_L0?L>c@yNtJ!I!ujgh&St;Kp1pL%^uTX6S-S0pR~=tJ^X zZjGT>J3dUny!FOVTN7q2_f9b%DTklH8B;<~&O3Z-dll{O1dlzN2{a2tfmEFsn%WK& zfEroVWNpAPy2=t`1~1(?a(Cj|q0GD`S+!Kv?a%68PCyr3V?_|<*y5eBExWkPX3{(t zCCqMSF3E!Ui^^{KpL5TUP79*}Bl4*(vosjW+*pI?mDm{2kQdcWQ~raJkM3juJVewV3y z8ZCr4(m~Dg)dF$?4o|a>Y_(mNWhOYz*26$gjh}J3l_MsX;K4{If&Vkt4#Y(>Rqd5wJ5bkbsC6OGH@7|iMfqnhQ>aa5DBb#Z*+y<_7s41&5f!B3UMfBLgo>)h zl1=xvuh+Plp^Off#Zu8rw(2K>BKK*2=!q{21fi8v3TkHgD{Rx}oMWfdBk^8xR%)~s zI8zn0ACyggvl$vhwSH{RNN~J>bgy0pN3!8H+>Z#ftmD538Ju*&AR$ zVr#0?3iaTmGY-jqw7)Xe=wQH!;5jXIUNVPb0wlCr_Ocg_Pjmp%wn=5O%V#`Qew4av zD6{)8sYtE03BzZEXikYAK-}C%=xTIO{ zZZi-~xov_)VhzxFrgPV-Z?c(Z!*3qkq7_3!jkr}?h&(2&bq~r8?0Ky!!cqS*moZXQ z$~uh)aR}o)P9$}tV94sYoz2C@teT^Rzu6D>e!zD#QKD0=4)m8#pgSgSTU|S<`|V>! zOXDwjXdn4;M4|WBeNm_L_+w38tMZ--4;qhIRN>p;a^S&J!z-0L1w(H5n+K z?(0vrD>lLq@v$Yipe75B&^~5+c7Uw0pF|j|n}f z;t$Nn#eK5Kq1!H%4YOOo>Jq;g8>RF9b(lb@6wVf`lo`u9+PR>UVrx)4t~si@KXN~* zb$;&cW93^jFc_foig7*WnLvlpY-H1R)0UujBXWSm&-h`QYH0a!^#mb5jM%-;2&QkZ6Gx9tt0WAy&M0> zgkpY~n@XPFdF?<&b;rI+rI|jusxkX&=dgvM~EW&D}UUY-D!2po>SOsIknXr9{kE zq)XeP0lXc1$E2Xqaxc?LTTkh93NzFZ+DXl3o8mJ?VT`ih7%6X!{~({xMLxZ@z!lKY z(C;{-PiwIJ`Y!6l!JF(e(Qk(!C0K>X!)Z^C$+x7TUNSmuU$q9gC==6b%U+6%JqRhB zCucgrC-KfcQrT^nVvw6sz4<%)M%zjpu9&MNXhSBO6@z%Z0lncp#yU*8@aR5%oXl80wmR9=t<5;D*q+43xr zmXiJJ)_pu;0Qi^>LcP0xVFudvOO;=uXUbiex7z|(#p)C?C`aT&3SB#?DICLZO4ps$ zPTpCejS|Y6ReOIQ+ch-6?p9bFJ+^t>BD!dm(7J|(*U_M3yYfUxChEeOVHK1TowYnC z+AtbQ0IAgDCMR(p_gT6Kv1I>EWP89GCnBt2XkZ*m6_9?=(;!O zl&L2cEF?;YnAXS``U&DPjjlOPF%qHo6!nF;3%7XI4oyKVFE%Y5Q=_7|4s*l(LViCCXoyIb( z(9O&i99H)p`GNobMps)PmS%HG`r`Kl><<Jbt^ea-amWnrByrxFyh3AvS1N8miRVhq=CC-{`F^%#`w% zKUmCFz+ZqxdH9Mvf3}`fiHO#2?|=>*L-+`|)hmgFHqRz=7#1!J5Yd+Q&;3H^ zYOegcgWJe{3{_)1T(Uh3MM2`&8N_#e{t0)AzF96&GPMV5TMis{`qOvCb@X~A#xv+f zf->ZUymVY3^Vz@;oruFzin-wzR{Gf}A`2oT3I^=qTOZjB8)?T)&S|Fv0!%7!!i@~Q zs;Db^EBB~Gr0N^yDKkw$Jr>C-wsL$2alvfdF-j?ehu#o}HW|40H zuvZ$4s8LG~w-}*YL>r)kn%-T8e$>543SkBT#)*P#I}2PgSW+7>@)WKdS#)2zHt{X0 zyV-hqo4Q+PpgK;R{zcl!a~trWO2r8NG@@02E{y_qid@@cD%vGR|G3V0M%c_?#V;(|zMxmda0z6}$3wTwMLR$pl}DnhMo z%CV0-qgA_lI!B?WH;M4cx*5cN-KFjtV^c%yW*gzW9)r^T zJ%^L1)Jsil)Y8U#UF~K7G8n29KDRS#dSRbj)|8(KHRdoeMft}(c^Zhm?NRs#s_s=) zb;goHldg7zb=HX?;j26|Z?)dy|D^(I`H+k%m+uZ6L{mS@HP^_FFq|3(Mb-*AtCB=F z26G`)8!D5fmB5X@644ztwWaqTk~s9+TQ!~k&=lc-_t z{s0p5J;Wg1ZxXhkaTk#v5LF#SR!_f*Wcq5&Zqc2@$tS)kBjz_M?pQk~uEL(0`8#m^kkgWGDanxn-?|qm`{_Tr-_)&0{_Eap=m3W?;gFy8MJ*<1 z(k*!{qD9&Wy68OLLk&Xk1RcY&jK-T?BomV{^Z6>I5C+3-AgaRT)lABaNof4oV1&@1 zRYZ)aN(Kx`gh{7gt=Xc(;oB)_v#u04Cr87qlW_YL81YO$v2iEXCs1U_n#kCgb4()v zo%YM;!F0HLYpK_qEUNO4(T2ezV<47TZZxj22I|UY&n}dSoyFF5clF!uxaD&b-^%Cf zqrR`ynCP&jdpPnjrt1x=qQoQm6>>(^1S(R4nkZovVk~cGZd~cr1U-hI`O?SL;XCM9 za6!~=ItS8}e(UvS$-hNe^zpN!0sa~m(8EiCwKMd$SaM(zZzkK+DvR}k--Ai z?>pENQH*{%p3)TiLD`z_|84%;*!kOw4BPgpV!%-W&x=VC$1zvZ+KAp)?I>v~7) zXC)!Ap`t)S-c0lWKZPuSF7-sBFuEqJ4sUhM`wUBhuEngt*iNWHquQx#qb8Wq7AtDaF-l!SBF+6Uj-qxmx!PuoEOuKCR-FUmm*Lr^Suk4|5-1nf-YC4)wNSxCpjI z&m~4MMhoRbPPAl=xHr7ykgPR(*Ja?#Df#B)iJgS4+UBf`%( zsoThgj0dhv%iun|O52HYd-#cERt+|tP(%tutiAdBI1-~Ip4rG+bgpE;(=Ol?QLT$4 zx~kJHEd@2R1= zQRw{M-ZBb(_iJ;BnNU$@K%Cfl@SA0AOa0<5@>FBT*9@Ts`xz18*SMT-h*mce;O?i` zLK3n%J!>qF43`4rlLGNZJAx}+1I;HtpE>p2*)Yro?h)(f6Ey)K2+S3bqq?5NV_Tw4 zs6NGx0xJ+v{!_1!M!#e*xMy+rncQF!E8H;AY1D zyG!;LzOeq$e#zGQh-M^0i59LvI*FcZO2*mUX?#IRc7#O8rc72W67?d2sD(yV?dW)| zhY{#FiFwCHcf;P! z;hXxYiOlwDbU!ANBa#cu*9)$U7V{4c42l44ekvo0T@3xYKz2#|GWboow0~#UqsKuc zu=7oOv1Rw~VbfAuhNTI!@%s1@CYgcf1f2n+*-D;gDndnzDGb`rmDjmL&4Jty5CB>Jq&S^HNIU^S0_We-0+m3#CUZc5lSs1(;( z41Fvu-F@gpS}%-z6XS<$ZXRj#Giui{Nmy%PF0`$ce3l~YcW>2QRw7|;Z>_AcrzS-U zuY7@sMIi`2yR&<^7oe?Rl5a!bM7_G&khG|WH*``ii8E;kxUMI?>9P4G7t~`&J^}-q zm0#iZv2sX_GaL7w!m=oQ?Q9cQgYq|Z&)Y3}5 zpoVmBf(SvjD~xHNXgWltL-{gUF>-lL=ct+B*m@DG>rPl=-hS%7p*#6kwKe(vuZCXV zM&O?$bd$^Mru5WxHyPJCt}bGR_!|Jqx5T3^S=GS~XlWNBuffOoE`^w%fwMZQ!)iTv zUsBFmnsl{v87OOmAlZ7D2nAt};+*a3!`0lR8^3-`2_S_ z2n(({wi^g#x17e|0pHb?Iauejn5I5kMpPCfd*;}Rx|?U~x?k4wb>27@k(Jb@)LvvO z((Bj%5Bgo9}wHLo3 z;HggftlFpzP!tg2L*MHbg7}9Yt>TBa8sM`*0#C^=kNHI5so3JWf@QR`D4+aUOEk+T zrrGvp0*TrUynPi|7;`ubITTX0s#tu6d*1-cc@n$YAlTV1*Ld~*dC0sFaYfGCXOD;V)NXcHyh9`TJ!mRcj{n{sWG%MXezgMb$SlfQ1~w z9dtJ%J9#V>@=lXseySg6Y_Copi~pU<3m1%+9Fz8_IhfkOEU|vEmLm7Q0xWxWI^yzu zi!aZAy6M_R>@^QIE|DRo$z93lktJjTzE*m9^bjQEmxFz1C}fA~u!+*Yk?zz`$_J}m zED)*Ug?O0<()qzhtdUx9--3((2y&-bB#X05B}lw}Dr;{~S83bhghXF5Mw69Mix;&m z6QyKOEf7S;_%=O5SXPtn(4K**F-d6Aki{;cp`OSV+UJX3MYSW^pQ0&efz!f{Qbg>P z3x`?KW0}<})>GjcG$%_Sob!%$wze`$c0l9D{}a!uK@6Qajl$Q3n?-n0FO=39D3113 ziEFeR&6sWwURozy@>dJ2VuUn(^P)O|@5`!a8vBH+K8y)93zS=aW|U6s9*Y<|;nZN% z_V4~(zEZ>R#^cjVvHdIEu#-FE=$ge7TRV&rI0ypj+9C*9i(Sz#wecZQ4)7@_XSlaQ zH~~~P#5R?-F&2%&3-)3W#yu|*A_lfYR%l;OX4YWYsFRw|4dVMmPN;}|ECsr`&r;HY zbPSE~wmjNjydyYg9^Ebk>$OO=W{m)KH@?sI!k>Gf^+Fb0vW1!Rk2>~2?S`|zt(vWJ zO~W}%F_NfLgUqfkTuNa>>6lp9X>UNm5TeGI+R_q8jJ4rEl4vgb_h=*}%&CZsIm;83 z<=rR@g|rlarufJtvjmIvLDfN<;=fhuetG9O?R0u6{Z+#JmTpzFOC0$2RhW-o%3u&1 z2DQrc1`dXGY1H}|UoYo(zMVZ|q}L!X8mFRnqtlG+vy!)yfG5-Tkg4Ti&e#qbx;Uh)*~R&NON2glM4FFe1G}HhpqD3 zuYb@6Lox}~0m;8Y@0nAc(h3eNg;FOxu9MU9iQo&oRZ1*nRf2mpl;T%&t>Ll_5&g;0 zeW`b^=HK+k0%Ze>xTR8mGLLeqC#$P9AkrLu0hEek*ulS-E4WW51IF^w6tlEZpiGZ! zb2>LQ4B+C@)Uzm-7OKt&mRFavBTQw;%24@_duLaeQ-Z}BPaT0gXN6nB_Fl#PYUD*j z$>~b4-(mSp?~gUUmqmGZ2SDP=rYSZwv@J7U&2ytl6x_D1|H?Pme3W}=9^_G{OljxU z$}Frrb)~)pS!duz12g(^`Whg>?3i%Im>}ChsaDCKyY9c1NuQ*X%avEk45`{j!Xq&4 zsT#4Fv`6TUW&#nZq5Z#e61ysg?V;-+C;cWP5x1^Ykru%*Vc@b5Ynvf%hXHYV>}A>b z*e(9%$dZ$a8#NK=EjZp~cW$zN2q92V7SlXLWpV1w(9^^?i$*`+&Nia+daW?n1f%9A z{CTm@i&jBoItu(D>pR`@{iXlO+QEsXl9ADJQ)kjrjZ3~f5xC9B4jz%r62q|}C_06* z2Sp=Wlw{D}0;(B`xNvmoj)jjO+F;c0N!rRX2}0!JkQN_YuEGw+7b<>ec9lE9$=$jJ zX6R1ZKC`b#OIu@su9AF5+_fA+PW2Vyff?;mwX$JWRZL6y)vhBO9?7gnfuNJBPGbZy zJN1ik6NIy2*-Pp~2Enpm&2OX}1Hpr@L6ea=-{qXEL>wrDKlZT?*Ahd9UFycSYcd3i zWj~*S_tftIC0EOw%xrnJFo8KnrXYDcB2H?}60?cDssIMXb?+NMkTW2P8M?|4ivO1% zJ@!otob=(}z{Mndf+hQe00K;W&|@tV&T3)EpESC~Vi*Tv@$N{^QbxaA)i?@|B1(90 zW~LqZ!=N;yfJwcQWvYsO|E?1d&(X%n#A*wyo7M_{b&C$tQu}F25 ztFA<2hZvdY8|<0|9{=oTTzM5fcSfd}6MUDg)4R^s7#W!#$Gg_Z@UzIsL{X=cZXc$l zT{tb^JOp8K8Yl->sx;I^tE+#k1%z;;3CtDR=A^19n`Gf^#V6KbqTJNdB~Z>c4;Syl z8G4pBgpI;d2NjSHb78tv%Y;1^WKX*GMQ6;;4R)G7RpAZVbRWKlg+ zjp0y|CLE`Ror6X0XyYdoR0;03L2-EijLU>5Z7nwLu4o2a9mh% zOjX&;xDNFPQHMBDMG7+_pjN9X4&l|F@FyN)xkPq^o#mtt!Kz+(-bvMiPxC4*7go>7 z0R)2Oj5aU4jiy7Wza}cVAlq-T&*=9V$boAmpMJ+|Aw5NZ)jpZru1g*D-=>j7X>LN) zVOWDJ8nAQ&(vQ>CUxjfU!P5J_86P`RYtttuCFt)Y*Q@L<&vv| z#MDbmdoVf)Jv1-nx%IY7Vdtn)9M5EL3=or6^=8zD&Fue*w{T!4rXEoR4&KSU6OC`uJ)t$2>ApC$YZgxxE zZGu*s&j79I1v*og1%~3Zn>#Cn2V1H}$|~!%vK*nkXf_W1<+yD+dS7 z1n!~6hbiWEq^~0x9XIbX(9DdAoBA~>ImJ4Ls_w|W7KsXN0DROLU& zKaJJaWj*L)VfBg*134X^oytLiwZ1nSX7WfjbA7QSaMAq-WQ2B()ZR``UC@`n_kQ?! z&&}0|{-_10Ig9cMacWi6l{mCv3OfK1#V#n`(Yh8sQ_vjt=gUCzrdqJ8g472opE ztu7nfZ{-|sS3nB$O#ecv5lIMW@wM|L9C0zf>CH(Zi)604iwOqQ?D2dI=%^e9^fh~N z_b3j1RenKO)I(EY_>_z;y?a9y9)18tl>A+7hUn+0h?U@lC3paZ#j!A5&@kvKDplCy z;JfU0WdFpS+b1WKg6f83_FD4Hs-**N@KacbEYzK~Yj?aH8V&D*uEGStpTn0gKoDUe zc#K$~Vw3aopHz^)_pk2#{9lmf0#o>7CL&j3;h_k>jn00$NMrH%@Vu++aBg9XwlD*`{q7fjoh?;cXY5W8)JE#MA<9(1 z%1C^!b6=Q$7_zxfc;jlkJ>3`@8p<*0g9BcTAzLh*yp;sff<5o7Zm-e%e%yIub6|yM zR4n8-Yp}ZD>`bcQlrT3@pDvR|j&}Z;0>wjZ7+G-;12yUHjBadt)4VV*XGpQQ5s^YUVQN+`1;TN7qM7Lls;iBlT&OEw*RS1EJKtR;%*TPB}70IwN zg4XjGMNq=OHZtcBg3kR^HGf2?sJF*wRrvGe2o_^&j&AY0q2A|Thm%&KpuQv>4?uaS zxdvBpYK>)|;f|O8G-NH9VwiBW|VgVq}-o$@QvoZ7|ZO1ZYNJroch7z9X zsp=7t7_ACnUf{TR)nWfa9n3R3-+^;!u??~u7q77qV4{Gt9ifJs9*9YwN*pmP_qqGG z@7LtWwOIZl?fL840+dgSbsY|+Gg6rd zG2OZ^Be;{qSp2xJhF(Ix$1p#vh0LuE__(906ocP0Uihj)p8`O z{6$P5erT4Bm1KacXf&0mFZ{MttuUZ+Yc5H;dY^8?$m7k^cMWtzqE!=n6r^8XzLTGl z!VspmmO%K)z9cw&{NPC6bVrvVF*SvlfvIVRXEnDfP#r2z#bAX901E(TvhG-;wi0%wff`WX-4gNl zVP)XM?_X73L(nD$u3c=2n^pvVAgOXra)K}rIc|1MWm{U#RExxr!|ow$bg%&5(saNi z*?b5Kz4ZAbu&v~OhWN@sy{GAM@O(gm?qP@{3&~mag$zUKK5AB<0EhmwcNKrhEvh6v zV{!}LQZh!TjPV8zWo5XN1Em38GN$UIk{vQ=~7k?oDum-Ir`BNR`;_l zQpAsWaFWsnurh*;#WihcMnkp^^AzzFt!bibwZg>aqrNx)YD~4${|lEoTKc;3;`uKQ zeg)|ttty;i#csjKPK|U3)3b;`C}jE=5foD#(K8U)g1Of6K-Q!CrN8Y0V@GKD({TJ6 z38*m=g=fg|vp-R}0BvThv%h%cvJ!556=PkY`_MbiT)}joI6iQFYqu1lE>61y17_kR zJHHT8EF8mC-Ci;>D}5=p;Wj!=6$BJu3-!&ob=SmVKTP@@#GW@bAchWN8p>+CbBkpv zph!?zCuREK?ov?6ZdljBlx`Q8*c7s$3z9!Nn$%`c%IKUsuti0Zbwk@N4VY~q{uf`# z)&5rfwE*3hMqqLyQ88q7J76e>JIZ1RqZb8AdvloT|FtE?3Wpl)89*2mw-d-qm}Xem zbBk{FOhIPFMdWN{9n+W7@~o=} zmILk4G==A+YX6+%KUlVtJ6|Zc#Gu-_cJ0IVu*T6Bf@lWPc8KotH>( z5SL-c4(s4Z`@cJ*r(vzg9>!TTS5vJue*lW7z%5lJ*>;EM2j%(!v4xA7=HC}>eUb48 z02Nj<@uqB~%B^hpt_o#{N~vFlR}-u!+LU5Vq3SbKiRZ+bQMjENShr!vI+5VHvL}8Z zu_-&u_dgRoyz;SvQc`1;hSYPL<|9cM47Ya*xsDAQpSdv@Jn94N++Pf2hU$K27*_P8 zK{cZV65c|3p{C%8L+5)oZYTFzk`Yx+U|s~F&SfHafPqzbG1FV&8&5m)B}s{*?K5s9 z*fpu!S?t&Yk~s&>kj;dga()AXBT_0)&K24@`gt%~>ve4nC!tP1H8pIIOLarofn~%l zRG$E0uxtwkP}XMjfy4^CFgN5tC{}(hyi!jfor>A*^0R$>aEWN7^c3v^N2hK|hG_25 z+0{OT0_(u`UHiy$}CEPRf z_Kxb{@R7`SyWrnyhiULvUHnUVeFQ&~le*fhxZq*|PJkpw=m@}vG+o!%XkhrX2!Gy4 z%D-3qZrN=DX<&!~>&})?LJcuGoStkzp-!`ScY1q;oi8xUq_wjm2_MGez3UA3yYXwq zHaCiD?}4!gu*UeiS8bo+W# zJFj)ztGO^AkxYvNZ45iG?1)i6t@#%a4Z_aF&ZrC6KlN~HtG5@EDCD0)Hp3L}A2}_F z(`aRpif8^|jaaM&ewgR~*xSr2MAg0?3pddJOqZNvjK!HZ16SIK`1#)O^}~Bd-LS-FtIj65UQOOCn>Ka|F`-ApI!C}& z`P1U>u_~?9l}B0v&f^kaw%O?P*ZPcSEgogqOZ}-rPyTStqqS#_W{? zVdU9@L;+@UzqaSc$NmY~+=CmtoDP=xo%@T!s>Z~~vvRL%DSnovk9`}D*8|nYuZkew&yoi-?MFfkj7?`oO5bGq94cv3~Uh%SJc_~Og9X2Lb zDj&Ary+|@6!!jq|vUSb_o3G@bep@}BC%NBOGT|pb`m7Mi*p@mvI{ zxc68y{kTk9x5OXP9iH>ea11UDsnQ7kMfCd~u6}**b-9##bF?;Bhx$wV{x5|iIhX8> z3A{_dYG%5nV8WS{`@muPW8^UqzzubvNYnRYj$*DL;xR=^UN8Y? z6ax!AkVPM#+MmZe5iYk-Ahj*_u_-TD2&`7x%y61vDKK ziFuNkdRBFY>);PGB7a&XyiQdUt|6Xc2A2qcsoTog*$7hP!6JV z|814~SlF8%j`Sm$SiBGNT&!6{##O42%w!~>I=gB6uC%A8l7TNz8P^3WMLe#q)+&xu zKHb@am!f#=9|*ycEH36F9L=o0hib1dZZtaj^zxG!bOD#vc39tbJYIP28>%n^UoM>O zhjIp^@OH1Tm>;aER^Re_SziDCccY8HyvB-D+jYcw+oi{BD=cVuEqXInX>s{2*F^~S zl9v($8a7s6Q!O(}-^gW0HH~>w#6aez5TUDiJ{+JI@zou@#2+a2EgutwGu}3rYvgNj zU>jN&qtTCT4@aPMdSHGD(p~(o5ju={SQw(ehH^bZk;DMs%oL3S{>@tnE&fRbD}aed za^)Lis~F5Je@@l3UvEC49Sr((Yi|&s>!l~GYs}W?Wuk~vcrn$32cTaBjB^kSqglwn^^L2M+)1*F-!xFXF#1wy!a`?Q6i0H86!JusbT%5&GHPA#Z{mPz5}k=^2&R%N85^IF+>(M7 z84@x8cyF%KlN{m2s^7Ay3%vIo+XE!{)i_8LJcV1CYre$rM65HA8i#D6jC?XxQO*$g z5MBAP0ADZAA6wpP0AHvnPf^?(mo1upwq7EXAzPUUEs}P|nCsU_{{3C>FMfjTZ!~sQXl#~c;y7r`MP}3)Sn9{5exkT+@mNy%wkQQ30aJBZb)$ybjY>Z6EDRG%m{%e+>djca!ULO#$lSy;p^% zY2orhhVOzd&=x{MQ5rEDgw@^!3Pi+*Aq*R<#+v=Wu5iwnphOn_4TY;yzO#f-=wBSL zchyIUl+tBS_G}Pfb@|_XbRqH?OVg;vqoKy}k=-k~v(hh{4|3FJObx1LXV;*{-)?YZ znsaV0OUBbU*Yo_8W@7jJ83Jq@*AhJ@%%wQH`A5PVgk+=Sda1vB(Efyxz}Vrp%Hpft z{Mnbs(r+;B2D#JlB|!M|l^Wj7gLJLRF}sm&4SH)-Z$4=@ju=dMWgodDvKnX-Fyko* zkEqwpf#bd!<4ecudF9!aGyaCjtH4(R)vaxdpU(=0%c(ZiApRCwjVrSBT82@}$MWD- zuDMXN%o{g;qC*j6kyFrR0^BETr|AIa8f>(7SKYHmV^~%)@{*#QE5ioQlS+y*nk^hx z6PstE1@tZy&bQdYomq=QJue85Z8Q-9qp>HXZp}YvJZ??LwrmN_iXMOWkrL)ec~i#4 zf3db2NY1S66U4ryK+uRz5bQQ*pqH-f+rDU5FS(4Nyu;Q`p7k$1=iqQ64R-;!z?`A! z5Vn?Kj#VD(8QEQ1Ub?bGiM_McRS_A=6;rY-8F_u+%zZsohd0r<48Fl~v6cz=&pC~a zhPxu-q&QaZL+T?5lVh#urr?h<&7*5JxvI~1gu?d!Ja5IiG_3FMi$>p-_skKzHqvL> zczN@06KXvqoM%Nw>ifCt)BFCS27ciL7ev1Ixx5j1b>1vhv-g1R>4u4`^*KkjemYT5 zXh&TZ_S1<&;-wL6>qFY!wy=EZRu8?Kc;%L27h3`q^Vdt|ZEA3;CSs+SLV8C0sX5Xa zeNuBGyI?{}w3{|B8HfByI)ltq9xJ~`813O;e3fkcpZxOSCfvXU+nMA-nco4MYS>qy z)cjx9i~Ql|4*KS6ea5ytfA7_L5ywYWg0{b=MF|Lql$te24M=BD)I+6Wf)dJLuoXuM z3&%GRvWw>GjueZ7Y=+!P-|bW;lcR| zNwE5OZrM<8*)>mP;>qP`-^G3(A08tDbD1d_lvnKLn#j`TTx2Kbrn&*){91Os`ZCw| zt0UVKv72jJaNI^=cdrUT&|on+e>@HOO}y-dR?5YO-fjJ8OU4bC{QQAGJk%eQ4Ue9d zLRFG9Q0ya-GD(%KvFWp3cA)_;%BYW!(s~JgQN*(iZdN8BvQ!C!9QL<7d;7 zEDt;{)eK6h$@&qRy_WTNO(lja))oIcF7K?db8{Euo6?idGM27uMfh_H>d#M){= zBDG`@Mn;^Q$zl@A&LOFOB(Bz>Kj`iQOAyn*a%zTP8_Y%EiOU)MdMluxDz75DvKVD2_|`AZ9}e|bWO+pN zt-eD(%-^Y(vcXS*M-}$H`gjiC$~)&N-de0cxsp^8ioyIg#SQ>*SM1$*>rvh=Ni(Iey7Awq61hA*Xc@0}5WizxqN`a)CjKs)7EoJZ?{1_ilWEvk;go}2 zg$SHMNLf28aFcb#i9|r-eLVZ&u3BZgA=*$*eED6Nr~{9(LB(48eEXB^eD7nj<@Gs0 z&GMM@>E$5_LdU!D| z!Y+HaGZ6J(RPE8B(9*AArl{T*22@k;fXE(-eSMyXhekZ=|JeEK|}JJ zmd7`2$B*;?X{|SI=>x$G_-w+iljy{|gE^tFrkJ@R9uxqlKZuFUUbyJa)BmcE{m84U zKD~F{_tn}&>ZO^Oul~pw`dyzzisMjuKMnYa@1Y;}_!_s3`c)tG_?lgTMo&oX0m9Mx zzP2|IHd4}>j4}g6K9-MSZn6YNQzm(CJ5E$L$4;GSsomTbH_O^#06yf-&qjaZES_F@_j0vKEm zY>oEJ?dO@S8VDB1FbJ7&HtZW_Me++ujrGoXXrFb$51 zm9AB=+XdMsneov{ClvBxKo)4F*r<1v(z&;PmC?(tyo-sY3_q+K&Gb40XA>z9?^@G+ z0I+|@B`k|;(u?io=+8q=6{o>SOKB0o$Dys~iuf%7^@msNYbmSMrM^X(Fu5mN{}di# zg`usOOo0(nXh|u_)*rO0@rP1NqB8)xG8JF%4^`&sm+eXdXuY9t+EJTOFjvRKlkS?? zN=O`W*GLZwK1)b<025L^7T4-Vdmht7A!PB?a9L@lz&XDMPmjz-igbG1woR-buoUy)j-pAyjRZiSgFX0^Z=gjZ!cyrPdI1Y$>a=Q$L%p80Oz*lytr z*{h1q{NzauN5;AvNiHu-+^#B?50Y#bpe|utQ!V?fWwXH=A%KbJf4aFb`*%FU^)&N* z3iObPBYJ!-BkB4wW7R3N9d-V9a_ldGQnrxo|CAAu7a>BG}UJJesQ9_d2?2M#6q z2w8~@rSJRVzh+6cqfoBUD8qvBQ3dh_#U|n{=98KWp;Ym*+;lYf5g#TUHPVSuzp^K! zCWXm_=OW!MtA^Rj&-4+dD^>*3(c%AzQ}(Nb7f2J9H6}$}urI+*V*@nv);P}V465-XK3OiU26joeD3d_Zq)h2&G{`@wOvs^N1 z(fc5nxlX?D53zdX`Ih@#g2CMA4q_YfQ$NhSf0{}DR=_!y-OuB@4206_( z{EM%%&imR2AH3$x%y@olodOcqbt^-*lS{&bD(w{1PK1$PG8@&M|G+H&Ut1My)6ZGP zm}>Rv!P+dJE)NC2)eK#)0DxBcgw?{~)12X7ie!eRh=d%ORWVH9`E$~woAnH=%tBt& zx;-3O?U~I+-_b={+a|#;I-@MphYFbg+=oPk8Ig($neQ2nCUh9Oxa2N* z3`>k9DZVOWcDwtBgC!1qEyjP~$^x0Ehx=0_tH)Ya{4f0zA5UYm^Ki2@FSP$?myYGj zQQ`;sIR~g)I@EO4(X&y7Sn11`o6NMBgi(fPi@WizGhh%2l1zYencXwjV?+ z*!t<~!`u=+3Ogv^vmErbDkIE1lQkO{w&bBcq)hx#SuWlpyzBPQhg=a}svK@iGESEI zKvc?K9pmq3!8Ay*YS)K#zDL|NmbG@2bYFr=LO$#tk~p7dIEpSL0@~^Wi&N$< zQlRhECR!$*PL)6Soa)pn8rzwayko?tI>t)b^di==@_PrPfU0VD;ThKPo&`X@_l*Uv z-d}Z(NB$VyBP`xRbj_I-RF)F%p(^UV*PIwV{O=p$3qD{^HJBbF>3P-oIiCyE@>TSl z(`yg5G=MMda8J73JydC;_{w*wq)75{6h^?!ASKuBh^w#~1(RR|Qb)4XmrO>T57oS< ze>d_*f)KSL=slvx*ETvU3!S&zPc+X+t5=yf*_%u6W#QTyz+Jg;p_jtd*oTw$)9hJa zJQo`3Z0OH^f9>3>YTfoKles#hKn+ttxps{Pc57ge4tYz{P`zqg4g9R+js*!gohS&X zJJhbKYeQ+KT6+Vz(5X%Ws{9=Ms_dbT!RSYr2b$~G(Uru1MS9kJG1|klQp>W-={#K^ za!)`NqgLphD~X&$`L`R!4;wz{i~Vm%;)@6*+*GB`A8vMHF%Ht1V{HPqK%i{(jb_>2A#pdB%@P)IQM zR|i<3nv~J*Ge?)8>Pc61_Q6j)*s^q*c+iyHES^UFOa%hz1r$Xs$?{YTyOPS>GgXjW zXg7W7`!Y(unDOf3(?#D4d5k!Aw8YM1$(tJJ>#WE=&o)P{mdZ|KoaP~fSSJ(?vsrkG zr*{bfMeue3v~)er{p5hBUc}S+V7M77Fo>GwulArC^c;1SZl`7Sq<1&S)=jlncTMi(}MO+{g*5YYEvj zMe=DCn(|jr!l@41BS2Q^pcIl6O{V-Uj58`Pl@3CMjXWydynp38H!<0y`t4@8t*AO) zn6Hv6`X9+n`{4jTq;}8%@D;^}_8G4%|E!FffHmr=$~`YU!%>nz$d(;3=8OcD_GW4&l|P8q|NH1L5PzU>X0p z3gn7!zq1SGhhbO|8{OY0d^V0=EBQUo)(X-zEV3r`R{vyS^`Rx$%Cm5_a8#}|LR_oK z%*~guAO~bNc*QVwjK;_>BJ37Nf(6kyp2F+B%9-`%ND#~taO+%i(x1s3nyzDeO%q^q zX&=ni^u!JlnoHT}2IwY0Qt4(xORXMq>9Z7%^Uapaw`s#w&8|QH0~`Dr7z2j_3n21{ zq4c1L1`b&ex=FaTVzp z3>DvBAsP|(O*7y8X~fU8G?=(8as~3Vn4KlP`bIq-{wcnw-sxn9(R}Hm&2kY%@e*4G znhT-@+7HXPsNCNL<948m)Eij5F0Bb$vdAHa6+u(-J z*u(d~T#TOV$1-ob@W><4(-sZA#L{~5sovGa?Gwlp4_p#4l7`h82z3aQq)bk+(ExP9 z)78@yW~jr3y}zu3@yAtl%%u`hyL&j9s2`~mnJ4RxJV+-fWnc}uOI#l^Je6fm_)r_-oPAgw*Qgv zIk4=l-i~7B)hi35Cf@{?KPDSMEfSp@5r&Kk<9JL!ge6N#WrnrHQvxis+_DiN6ZZl! zYkgCfR-Is7j#LDg^v_n|&LET7+jw}%M{XZBB~?sFA6aOcX@D?07?1geHGn?-tfmKD zR7ncLd=%>_5T%xC<&l^NDw;B$2dT@=Udn#IX?`|TiE!FCcuL}p!t0r7{IC7gf<)cf z+Q%lHQEe&tm4d#@eP(M9J)zBH0#R_xHoSQNa1-qfUa&Ps!q`ya;ocQ5kH)@e@gUx3 zS1K~nE?Df7x_Br^Jvc@O9hRlmGT|Sm^G}kxc}+$O7)}D75l<;|;^)P@EFe^h-nVJ^ z_p#c|HjSosDt)n(Yr2ab7y7P)zt`gSeUGYdKB)q=ioW-FaZ|vHgS!HO7>@A)5O)Y1 z+HsetX>ZIhAVV_CoyPccT$J203c&sYjQ=c6yev&Xus}?0L|ie&p2W7JR)NXdzVL75 z55hl{`Av3ru?mD9af4ka((Dk<@aT5=N+n}$ddmK7OPxOyf_y_HP$u;A53Rqqbnvky z@@Gf{jEvFQq=UdI|Cp+b)pwj%9lxASkF)iUuqwx(DL1Dg*k8&2-J@SN3lk#(-_Q2% z0@mLY%P1Lihk`KH+%0`1+C^xLtdiKO$bQ~Za4;t~jfrZog(T8%YGAbSPx0P;s^dL8mo9(&)=c0 zOurv256`}E4}F@|5G);Rae|&mcFpWJ&hOeo@s8$70)ycL$Bga8jh%P5C(qBxI}@ZJ zbH8wgH|&`xiXn>Oru6&Tc15GaeM2)&2oi&eWphujNoQ!VH3gO`x{6@d+diXteL{*{ zPOqGo<{EF87kC)C{>u}g?Z=@?>sMU4u}lyjw^cfxQJMtWeeTKL+Y`F+9k#lpn8M8s z)rG~W>X`5HAdsx6@EV!U%vR09G(pOpL+{Y)V8xjcQcmDS z>r-1C2h)^(+J1G+FVvzKQkV@it+!jkjGcwz+T*en`OFft5&oc}d?VfIdQ^wVUnxTaDj&XfIw#N}(7><2X)`L`_v=hBS$($$HZvQ)qfMx}QKZ za!xNG{#yuwnkU?$1VdQ4k=&*AcsGc_KN7b`3CA1r#8n*;cC$MkA0PJavL933fnshs>`(+1b@LYgqFM?74@GR-? zYf$&G#J`3^D6ji@YsY7_WeNUsE^OX7;bYHC=YNlM_p4)UeNq-RA=dqffbcJE|;X${qss^U}e89c>0$;E9L>um32Uuo-D^r~%ccGyaJ3qS>& z=XvH5zqWy)e$jQ6<$6UgMrzaO%4BCGK(so5bl^2GIbc=MgSP3nU@aByEy~8=m#1TL z&u{Hd(VO;*-Ef;Xz|Q|4cF=PN+VRM-g($b?cjPivT*zyF75_$d0rZ(%?Hl@e{ZKZ@ zH9^Rvxuu3I6sS@UULwaq&VBYA%YVSP6%gBZ1%6=S6Wu9WpciSs3zHR!`1L+)bzP z!|bhQxWd`6bz#q+(mKST(~RWog(zXNT-aCkmR)$~Uq4G95t`IwwX4#h@yE4)tE#Kk z;CcJWKmxAKm4mBB4@*fUd1Q_K4j&1NAWj`|t$qWrNqq34a6EE{(9PYmOceW2C>=li|X>Tx_jj;?a2 zqdIzaC`96Kr<@e60zFLCuPGo1jT)o5O=1bTTEUZVzSMxEGNqw*3C$lLj7c#^oy{F*Q;&)fB9`oiQGSh zsuS2s9-YpVn&`Aer4RJ$Eux2#9YzZ2j-4=hM!a`MRJt!Us3{!3uHs&(1o$B{bt4e8 z^c1D9`l-x?(Q{ii1Xt~0vZjCVeyX?R1r!z1OU$RmWK8MNjJ}}Q*CaaV=L?0W7J?`; ziFXYD3c)%T1%u{j0_kG5!c_Yrds;kIKPZ-lF{sSvvUTTD=r(wAaHsw=H!kMGI?fxF z0|(L?|0&v?CZj4A6A|xJ5D9v@sntbJmT^PI$jadXk2||6(u=6Y~0tdW}XiA%(&(>y_fnQ?S!+G5mM= zKTg=#)TXp2x!1*~vF3L8!&=YGslk_i3P#3{f5POUM&PSK*+2PrI6t=Sh?ROAd&sK|)3?J|Z5U zmA#PpZ~yIQTvf__R*%Z_j#VzyJ}P+%fvE6+SP-B5I8T3v;#!(-C{5FVl@h0QR0E56 zH*|_zEDI|s|Fs!&h?v_$IR_BSye?{UGBIHOjKL8-W!?mE!mA^Ft=Qh_4Ee;6xChEt^mJY z5$A!dz@wu}zdT`*2Nl0~xEglJdR4xQx0(18-tkb4!UheVFp_WsvXq2_(LB5}yhCr)$XS{WtWVtt6;bXK_Lvpgq|FZsg{ zlSF;Y74b+admlQ73JRUENE;8pm`))(0-i;n8@n?7EiRE==)~qI;u%V2q?fVi_% z9LS^8k4Ll*K&u!BACX>u;^>#LUlM=%GtCn&*<+DyhP^{Co!)h!ui9hrEX6&PgL z)ew2J5@|C(|21UFdK^(ha{QRuuI)d12A04su_F4P)rmu7^>kP%Vb>qORcb-l11PY$ z&Pf`RfbPbt9|&H0Y3L1>7$f{8G7uiVeF1k9yQ*EqW;?#b_96dh>XdR|p3`~K-2*Un=@PS`pY@8LL>^~r1t!KEpi?S_vPz|s3 zbPk`tH91%G*;O9-Kngfq&eC=CY`C%|g6FDMj*D8>o0r|sGpXu;OEW11-+pPQ$|&j= zCkqPy%vnEw3K}TDFVKlxu^x{Mty$tCX4Nw2`IBW(>{NaGG1O;izep*F{gf?^to=rp zwPQY5?Ur8SRq!+yHqYSqoLOJ$ba?%0^>ln!Y;n-64|8&kCMI6?U2p#J@cjPm>iV8w zb#ZBFVPW~u)o*O#RP?T`gNLYoIX3=#3kv=ySIm&x?z`_5vkwB-Ro|~OaB2-IxEt;7 zz;jjByjBhKIG(&~#0irYr&`CAb2qN*_eb5frw_(u1}|3WeOd9xt5&ntS-ag5KDNdu z%5znX?+}$Qe>P~o#PPskR@Q%i^YFR}f?R*hn*0&)cKtF`&-G&fAURh8q8NI`@7eov zAoV`f*apu_5DN=iD#6bWfbH~F&3(fe}6{>1y4VJ?o5PsUwT7Gx;5tUPWtOyi5N7? zia?B=JF%psVal>C<8Q$I5V{XoA{SqONy>ZHD2(sK7yxyLoUc3jgTxxYU|WFZCKb-T z8?6P7x8-nXxYq>DTh?6Aqe3GQs>^&dJWOoM8B|h#D?M2Bos5f$l>=~ML`U$nxsms= zi7G>quIg3)e5@Xm)fOM%jZkm{D1tXnD9CzRYI;T3BRR||qZNdCO* zHN?w7UC0~9mE(_zOoofp_(0HqCBwVVy}-oMNU)0f zGIWKDx3Z-*8r;IzrFkfr6zfRICsCdE zk(0TI5tpj5suaB#st3q?@6dL}w&O1E%R(ay1hpU!o2;C`W#Vg5V>3_tM+3-HvaAl7 zQza@p$9248YH4?GCRUEj@XwCxc$-Z13B8Cf2DaRkt%Qq_W(0;4O;VPHI{e@c!Wt$s zhKomzJxs0AehG<;e}(LVXXN*0HmbB;tg8}@czzP~Cc&Twev%!lJz zn$L_0DNaZjQqQjb2QQew$aHD=lLXExFrqDDPqD)TI6ic8;mZ3tg#%T0q~1~zpFL>P zB0qhT9zEZk6d0lUA$2;nCFF2i9m1hk`Y3JiiVy%_Td*_t{PSDp$?Hhz0ewh?YRX{W_su+5(-u-7b(E(C&P6T0C4cSwl@Be%H14N zO4#MY2tYCGITNf4KKaB5L*BLkr$;NvK&boI{zRZlxP3fTCRZ!qAL9Z>V@!4v2Dh1T zpr*AVq9q{=6PSOgfGyf%HS}-Z(N_Ml;x4(p;A(D(*i72k5ev79l_N_VOhZ6B`>yNj z-=rM){+IK#1cb?eD>gcy0&w#hhvob)P3l6vja!?AsIne?tx`WfOXFO`Om-Zc5yd8_ z-~{i!o%B}4-E@^rkP*qU`j%xS!_m>y9L32qRm`?~Ih(aDT&199EkXRxUrWDy(<;58 z6)AFM(e(VHDYbED%uEL2-`f;ku*pZq2op9oZCP)>6E%Z~4qxRb!#~w<2#fjhf>V~| z)o9x?@TBj;XY>wv%;yL28ZRfxI5@ATC{qamC1fAGInq?n-ZGAhqU`prs7*dzba5%Q z6MAH~zIE$~QDgrWL2}`(@O3hC9$zb_`O8`4tk23{&h^U?j*f>{v)$!uAfbZawAQBXjn&~9ylEBlvUK4BvL8I#d|OJXVrf1|#0t{V(jE>o6HVZb z%uTi7ezlDKl~&&BMwuhhdU#!Bp!E3tFy<=J!zm4$lbJuaDY!J*Rm$ZzzRBSE3b ze&&bcS#=-0v-3C4}hOX z&`?EK^5=4SN2y95I)Z}qm86*@b`tbYV0=OCWO_^N`jTooH<~5&kG|#wm}YGhMO!7M20d0K*?OsWkvsrI#RikHB%Ee?KX-m_GC8{+*%Z+`Rp zy*Q3zN#8F(8;SgiKoVWdWR7u5NwbA%B#nBT<$T_)cwnBi*q%K5?!U5k0enG~*57sbY%E zzV!}~LCY+-Rw(kealV!8;o|!4U_7QD0_ZpGOaiI4ap1FHvzbTW1hkF4;L3sjeeK}T z)a95JFe|O!-M$2JvgQae2sYy6cpQB$8dFu{^eg(UTFIPATt-VAE+td<(d|@g!YZ9T zJH3Z8UuA7vgrALDN6>jc3Y0!%=eZ@5p9v=UG)x4_m}-{NP$=6#GE#@=8+B!HS%Df) zIPrO|O~c;FQU&a*fCuzCe4hfGx(3z@M17yghcxtDth4fRQJ9*3um!KH4+-ghx`vcyj4 zBrdp?w4Z_$@Q-d4uqNpwQ0b(p5HXyNo@ney=zB1zS3 z4dY47F#+wd{;i)jU8*|MG8Igo+#eM)Q&soL(n;nQ}#6%i5gl?ZwGhzQSs>lAJrWU9W{)>ue`77|{ zj@A*B>kW}8HUL*f%RQ5Wdz|{+fwR|522lmSaOkSTbvX*`t(c&ME{`1jrs~r1DB(Ox z&cGl2eBYQ4ZYA2A6`{X>xjM8%4>eT$A`Oy3Of06vkqu@FoMH<^3e5T1T`47Ta4=lK zXZL(zG=$_bd4|h0U6hy8kY4bC*qmFOMVgSH0k*r(e`#Op06h_M7_k1+)3KBWbYqg_ zJO!H@<8k08Du1TYI?{c;@q!x2z@Cz@^$80FVc*Z-N+Lb-c$7RlQwEmP>m!Tm@K$yx zL5AmBm;R%S`NbyUZyy>6uJf0o2tU+A1r>|Nm1ZkEZg+jvG!yO3K0gNsPbPSluyOnp zIC`r@XuLx4l<{cV&H#&cFa#sb7nL7R)49Woprs4c8S>Y&mE*Sq z-%tt#9zQXzcRCE6uW~A~F}0@p&R{lc!;-Pm40`xS*{Z;sD0rG$J1obUx;#0S!ei6XiR&1B zT@R>vV&b?)&x1ZxCz|V`)&0Dhl4_x|5mJ)JTZJuHm#`_7%An)=tZ1l#LKC7n-T(CQ zz1|L{4@=j7yK`2|4`KqITa=}}9HD-mmd3E|GqE>sKa`(ZWQ4I4O*Uh zlg1DpO15wQzcs=nmg{(Wcs;WQ1r-q{wmj8Gc@-pa3^V~L1%{_)KtT0Y)utMBJ(vDH z2X^C6ObO(#AdT12B7-eK?2}rc?~s+E=S!8ILUEd0|2U|M<$)a#4t)KCb#OIOtfC)5 z+HX5f{f`?C>PwRoZj<$#T&Tw68LkYPR+<#?DAev^OIjdVJtq5~lTGn0oSYvJ5&bjX>wdgDqDO@t=uEqEAB@%A$rr(wIu^Mq zF6XWGdu2gJS_n<)7EvWCROOVZbF7@2Pif+2!}W2X5y)?c^uiYGi2M?)GVowqeYqy{ zg=`{RrsQg6yrc~z@Oi;m;jhNFb9%#wDF=9dEL|1E23Cv>f@=w9K=P)UfD@1tAcB9@ z#mz!tgCcXKRHb4 zJYY|r*<$`l(7oWyzO%qn3)!}Wm~$Z@7oa@1~NPIA4{0c zNL}-9(4pwI>dDPBu@};>)n!1MV__@3mLLvuJ>~2Um+u_s3uL-6^l|7 zLozff28%m>9xy%`0fgp|5SmD9WUUyO9pSkGa*!vSNA2 zV}4vy*nK_nvOHhrHEpsWwEg?N8Ef<-?F;GCl~%D<2|{(V=x|y6eXm!dXML>J<8WeA zo3dt!GlM^KJNJxs(Z4AeBa9GszgMsg@?q%wfUq#Bs$!+C3B5J&^iC7C5N}v@UQwPc z{%}J=_%&EBvk6dDo~KaOe#L$o(s9w!rqupA+Urv(5ei4+(>3yxEvEOj0yCh0pqe7} zN(2^*Xj9)>g?7a!+JCg2)(4}|gBb#i2bOoQW5orY7Iq}x8xUKBY8^vF9in~ik9ZLl zMpAh+!v~nT4FQ@ym!^`DopYiD8pQZr*d;Pvh4&tGX1Y1QaqKdeT#2vxEHx1X)nz@t zLlp-ZuuD6eb+0pu=87*g5R6z=3}uU?HC_wYwwk4tVO%!+*H1IT7+*~bk~{-E;(tTQ zg~JJ<6~!$#2whnva{5)TkU{qv$+{hDvEoHYO<^g+m?SsTxMeeg=z};D^g;v1TgB#^oyEk7=JGB+T23E4OS$WBwAMoAI2~hooXGx0;B1>V%ZR5@h ziVs6RO+66`Zx$I1g}G{1?i>0#3BKhacL@u7YUGbJ*Jmubrsv42K@n_ey+%cP4eQc> z|DWx7{(p_#(jdk=N1ZwO?|VMp=C|4E?E1YAMZLrhq`oqHWnPIRk_)6d?qow}zqdd<@NtFL~$ys>a5P~p`pnmLgRzfIB3S>~hm zx#{KFo8RubzO@ux|Au+B=H!!ma<EHf5_XSK~h2D(5 WYHv2Awr!XN;(EIJxvX Date: Thu, 26 Apr 2018 22:55:03 +0200 Subject: [PATCH 09/71] Added new device classes to binary_sensor - HomeKit (#5254) --- source/_components/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 631ddf592c..d84658d945 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -194,7 +194,7 @@ The following components are currently supported: | Component | Type Name | Description | | --------- | --------- | ----------- | | alarm_control_panel | SecuritySystem | All security systems. | -| binary_sensor | Sensor | Support for `CO2`, `Gas`, `Moisture`, `Motion`, `Occupancy`, `Opening` and `Smoke` device classes. Defaults to the `Occupancy` device class for everything else. | +| binary_sensor | Sensor | Support for `co2`, `door`, `garage_door`, `gas`, `moisture`, `motion`, `occupancy`, `opening`, `smoke` and `window` device classes. Defaults to the `occupancy` device class for everything else. | | climate | Thermostat | All climate devices. | | cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` as their `device_class`. | | cover | WindowCovering | All covers that support `set_cover_position`. | From 546806f1c6bfb194c3d9486bc159180715e5dd22 Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Fri, 27 Apr 2018 21:41:00 +0200 Subject: [PATCH 10/71] Update qwikswitch add binary_sensors (#5210) * Update qwikswitch.markdown * bin --- .../binary_sensor.qwikswitch.markdown | 18 ++++++++++++++++++ source/_components/qwikswitch.markdown | 11 +++++++---- source/_components/sensor.qwikswitch.markdown | 2 +- source/images/supported_brands/qwikswitch.png | Bin 20959 -> 5032 bytes 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 source/_components/binary_sensor.qwikswitch.markdown diff --git a/source/_components/binary_sensor.qwikswitch.markdown b/source/_components/binary_sensor.qwikswitch.markdown new file mode 100644 index 0000000000..e3fd446a3b --- /dev/null +++ b/source/_components/binary_sensor.qwikswitch.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "QwikSwitch Binary Sensor" +description: "Instructions on how to integrate Qwikswitch dimmers and relays as sensors into Home Assistant." +date: 2016-05-04 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: qwikswitch.png +ha_category: Sensor +ha_iot_class: "Local Push" +ha_release: "0.68" +--- + +The `qwikswitch` binary_sensor platform allows you to use your [QwikSwitch](http://www.qwikswitch.co.za/) sensors within Home Assistant. + +The platform is configured through the [QwikSwitch component](/components/qwikswitch/). diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index 8889e29fbc..e915be3979 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -60,16 +60,19 @@ 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. Each sensor is configured with the following parameters: +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 (up to 6 channels) - - door (single channel) - - qwikcord (Channel1 = CTavg, Channel 2 = CTsum) + - 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. Example sensor configuration: diff --git a/source/_components/sensor.qwikswitch.markdown b/source/_components/sensor.qwikswitch.markdown index b2574cdb1d..afc4fc6cb4 100644 --- a/source/_components/sensor.qwikswitch.markdown +++ b/source/_components/sensor.qwikswitch.markdown @@ -13,6 +13,6 @@ ha_iot_class: "Local Push" ha_release: "0.67" --- -The `qwikswitch` sensor platform allows you to control your [QwikSwitch](http://www.qwikswitch.co.za/) relays and dimmers as sensors from within Home Assistant. +The `qwikswitch` sensor platform allows you to use your [QwikSwitch](http://www.qwikswitch.co.za/) sensors in Home Assistant. The platform is configured through the [QwikSwitch component](/components/qwikswitch/). diff --git a/source/images/supported_brands/qwikswitch.png b/source/images/supported_brands/qwikswitch.png index ada6158b54d772df5d1e64ffe38e8a12a014c3c4..0109f03a359ad82fa55a4bdc89c315d63e2244d5 100644 GIT binary patch literal 5032 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 literal 20959 zcmX6@1yCGYvtFFwixb=-xI=J<0Kr`scY+3YcXtU6!QE|fhv4q+?(n$(o37f~nwsj< zcDldQJz)wzC6N)nA^-pYWN9feB>(^-`Sbq+JmlwZjrd;p=MC0L>8JAN{qwRdf{OzH z6ceSzgjHN2PS=7Qw@0AhF8P1E*&dwRVo{hYF^NNZ3G)B`&4dP#-S&AUS~vTg*cedt zP8SrePk0K}9poNtEYWYQq2coVKTiN4l^Ntut-)09Afjzw-+H3cHq;CNFxzkUof4l7 zpMMQ&U6itlwkD$vh^|; z8yZlLg#eI^A+g$NIqJA-8Cw}c10>MNWZy{3k2_Zh{i3KBam{0g6P4esx$Su+00x1i z;P5TVY9) z%-)GBjiUNcd-rl2KwrU=w2{$xwkRfn2Nyd&g9TO?&+sTK|=#@D{R&W1SrPS-WzRxuemrh)!`{lyqqbQPn##dP4!$y0|1fR z(pao}tUjEA-pxU)6*mTs>YYU?INuU^83uppkO7c}cLbMPTOV-o@oCk+b95aO#zifO z_!eS~k}H`W&z2rITqUY)yyR(k@JYdb0ZdJp-Bl`>G0zU`dw!35t<`=0Zdtx+HL-ne zo7?KOhLUWUbYjS(m}mO}Ro-#LM4lQ7(LGgGy7APNVACXsVuk>b)>j{(C|0Ip@|F#ZE*v$TEtbEoTQ^bjsc+8Nde5a}K?4jP zxtsa9)+6x`4i0rVXw}|Vb(*@=@*45Ml;h44VF`W^fRfJD&D(h$A5j&W1&=q?BHNJS z0Z%OLv+oQM{cY0{qhT6FZ6IF^7Jx4vn<+sjIxWLN-DJS{IjwRLng?~lbiJb9-Wi<{ zM59SX~F^$XnFUdr?kW z?1WM-<;#_WBJ@PHna2v510^RHlQ-1z!9DOL?(~16a;`1_e=PB+{Z4|xNRBl zj~b00oKs8vl!5&N=fj#RQfTiDFAeIy&qZ=7;QItYQB(# zJ0b>j)1R)Cq#roWx=JJ<3bj{Vc}QQbX!p79qP>$b({Pw|5?}C z_R%p>jnQdJm9BYC{KXi}JL?);`2y(P%xWf-**_`g62T6%7S?ES=b?4nDsA4AkP33Q z?V$ddBanqzb3nA$s?AV_Wijq2Ss%p!IQ2PgWw}`QxS-_cyB_KtW)gLYIr?dJ=OG^w zTI$4}x?f8-XuH%IhglOH^qS=yB|6Q|wIR~uYz;8Tcz^Zoin+1Y>H@9oGZ?v4>t~m( zlV0*2kxm`fTFF$K%XneaZNLnR{CH2`8o^ToHhS-9-HZgJkXwvfERm1CVzb@@BEJLR z8yYG;6Z}chc-!w&f*qsL0lAZfavQX-?rMy!0-b$AO#H`Ppi>%JY5{v5f+hL$cZ-kb*ziNcqa-5BnLGS=SC%t zcE5TvX>wqyW>+&`zZ6iMrF@forhdl8Ri5i{+UMnR=-+-(UvBr4sJQ}u-N@yg3+nY^ zx83cvq^xmVude_8{N>{Hrp2eSgclslKut|e02xr2)^Di!grlRQlli{>(!Cn_ux^Ic zHC6t;L+q22$_3UVy)>Ejb(llEA?_JFf8BEXel3OO$&eT<{3NQNCFE;84cbvpDx=Co zeQBU7wv`#;ah|Kc>B4*2H(nbwd83}iT64I-US6Q0J5f-vHfrccFAaW;b2dXQVG($pT%aVDg+t8_CeT%+QQWInMJO6@Tiauq~o#09&s zrdeoZpGF`knaiFOfwJc!K<@%pk$BoI*2N466G`jeB6tV<*d~kuo&_{tr{4>8r zIPNy)oL8*5|HUu>d*Nlg0>bMVj3%ZCRaYRAlotMK9YoK61NA=j;}ImYse=W z>?*eG_5Ty2u(RXlT-%RL?SrAEEspf2xdV(9-#>DuYZ@EvK0yctthOSoln#sv`Fyor z7^-k8hH|A7BwNU8yGNttcJz1zU55RTGbOvWz`bzfwo3k=w51lR42?%GPr4f=#`U=M zT6B#i@TcnE8saOfIC57k%_xg-KO-%Yc~iZP!%2PVtwN0|Kl^<O;H3(>@0LWU8r5NEEsdm(LnLtNVAF@5o&OKs6_|7HDQ_w?p?-8gx8 zexaJQhTsvEsrbvD%m1P@F4hCIp?KD(+t5*esLtN|Kaqsdoed`DpZLl1X$8>SV!uFd zvbi6n3&SLq!>`SXl!jdq^J)8M@7qgu`UPnjAchR*TH$@liJa*qx5k+MY`5I096n-O zv`C8V7@HHCGuKU2_|0kh`k#!(T{trNsd_;5J}~8j%BUhSU_CtKpucBS)NW}KoH4dK z(2w#m#8WOdytqf z$o=uW(DjP{pZ{p><}%K5+sd2L{G4^#?Qh%JMJ^H>h!tRLYjb(j=S;1B>Y0*>>yP4( zVc=NrEMS3RgRCz4#93l5UbHZKRuE!?|DR8(%@nHbc6jbiEP^Yhx=@z39ePQtK956M zTBoU>d(0MWR~SBKGX08qcDn|8YoQ*o!VgMRLr0ouD=7Wizd2d$RkcqDS4e%Iflv!u zh?84IfO)fk=>RNgeuSBR*pErX_|RSNTpM=N8*c3Sc(cnQb}v5PMV%IwX z9RAqZs~9QE`E?7`r#k@+UqZw3YgsP!g(d%ZBn>Z$caOXBMZqAWMX_CK&-l}W&&LDx z@1P*lB%cXZ&z~?2_Yk!;FJWMMrHj0PCKV3tQ&)7u&mATl@Ph*br@~8;13i#NG4r*x zJo8bS$*7-iV$?`?$!Ch+USE?dFFaob)^CV!wo#tnnTz;)%C_5MITATiTuF2FkR|60 zZhufvxriSSd##)Q%Q|RH4r%De&i29(C9DgoFz(eXBbE!p%YB={WUehcN;oO0QuVf9 zUAPUK9v^B>5-8AuW0|9>3nGigEs{&$W6hk|Fi^Y(N8cS}xxS3Zh#N#hHvfoYEfB3| z>LGB)_clP`^E{K|Yl!i%xD29Hpm*7?JW-Y1pw*fO_QK|r{;Zl>QE_ie-=JwMHHYQ* z6pejH_BOgAzIlwf#=8Xf*jYnUYMj9CLs#0ggo!bccRxpP7@Y8aI>;?j>8 z*Sp@fQ#~q^?vnB+Siy$h5&wd#v_cqDI-5? z3QY&7VnlkVyp*+dG)DrBt3&m}{{BMhkYo^HQHa-w4 z%9Nz$8EhG)3#tTH;ubjEB2^K%d&$2W6Yvx(9#OEE0MQ8g|LmU5a?qinIUZlh_YWx| zlA_IzC9E?J4=o0_Xp_rv$XYg_-wvc7Jd zn4^iAh6ynH$_XtjxK-(Xf2RnFad>vIpFyES@0-0rR?BkdI_vuDq{{F>V-QGKCuISo z++JD|GQxg`1Vx$3Q}?v36Yyo?3wD1pjbPT0Z-{Pr`8iq;pQ^+B%LT!P{ZQS*#lz=i zWur1sdvWmuX-%2?*hmYem*2mRhq(+P^Ow=j{}iuq4`}Z{dWsLGg{h_;z#K}}{b9bE zm6g#VVha&ZEa~&>w|DQrA{zmfs2ep#s}}rRJ7}09vd%rB*0p)c zERJ39(qeR%dh0qj1G}m_`)l7^=Z*gDeLt)zi)>Yhwg>_S0~@uF17QLVEaY+nG5cl- z%um$EHid~(hC0Y>L{p4*^OQ>Cx(gY#r?3i)jnorWE1E-bC2%Dc|8o3p@IK7cVJwdQ z<;KRqk=vO>mOG0y~n=KGc4?B6i?ukYe%H@JIfeo0@P4MUx~wrvxg zSLD^!oK9b?;(~BN@>5ikJXR7sir&@^%=13rr&q+uDsvj2gQMr@LJNejArs}!makDb z;}`8O*sy8^Z~I(betKXNe7U`-{p%=uR998afSRGa|D5FE&uKs3VXFWuuS$=qaKqSo zpu7>z^lFEwqizvS(kjV_XtLOev}%CY01b6Q`=9z6@yODF2@4UHAy}gVs!~FKZ~6nw z7CSrEv2re?W5(-_A-~{>is@_9f6-B&K|r{nwA|M;b#bp`ri;6p@US!bbTB_H8}E(i zZ>*C+)k_tIwl?TD0%}_;*`I3&U9>dzF!0KjMj{%W(qF@v;f(@To6MTpd~&K{77o`= z{OiXB->+g~;KT+Kn|@cpMavs^i@Th;xLT#q2EY+QeHXmE6VF7^Tdx~jW5Fui#(yR7 zKNvd;NxK*Q8~rHxB5d-KqGaBGi3Eh*FuN>VX_|a_BsSO}(tjwPg{M`xC{RA1qA3hLObR-#SXcj9aF)@R}&Q-qo>_fT?2NN9-1 z{ZRTy62ofA-B!b;Nco7wY*$5Nf6_$c>_r=kHud_5ZkbbYBvT4V!abDLN^RPbOI9jZ z7!f_r_vkHJvUcdQIVk2TgvXJn1;!a}{gBkCG2E`S+<|URt|6nZ-Tg4_YP&KDV}9$g z9t*PzG_yP4`U{zG&9b05Z?No%>wO&xC5G}rDn;%@g~@H?;h8S{))-$aKz89}cs0s4 zbWEbzIh|VC4R#$Zvn>Yp?Dq3} zwn>c7X@Cs#bOM3=0HqSz0A{p#_L%RD-jw+k&dgo7}GqiiW!%H6u1|6 zHxs{%@?xa*>-k_T62X)~E0URqh0`jS;%QcBQQNL6tJ%QrMTsn**5RmL|3~QcI(3D! z@nw5jo;Y`ASGW=A{iM7@;^%H(I5TiW`>Ce-Dn}zr_^SuEJ{dK+Hsr(keVUc{bbcU< z%HhIs|GNwfQ`fc9Y(!w{=;D_$6)FTa${q-X>T;Y$d3S>dgJGdXd#c(3%J%AlxUbxs zGRT1)ZxdP{OjF;POj_EGKH(K}ro>Dd? zKQ`>k#=PuG+p>=GoIum=IE726aLZ+D+E{X0v_0s_L~d;by{}==F*_;Hx#MuVJ#6>o znMm}1HP(t4V?~Ewmw}u`94U&BZ?Jq z@}X1iG4v%0`SRVoYtlTozJ|o1x)J%S?6J7LNg5!FXWpSM8b}<6nU_DKFaiy>Dn4BC zfhDMFy?z-8%b-wvakR=1KiK8=>Af58tK>htr>;c+aP{{MRSxLm*G2Tm`ym6jyYfd4 zmpo%ny*UpRtafXPWW7m$0TMN5Z$^vjVSlbXa-_U(Mvf9u+1m%9VXV?Gu=c;^kvj%I zu>tc5<5}Xsx&wFevasq7&0j$n-lU!4F^6O!F#IJDAn@imDcJNE2>ZL^%p+}`fz)wm zkf}*-FTP?!nhS1~meQslUYm;q!?Z83n&Aa27W3`aBcSJ@MJtkLd6;oG0@)`=c?;TI|7CPVWtq_Khv@4YNQlwOL$LwyB|6$U6>CQGt zEfiW>6jut4fPv!FPXyC$x}|*Ge}dQ?ucP@J(`rg?;&qM#q_H|JSkLt;Xc@(70kxV! za`aKZy9(i(tL6s#?hjgL0SS%E`uvB`@MI;adOolY^4RR!Yw;=^J|~=H%#v`$vDF@W zE_kNXxytakl{Vhc4SYIm)gQHzR1=D|nTo7@-A%ioL|RZJto{Z)DJLE7D|}C6mX*{W zv93l&?d~%*geUeTA()w@t=5+yCxVO-E@-wDh=7a3Q&xct9uQvmR)O>1K^FFaV5PGd z&m}ENmkggXv~&{&D*kd&eh^;!N_x8Y0E<;qw%_IU=T`+tvf*MEx69P`u`29-QFY*# zP4&OdOi-PRdCj=_$&Yq4QAA6%t6$_t8A4KPE>a@Tg};fcK)~3oL7kdDyNe0M!ZSp) zQu&glfqepbN5jH$F~pbL(tsOEj0aT1+ZA(gYfxJEG8t;rU_Gz1q#C39ftZ5wAMHq8 z4nxZ<;+v9nv14*Q1k#brB}J^B;;`0a4k^FsC@_!Tg?a8f;E2wPYrH+*8em?@up3(_ z{S2Y!T0{JP%pf`wWf8l+EhIik&{C3Zg@ph(Lre|BG`!=W^Gq4YWh5lvzfJmxm$6B0 z8hC5LEl?fpx-I0@C-wApK7aXsEDKAl?Ee_tTdVj~4gYtQo^K(&!7e(0OjeGh$1qTl zg2$ClkeAEInKUv_{IY*vaPQKIM0j?55FV$zHs(IZNuuw91*`<7DK$S+^Eyi13_~1& z$!}EkZN#%K5%ZFws4WXJlnE&WD?RBpWa`TVf ze(U%`kBxwmSmZD2jE5gycLTFxxaZ_NUj6H>GQ<2uVn`4;6|Rqbh=h^ZkMBEIzg`g^ z#TlJJpzsDjzc(vPi8?&~mF{ZpdA@_WLiMkF$J<1_ZM6uVAT;0Fj}XX!45}xf zvTyea!q}Tg{s!N6@GrgH2aH#=TP$#8jOU+VU2*u6#VSI9;@UZ3Ux#Vs8l4+uE`%&v z&3b!3U@`*i#$pz4M}V1T7d*eogN+zdIv}t~|v^B<0APer!{i z_nn-NU+Q=UgI?F|M*G1wkF}n={(tS^b~Knm#$4b(Y~JFLGj)Rdmko>DVs0Vm+>ZB0 zpNEjwC{a&@hE%tMQAs^9Oul>(L0gPixp1teMq06L zlmpmG?7*I41>S;LJl`Scm<0)L!_QWVp{e@&V*9_t!m!NL=jx@u#yu zAT$s?jqv+Yd`LvwK4_sx-Z;*du&I_V!Rz)TTw6dbp~W*SO*|PnoFGYj%hANR2xbCb zC5YKCKeO_HS66GGtqdNt>a8o_;(5DNl!q&-fy(XC%S1ROcb~=m>H8C~{ zN$p?VMv?#>tmhv`%9uW0ZS~zN?kM6gf@mjTm&OOjYeao z$gF+gEpBpVA|X{u=$nf9Z9AtdqtBRMeAs$Dip^8BzKvk{sAXBY+MW%=g7(~RS z6lw3f%>;~#J<8j=8+d4fZWyW1<)K~WU09sDp~C`(3o8hM+$P#YV3#i;OlYRN&+$WZ z>rGkz4la1(hPzFb##9fDGT_@``KqY427|yCCwu+3Zh5PhLu?Lkmd3I_ufZS zv@gukTpeOxWBjG|Z7@rRTef?FO-V`gU{;FEe_Y?Fkj9c^tR{?rudhYiF#S+4UVhY< zoiD5Nn5ETD-a_rC`v*NV97V)@!DVA4qyRVe5BmZD*!2{ca_>vN|6c<~lHO@x%_TI5 zTHt<3NoiDeRWXXFsiS2-sz7Be0_!H*LkwlPTK8Dn zF3`BhkPEJSD621-|2ia1`(2YapENd>n!DZ<60@ZcUpC``H7}BeNWUfm;msT_>ZJ+| zBn2Oh`&A%8ewr+@8q=u{vPnaRC&d8w<#&1$p1+|Gi^o6OzD4O5zTsxO|6+h^N!RCJp`B|07;JM5K@~qcUvgi7`RaN#P0#a_- z9wNTACs^f#`67qg%>@3-1Ts$m&E^sl9+ujTh47p(xR3q+ee? z75~oDCY-8P=5@BG?n}!zP{!0@&5FwcPG&DF?)Hh$TDU^Kp!u^}V4IYh-KFQGU32*CCw*4S(t>9f{ z>Uvd*&wufx4Tcs}wtoJbX2mfu3Sg|*Isa$-{tv-*YaZ(RpnLF8_%=4j*pRz`7p6h* z!18CS-9(_dnQsXqEV*N2KY$pAQppq(juB@MzE+J842JQamme{EZ!$drA;E;5$}PNtG=dl;Lr+N%oUHy2*!)VQA@0Slp@@SQAO zg;&vm+ z{;3GFA{X5kzj{R4BeA^e*8G%b)2h}~1DNW(>=_h0pnoU^lDMhdAK)>pLurmJBoLflIUv+>cvSle4hci$zwOQjY{v7jH&1w%<`jV1L{8w>A=fJB1EPi`ezG+NUTOdK$59c!t8kEr=qz3N4t z_CxhlvBR_8RwJR_RPzCNo03x$owQ*2)^nSXUwaDsmj1Ti^`svh!5VG&8;g$yHll4a zMlFk{d{Jr{FjXA{p1#0-3BKs~KyjkToBFrK+=;nZEt)qac8{Q8qN=^M3~6S)8A^!` z44|X04j-JrF*Ys!9FwH?L?UN3Md>MFtq@~7?Lo2ThpclKo(lFy>zlc(b46v<+unPe z76vgJ@Bp%CNk&k7e7k}N=g)|SZr7hSkn;su$Z=G&HfTOuWgpimU1AEdz3O*g@B6ol za1+~b-$xE?aHyLM*vAe=yh}e0x0480Yd<2zt)!?}dUlj8`b7^C(J*w*;GxQF>bTCf z@9AjPfh>J@@+G)`zW;t^1}jZzAoJVj|1$r{Ac2W~iIk4sf;L5J%!=Uj(U2d`@Sc%fI6~gcs0%1fs%R-Ta&R|X* z1d_-<*8@xzSl>1kL^RY(N@{L`{$%ug=4WN|0t~Kj&IxAbn>c1tY4&P*oziI4usx(g zhGdmH+Op?G=MGubDkWtaKc7H;xkvp}=3f-D0J50GAEns|tmfs&9{v%5T3-(PiJlFw z6p_5Y2Go5=h)blgumzUo!TK0C^oP?hH1nQ1Cm3%2MCb2JXK}y9pV*Ot2n@11c5jON zqDVxlXc|cVIePdpV0l!U;ogZEp=XN(OY2L0G3`4{@cs~V0vWz3@xXOlI_i@8Q?dTV z3`4OauhHx4BHtSOY2c!MWOzatU6EliE|pm=ngknoI-j!II)-m8y=k4`yQVKR^hJ=8 z@l4CHJpwDT5-bQ(abgNDDpLCNMb(#E@-%PYaLO>Su&BbSQEq)&1jd~e2l#5nG|5^} zcy^t}TU4?nvl#(1k>)D)&>M72OX}|(jaCq$c!%&rqaasZ@P*RKUeef+uuIg8P*MKj zv)Kr@Zw^UPeyYp;P0k zk;xz?K3cLl$Mq3bxZ-w8=DHTv5nZ(kvxmO{YfW}D{d=X8f3V)cfc#@fEcwkYT}a<1 zETeO4v_(vfR(F|;hRPi*i_0=n5RvkiPwnn6HM96wBqQC?>TO;!8{Ka{fl!8_IGPYc z?To)ub{ReqJ|weGqjyiV_n9sxN<^n*n)JXBQ)rLe`V99sl4zokI78u&8c&Mt-!DKD z6v|9(6(zODREhrB$y7`xq{Pf~Y-#i8UXyR6Nac1pRrL`o5b{&xoN9ljEV!%-3<3+U ziA;WVnxEDp95Z$|VW*9f&n3%S{#;Ufx?dS6iNfDj?FfESee%`+xv8G{-|SybmkZYm z-5Y}{uUvq|eFU1&Cq=f%!vmS#InGxqd{CW5YR;~%mFo z<`cJDPr(9Js{Gn&i|`76Q2T{l6|Au+`TpTu+Js4~Vs!WSKK-j6t)C`%6QTe8dr5Dr z;GO0?26Gm=KKa2)^S(sP({cz|WzP&{P;{u)OZ&cAZ%E>tdaOHqz&l4STXd+1wI_k9 zV-R%h$>u0JIeijxk-cb)(SE1*W+YgV3DxeBfBLI4S_skiG9pdJI;PfR4#PKYtbH8) z74}{0C2Go>_-et!H3|0H@69mR|6m(>Z<9nc_9>39rt_u~urJA!Q9%al-;Equ1u#j) zs6&7hB}D?@>QcmAuMnA{a|;h2g#-M;&9%!*Ov4X%9b&^G#_!&rgNy;O8u&RnalWY@ z>M^Ej9bwZCMMCk*=B3a)MBZWN@ljddTI8Z+-D@!@{uZf=+&>XyuAa1E%;uPA&ou>$ z2_@vPjDlt2J2>GE*R0CKphW`#q0hlVJJI)1PT3l*4opruam`UWLAOAyilo|Zj>4i) z&1Z*CfSSqFX#O^Yr7k^2;>6)KV|+=4iL&D@X6WFmMr~AT;%;Ty*>qMG+DOmWN^=*U zYrr?#EhQZoL~dB|Vj`6qsAqEzi*D&-82F}z6fRwULGNd&1E?(`q@Q*DlH%}btN~UH z5-GG}!9sIHH^Xub!q4)G|7d8D>EuG_<1G%swVR`TEFMOGZonpX0hHHaWy&~#In|luqWXefPZPgeWbd} zx*v8^zT~VsvubotrDc|(#2jQz^)R+wRrKK|(u0BGqt*J+Gv6~nI5yi3lZ?djAjAq& zS!Q#xySK7Cz5VcNGgIwxBV4J;q(jsdcZ0HJS@>rX4H`RzpYYHE87r@yJ-ZlcR*8be zwH>Ygln+gUG_>!Er;0gC0UI&a8<<$B*Bf zi=aDt@$v5m8%;Ek6hVJtPln>1{wp#hrS8Vx>nQXR!y&tFBC8|cP%BN$fTTp62A`rS z>>EBp&y?=$BA@&eo z@!a{X)Vw)uRlCJRlq6DSU2FZMR)2)yHp&=0=!@f$g(=vnq;LS&nJiku;~6eCU|VEg z-2OW`yIl(jl}%!?O3P1pnv8~Hx^02~S2vfVx}cjj+?^v4%I0jIPg-;S6|wWfsr{SJ z{W-*%Er~DWWg@ZVN)$&8^#c5foD-_9N5Hb@#rEq)3nzH`gsWTP^K)rYj3FUfH#nwK)(rY+j$0%Cw*~Z%#UWf_#<5#gyH(HI46CMi7=b z7owwX*bbhNaSjBaP$eO$`>s`Uai-XKNA*oB)krIj_|~ZTj02!T(V9d###&;v1VZbx z_jC_nNEx+HUYcdcwCT`62l%%BeUyxWTBt)>CW@(>4h}X+FJFYcBUDeBv#rAcY+mn; z-W;i%Kg6{q+bBC4v8lN15D92~A~OKs*UkR8VZ*$!IFM3wj+3*N1Rg0 z-&%JQoI;7Ftku|3;006F0qEfBJ&uqTo?Ld!5 zDQq!l;n<74^)p_%HS2A9YtC#9uQjw?23}_c7yvX3pd4ig@@bO|ZaKWs!6q;W6lPS_47{ zG>Y(0#6u)qw;Id*Mh!m8;jJULs_$VpUQu~=2%sNMx^{b^CIXf5O2ygg@J8c%mM&PP z9x24|#GYIY7g4iUlWcEIHyvD#cZojlse-rOBj(EA%p47}R;HQ+v$!8^-9NNTE%$~b z(=s8(8i_mYhv+XC>a5LY;{#a__q%Hw3o1J$+@}@z|YI@#2yu}Fi4w4%cIuEMK zt&C=quL^d#YaLb8Sm0pM#pxKf4z8P9r6h1uZuKvZ>g656q+epMGqx!B4m z$V}e-4dPDKWuk0&X6nQIWF1OwVqLH`=Rv-3#13vHhWUI%c6G13VY+vppSyT(hVCr+ z$&{5s+ey~<{DjrWXyWdojU?cVhXeEB^WmDR|R(&Ki9or^`cWgI0!pj};@)cPZXR>N_7RJP%tGY^;D%+CKT zRLx)YgDeuL>&%x|t9s1j_Xmj71ShJBsP4u;;B})zD*H*+OFh5d0wNO+E3OSOp9(+M zDMD*>(l6Pwt9(vGFzD55RRQ3nV@MIVkXA_NVJ+=D={9+k&fDwg?W1=jdv7|Z*U9CN z`%J%j=VJ%jczk1dkI~wbS9*HRf}=W&Ol?rB^cphcn6BgrubyOGEqJQp;7{dTKZV{e zR;E#bH`-usd)cG-VN%cU6v*O@xkdVJ{w5?VGNe2C^M(~lLJ2ENEi`I7UMrB70?`)J zt}i8>d10_FNvHG5(|Say>ulyaCWuFmG4330B(@rkp>wCz`=&0fG03%fU7Asme&G%6OWCys2#Iy6U);n3j7E~Y)6L(6}7eAx*WvmW`D zJTEfdSLfAg?{!sa@Vu8U?wfkqGL}I9g84g1$@;$zwNmRCec^8OyWoE__x6-qkjS&xDs3f94TlIwrAXq|f$8n*NQbh* zT&T1Z+PilC`3#;03cTdEYJxe}&5NEqi|(zd z?5I+m)$$LY2dv~h)`t+enUoYdjgdTyqjhFSaNL3)5aYm2v7fci_&Tgqw|o=(0tKR( zC4w22jKHc167@-yw7mT)dVW)zIpq}rgiLnGY{I5SK;)!rfl7f6Epk@eHOg%5plz!C zj!*1T;M`%;9-Ro`?e4FTB+XqTjtkeH*3k!J#bbLbxZ=1U;9{$jgfLd9Tr?^r zdY+!~15MI$Md+1ql~hWPUIw3;@Z2wB)=i*I;e?D;o&JokHU`t3#AMPB)AD1F&Svae z;YXBxEvEI$91G>t*VzgBemgqDs&E?^m0xAxciK3-Ot6?r(1M*%Cv4hZBr-%adf{n! zp5&-FrrBo8)~?kTj+KFtOco6w?V0)J9b!aB&xwiY^^;y(dUQ{*MX`;n%x0IBXXAD` zoi?7(Y7W0SYBDn)jM44`t6i-Flkz*yAgsNQC*`e6NlxB)ddlp>s4FNAw>CR${P=Iq zKEqpt(lWBduV)T&qYIv0<`bE#PBZqoX!AngKekW$o+S)L99xhNY?6Bt=^#COiZSMu zJW&6ZRFoo2-chT$St#!cdfkp}y}Eg{rht#tFKE=|XM+zyx4`igTv<#$v2Te4^=yuE zzDSod8`DkkWj}vPrBC-%d_!M1Ja*{f#((p3!4?)0OV=M17~hoLbv7@&hYHCQ!Icmi zJfh*ktJHnBnhC-cq~&i~+W5_JBdq{$MM0i3hV(-X6Y=OOrwL%rep1K zL0fU4_a+{iTi}^1BM6>{|8?$Ungv%AD>-!%jUw)M-7h+yuc@WGDJBtT)`*;MiWvDf z+Q$T0f)kXsn$23WFVBhPZ3&l{_gS>7Lo36BSGe4q?QvIM-tOD(AeG zQR#*BpRq-OWM=v|rGG&||03E94#Yk5?w9Gb)ZP&yZr{-)S7{>=)MJ8=dgoA zcfu$z!Cz&kj`7MMMH|w;w7RN?f|Bnge{s95JSr723yTL%GqmY3pU}#1{+>ocB(YS- zNbij{+GA2Ou#unbM~#__58+$<=fy#aBnY)$FClXyaIYEMZS7PMAIRpev~FJmH5eqK zLH?z0={09@N)aR;P%-U=B{a1DIeupd+m9s*gj7i+Q}VEvC4{-XIx4a{>VQZnb^VxZe{<@E7Mt6l z>^VU{(i~_tCJPnxklnGylRP z({xarwEVq7P%tEF1GnamrhHr~%~PKnXEZaK^pj47G|hDW{|czuJDPN@3+#C`RUnHb zjxFky{y&T?CFH@zMzcrInER;#r(?3dCPvriCKHso{n2loL+w^4r+2_N6l6fRr zh%9zc$fuXR2gJphXZ@N=U6n2E92_AJEm{X|rI){7i4WlTrly`1O@9kE2S}Q_(T|gd z85R6bOHL*Bk@~%Ti{`O4#enLof?P4HCGP=Oif5pwWP)wxIpqZk3C+N+y|%O&6*&1c zPPHOpzct3!P9vG3)dHuxCVU z2Ji7nTVzl`ZU!hD^isGlTWBK|s2PW5$~~ldnFgD0C_@ewr>4#?tD^cN~#6m&=A zD5cCWT55P`NW?+`Z%21x;ci;w0vr%P%>#uOW7rfKkw`6vX=Gzb&2XbSgqE$fVkY*>3|Lyi z4D->-K!nq3R;-#@Cm#)0$^SPiEZROh#CcYc+%XL}wuh_|ZiAXggtguu9a8}bJCsz* zbt4Ri4g}YA?vbAwLcx{<0sTgzW|&qd+!y}8P}YD7En5l?bRYuF$6}Z<5f;T%rjtCb zQ(0R7^URqy&NncIQAky((U-;QU4+HPpWp6AOeZh5atG2jL7+gRLbzcMbO93A}ja?$x(zX zaNnnS6~*0FLIOea^;X=0rS6}Z1_6}l_Q#tqe_M7~l$7^}UD17V0-Oslui;pO<%CRZ+Ztl4qxLs+S$+f*EQ@whpa2tLA-pH_FR7mi)UFSrQ7|ikQEbPX0#Ut%Me5 zzI1AAK6WaWtCAIp!*SOgV@{H2^L|XhSr}$7AutI96nq|7$O2gwvt0s=40%5M3BSVy zo!WcO&0}Y?gKK9-NFx=CYwOO^B>uq+^)TXXnjm;wviV03&yTtCTb#fr@V|=^fesn$ zny#!fxv^R*d7tE5-jhjMt^|nfD4-A%3H~H-D~`s|?S9B>ZbRWol!+`Z3a8@Z$QPv$ z3|sNQ!O(@ZXv{$5R8geK2dm9j|Fc1+vsl2V_D1!HPwM|VpR~4+$zy`jHvGc~UF;l< z(=CvcZ}>Q&zg3hKvrdT>r6VOT6L_S*7o@o2$|1y51r7?X=I7bsk2EDdu%{Xntfo^r&6dQ*ue=WAQywr#68qsk zr4!|=x1b-1V}Ti{msj`izQ;X`R3TYpt8yqNYn>|tt?T3 zXs<%GBJ1yFL@heQ>mP!xc^qGPUB}f4sL0A|&`fF3E#5qc;M;vA61cIFW z+GadR){dp7-geY?#X$)j#JekY|>+bFiod;X~(JPhO=>Yqv|6lFo&nJ z>OnpD72z?MD3Tc}8u3KBbt^f^O!1gUe79DS%s@I$W@=5%RTR-GtTzjDykv38bvqYM zUgY~f`(~kBJq|-*|ICbKZo`~hW`7FS7?9XzI5BsWUg}A3gIj# zQUtM4tDT*lF=z*}nC;Msk{}3xY=HU;`Rn-jnC*&?#SpP9hzI_3pCIV@y{@Q!ugCM( z&gk{)*HIY$-3R0{MU)7FI1sSqvGHxg?6lkcUXSgruCK4_wYuN$KSmKj5C=lwL%t+Q zj6@=lNF)-8L?V$$qyyCR=g*HP>HGKZY)Sg~@#CO<#K30MhYuf4PEH0*E%JKA*RNlP z+Whk6%lP3sIy!p#^eJzH;o=`%US7iN;3dzVJ!7la>FMd9>mNUUu)WjqBz^n#jW+ua ztjqzufB$}mlULvey-wG)>})DMij?D4N@c(A>$=VsRu}||C~@N%FO^GY&d<-;jLPM5 zmTutkWT=i|s;bK7mGJP8c0KerX;YJxIEr{1WGlSnko4=>PPI~f_39OG69s{(>G%lW z(O(Egczd{j1>{P$dIfMT$=vlnA^8E@BQ={%zt_i%@JSiOP&7V?hpZ@ybVW^$3^rr0 z+hw~bR72QZw^!Hb5;h^S7y!DgqF2B%E&fm2FduI3kZUZOI2^zWjvsS)nS#sA3=?|a|HItxMRh*Ko|&D^RyNq>O6_zTWJ&&8lGUB&x^?T; z%~LWpH8uZqHZN_OdGU$nRY-817#*wLGk^%^C#Os^#T`@4PiH13U%z~L-F@K2%aI2| z28u$xEU=-Wp?83=^v_Ls zh;pD!vrO3x;m_ubvy#n=n%?bGV`BxV{-Mn*==?$Y6o4iAZ7Kpln!l@9az`+xqE@)Y*= zCmy3hop!dj_xJYl)92?GJkzezColEGW;cEP2qn{yN?~$`#|MWqGc%Bv!I%ldE6PBB zbW*6Yg3LmF1}3@mp9Km#XXpF-`vTve8-%^+bSenrG39^`GokuiwV5+Xh8{eaot@P- zUa*QX!7zUDGNHh$v7zDeR2dx_4tI=p=119)bX>y9qm<>TM}Cez7%qhc&MA9otR4^+ z;rxk-3Hm)bHjc>Q`wu9=;^N|foUu5oy`8z*d1GXOX+EPn)wqhW#Ff>N{ru!j2!@K& z8!^XtufB35#lq~me{o}YBtH^xTzEE{>l+cn^`>U#40#o{sP9gBibcTUQV4r-(W(2K znvM?1E5dnMf-Lu9R`85;RT}yk4J%=d4UNG4kjT!~_VoBfX`+91+VbG;z5SitL5@wK zsufu2aDVu-m`yoTp2?tWdCF5{dU!;Fh+%!}Jgc;Z{nJA~aQqDU4xsMD0^S|M_IdHH=n7{Os_ zrksUdrcBC}Mxo@-Mr6mfs=D=)C0NE)jfrX$P6J_8 zHA%s|LLbDVsXZTPHfE7VB-XMAMk)y|au8^hA@WobxZDqfLeZ1%0rD=HIiOI{0My4qadK!f^G z`0szddhH8eRU9MRt$+-LncD}udtV{!JwliyDZ|N@B8(Q@dQG8qBo!+;cVbdhO+fcb z%t30Uk)Y5`6w2EWfQUL-OG1;}1faA~L_;8~=#wcA0%5^nk(3;}`SzP{cp24LCXV5) z#WXmC8HL+eAyF|a6fR6_I|w82#j15qOqRNdRE4Kw

eB5EdIu+eFVCBE~6m@4Z0S z@v&KCZsbpuTFh;Sf3^_T{AXpfx@}l0U@HBub|6hIg)m$qqs`6DYKwgx9VW%2nR%<` zE}$?=7X4oYgl%nY<^Q_vh9N8;fMy?a@Ds^cX4Q$|iYaa~)VG)Y% zT12eH!rlSGB1+w>u#X^1tTdrU^#}Q=UL-&<@Ubq~HCU@xpFD(J+X^F&mvQ#;6~fv} zG_ke9#2~1S^DN2=#iY5u1z~UEf`aAm3Bm+@DhRWlMW6P+9W?fZi*F`H7QjtE*kh!u-6b+*KhA*^Y60_W9;=JQvA*6d+C; zsuJ%Wv=HVxKR>5q2xwbXc`9)dca5Zqj}F2-9R$KI8VGZ0JP3qI@%{0~A9IDzAHqZ~ z3m4M4+jEY$_=WQhXSeuLoq}zyuSYh({_buKVXx{F$pInEqK((2E5Ud~HdQi&q_fqP zRkna2QP-pj5XL^5eNwLqx-Nh{IDcq%g&F~oCkIDOdT@=EvK4UH=Cf9#(2=*Z%NoKu zmqS?CwvJ9q3O8`C4qm;n&BEU%h_l3uP;Ne$1$WSr`SZY_~aDwMQdcCUm+HSOp51*1$}WYyWUsWk@X(Rtjx z`qYVq5hs-vvor!J2&7pRLc!|1LV_DW%G7d-Z!X3)qx>IIkmDflNIIU&h>0iW-t|+< zR11KLGZ12)GTXn*5l$gKKQ&YPK~D3|)>(fDD-{S7RZ6eaR-K!*I3o^MN8#?bteAB@ zep;Cq;xN&hW8FMf0B*cJVu+==g(~Nf>m4fn>0NSgA}7;s+?L3D3S1)|MSa33nGLju zoM@ZM{wSGs{7~y8j;Km+_ix`NQ98##fI(@XX}NzMfklp5^HW`E$bJ6fk3R-sj{e02GpRFXap$g-oP0L4yS$$wlNwDoAlXLv2XwOyZylG-~eTHQVrYL%kBROYa{V=W}-`ndhiqTV-^ZT z6N`widZ>_jWy&iHi*b7XNnRFwC#BfsvbVEi=J?L;U`w}d3(?w1q^(yCA)R2hCU*OL zLJtv`%5);`=SM2Dr6Up4`z6m)pKVba$L%MEepwIQ5#lMz-A;{J9n(-bO*Uzjkt#1@MQvx(7@doYyqjZE0uKH$v%f^;?$Q!vePEt9{0=5zZE)x+Ym%g;N)BX_v0000005Ab^ Wyt}0?f55^30000 Date: Fri, 27 Apr 2018 22:41:31 +0300 Subject: [PATCH 11/71] Add link to supported AWS regions to the Amazon Polly docs (#5247) --- source/_components/tts.amazon_polly.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/tts.amazon_polly.markdown b/source/_components/tts.amazon_polly.markdown index 267d0c52b4..6561bc6d09 100644 --- a/source/_components/tts.amazon_polly.markdown +++ b/source/_components/tts.amazon_polly.markdown @@ -35,7 +35,7 @@ Configuration variables: | `aws_access_key_id` | Required | Your AWS Access Key ID. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name` | | `aws_secret_access_key` | Required | Your AWS Secret Access Key. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`. | | `profile_name` | Optional | A credentials profile name. For more information, please see the [boto3 Documentation](http://boto3.readthedocs.io/en/latest/guide/configuration.html#shared-credentials-file) for more information. | -| `region_name` | Optional | The region identifier to connect to. The default is `us-east-1`. | +| `region_name` | Optional | The region identifier to connect to. The default is `us-east-1`. See the [AWS Regions and Endpoints Reference](https://docs.aws.amazon.com/general/latest/gr/rande.html#pol_region) for available regions. | | `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`. | | `text_type` | text/ssml | text or ssml: Specify wherever to use text (default) or ssml markup by default. | | `voice` | Optional | Voice name to be used. See the [Amazon Documentation](http://docs.aws.amazon.com/polly/latest/dg/voicelist.html) for available voices. | From cb858f2b1f4fd28f19dad1cf7b409033bc122c70 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 27 Apr 2018 17:05:37 -0400 Subject: [PATCH 12/71] Add blog post --- source/_components/light.eufy.markdown | 2 +- source/_components/sensor.uscis.markdown | 6 +- source/_components/switch.eufy.markdown | 2 +- source/_posts/2018-04-27-release-68.markdown | 124 ++++++++++++------ .../images/blog/2018-04-0.68/components.png | Bin 0 -> 39722 bytes 5 files changed, 87 insertions(+), 47 deletions(-) create mode 100644 source/images/blog/2018-04-0.68/components.png diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown index 872526e1ed..d8596c0048 100644 --- a/source/_components/light.eufy.markdown +++ b/source/_components/light.eufy.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "EufyLights" +title: "Eufy Lights" description: "Instructions on how to integrate Eufy LED lights into Home Assistant." date: 2018-04-09 19:00 sidebar: true diff --git a/source/_components/sensor.uscis.markdown b/source/_components/sensor.uscis.markdown index 49d55b0416..3d214dc818 100644 --- a/source/_components/sensor.uscis.markdown +++ b/source/_components/sensor.uscis.markdown @@ -7,7 +7,7 @@ sidebar: false comments: false sharing: true footer: true -logo: uscis.jpg +logo: uscis.png ha_category: Sensor ha_release: 0.68 ha_iot_class: "Cloud Polling" @@ -31,9 +31,9 @@ friendly_name: default: USCIS type: string case_id: - description: Case/receipt number used to get the case details from USCIS web client. + description: Case/receipt number used to get the case details from USCIS web client. required: true type: string {% endconfiguration %} -All the data will be fetch from [USCIS](https://egov.uscis.gov/casestatus/mycasestatus.do). +All the data will be fetch from [USCIS](https://egov.uscis.gov/casestatus/mycasestatus.do). diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown index 0bfbae81e5..1a79dbd26b 100644 --- a/source/_components/switch.eufy.markdown +++ b/source/_components/switch.eufy.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "EufySwitch" +title: "Eufy Switch" description: "Instructions on how to integrate Eufy switches into Home Assistant." date: 2018-04-09 19:00 sidebar: true diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index cc616913a5..fc39df1405 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.68: UPDATE DATE" -description: "UPDATE DATE" -date: 2018-04-20 00:01:00 +title: "0.68: HomeKit control, Eufy, FritzBox, SigFox sensors" +description: "Enjoy your weekend with this brand new release of Home Assistant." +date: 2018-04-27 00:01:00 date_formatted: "April 27, 2018" author: Paulus Schoutsen author_twitter: balloob @@ -13,11 +13,11 @@ og_image: /images/blog/2018-04-0.68/components.png -Highlights: +Weekend is around the corner and that means that it's time for the next release of Home Assistant. 0.68 brings a ton of great goodies and bug fixes. -- Ability to _control_ HomeKit -- Eufy bulbs -- Breaking MDI icons? +One of the coolest features this release is by [@mjg59]: you are now able to **control** HomeKit devices. Previously, it was possible to control Home Assistant from iOS devices using the HomeKit protocol. With this release, Home Assistant is able to become the controller and use HomeKit to control lights and switches directly. Since HomeKit is vendor agnostic, it means that any HomeKit light or switch will now be compatible with Home Assistant. Very cool. + +Another cool new platform, also by [@mjg59], is support for Eufy devices. Eufy is the Home Automation brand of Anker and they have been producing reasonably priced devices which can now be controlled by Home Assistant too. Thanks for all your contributions [@mjg59] ❤️. ## {% linkable_title New Platforms %} @@ -29,7 +29,6 @@ Highlights: - Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) - Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) -- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) - Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) ## {% linkable_title New Features %} @@ -40,15 +39,6 @@ Highlights: - Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) - Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) -## {% linkable_title Beta Fixes %} - -- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) -- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) -- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) -- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) -- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) -- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) - ## {% 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. @@ -60,18 +50,52 @@ Experiencing issues introduced by this release? Please report them in our [issue ## {% linkable_title Breaking Changes %} -- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) -- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) +- Icons! Material Design Icons has implemented some naming guidelines and this caused 9 icons to change names, 3 of which are home automation icons: `roomba` -> `robot-vacuum`, `nest-protect` -> `smoke-detector`, `nest-thermostat` -> `thermostat` ([see all changes](http://templarian.com/2018/04/18/material-design-icons-v2-3-54/)). +- Support for multiple MAX!Cube LAN gateways caused a slight change to the configuration schema. Make sure to check the docs for the new one. ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Ebox sensor platform has been disabled because the dependency was not compatible with pip 10. ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) + +## {% linkable_title Beta Fixes %} + +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) +- Upgrade broadlink lib ([@Danielhiversen] - [#14074]) ([sensor.broadlink docs]) ([switch.broadlink docs]) (beta fix) +- Fix timezone issue when calculating min/max values in tibber #14009 ([@Danielhiversen] - [#14080]) ([sensor.tibber docs]) (beta fix) +- Updated list of AWS regions for Amazon Polly ([@GotoCode] - [#14097]) ([tts docs]) (beta fix) ## {% linkable_title All changes %} - Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) -- Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) -- Add option to ignore availability in google calendar events ([@cgtobi] - [#13714]) ([google docs]) ([calendar.google docs]) +- Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([sensor.trafikverket_weatherstation docs]) +- Add option to ignore availability in google calendar events ([@cgtobi] - [#13714]) ([calendar.google docs]) - Allow use of date_string in service call ([@Juggels] - [#13256]) ([calendar.todoist docs]) - Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) - added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) - Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) - Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) - Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) - Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) @@ -79,6 +103,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) - Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) - Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) - Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) - Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) - Prepare entity component for config entries ([@balloob] - [#13730]) @@ -118,13 +143,18 @@ Experiencing issues introduced by this release? Please report them in our [issue - bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) - Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) - Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) - Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) - add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) - Further untangle data entry flow ([@balloob] - [#13855]) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) - Added snips service descriptions ([@tschmidty69] - [#13883]) - Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) - Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) - Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) - Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) - Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) - Add more math functions to templates ([@Shou] - [#13915]) @@ -135,8 +165,10 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) - Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) - Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) - Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) - Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) - Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) - Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) @@ -148,7 +180,20 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) - Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) - Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) - Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) - Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) - Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) - Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) @@ -166,7 +211,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Useless code removed ([@syssi] - [#13996]) ([maxcube docs]) - Add Homematic HmIP-SWO-PR weather sensor support ([@pascalhahn] - [#13904]) ([homematic docs]) - Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) -- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.miflora docs]) - Log an error instead of raising an exception ([@syssi] - [#14006]) ([sensor.sht31 docs]) - Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) - Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) @@ -177,6 +222,9 @@ Experiencing issues introduced by this release? Please report them in our [issue - Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) - Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) - Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) +- Upgrade broadlink lib ([@Danielhiversen] - [#14074]) ([sensor.broadlink docs]) ([switch.broadlink docs]) (beta fix) +- Fix timezone issue when calculating min/max values in tibber #14009 ([@Danielhiversen] - [#14080]) ([sensor.tibber docs]) (beta fix) +- Updated list of AWS regions for Amazon Polly ([@GotoCode] - [#14097]) ([tts docs]) (beta fix) [#10688]: https://github.com/home-assistant/home-assistant/pull/10688 [#12224]: https://github.com/home-assistant/home-assistant/pull/12224 @@ -292,11 +340,21 @@ Experiencing issues introduced by this release? Please report them in our [issue [#14003]: https://github.com/home-assistant/home-assistant/pull/14003 [#14005]: https://github.com/home-assistant/home-assistant/pull/14005 [#14006]: https://github.com/home-assistant/home-assistant/pull/14006 +[#14008]: https://github.com/home-assistant/home-assistant/pull/14008 [#14010]: https://github.com/home-assistant/home-assistant/pull/14010 [#14013]: https://github.com/home-assistant/home-assistant/pull/14013 +[#14019]: https://github.com/home-assistant/home-assistant/pull/14019 +[#14025]: https://github.com/home-assistant/home-assistant/pull/14025 +[#14027]: https://github.com/home-assistant/home-assistant/pull/14027 +[#14041]: https://github.com/home-assistant/home-assistant/pull/14041 +[#14051]: https://github.com/home-assistant/home-assistant/pull/14051 +[#14074]: https://github.com/home-assistant/home-assistant/pull/14074 +[#14080]: https://github.com/home-assistant/home-assistant/pull/14080 +[#14097]: https://github.com/home-assistant/home-assistant/pull/14097 [@B1tMaster]: https://github.com/B1tMaster [@ChristianKuehnel]: https://github.com/ChristianKuehnel [@Danielhiversen]: https://github.com/Danielhiversen +[@GotoCode]: https://github.com/GotoCode [@Juggels]: https://github.com/Juggels [@KJonline]: https://github.com/KJonline [@Kane610]: https://github.com/Kane610 @@ -344,6 +402,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@reefab]: https://github.com/reefab [@robmarkcole]: https://github.com/robmarkcole [@rohankapoorcom]: https://github.com/rohankapoorcom +[@schmittx]: https://github.com/schmittx [@shred86]: https://github.com/shred86 [@stephanerosi]: https://github.com/stephanerosi [@swilson]: https://github.com/swilson @@ -362,6 +421,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ [binary_sensor.hive docs]: /components/binary_sensor.hive/ [binary_sensor.maxcube docs]: /components/binary_sensor.maxcube/ +[binary_sensor.qwikswitch docs]: /components/binary_sensor.qwikswitch/ [bmw_connected_drive docs]: /components/bmw_connected_drive/ [calendar.google docs]: /components/calendar.google/ [calendar.todoist docs]: /components/calendar.todoist/ @@ -427,7 +487,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.hive docs]: /components/sensor.hive/ [sensor.hydroquebec docs]: /components/sensor.hydroquebec/ [sensor.linux_battery docs]: /components/sensor.linux_battery/ -[sensor.lmsensor docs]: /components/sensor.lmsensor/ [sensor.miflora docs]: /components/sensor.miflora/ [sensor.mqtt docs]: /components/sensor.mqtt/ [sensor.nest docs]: /components/sensor.nest/ @@ -459,22 +518,3 @@ Experiencing issues introduced by this release? Please report them in our [issue [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [weather.yweather docs]: /components/weather.yweather/ [zha docs]: /components/zha/ -[#14008]: https://github.com/home-assistant/home-assistant/pull/14008 -[#14019]: https://github.com/home-assistant/home-assistant/pull/14019 -[#14025]: https://github.com/home-assistant/home-assistant/pull/14025 -[#14027]: https://github.com/home-assistant/home-assistant/pull/14027 -[#14041]: https://github.com/home-assistant/home-assistant/pull/14041 -[#14051]: https://github.com/home-assistant/home-assistant/pull/14051 -[@OttoWinter]: https://github.com/OttoWinter -[@balloob]: https://github.com/balloob -[@kellerza]: https://github.com/kellerza -[@marthoc]: https://github.com/marthoc -[@mjg59]: https://github.com/mjg59 -[@schmittx]: https://github.com/schmittx -[binary_sensor.qwikswitch docs]: /components/binary_sensor.qwikswitch/ -[config docs]: /components/config/ -[homekit docs]: /components/homekit/ -[homekit_controller docs]: /components/homekit_controller/ -[media_player.cast docs]: /components/media_player.cast/ -[qwikswitch docs]: /components/qwikswitch/ -[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ diff --git a/source/images/blog/2018-04-0.68/components.png b/source/images/blog/2018-04-0.68/components.png new file mode 100644 index 0000000000000000000000000000000000000000..57d9fc40b38e933eceb6cad9dfc9f3d0d9cd825b GIT binary patch literal 39722 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 azr?c6h$90 Date: Fri, 27 Apr 2018 17:12:10 -0400 Subject: [PATCH 13/71] Update post --- source/_posts/2018-04-27-release-68.markdown | 21 +------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index fc39df1405..4ac9d1f460 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -56,26 +56,6 @@ Experiencing issues introduced by this release? Please report them in our [issue ## {% linkable_title Beta Fixes %} -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) - Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) - HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) @@ -85,6 +65,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade broadlink lib ([@Danielhiversen] - [#14074]) ([sensor.broadlink docs]) ([switch.broadlink docs]) (beta fix) - Fix timezone issue when calculating min/max values in tibber #14009 ([@Danielhiversen] - [#14080]) ([sensor.tibber docs]) (beta fix) - Updated list of AWS regions for Amazon Polly ([@GotoCode] - [#14097]) ([tts docs]) (beta fix) +- Change Eufy brightness handling ([@mjg59] - [#14111]) (beta fix) ## {% linkable_title All changes %} From 08090346672a4fa8055fdc529d817b25438b9f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85skar=20Andersson?= Date: Sun, 29 Apr 2018 09:56:19 +0200 Subject: [PATCH 14/71] Linkerror fixed (#5263) --- source/_components/eufy.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown index 294dd26902..60ec2a470d 100644 --- a/source/_components/eufy.markdown +++ b/source/_components/eufy.markdown @@ -12,7 +12,7 @@ ha_category: Hub ha_release: 0.68 --- -The `eufy` component is the main component to integrate various [eufy](http://https://www.eufylife.com/) devices with Home Assistant. +The `eufy` component is the main component to integrate various [eufy](https://www.eufylife.com/) devices with Home Assistant. Supported devices will be discovered after the `eufy` component is configured: From 490b5069a2d879342390fef9b56709de1e6af7be Mon Sep 17 00:00:00 2001 From: bonterra Date: Sun, 29 Apr 2018 09:59:54 +0200 Subject: [PATCH 15/71] Update docker.markdown (#5266) A more detailed installation description for Docker on Raspberry Pi 3 with Raspbian. --- source/_docs/installation/docker.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index d8e6ed3ff4..bc7369f415 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -16,7 +16,16 @@ Installation with Docker is straightforward. Adjust the following command so tha ```bash $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant +```​ + +### {% linkable_title Raspberry Pi 3 (Raspbian) %} + +```bash + +$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/raspberrypi3-homeassistant:0.XX.x ``` +The Docker container for Raspberry Pi 3 does not have a 'latest' tag so the version number must be specified explicitly, i.e. 0.68.0 or whatever version is desired. This goes for both CLI and Docker Compose. + ### {% linkable_title macOS %} From 53a50b60cfca26621521ddc873fbbc8fcc13c123 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 29 Apr 2018 09:01:23 +0100 Subject: [PATCH 16/71] Added minimum version note to the docs (#5262) Since many will miss it in the blog post --- source/cloud/google_assistant.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 1cdced7984..c3334ca891 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -9,6 +9,11 @@ sharing: true footer: true --- + +

+The minimum supported version of Home Assistant is 0.65.6. +

+ The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. To use this integration, you need to have: From 02ab1b4eb1bd561d9a0282b20d95841ed458905f Mon Sep 17 00:00:00 2001 From: arg0nik <12636037+arg0nik@users.noreply.github.com> Date: Sun, 29 Apr 2018 02:15:09 -0600 Subject: [PATCH 17/71] Update console log instructions (#5267) * Update console log instructions Some firmware versions have changed the id in the DOM from login-password to pcPassword. * Fix syntax --- source/_components/device_tracker.tplink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown index 80e957a2ae..29b70a143a 100644 --- a/source/_components/device_tracker.tplink.markdown +++ b/source/_components/device_tracker.tplink.markdown @@ -41,7 +41,7 @@ For Archer C9 models running firmware version 150811 or later please use the enc 2. Type in the password you use to login into the password field. 3. Click somewhere else on the page so that the password field is not selected anymore. 4. Open the JavaScript console of your browser (usually by pressing F12 and then clicking on "Console"). -5. Type ```document.getElementById("login-password").value;```. +5. Type `document.getElementById("login-password").value;` or `document.getElementById("pcPassword").value;`, depending on your firmware version. 6. Copy the returned value to your Home Assistant configuration as password. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 5f97e6e4f21fdbfa2515ff869fe118fa25d6714f Mon Sep 17 00:00:00 2001 From: yeah Date: Sun, 29 Apr 2018 10:22:37 +0200 Subject: [PATCH 18/71] Add hint on auto-renewing certs using automations (#5261) * Add hint on auto-renewing certs using automations * Minor changes --- source/_addons/lets_encrypt.markdown | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index c0cbf10bbe..0ac8d01994 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -2,7 +2,7 @@ layout: page title: "Let's Encrypt" description: "Automatically manage your SSL certificate using Let's Encrypt." -date: 2017-04-30 13:28 +date: 2018-04-18 10:55 sidebar: true comments: false sharing: true @@ -41,4 +41,24 @@ http: If you use another port such as `8123` or an SSL proxy, change the port number. +## {% linkable_title Enabling auto-renewals %} + +Out of the box, the add-on will not automatically renew your certificate. In fact, it only starts, tries to get/renew your certificte, and then stops. It's up to you to manually start it again whenever your certificate comes close to expiry. + +However, you can automate this process using Home Assistant. + +Use this in your `automations.yaml` to attempt certificate renewal each day at midnight: + +```yaml +- id: letsencrypt-renewal + alias: "Let's Encrypt Renewal" + trigger: + - platform: time + at: '00:00:00' + action: + - service: hassio.addon_restart + data: + addon: core_letsencrypt +``` + [DuckDNS add-on]: /addons/duckdns/ From fa028db9d844a304e16b0a6e5042ca62e199b412 Mon Sep 17 00:00:00 2001 From: Robin Date: Sun, 29 Apr 2018 10:11:51 +0100 Subject: [PATCH 19/71] Adds update file_path service to the local_file camera (#5228) * Update camera.local_file.markdown * Add entity_id info to service * Update camera.local_file.markdown * Update camera.local_file.markdown * Fix table --- source/_components/camera.local_file.markdown | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index 8175ee35db..b2b953041d 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Local File" -description: "Instructions on how to use Local File as a Camera within Home Assistant." +description: "Instructions how to use Local File as a Camera within Home Assistant." date: 2016-06-12 17:00 sidebar: true comments: false @@ -13,9 +13,9 @@ ha_iot_class: "Local Polling" ha_release: 0.22 --- -The `local_file` camera platform allows you to integrate any readable image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. +The `local_file` camera platform allows you to integrate an image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. The service `local_file_update_file_path` can be used to update the image using an automation. -This can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodically and will then be displayed in Home Assistant. +The `local_file` camera can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodically and will then be displayed in Home Assistant. To enable this camera in your installation, add the following to your `configuration.yaml` file: @@ -31,7 +31,11 @@ Configuration variables: - **file_path** (*Required*): File to serve as the camera. - **name** (*Optional*): Name of the camera -

-The given `file_path` must be an existing file because the camera platform setup make a readable check on it. -

+### {% linkable_title Service `camera.local_file_update_file_path` %} +Use this service to change the file displayed by the camera. + +| Service data attribute | Description | +| -----------------------| ----------- | +| `entity_id` | String of the `entity_id` of the camera to update. | +| `file_path` | The full path to the new image file to be displayed. | From b50c2fbbb005cee8452e3d33ec7a32456b55b99f Mon Sep 17 00:00:00 2001 From: DK Date: Sun, 29 Apr 2018 02:20:35 -0700 Subject: [PATCH 20/71] Add some more documentation around hassio CLI (#5215) * Add some more documentation around hassio CLI This is rather basic, I think it needs it's own page * Minor changes --- source/hassio/index.markdown | 42 ++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index 16dca59792..a5f4798c8d 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -59,8 +59,9 @@ Hass.io upgrade process from the SSH command line On the SSH command line you can use the `hassio` command to retrieve logs, check the details of connected hardware, and more. -HomeAssistant: -```shell +Home Assistant: + +```bash $ hassio homeassistant logs $ hassio homeassistant restart $ hassio homeassistant stop @@ -70,7 +71,8 @@ $ hassio homeassistant check ``` Host: -```shell + +```bash $ hassio host hardware $ hassio host reboot $ hassio host shutdown @@ -78,9 +80,41 @@ $ hassio host update ``` Supervisor -```shell + +```bash $ hassio supervisor logs $ hassio supervisor info $ hassio supervisor reload $ hassio supervisor update ``` + +You can get a better description of the CLI capabilities by typing `hassio help`: + +```bash +NAME: + hassio - Commandline tool to allow interation with hass.io + +USAGE: + hassio [global options] command [command options] [arguments...] + +VERSION: + 1.2.1 + +AUTHOR: + Home-Assistant + +COMMANDS: + homeassistant, ha info, logs, check, restart, start, stop, update + supervisor, su info, logs, reload, update + host, ho hardware, reboot, shutdown, update + network, ne info, options + snapshots, sn list, info, reload, new, restore, remove + addons, ad list, info, logo, changelog, logs, stats, + reload, start, stop, install, uninstall, update + help, h Shows a list of commands or help for one command + +GLOBAL OPTIONS: + --debug, -d Prints Debug information + --help, -h show help + --version, -v print the version +``` From 09aa7ac3e979604ab69cf459f5d2f834d6ba0815 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sun, 29 Apr 2018 16:12:14 +0200 Subject: [PATCH 21/71] Tested on 7590 and use english (instead of german links) (#5270) --- source/_components/fritzbox.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_components/fritzbox.markdown b/source/_components/fritzbox.markdown index 8d601368eb..9b69d05831 100644 --- a/source/_components/fritzbox.markdown +++ b/source/_components/fritzbox.markdown @@ -17,9 +17,10 @@ The [AVM](www.avm.de) Fritzbox component for Home Assistant allows you to integr #### {% linkable_title Tested Devices %} -- [FRITZ!Box 6490 Cable](https://avm.de/produkte/fritzbox/fritzbox-6490-cable/) -- [FRITZ!DECT 200](https://avm.de/produkte/fritzdect/fritzdect-200/) -- [Eurotronic Comet DECT](https://www.eurotronic.org/produkte/comet-dect.html) +- [FRITZ!Box 6490 Cable](https://en.avm.de/products/fritzbox/fritzbox-6490-cable/) +- [FRITZ!Box 7590](https://en.avm.de/products/fritzbox/fritzbox-7590/) +- [FRITZ!DECT 200](https://en.avm.de/products/fritzdect/fritzdect-200/) +- [Eurotronic Comet DECT](https://www.eurotronic.org/en/products/comet-dect.html) ## {% linkable_title Setup %} From ec6f2fca646c00a7719fe344f59ccf42933c1fdc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 29 Apr 2018 18:35:42 +0200 Subject: [PATCH 22/71] Update for 0.68 --- source/developers/credits.markdown | 258 +++++++++++++++-------------- 1 file changed, 130 insertions(+), 128 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 0fa372b00f..3e44e31340 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-03-31 09:09:02 +0000 +date: 2018-04-29 16:35:15 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-iOS, 1 commit to architecture, 1 commit to home-assistant-notebooks, 1 commit to warrant") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6642 total commits to the home-assistant organization, 3877 commits to home-assistant, 1448 commits to home-assistant.github.io, 768 commits to home-assistant-polymer, 244 commits to home-assistant-js, 123 commits to netdisco, 46 commits to home-assistant-js-websocket, 35 commits to developers.home-assistant, 33 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-build, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-iOS, 2 commits to hassio-addons-example, 2 commits to issue-bot, 1 commit to architecture, 1 commit to home-assistant-notebooks, 1 commit to warrant") ### {% linkable_title Contributors %} @@ -21,14 +21,14 @@ This page contains a list of people who have contributed in one way or another t - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [a-andre (@a-andre)](https://github.com/a-andre "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Aaron Bach (@bachya)](https://github.com/bachya "49 total commits to the home-assistant organization, 32 commits to home-assistant, 17 commits to home-assistant.github.io") +- [Aaron Bach (@bachya)](https://github.com/bachya "53 total commits to the home-assistant organization, 35 commits to home-assistant, 18 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Abílio Costa (@abmantis)](https://github.com/abmantis "22 total commits to the home-assistant organization, 13 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Mills (@armills)](https://github.com/armills "315 total commits to the home-assistant organization, 164 commits to home-assistant, 90 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") +- [Adam Mills (@armills)](https://github.com/armills "324 total commits to the home-assistant organization, 171 commits to home-assistant, 92 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") - [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -37,31 +37,30 @@ This page contains a list of people who have contributed in one way or another t - [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Albert Lee (@trisk)](https://github.com/trisk "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Albert Lee (@trisk)](https://github.com/trisk "18 total commits to the home-assistant organization, 11 commits to home-assistant, 7 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Alex (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "6 total commits to the home-assistant organization, 3 commits to hassio-addons, 3 commits to home-assistant.github.io") - [Alex Harvey (@infamy)](https://github.com/infamy "29 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to hassio-os") - [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alex MF (@adsmf)](https://github.com/adsmf "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Alex Osadchyy (@aosadchyy)](https://github.com/aosadchyy "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alex Tzonkov (@attzonko)](https://github.com/attzonko "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alexander Bachmeier (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alexander Kratzer (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alexis Iglauer (@ax42)](https://github.com/ax42 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "141 total commits to the home-assistant organization, 82 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "141 total commits to the home-assistant organization, 82 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to hassio-addons, 1 commit to pi-gen") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "208 total commits to the home-assistant organization, 165 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "213 total commits to the home-assistant organization, 170 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [andig (@andig)](https://github.com/andig "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons") - [Andreas Rammhold (@andir)](https://github.com/andir "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -71,13 +70,13 @@ This page contains a list of people who have contributed in one way or another t - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "802 total commits to the home-assistant organization, 667 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "815 total commits to the home-assistant organization, 680 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") - [Andrew Wedgbury (@sconemad)](https://github.com/sconemad "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "294 total commits to the home-assistant organization, 134 commits to home-assistant-polymer, 122 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") +- [Andrey (@andrey-git)](https://github.com/andrey-git "295 total commits to the home-assistant organization, 135 commits to home-assistant-polymer, 122 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -85,14 +84,14 @@ This page contains a list of people who have contributed in one way or another t - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Anton Lundin (@glance-)](https://github.com/glance- "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Antoni K (@Antoni-K)](https://github.com/Antoni-K "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Ardi Mehist (@omgapuppy)](https://github.com/omgapuppy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ari Lotter (@arilotter)](https://github.com/arilotter "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [arjenfvellinga (@arjenfvellinga)](https://github.com/arjenfvellinga "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -120,15 +119,17 @@ This page contains a list of people who have contributed in one way or another t - [Ben (@unixben)](https://github.com/unixben "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Bangert (@bbangert)](https://github.com/bbangert "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Ben Lebherz (@benleb)](https://github.com/benleb "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Nuttall (@bennuttall)](https://github.com/bennuttall "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ben Origas (@borigas)](https://github.com/borigas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Ben Pirt (@bjpirt)](https://github.com/bjpirt "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [Ben Randall (@veleek)](https://github.com/veleek "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Ben Randall (@veleek)](https://github.com/veleek "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ben Thomas (@wazoo)](https://github.com/wazoo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Benedict Aas (@Shou)](https://github.com/Shou "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Benjamin Parzella (@bparzella)](https://github.com/bparzella "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Benji (@bbbenji)](https://github.com/bbbenji "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Bertbert (@bertbert72)](https://github.com/bertbert72 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio, 1 commit to hassio-build, 1 commit to home-assistant-polymer") +- [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to home-assistant-polymer, 1 commit to hassio") - [BigMoby (@bigmoby)](https://github.com/bigmoby "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [BioSehnsucht (@BioSehnsucht)](https://github.com/BioSehnsucht "14 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 4 commits to home-assistant, 2 commits to home-assistant-polymer") - [Bjarni Ivarsson (@bjarniivarsson)](https://github.com/bjarniivarsson "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") @@ -138,10 +139,11 @@ This page contains a list of people who have contributed in one way or another t - [Bob Anderson (@rwa)](https://github.com/rwa "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") - [Bob Igo (@Human)](https://github.com/Human "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [bonanitech (@bonanitech)](https://github.com/bonanitech "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [boojew (@boojew)](https://github.com/boojew "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Boris K (@bokub)](https://github.com/bokub "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io") - [bottomquark (@bottomquark)](https://github.com/bottomquark "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Boyi C (@fanthos)](https://github.com/fanthos "18 total commits to the home-assistant organization, 11 commits to home-assistant-polymer, 5 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Boyi C (@fanthos)](https://github.com/fanthos "22 total commits to the home-assistant organization, 15 commits to home-assistant-polymer, 5 commits to home-assistant, 2 commits to home-assistant.github.io") - [bpoirriez (@bpoirriez)](https://github.com/bpoirriez "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Brad Dixon (@rbdixon)](https://github.com/rbdixon "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Brad Johnson (@bradsk88)](https://github.com/bradsk88 "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -166,23 +168,23 @@ This page contains a list of people who have contributed in one way or another t - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") - [bvansambeek (@bvansambeek)](https://github.com/bvansambeek "1 total commits to the home-assistant organization, 1 commit to hassio-build") -- [c727 (@c727)](https://github.com/c727 "61 total commits to the home-assistant organization, 41 commits to home-assistant-polymer, 13 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to hassio") +- [c727 (@c727)](https://github.com/c727 "71 total commits to the home-assistant organization, 50 commits to home-assistant-polymer, 13 commits to home-assistant.github.io, 6 commits to home-assistant, 2 commits to hassio") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Cameron Moore (@moorereason)](https://github.com/moorereason "3 total commits to the home-assistant organization, 3 commits to hassio-cli") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "98 total commits to the home-assistant organization, 90 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "69 total commits to the home-assistant organization, 43 commits to home-assistant, 22 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "89 total commits to the home-assistant organization, 53 commits to home-assistant, 29 commits to home-assistant.github.io, 4 commits to home-assistant-polymer, 3 commits to hass-release") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "26 total commits to the home-assistant organization, 16 commits to home-assistant, 10 commits to home-assistant.github.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "28 total commits to the home-assistant organization, 17 commits to home-assistant, 11 commits to home-assistant.github.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") -- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") +- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "22 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 7 commits to home-assistant, 3 commits to home-assistant-polymer") - [Charles Spirakis (@srcLurker)](https://github.com/srcLurker "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Chayoung You (@yous)](https://github.com/yous "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Check your git settings\! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") @@ -191,6 +193,7 @@ This page contains a list of people who have contributed in one way or another t - [Chris Aloi (@ctaloi)](https://github.com/ctaloi "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Crowe (@chriscrowe)](https://github.com/chriscrowe "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Chris Huegle (@chuegle)](https://github.com/chuegle "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Chris Jones (@fezfox)](https://github.com/fezfox "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Monteiro (@cmonteiro128)](https://github.com/cmonteiro128 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Mulder (@chrisvis)](https://github.com/chrisvis "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris Smolen (@smolz)](https://github.com/smolz "10 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 4 commits to appdaemon") @@ -200,21 +203,21 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "33 total commits to the home-assistant organization, 20 commits to home-assistant, 13 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "37 total commits to the home-assistant organization, 22 commits to home-assistant, 15 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Christopher Vella (@chrisvella)](https://github.com/chrisvella "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christopher Viel (@Chris-V)](https://github.com/Chris-V "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [ChristopherLMiller (@ChristopherLMiller)](https://github.com/ChristopherLMiller "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [chrysn (@chrysn)](https://github.com/chrysn "65 total commits to the home-assistant organization, 65 commits to libcoap") - [chz^3 (@chzchzchz)](https://github.com/chzchzchz "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [citruz (@citruz)](https://github.com/citruz "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [clach04 (@clach04)](https://github.com/clach04 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [citruz (@citruz)](https://github.com/citruz "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [clach04 (@clach04)](https://github.com/clach04 "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassbian-scripts") - [Claus F\. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Colin O'Dell (@colinodell)](https://github.com/colinodell "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Colin Frei (@colinfrei)](https://github.com/colinfrei "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Colin O'Dell (@colinodell)](https://github.com/colinodell "27 total commits to the home-assistant organization, 16 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") @@ -225,8 +228,8 @@ This page contains a list of people who have contributed in one way or another t - [Craig J\. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [cxlwill (@cxlwill)](https://github.com/cxlwill "3 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassbian-scripts") -- [Dale Higgs (@dale3h)](https://github.com/dale3h "35 total commits to the home-assistant organization, 23 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") +- [cxlwill (@cxlwill)](https://github.com/cxlwill "4 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 2 commits to hassbian-scripts") +- [Dale Higgs (@dale3h)](https://github.com/dale3h "36 total commits to the home-assistant organization, 24 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -239,15 +242,15 @@ This page contains a list of people who have contributed in one way or another t - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Daniel (@delneet)](https://github.com/delneet "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "294 total commits to the home-assistant organization, 180 commits to home-assistant, 111 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "84 total commits to the home-assistant organization, 39 commits to home-assistant, 39 commits to home-assistant.github.io, 6 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "303 total commits to the home-assistant organization, 189 commits to home-assistant, 111 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "88 total commits to the home-assistant organization, 42 commits to home-assistant, 39 commits to home-assistant.github.io, 7 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") - [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Daniel Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Daniel Welch (@danielwelch)](https://github.com/danielwelch "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant") +- [Daniel Welch (@danielwelch)](https://github.com/danielwelch "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to hassio-addons") - [DanielXYZ2000 (@DanielXYZ2000)](https://github.com/DanielXYZ2000 "3 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 1 commit to hassio-addons") - [Daniyar Yeralin (@yeralin)](https://github.com/yeralin "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [dasos (@dasos)](https://github.com/dasos "11 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") @@ -258,6 +261,7 @@ This page contains a list of people who have contributed in one way or another t - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David (@fanaticDavid)](https://github.com/fanaticDavid "16 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [David \(Drew\) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [David Broadfoot (@dlbroadfoot)](https://github.com/dlbroadfoot "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -271,70 +275,63 @@ This page contains a list of people who have contributed in one way or another t - [Dean Camera (@abcminiuser)](https://github.com/abcminiuser "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [deisi (@deisi)](https://github.com/deisi "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Delio Castillo (@jangeador)](https://github.com/jangeador "2 total commits to the home-assistant organization, 2 commits to hassio-addons") -- [Demid Lupin (@lupin-de-mid)](https://github.com/lupin-de-mid "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Demid Lupin (@lupin-de-mid)](https://github.com/lupin-de-mid "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Denix (@denics)](https://github.com/denics "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Dennis de Greef (@dennisdegreef)](https://github.com/dennisdegreef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dennis Karpienski (@TheRealLink)](https://github.com/TheRealLink "24 total commits to the home-assistant organization, 15 commits to home-assistant-polymer, 6 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Dennis Sutch (@sutch)](https://github.com/sutch "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Derek (@itchaboy)](https://github.com/itchaboy "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Derek Brooks (@broox)](https://github.com/broox "39 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.github.io") -- [dersger (@dersger)](https://github.com/dersger "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [dersger (@dersger)](https://github.com/dersger "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "41 total commits to the home-assistant organization, 23 commits to home-assistant, 18 commits to home-assistant.github.io") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "46 total commits to the home-assistant organization, 28 commits to home-assistant, 18 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [dramamoose (@dramamoose)](https://github.com/dramamoose "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "217 total commits to the home-assistant organization, 217 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "240 total commits to the home-assistant organization, 240 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") -- [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Egor Tsinko (@etsinko)](https://github.com/etsinko "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") +- [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to netdisco") - [eldanb (@eldanb)](https://github.com/eldanb "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Ellis Percival (@flyte)](https://github.com/flyte "31 total commits to the home-assistant organization, 25 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Emil Horpen Hetty (@emilhetty)](https://github.com/emilhetty "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Eleftherios Chamakiotis (@lexam79)](https://github.com/lexam79 "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Ellis Percival (@flyte)](https://github.com/flyte "29 total commits to the home-assistant organization, 25 commits to home-assistant, 4 commits to home-assistant.github.io") - [endor-force (@endor-force)](https://github.com/endor-force "9 total commits to the home-assistant organization, 4 commits to hassio-addons, 4 commits to home-assistant.github.io, 1 commit to hassio-build") - [engrbm87 (@engrbm87)](https://github.com/engrbm87 "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Eric Hagan (@ehagan)](https://github.com/ehagan "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Eric Rolf (@xrolfex)](https://github.com/xrolfex "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "115 total commits to the home-assistant organization, 99 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "116 total commits to the home-assistant organization, 100 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") - [Erik\-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") -- [escoand (@escoand)](https://github.com/escoand "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Ettienne Gous (@ettiennegous)](https://github.com/ettiennegous "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [escoand (@escoand)](https://github.com/escoand "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to netdisco") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Eu (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4590 total commits to the home-assistant organization, 2938 commits to home-assistant.github.io, 1545 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 1 commit to example-custom-config, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4643 total commits to the home-assistant organization, 2964 commits to home-assistant.github.io, 1567 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 3 commits to hassio-os, 2 commits to home-assistant-iOS, 1 commit to example-custom-config, 1 commit to home-assistant-js-websocket") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Fabien Piuzzi (@reefab)](https://github.com/reefab "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [fakezeta (@fakezeta)](https://github.com/fakezeta "7 total commits to the home-assistant organization, 7 commits to home-assistant") -- [Fares Rihani (@anchepiece)](https://github.com/anchepiece "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Federico Zivolo (@FezVrasta)](https://github.com/FezVrasta "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Felix (@xifle)](https://github.com/xifle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "27 total commits to the home-assistant organization, 27 commits to issue-bot") - [Ferry van Zeelst (@StaticCube)](https://github.com/StaticCube "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Filip Bednárik (@drndos)](https://github.com/drndos "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 4 commits to home-assistant, 3 commits to netdisco") +- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") -- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") +- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to hassio-cli, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Frantz (@rofrantz)](https://github.com/rofrantz "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") -- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "207 total commits to the home-assistant organization, 95 commits to hassbian-scripts, 73 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "212 total commits to the home-assistant organization, 100 commits to hassbian-scripts, 73 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") @@ -344,10 +341,11 @@ This page contains a list of people who have contributed in one way or another t - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Gerard (@gerard33)](https://github.com/gerard33 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Gerard (@gerard33)](https://github.com/gerard33 "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 4 commits to home-assistant") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") - [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [GitBook Bot (@gitbook-bot)](https://github.com/gitbook-bot "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [githubbuh (@githubbuh)](https://github.com/githubbuh "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [gitmopp (@gitmopp)](https://github.com/gitmopp "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Giuseppe (@glpatcern)](https://github.com/glpatcern "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -366,16 +364,15 @@ This page contains a list of people who have contributed in one way or another t - [gwendalg (@gwendalg)](https://github.com/gwendalg "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [happyleavesaoc (@happyleavesaoc)](https://github.com/happyleavesaoc "114 total commits to the home-assistant organization, 90 commits to home-assistant, 23 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Harald Nagel (@haraldnagel)](https://github.com/haraldnagel "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [Hari Menon (@floydpink)](https://github.com/floydpink "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Harris Borawski (@hborawski)](https://github.com/hborawski "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [hawk259 (@hawk259)](https://github.com/hawk259 "13 total commits to the home-assistant organization, 7 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Heath Paddock (@heathbar)](https://github.com/heathbar "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Heiko Rothe (@mKeRix)](https://github.com/mKeRix "20 total commits to the home-assistant organization, 15 commits to home-assistant, 5 commits to home-assistant.github.io") -- [Heiko Thiery (@hthiery)](https://github.com/hthiery "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Heiko Thiery (@hthiery)](https://github.com/hthiery "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Hellowlol (@Hellowlol)](https://github.com/Hellowlol "4 total commits to the home-assistant organization, 3 commits to netdisco, 1 commit to appdaemon") - [Helmut Januschka (@hjanuschka)](https://github.com/hjanuschka "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [Henning Dickten (@hensing)](https://github.com/hensing "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Henrik Nicolaisen (@hmn)](https://github.com/hmn "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Henrik Nicolaisen (@hmn)](https://github.com/hmn "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Hernán Rossetto (@hmronline)](https://github.com/hmronline "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [heytcass (@heytcass)](https://github.com/heytcass "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Hillary Fraley (@hillaryfraley)](https://github.com/hillaryfraley "12 total commits to the home-assistant organization, 12 commits to home-assistant.github.io") @@ -386,7 +383,7 @@ This page contains a list of people who have contributed in one way or another t - [Hydreliox (@HydrelioxGitHub)](https://github.com/HydrelioxGitHub "46 total commits to the home-assistant organization, 34 commits to home-assistant, 12 commits to home-assistant.github.io") - [Ian Copp (@icopp)](https://github.com/icopp "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") +- [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Igor Bernstein (@igorbernstein2)](https://github.com/igorbernstein2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") @@ -436,7 +433,7 @@ This page contains a list of people who have contributed in one way or another t - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "36 total commits to the home-assistant organization, 20 commits to home-assistant, 16 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") +- [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Jesse Hills (@jesserockz)](https://github.com/jesserockz "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Jesse Newland (@jnewland)](https://github.com/jnewland "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to hubot-home-assistant") - [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.github.io") @@ -444,7 +441,7 @@ This page contains a list of people who have contributed in one way or another t - [jiafengwang (@jiafengwang)](https://github.com/jiafengwang "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "103 total commits to the home-assistant organization, 85 commits to hassbian-scripts, 18 commits to home-assistant.github.io") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "107 total commits to the home-assistant organization, 89 commits to hassbian-scripts, 18 commits to home-assistant.github.io") - [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Joe Lu (@snjoetw)](https://github.com/snjoetw "24 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to appdaemon") @@ -454,22 +451,23 @@ This page contains a list of people who have contributed in one way or another t - [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") - [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johann Kellerman (@kellerza)](https://github.com/kellerza "169 total commits to the home-assistant organization, 139 commits to home-assistant, 30 commits to home-assistant.github.io") +- [Johann Kellerman (@kellerza)](https://github.com/kellerza "177 total commits to the home-assistant organization, 145 commits to home-assistant, 32 commits to home-assistant.github.io") - [Johannes K\. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "202 total commits to the home-assistant organization, 150 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "204 total commits to the home-assistant organization, 151 commits to home-assistant, 37 commits to home-assistant.github.io, 16 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [John Mihalic (@mezz64)](https://github.com/mezz64 "49 total commits to the home-assistant organization, 35 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") +- [John Mihalic (@mezz64)](https://github.com/mezz64 "50 total commits to the home-assistant organization, 36 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") - [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jon Caruana (@joncar)](https://github.com/joncar "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jon Griffith (@arretx)](https://github.com/arretx "12 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Jon Maddox (@maddox)](https://github.com/maddox "106 total commits to the home-assistant organization, 81 commits to home-assistant, 16 commits to homebridge-homeassistant, 9 commits to home-assistant.github.io") +- [Jon Maddox (@maddox)](https://github.com/maddox "107 total commits to the home-assistant organization, 82 commits to home-assistant, 16 commits to homebridge-homeassistant, 9 commits to home-assistant.github.io") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jonathan Baginski (@patchedsoul)](https://github.com/patchedsoul "115 total commits to the home-assistant organization, 87 commits to fabric-home-assistant, 28 commits to home-assistant.github.io") +- [Jonathan Weinberg (@jonathanweinberg)](https://github.com/jonathanweinberg "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [joopert (@joopert)](https://github.com/joopert "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Jordi (@hokus15)](https://github.com/hokus15 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jordy (@jbarrancos)](https://github.com/jbarrancos "40 total commits to the home-assistant organization, 40 commits to home-assistant") @@ -477,12 +475,12 @@ This page contains a list of people who have contributed in one way or another t - [Joseph Carter (@iKarith)](https://github.com/iKarith "9 total commits to the home-assistant organization, 9 commits to pi-gen") - [Joseph Piron (@eagleamon)](https://github.com/eagleamon "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Josh (@karlw00t)](https://github.com/karlw00t "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to homebridge-homeassistant") +- [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to homebridge-homeassistant") - [Josh Nichols (@technicalpickles)](https://github.com/technicalpickles "28 total commits to the home-assistant organization, 15 commits to home-assistant, 13 commits to home-assistant.github.io") - [Josh Wright (@JshWright)](https://github.com/JshWright "28 total commits to the home-assistant organization, 20 commits to home-assistant, 8 commits to home-assistant.github.io") - [jpcomtois (@jpcomtois)](https://github.com/jpcomtois "1 total commits to the home-assistant organization, 1 commit to libcoap") - [JudgeDredd (@JudgeDreddKLC)](https://github.com/JudgeDreddKLC "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") -- [Juggels (@Juggels)](https://github.com/Juggels "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Juggels (@Juggels)](https://github.com/Juggels "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.github.io") - [Julian Kaffke (@jaykay)](https://github.com/jaykay "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "31 total commits to the home-assistant organization, 24 commits to home-assistant, 7 commits to home-assistant.github.io") @@ -491,9 +489,8 @@ This page contains a list of people who have contributed in one way or another t - [Justin Hayes (@GussyH)](https://github.com/GussyH "8 total commits to the home-assistant organization, 7 commits to hadashboard, 1 commit to appdaemon") - [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Kane610 (@Kane610)](https://github.com/Kane610 "34 total commits to the home-assistant organization, 18 commits to home-assistant, 14 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [karlkar (@karlkar)](https://github.com/karlkar "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") +- [karlkar (@karlkar)](https://github.com/karlkar "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Keith Lamprecht (@Nixon506E)](https://github.com/Nixon506E "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Ken Bannister (@kb2ma)](https://github.com/kb2ma "1 total commits to the home-assistant organization, 1 commit to libcoap") @@ -504,15 +501,18 @@ This page contains a list of people who have contributed in one way or another t - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.github.io") - [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Kevin Gottsman (@gottsman)](https://github.com/gottsman "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") +- [Kevin Raddatz (@chronm)](https://github.com/chronm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Kevin Siml (@appzer)](https://github.com/appzer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [kfcook (@kfcook)](https://github.com/kfcook "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Khole (@KJonline)](https://github.com/KJonline "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") - [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to home-assistant-polymer") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [koolsb (@koolsb)](https://github.com/koolsb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Kory Prince (@korylprince)](https://github.com/korylprince "4 total commits to the home-assistant organization, 4 commits to home-assistant-polymer") - [Krasimir Chariyski (@Chariyski)](https://github.com/Chariyski "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") +- [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "1 total commits to the home-assistant organization, 1 commit to netdisco") - [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Kyle Hendricks (@kylehendricks)](https://github.com/kylehendricks "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [lamiskin (@lamiskin)](https://github.com/lamiskin "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -527,7 +527,7 @@ This page contains a list of people who have contributed in one way or another t - [linuxlurak (@linuxlurak)](https://github.com/linuxlurak "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to hadashboard") - [linvinus (@linvinus)](https://github.com/linvinus "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [lrmate (@lrmate)](https://github.com/lrmate "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Luar Roji (@cyberplant)](https://github.com/cyberplant "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Luar Roji (@cyberplant)](https://github.com/cyberplant "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Luc Touraille (@stilllman)](https://github.com/stilllman "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Luca Angemi (@luca-angemi)](https://github.com/luca-angemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [LucaSoldi (@LucaSoldi)](https://github.com/LucaSoldi "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -541,66 +541,64 @@ This page contains a list of people who have contributed in one way or another t - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [LvivEchoes (@LvivEchoes)](https://github.com/LvivEchoes "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Maarten Groeneweg (@lazytesting)](https://github.com/lazytesting "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [Maciej Sokołowski (@matemaciek)](https://github.com/matemaciek "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to hassio-build") - [Maciej Wasilak (@mwasilak)](https://github.com/mwasilak "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.github.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") - [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "28 total commits to the home-assistant organization, 28 commits to home-assistant.github.io") -- [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [makemeasandwich (@makemeasandwich)](https://github.com/makemeasandwich "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Marc Egli (@frog32)](https://github.com/frog32 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Marc Forth (@mf-social)](https://github.com/mf-social "25 total commits to the home-assistant organization, 24 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") -- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") +- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "3 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassio-build") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "140 total commits to the home-assistant organization, 77 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") +- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "141 total commits to the home-assistant organization, 77 commits to home-assistant, 62 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") +- [Marcin Domański (@kabturek)](https://github.com/kabturek "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") - [Marco (@marconett)](https://github.com/marconett "3 total commits to the home-assistant organization, 3 commits to appdaemon") -- [Marcus Schmidt (@mar-schmidt)](https://github.com/mar-schmidt "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Marco Orovecchia (@Oro)](https://github.com/Oro "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Marijn Giesen (@marijngiesen)](https://github.com/marijngiesen "5 total commits to the home-assistant organization, 5 commits to hadashboard") - [Marius (@ciotlosm)](https://github.com/ciotlosm "13 total commits to the home-assistant organization, 8 commits to home-assistant-polymer, 5 commits to home-assistant") -- [Mark Coombes (@marthoc)](https://github.com/marthoc "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Mark Coombes (@marthoc)](https://github.com/marthoc "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Mark Grosen (@mgsb)](https://github.com/mgsb "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Mark Huson (@mehuman)](https://github.com/mehuman "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") +- [Mark Perdue (@markperdue)](https://github.com/markperdue "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [mark9white (@mark9white)](https://github.com/mark9white "1 total commits to the home-assistant organization, 1 commit to hassio") - [markferry (@markferry)](https://github.com/markferry "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Markus (@iMarkus)](https://github.com/iMarkus "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to hassio") +- [Markus (@iMarkus)](https://github.com/iMarkus "1 total commits to the home-assistant organization, 1 commit to hassio") - [Markus Becker (@markushx)](https://github.com/markushx "6 total commits to the home-assistant organization, 6 commits to libcoap") - [Markus Peter (@bimbar)](https://github.com/bimbar "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "150 total commits to the home-assistant organization, 121 commits to home-assistant, 29 commits to home-assistant.github.io") +- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "154 total commits to the home-assistant organization, 125 commits to home-assistant, 29 commits to home-assistant.github.io") - [Martin Rowan (@shortbloke)](https://github.com/shortbloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") +- [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "54 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 2 commits to home-assistant-polymer, 1 commit to homebridge-homeassistant") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") -- [Matt Schmitt (@schmittx)](https://github.com/schmittx "66 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") +- [Matt Schmitt (@schmittx)](https://github.com/schmittx "68 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [Matteo Lampugnani (@t30)](https://github.com/t30 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Matthew Bowen (@mgbowen)](https://github.com/mgbowen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Matthew Garrett (@mjg59)](https://github.com/mjg59 "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Matthew Schick (@mattsch)](https://github.com/mattsch "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Matthew Garrett (@mjg59)](https://github.com/mjg59 "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Matthew Rollings (@stealthcopter)](https://github.com/stealthcopter "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") - [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Mattias Welponer (@mxworm)](https://github.com/mxworm "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Matthias Urlichs (@smurfix)](https://github.com/smurfix "3 total commits to the home-assistant organization, 3 commits to appdaemon") +- [Mattias Welponer (@mxworm)](https://github.com/mxworm "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Max Prokhorov (@mcspr)](https://github.com/mcspr "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [maxclaey (@maxclaey)](https://github.com/maxclaey "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [mboeru (@mboeru)](https://github.com/mboeru "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [mcfrojd (@mcfrojd)](https://github.com/mcfrojd "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Menno Blom (@b10m)](https://github.com/b10m "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to netdisco") +- [Menno Blom (@b10m)](https://github.com/b10m "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to netdisco") - [mertenats (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Micha LaQua (@milaq)](https://github.com/milaq "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Michael (@hartmms)](https://github.com/hartmms "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -608,35 +606,36 @@ This page contains a list of people who have contributed in one way or another t - [Michael Fester (@michaelfester)](https://github.com/michaelfester "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Furtak (@mfurtak)](https://github.com/mfurtak "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") +- [Michael Kutý (@michaelkuty)](https://github.com/michaelkuty "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Michael Luggen (@l00mi)](https://github.com/l00mi "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Requeny (@requenym)](https://github.com/requenym "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") - [Michael Shim (@shimeez)](https://github.com/shimeez "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "63 total commits to the home-assistant organization, 33 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") +- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "64 total commits to the home-assistant organization, 33 commits to home-assistant, 27 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Mike (@mradziwo)](https://github.com/mradziwo "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Mike Megally (@cmsimike)](https://github.com/cmsimike "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Mike Nestor (@mnestor)](https://github.com/mnestor "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") - [Mike O'Driscoll (@mikeodr)](https://github.com/mikeodr "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") -- [Mike Roberts (@m-roberts)](https://github.com/m-roberts "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Mikkel Høgh (@mikl)](https://github.com/mikl "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Milan V\. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [miniconfig (@miniconfig)](https://github.com/miniconfig "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [Minims (@Minims)](https://github.com/Minims "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") -- [Mister Wil (@MisterWil)](https://github.com/MisterWil "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Mister Wil (@MisterWil)](https://github.com/MisterWil "20 total commits to the home-assistant organization, 14 commits to home-assistant, 6 commits to home-assistant.github.io") - [Mitesh Patel (@gurumitts)](https://github.com/gurumitts "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Mitko Masarliev (@masarliev)](https://github.com/masarliev "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [mjj4791 (@mjj4791)](https://github.com/mjj4791 "23 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 8 commits to home-assistant") - [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") - [Molodax (@Molodax)](https://github.com/Molodax "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [mradziwo (@mradziwo)](https://github.com/mradziwo "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [mountainsandcode (@mountainsandcode)](https://github.com/mountainsandcode "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") +- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to home-assistant-polymer, 1 commit to appdaemon") - [Neil Lathwood (@laf)](https://github.com/laf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -650,11 +649,11 @@ This page contains a list of people who have contributed in one way or another t - [nielstron (@nielstron)](https://github.com/nielstron "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Niklas Wagner (@Skaronator)](https://github.com/Skaronator "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Niklas Wagner (@Skaronator)](https://github.com/Skaronator "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "123 total commits to the home-assistant organization, 95 commits to home-assistant, 28 commits to home-assistant.github.io") - [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [NovapaX (@NovapaX)](https://github.com/NovapaX "35 total commits to the home-assistant organization, 29 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") +- [NovapaX (@NovapaX)](https://github.com/NovapaX "56 total commits to the home-assistant organization, 50 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") @@ -665,12 +664,12 @@ This page contains a list of people who have contributed in one way or another t - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "27 total commits to the home-assistant organization, 17 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "47 total commits to the home-assistant organization, 40 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "56 total commits to the home-assistant organization, 45 commits to home-assistant, 8 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2684 total commits to the home-assistant organization, 1055 commits to hassio, 461 commits to home-assistant, 369 commits to hassio-build, 338 commits to hassio-addons, 312 commits to home-assistant.github.io, 118 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "3005 total commits to the home-assistant organization, 1174 commits to hassio, 462 commits to home-assistant, 374 commits to hassio-build, 339 commits to hassio-addons, 318 commits to home-assistant.github.io, 307 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -692,18 +691,18 @@ This page contains a list of people who have contributed in one way or another t - [Petr Vraník (@konikvranik)](https://github.com/konikvranik "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") - [pezinek (@pezinek)](https://github.com/pezinek "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil (@godloth)](https://github.com/godloth "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") -- [Phil Cole (@filcole)](https://github.com/filcole "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") +- [Phil Cole (@filcole)](https://github.com/filcole "9 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 3 commits to home-assistant") - [Phil Elson (@pelson)](https://github.com/pelson "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Phil Frost (@bitglue)](https://github.com/bitglue "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Phil Hawthorne (@philhawthorne)](https://github.com/philhawthorne "24 total commits to the home-assistant organization, 18 commits to home-assistant.github.io, 6 commits to home-assistant") -- [Phil Kates (@philk)](https://github.com/philk "7 total commits to the home-assistant organization, 7 commits to home-assistant") +- [Phil Kates (@philk)](https://github.com/philk "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philip Hofstetter (@pilif)](https://github.com/pilif "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") - [Philip Rosenberg\-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") +- [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "38 total commits to the home-assistant organization, 25 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to hassio-build, 1 commit to appdaemon") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") - [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "33 total commits to the home-assistant organization, 20 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Pierre Ståhl (@postlund)](https://github.com/postlund "49 total commits to the home-assistant organization, 32 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") @@ -715,24 +714,26 @@ This page contains a list of people who have contributed in one way or another t - [rbflurry (@rbflurry)](https://github.com/rbflurry "16 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 3 commits to home-assistant") - [Reed Riley (@reedriley)](https://github.com/reedriley "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "19 total commits to the home-assistant organization, 13 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "21 total commits to the home-assistant organization, 14 commits to home-assistant, 7 commits to home-assistant.github.io") - [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [rhooper (@rhooper)](https://github.com/rhooper "27 total commits to the home-assistant organization, 25 commits to home-assistant, 2 commits to hadashboard") - [Riccardo Canta (@commento)](https://github.com/commento "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Richard Arends (@Mosibi)](https://github.com/Mosibi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Richard Cox (@Khabi)](https://github.com/Khabi "15 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io") -- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "13 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Richard Leurs (@R1chardTM)](https://github.com/R1chardTM "13 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 6 commits to home-assistant, 1 commit to home-assistant-polymer") - [Richard Lucas (@lucasweb78)](https://github.com/lucasweb78 "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Richard Niemand (@rniemand)](https://github.com/rniemand "1 total commits to the home-assistant organization, 1 commit to example-custom-config") - [Rick (@rcuddy)](https://github.com/rcuddy "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Rob Cranfill (@RobCranfill)](https://github.com/RobCranfill "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to home-assistant-js-websocket, 3 commits to hassbot, 2 commits to LabelBot, 2 commits to micropython-home-assistant, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to scenegen, 3 commits to organization, 3 commits to home-assistant-js-websocket, 3 commits to hadashboard, 3 commits to home-assistant-js, 2 commits to LabelBot, 2 commits to lambda-home-assistant-github, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets") - [Robert (@metbril)](https://github.com/metbril "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to appdaemon, 1 commit to netdisco") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "30 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to appdaemon") +- [Robert Svensson (@Kane610)](https://github.com/Kane610 "40 total commits to the home-assistant organization, 24 commits to home-assistant, 14 commits to home-assistant.github.io, 1 commit to home-assistant-polymer, 1 commit to netdisco") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "42 total commits to the home-assistant organization, 27 commits to home-assistant.github.io, 14 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -746,13 +747,12 @@ This page contains a list of people who have contributed in one way or another t - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ruslan Kiyanchuk (@zoresvit)](https://github.com/zoresvit "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Russ K (@rkubes)](https://github.com/rkubes "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [Russell Cloran (@rcloran)](https://github.com/rcloran "30 total commits to the home-assistant organization, 26 commits to home-assistant, 4 commits to homebridge-homeassistant") +- [Russell Cloran (@rcloran)](https://github.com/rcloran "31 total commits to the home-assistant organization, 27 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Ryan Borstelmann (@SlothCroissant)](https://github.com/SlothCroissant "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Ryan Jarvis (@Cabalist)](https://github.com/Cabalist "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.github.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "92 total commits to the home-assistant organization, 70 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.github.io") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "96 total commits to the home-assistant organization, 74 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Sacha Telgenhof (@stelgenhof)](https://github.com/stelgenhof "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") @@ -765,10 +765,10 @@ This page contains a list of people who have contributed in one way or another t - [Scott Reston (@ih8gates)](https://github.com/ih8gates "9 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Sean Dague (@sdague)](https://github.com/sdague "75 total commits to the home-assistant organization, 52 commits to home-assistant, 14 commits to home-assistant.github.io, 5 commits to home-assistant-polymer, 3 commits to netdisco, 1 commit to home-assistant-js") - [Sean Gollschewsky (@gollo)](https://github.com/gollo "17 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to hassio-build") -- [Sean Wilson (@swilson)](https://github.com/swilson "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Sean Wilson (@swilson)](https://github.com/swilson "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Sebastian (@sebk-666)](https://github.com/sebk-666 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "97 total commits to the home-assistant organization, 58 commits to home-assistant, 36 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to netdisco") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "115 total commits to the home-assistant organization, 69 commits to home-assistant, 42 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 2 commits to netdisco") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -786,6 +786,7 @@ This page contains a list of people who have contributed in one way or another t - [Stefan Jonasson (@stefan-jonasson)](https://github.com/stefan-jonasson "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefano Scipioni (@scipioni)](https://github.com/scipioni "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Steltek (@Steltek)](https://github.com/Steltek "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [stephanerosi (@stephanerosi)](https://github.com/stephanerosi "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Stephen Edgar (@ntwb)](https://github.com/ntwb "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [Stephen Yeargin (@stephenyeargin)](https://github.com/stephenyeargin "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Steve Easley (@SteveEasley)](https://github.com/SteveEasley "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -796,7 +797,7 @@ This page contains a list of people who have contributed in one way or another t - [Sytone (@sytone)](https://github.com/sytone "7 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 1 commit to hassio-build") - [Sören Oldag (@soldag)](https://github.com/soldag "15 total commits to the home-assistant organization, 8 commits to home-assistant.github.io, 7 commits to home-assistant") - [Tabakhase (@tabakhase)](https://github.com/tabakhase "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [tadly (@tadly)](https://github.com/tadly "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [tadly (@tadly)](https://github.com/tadly "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tango-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "9 total commits to the home-assistant organization, 9 commits to home-assistant.github.io") - [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "59 total commits to the home-assistant organization, 49 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to home-assistant-js") @@ -808,19 +809,20 @@ This page contains a list of people who have contributed in one way or another t - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [thecynic (@thecynic)](https://github.com/thecynic "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [TheFrogDaddy (@TheFrogDaddy)](https://github.com/TheFrogDaddy "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [themanieldaniel (@themanieldaniel)](https://github.com/themanieldaniel "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") - [Theodor Lindquist (@theolind)](https://github.com/theolind "25 total commits to the home-assistant organization, 25 commits to home-assistant") - [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Thibault Cohen (@titilambert)](https://github.com/titilambert "44 total commits to the home-assistant organization, 31 commits to home-assistant, 13 commits to home-assistant.github.io") +- [Thibault Cohen (@titilambert)](https://github.com/titilambert "47 total commits to the home-assistant organization, 34 commits to home-assistant, 13 commits to home-assistant.github.io") - [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") -- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "19 total commits to the home-assistant organization, 15 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Thijs de Jong (@bakedraccoon)](https://github.com/bakedraccoon "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") - [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Thom Troy (@ttroy50)](https://github.com/ttroy50 "13 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 6 commits to home-assistant") - [Thomas Petazzoni (@tpetazzoni)](https://github.com/tpetazzoni "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Thomas Phillips (@thomas-phillips-nz)](https://github.com/thomas-phillips-nz "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") -- [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") +- [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "9 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") - [ThUnD3r\|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") @@ -829,12 +831,12 @@ This page contains a list of people who have contributed in one way or another t - [TJ Rana (@tjrana)](https://github.com/tjrana "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [tleegaard (@tleegaard)](https://github.com/tleegaard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Toby Gray (@tobygray)](https://github.com/tobygray "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "22 total commits to the home-assistant organization, 17 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Toby Gray (@tobygray)](https://github.com/tobygray "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "26 total commits to the home-assistant organization, 20 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to hassio-addons") - [toddeye (@toddeye)](https://github.com/toddeye "20 total commits to the home-assistant organization, 20 commits to home-assistant") - [Tom Dickman (@tdickman)](https://github.com/tdickman "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") -- [Tom Harris (@teharris1)](https://github.com/teharris1 "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Tom Harris (@teharris1)](https://github.com/teharris1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.github.io") - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -862,7 +864,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to hassio-build, 2 commits to home-assistant-polymer") +- [Ville Skyttä (@scop)](https://github.com/scop "40 total commits to the home-assistant organization, 19 commits to home-assistant, 10 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to hassio-build, 2 commits to home-assistant-polymer") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -879,10 +881,10 @@ This page contains a list of people who have contributed in one way or another t - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Wolf\-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [XECDesign (@XECDesign)](https://github.com/XECDesign "138 total commits to the home-assistant organization, 138 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") -- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 4 commits to home-assistant") +- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io") - [Yasin Soliman (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -894,4 +896,4 @@ This page contains a list of people who have contributed in one way or another t This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Saturday, March 31st 2018, 9:09:02 am UTC. +This page was last updated Sunday, April 29th 2018, 4:35:15 pm UTC. From 19722e8ede1d670ac3ce484f5aff6fc319fb1d76 Mon Sep 17 00:00:00 2001 From: Gerard Date: Mon, 30 Apr 2018 00:02:33 +0200 Subject: [PATCH 23/71] Add device_tracker component (#5272) The `device_tracker` is added in Home Assistant 0.68 but missing in the list of components. CC @cdce8p --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index d84658d945..0736cdddff 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -200,6 +200,7 @@ The following components are currently supported: | cover | WindowCovering | All covers that support `set_cover_position`. | | cover | WindowCovering | All covers that support `open_cover` and `close_cover` through value mapping. (`open` -> `>=50`; `close` -> `<50`) | | cover | WindowCovering | All covers that support `open_cover`, `stop_cover` and `close_cover` through value mapping. (`open` -> `>70`; `close` -> `<30`; `stop` -> every value in between) | +| device_tracker | Sensor | Support for `occupancy` device class. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | From 8ec44c00dd9c496867a461db75afe28debfea171 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 30 Apr 2018 14:07:31 -0400 Subject: [PATCH 24/71] Release 0.68.1 --- _config.yml | 6 ++-- source/_posts/2018-04-27-release-68.markdown | 32 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index ea4d3c06f1..502ae90635 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 68 -current_patch_version: 0 -date_released: 2018-04-27 +current_patch_version: 1 +date_released: 2018-04-30 # 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-0671---april-17" +patch_version_notes: "#release-0681---april-30" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 4ac9d1f460..924546f866 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -39,6 +39,18 @@ Another cool new platform, also by [@mjg59], is support for Eufy devices. Eufy i - Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) - Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +## {% linkable_title Release 0.68.1 - April 30 %} + +- Fix color setting of tplink lights ([@amelchio] - [#14108]) ([light.tplink docs]) +- Improve precision of Hue color state ([@amelchio] - [#14113]) ([light.hue docs]) +- Revert Hue color state to be xy-based ([@amelchio] - [#14154]) +- Fix Python 3.6 compatibility for HomeKit controller ([@mjg59] - [#14160]) ([homekit_controller docs]) +- Added CONF_IP_ADDRESS to HomeKit ([@cdce8p] - [#14163]) ([homekit docs]) +- Do not sync entities with an empty name ([@balloob] - [#14181]) ([google_assistant docs]) +- Improve chromecast disconnection logic ([@OttoWinter] - [#14190]) ([media_player.cast docs]) +- Fix poorly formatted automations ([@balloob] - [#14196]) +- Disable eliqonline requirement ([@balloob] - [#14156]) + ## {% 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. @@ -499,3 +511,23 @@ Experiencing issues introduced by this release? Please report them in our [issue [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [weather.yweather docs]: /components/weather.yweather/ [zha docs]: /components/zha/ +[#14108]: https://github.com/home-assistant/home-assistant/pull/14108 +[#14113]: https://github.com/home-assistant/home-assistant/pull/14113 +[#14154]: https://github.com/home-assistant/home-assistant/pull/14154 +[#14160]: https://github.com/home-assistant/home-assistant/pull/14160 +[#14163]: https://github.com/home-assistant/home-assistant/pull/14163 +[#14181]: https://github.com/home-assistant/home-assistant/pull/14181 +[#14190]: https://github.com/home-assistant/home-assistant/pull/14190 +[#14196]: https://github.com/home-assistant/home-assistant/pull/14196 +[#14156]: https://github.com/home-assistant/home-assistant/pull/14156 +[@OttoWinter]: https://github.com/OttoWinter +[@amelchio]: https://github.com/amelchio +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@mjg59]: https://github.com/mjg59 +[google_assistant docs]: /components/google_assistant/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[light.hue docs]: /components/light.hue/ +[light.tplink docs]: /components/light.tplink/ +[media_player.cast docs]: /components/media_player.cast/ \ No newline at end of file From 692fd52678bb49b7d398d7881f95a850bcf9f157 Mon Sep 17 00:00:00 2001 From: PhyberApex Date: Mon, 30 Apr 2018 22:53:46 +0200 Subject: [PATCH 25/71] Fixing recursive call in cookbook (#5279) Recursive calling is not allowed in home assistant. Splitting the script up was necessary. --- source/_cookbook/automation_flashing_lights.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_cookbook/automation_flashing_lights.markdown b/source/_cookbook/automation_flashing_lights.markdown index df14121307..5a55323eac 100644 --- a/source/_cookbook/automation_flashing_lights.markdown +++ b/source/_cookbook/automation_flashing_lights.markdown @@ -97,6 +97,14 @@ script: service: homeassistant.turn_off data: entity_id: switch.REL1 + - alias: loop_room1 + service: script.turn_on + data: + entity_id: script.flash_loop + + flash_loop: + alias: Flash loop + sequence: - delay: # time for flash light off seconds: 1 From 3ffe30f777b637f17e3a39033296c90a75c1f64c Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Mon, 30 Apr 2018 22:09:37 +0100 Subject: [PATCH 26/71] fix broken link (#5273) * fix broken link * Fix links --- source/_components/homekit_controller.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index 319f505ef1..bdd80d24af 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -13,12 +13,12 @@ ha_release: 0.68 ha_iot_class: "Local Polling" --- -[HomeKit](https://developer.apple.com/homekit/) controller integration for Home Assistant allows you to connect HomeKit accessories to Home Assistant. This component should not be confused with the [HomeKit](homekit) component, which allows you to control Home Assistant devices via HomeKit. +[HomeKit](https://developer.apple.com/homekit/) controller integration for Home Assistant allows you to connect HomeKit accessories to Home Assistant. This component should not be confused with the [HomeKit](/components/homekit/) component, which allows you to control Home Assistant devices via HomeKit. There is currently support for the following device types within Home Assistant: -- [Light](../light.homekit_controller) -- [Switch](../switch.homekit_controller) +- [Light](/components/light.homekit_controller/) +- [Switch](/components/switch.homekit_controller/) The component will be automatically configured if the [`discovery:`](components/discovery/) component is enabled and an enable entry added for HomeKit: From 7aee40a482038032ed82ae5979cb5aa97ad2be5c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 30 Apr 2018 22:12:56 +0100 Subject: [PATCH 27/71] Adding note about mDNS (#5280) For when mDNS doesn't work, people are stuck. Adding a note about how to work around that. --- source/hassio/installation.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index b29e39251d..08a2744aed 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -30,6 +30,10 @@ Hass.io images are available for all available Raspberry Pi and Intel NUC platfo - You will be able to reach your installation at [http://hassio.local:8123][local]. - Enable either the [Samba add-on][samba] or the [SSH add-on][ssh] to manage your configuration in `/config/` (From the UI choose **Hass.io** which is located in the sidebar). +

+If your router doesn't support mDNS then you'll have to use the IP address of your Pi, instead of `hassio.local`, for example `http://192.168.0.9:8123`. You should be able to find the IP address of your Pi from the admin interface of your router. +

+

Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable since some are designed to only provide the full power with that manufacturer's handsets.

From 4c405c8e977e73078aed64ee61c1ef6909eab8c0 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Tue, 1 May 2018 04:14:21 +0200 Subject: [PATCH 28/71] Added CONF_IP_ADDRESS to HomeKit (#5281) --- source/_components/homekit.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 0736cdddff..f0723ba4ac 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -39,6 +39,10 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap required: false type: int default: 51827 + ip_address: + description: The local network IP address. Only necessary if the default from Home Assistant does not work. + required: false + type: string filter: description: Filter entities to available in the `Home` app. ([Configure Filter](#configure-filter)) required: false From 4133cc0196f264e29521c89e664feef2f216a729 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 1 May 2018 19:13:28 +0100 Subject: [PATCH 29/71] Calling out that devices are still added (#5284) It's a common source of confusion that with `track_new_devices: False` devices are still added to `known_devices.yaml`. This adds a note to say that this is to be expected. --- source/_components/device_tracker.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index a66d78b716..b595407d13 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -40,6 +40,10 @@ The following optional parameters can be used with any platform. However device | `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (e.g., the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | | `new_device_defaults`| | Default values for new discovered devices. Available options `track_new_devices` (default: `True`), `hide_if_away` (default: `False`) | +

+ Note that setting `track_new_devices: False` will still result in new devices being recorded in `known_devices.yaml`, but they won't be tracked (`track: no`). +

+ The extended example from above would look like the following sample: ```yaml From 222d9483d9c423e389fb13881c56b47107695fb6 Mon Sep 17 00:00:00 2001 From: Jan Willhaus Date: Tue, 1 May 2018 20:14:42 +0200 Subject: [PATCH 30/71] Fix faulty link to AVM homepage (#5283) --- source/_components/fritzbox.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/fritzbox.markdown b/source/_components/fritzbox.markdown index 9b69d05831..351f63e35d 100644 --- a/source/_components/fritzbox.markdown +++ b/source/_components/fritzbox.markdown @@ -13,7 +13,7 @@ ha_release: 0.68 ha_iot_class: "Local Polling" --- -The [AVM](www.avm.de) Fritzbox component for Home Assistant allows you to integrate the switch and climate devices. +The [AVM](https://en.avm.de) Fritzbox component for Home Assistant allows you to integrate the switch and climate devices. #### {% linkable_title Tested Devices %} From 5e7c31b16c51ce0233dad996b59f5fe1261a4ed2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 1 May 2018 14:21:34 -0400 Subject: [PATCH 31/71] Fix styling --- source/_docs/installation/docker.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index bc7369f415..4245f1069c 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -16,15 +16,15 @@ Installation with Docker is straightforward. Adjust the following command so tha ```bash $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant -```​ +``` ### {% linkable_title Raspberry Pi 3 (Raspbian) %} ```bash - $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/raspberrypi3-homeassistant:0.XX.x ``` -The Docker container for Raspberry Pi 3 does not have a 'latest' tag so the version number must be specified explicitly, i.e. 0.68.0 or whatever version is desired. This goes for both CLI and Docker Compose. + +The Docker container for Raspberry Pi 3 does not have a 'latest' tag so the version number must be specified explicitly, i.e. 0.68.0. This goes for both CLI and Docker Compose. ### {% linkable_title macOS %} From 851f0f29ddeafd21690016962a73e38abd8a7a30 Mon Sep 17 00:00:00 2001 From: GoSpursGoNL Date: Tue, 1 May 2018 22:42:15 +0200 Subject: [PATCH 32/71] Update deconz.markdown I found that the credentials are no longer stored in deconz.conf but instead in .config_entries.json --- source/_components/deconz.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index ad79ab5225..d1fde01521 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -34,7 +34,7 @@ ha_iot_class: "Local Push" Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. -If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Menu** -> **Settings** -> **Unlock Gateway** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in `deconz.conf` inside the `.homeassistant` folder. +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Menu** -> **Settings** -> **Unlock Gateway** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in `.config_entries.json` inside the `.homeassistant` folder. You can add the following to your configuration.yaml file if you are not using the `discovery:` component: From 39720a4de26328632d1ec34d7d6e51ed4faadafc Mon Sep 17 00:00:00 2001 From: Ian Date: Thu, 3 May 2018 07:23:52 -0500 Subject: [PATCH 33/71] Create configuration_yaml_by_apocrathia.markdown (#5291) Adding my own Home Assistant configuration repository to the cookbook. --- .../configuration_yaml_by_apocrathia.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_apocrathia.markdown diff --git a/source/_cookbook/configuration_yaml_by_apocrathia.markdown b/source/_cookbook/configuration_yaml_by_apocrathia.markdown new file mode 100644 index 0000000000..6ac2ccd329 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_apocrathia.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Apocrathia" +description: "" +date: 2018-05-02 12:40 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Apocrathia/home-assistant-config/ +--- From 8f8e2e9a3dc60c9eb8fdf72382e4a0127ec51d6d Mon Sep 17 00:00:00 2001 From: Greg Stevenson Date: Thu, 3 May 2018 13:29:43 +0100 Subject: [PATCH 34/71] Update URL to Lets Encrypt blog (#5295) The current link takes you to a page which tells you it is outdated. --- .../ecosystem/certificates/tls_self_signed_certificate.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index d7c145fe8b..2aab9deb6d 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -11,7 +11,7 @@ redirect_from: /cookbook/tls_self_signed_certificate/ --- If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. -[Let's encrypt]({{site_root}}/blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. +[Let's encrypt]({{site_root}}/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/) will only work if you have a DNS entry and remote access is allowed. The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will complain about the security. If you have a CA then this will not be an issue. To create a certificate locally, you need the [OpenSSL](https://www.openssl.org/) command-line tool. From 04a3b83a53b80ed58678209aa890ea291631bcfe Mon Sep 17 00:00:00 2001 From: Tod Schmidt Date: Thu, 3 May 2018 14:21:34 -0400 Subject: [PATCH 35/71] Update snips.markdown (#5293) * Update snips.markdown Added new examples and link to discord and new documentation * Update snips.markdown * Fix formatting --- source/_components/snips.markdown | 94 ++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 13 deletions(-) diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index da7ed21417..cc2aa3248c 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -2,7 +2,7 @@ layout: page title: "Snips" description: "Instructions on how to integrate Snips within Home Assistant." -date: 2017-06-22 12:00 +date: 2018-05-02 12:00 sidebar: true comments: false sharing: true @@ -14,7 +14,7 @@ ha_release: 0.48 The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on privacy. It runs 100% on-device, and does not require an internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. -The latest documentation can be found here: [Snips Platform Documentation](https://github.com/snipsco/snips-platform-documentation/wiki). +The latest documentation can be found here: [Snips Platform Documentation](https://snips.gitbook.io/documentation/). ![Snips Modules](/images/screenshots/snips_modules.png) @@ -166,11 +166,11 @@ SetTimer: ``` {% endraw %} -### Sending TTS Notifications +### {% linkable_title Sending TTS Notifications %} You can send TTS notifications to Snips using the snips.say and snips.say_action services. Say_action starts a session and waits for user response, "Would you like me to close the garage door?", "Yes, close the garage door". -#### {% linkable_title Service `snips/say` %} +#### {% linkable_title Service `snips.say` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------------| @@ -178,7 +178,7 @@ You can send TTS notifications to Snips using the snips.say and snips.say_action | `site_id` | yes | Site to use to start session. | | `custom_data` | yes | custom data that will be included with all messages in this session. | -#### {% linkable_title Service `snips/say_action` %} +#### {% linkable_title Service `snips.say_action` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------------| @@ -188,19 +188,48 @@ You can send TTS notifications to Snips using the snips.say and snips.say_action | `can_be_enqueued` | yes | If True, session waits for an open session to end, if False session is dropped if one is running. | | `intent_filter` | yes | Array of Strings - A list of intents names to restrict the NLU resolution to on the first query. | -#### Configuration Examples + +### {% linkable_title Snips Support %} + +There is an active [discord](https://discordapp.com/invite/3939Kqx) channel for further support. + +### {% linkable_title Configuration Examples %} + +#### {% linkable_title Turn on a light %} ```yaml -script: +intent_script: turn_on_light: - sequence: - service: script.turn_on_light - service: snips.say - data: - text: 'OK, the light is now on' + speech: + type: plain + text: 'OK, closing the garage door' + action: + service: light.turn_on +``` +##### {% linkable_title Open a Garage Door %} + +```yaml +intent_script: + OpenGarageDoor: + speech: + type: plain + text: 'OK, opening the garage door' + action: + - service: cover.open_cover + data: + entity_id: garage_door +``` + +##### {% linkable_title Intiating a query %} + +Here is a more complex example. The automation is triggered if the garage door is open for more than 10 minutes. +Snips will then ask you if you want to close it and if you respond with something like "Close the garage door" it +will do so. Unfortunately there is no builtin support for yes and no responses. + +```yaml automation: - query_garage_door: + garage_door_has_been_open: trigger: - platform: state entity_id: binary_sensor.my_garage_door_sensor @@ -224,3 +253,42 @@ intent_script: action: - service: script.garage_door_close ``` + +##### {% linkable_title Weather %} + +So now you can open and close your garage door, let's check the weather. Add the Weather by Snips Skill to your assistant. + +Create a weather sensor, in this example (Dark Sky)[/components/sensor.darksky/] and the api_key in the secrets file. + +```yaml +- platform: darksky + name: "Dark Sky Weather" + api_key: !secret dark_sky_key + update_interval: + minutes: 10 + monitored_conditions: + - summary + - hourly_summary + - temperature + - temperature_max + - temperature_min +``` + +Then create this intent_script.yaml file in your config directory + +{% raw %} +```yaml +intent_script: + searchWeatherForecast: + speech: + type: plain + text: > + The weather is currently + {{ states('sensor.dark_sky_weather_temperature') | round(0) }} + degrees outside and {{ states('sensor.dark_sky_weather_summary') }}. + The high today will be + {{ states('sensor.dark_sky_weather_daily_high_temperature') | round(0)}} + and {{ states('sensor.dark_sky_weather_hourly_summary') }} +``` +{% endraw %} + From b3288f13cdb66aae8fde8580ac4935acb3c9d859 Mon Sep 17 00:00:00 2001 From: Louis Orleans Date: Thu, 3 May 2018 12:00:02 -0700 Subject: [PATCH 36/71] Add specific instructions for Meraki device tracker (#5297) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 📝 add specific instructions for Meraki device tracker The current instructions aren't really complete, and require you to have both an understanding of how the Home Assistant API works, as well as be able to read through the code for the Meraki component to find the API endpoint you're supposed to use. * Update formatting --- .../device_tracker.meraki.markdown | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/source/_components/device_tracker.meraki.markdown b/source/_components/device_tracker.meraki.markdown index a88aa1d713..cbe481d39e 100644 --- a/source/_components/device_tracker.meraki.markdown +++ b/source/_components/device_tracker.meraki.markdown @@ -11,8 +11,21 @@ logo: meraki.png ha_category: Presence Detection ha_release: "0.60" --- -Use your `Meraki AP` as device tracker. Note that Meraki will see all devices, not only connected to the network. -Follow instructions [here](https://meraki.cisco.com/technologies/location-analytics-api) how to enable Location Analytics. + +Use your Meraki AP as device tracker. Note that Meraki will see all devices, not only connected to the network. + +### {% linkable_title Prerequisites %} + +1. Go to Network-wide/General page, and find the Location and scanning section. +1. Make sure analytics and Scanning API are both enabled. +1. Make note of the Validator string, which will be used in the `device_tracker` configuration. +1. Click **Add a Post URL**: + 1. Set the Post URL to `https://YOUR_HOSTNAME/api/meraki?api_password=YOUR_HASS_PASSWORD` + 1. Set the Secret to a randomly generated string, and make note of it for the `device_tracker` configuration. + 1. Make sure the API Version is set to `2.0`. + 1. Hit **Save** in the bottom right of the page. + +## {% linkable_title Configuration %} After you configure access to the Meraki CMX API, add the following to your `configuration.yaml` file: @@ -24,14 +37,13 @@ device_tracker: validator: meraki_validator ``` - {% configuration %} secret: - description: Secret code added in Meraki + description: Secret code added in Meraki. required: true type: string validator: - description: Validation string from Meraki + description: Validation string from Meraki. required: true type: string {% endconfiguration %} From fe352e7dd60558a9292bfd2453da86793b6743ac Mon Sep 17 00:00:00 2001 From: escoand Date: Thu, 3 May 2018 21:00:17 +0200 Subject: [PATCH 37/71] Add description of discovery (#5286) * Add description of discovery * Fix copy&paste * Update link --- source/_components/media_player.volumio.markdown | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/_components/media_player.volumio.markdown b/source/_components/media_player.volumio.markdown index f8945adc88..26053822e8 100644 --- a/source/_components/media_player.volumio.markdown +++ b/source/_components/media_player.volumio.markdown @@ -12,12 +12,11 @@ ha_category: Media Player ha_release: 0.41 --- -The `Volumio` platform allows you to control a [Volumio](http://volumio.org) media player -from Home Assistant. +The `Volumio` platform allows you to control a [Volumio](http://volumio.org) media player from Home Assistant. +The preferred way to set up the Volumio platform is by enabling the [discovery component](/components/discovery/). -To add a Volumio player to your installation, add the following to -your `configuration.yaml` file. +In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From bc01c98712599057c74dbb08555e0f91848dd096 Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 3 May 2018 20:05:52 +0100 Subject: [PATCH 38/71] Adds info on whitelist_external_dirs (#5213) whitelist_external_dirs needs to be mentioned --- source/_components/folder_watcher.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index 88b19937e0..df9041ed35 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -13,13 +13,14 @@ ha_iot_class: "Local Polling" ha_release: 0.67 --- -This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files. The monitored `event_type` are: +This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are: + * `created` * `deleted` * `modified` * `moved` -Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored. +Configured folders must be added to [whitelist_external_dirs](/docs/configuration/basic/). Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored. To enable the Folder Watcher component in your installation, add the following to your `configuration.yaml` file: From 334a06b4d666c5880c08703e9e8d0b9b0804a60b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 3 May 2018 22:01:32 +0200 Subject: [PATCH 39/71] Various fixes (#5302) --- .../alarm_control_panel.alarmdecoder.markdown | 4 +- .../_components/binary_sensor.hive.markdown | 9 +-- .../_components/binary_sensor.random.markdown | 2 + .../binary_sensor.workday.markdown | 2 +- source/_components/calendar.google.markdown | 6 +- source/_components/climate.hive.markdown | 12 ++-- source/_components/google_assistant.markdown | 2 + source/_components/hive.markdown | 6 +- source/_components/light.hive.markdown | 11 ++-- .../_components/media_player.onkyo.markdown | 2 + source/_components/notify.clicksend.markdown | 5 +- source/_components/sensor.hive.markdown | 9 +-- source/_components/sensor.sht31.markdown | 2 + .../sensor.thethingsnetwork.markdown | 4 ++ source/_components/switch.hive.markdown | 7 ++- source/_components/switch.rainbird.markdown | 2 + source/_components/switch.rest.markdown | 4 +- source/_components/tts.amazon_polly.markdown | 63 ++++++++++++++----- 18 files changed, 106 insertions(+), 46 deletions(-) diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown index 476773df3e..98810aaa2a 100644 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -27,7 +27,9 @@ The Alarm Decoder component gives you access to several services for you to cont - `alarm_disarm`: Disarms the alarm from any state. Also clears a `check_zone` flag after an alarm was triggered. - `alarmdecoder_alarm_toggle_chime`: Toggles the alarm's chime state. -**Note**: `alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder component. +

+`alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder platform. +

### {% linkable_title Attributes %} diff --git a/source/_components/binary_sensor.hive.markdown b/source/_components/binary_sensor.hive.markdown index ffba6e29d1..49486d62d7 100644 --- a/source/_components/binary_sensor.hive.markdown +++ b/source/_components/binary_sensor.hive.markdown @@ -14,11 +14,12 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' binary sensor component integrates your Hive sensors into Home Assistant. +The `hive` binary sensor component integrates your Hive sensors into Home Assistant. -The Hive binary sensor component supports the following Hive products: -- **Hive Window or Door Sensor** -- **Hive Motion Sensor** +The platform supports the following Hive products: + +- Hive Window or Door Sensor +- Hive Motion Sensor

diff --git a/source/_components/binary_sensor.random.markdown b/source/_components/binary_sensor.random.markdown index d8a0129120..b1208681a8 100644 --- a/source/_components/binary_sensor.random.markdown +++ b/source/_components/binary_sensor.random.markdown @@ -16,6 +16,8 @@ ha_release: 0.57 The `random` binary sensor platform is creating random states (`True`, 1, `on` or `False`, 0, `off`). This can be useful if you want to test automation rules. It generates a new state every time it is polled. +## {% linkable_title Configuration %} + To enable the random binary sensor, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index b63d8f778d..1ba1f8bd8c 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -26,7 +26,7 @@ To enable the `workday` sensor in your installation, add the following to your ` binary_sensor: - platform: workday country: DE - workdays: [ mon, wed, fri ] + workdays: [mon, wed, fri] ``` Configuration variables: diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 5999dc48ac..9825c5f9cc 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -16,7 +16,7 @@ ha_release: 0.33 The `google` calendar platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file `google_calendars.yaml` that will contain information about all of the calendars you can see. -### {% linkable_title Prerequisites %} +## {% linkable_title Prerequisites %} Generate a Client ID and Client Secret on [Google Developers Console](https://console.developers.google.com/start/api?id=calendar). @@ -30,7 +30,7 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co 1. Save the client ID and secret as you will need to put these in your `configuration.yaml` file. 1. Click on "Library", search for "Google Calendar API" and enable it. -### {% linkable_title Basic Setup %} +## {% linkable_title Configuration %} To integrate Google Calendar in Home Assistant, add the following section to your `configuration.yaml` file: @@ -61,7 +61,7 @@ The next steps will require you to have Home Assistant running. After you have it running complete the Google authentication that pops up. It will give you a URL and a code to enter. This will grant your Home Assistant service access to all the Google Calendars that the account you authenticate with can read. This is a Read-Only view of these calendars. -### {% linkable_title Calendar Configuration %} +## {% linkable_title Calendar Configuration %} Editing the `google_calendars.yaml` file. diff --git a/source/_components/climate.hive.markdown b/source/_components/climate.hive.markdown index dd3fd41ca5..12f4688553 100644 --- a/source/_components/climate.hive.markdown +++ b/source/_components/climate.hive.markdown @@ -14,13 +14,15 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' climate component integrates your Hive thermostat and hot water into Home Assistant, enabling control of setting the **mode** and setting the **target temperature**. +The `hive` climate platform integrates your Hive thermostat and hot water into Home Assistant, enabling control of setting the **mode** and setting the **target temperature**. + A short boost for Hive Heating or Hive Hot water can be set by using the **Aux Heat** function, this will turn on the boost feature for Hive Heating or Hive Hot water for 30 minutes at 0.5 degrees higher than the current temperature. -The Hive climate component supports the following Hive products: -- **Hive Active Heating** -- **Hive Multizone** -- **Hot water control** +The platform supports the following Hive products: + +- Hive Active Heating +- Hive Multizone +- Hot water control

diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index f196288c7a..edd0b8ebb1 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -25,6 +25,8 @@ The Google Assistant component requires a bit more setup than most due to the wa To use Google Assistant, your Home Assistant configuration has to be externally accessible with a hostname and SSL certificate. If you haven't already configured that, you should do so before continuing.

+## {% linkable_title Configuration %} + To enable this, add the following lines to your `configuration.yaml` file: ```yaml diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index fbe0d5b17f..16f2a77ac4 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -14,11 +14,13 @@ ha_iot_class: "Cloud Polling" --- -This Hive component is the main component to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all your Hive devices into Home Assistant, including support for multizone heating. +The `hive` component is the main component to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all your Hive devices into Home Assistant, including support for multizone heating. This component uses the unofficial API used in the official Hive website [https://my.hivehome.com](https://my.hivehome.com), and you will need to use the same Username and Password you use on the Hive website to configure this Hive component in Home Assistant. -To add your Hive devices into your Home Assistant installation, using the default scan_interval, add the following to your 'configuration.yaml' file: + + +To add your Hive devices into your Home Assistant installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/light.hive.markdown b/source/_components/light.hive.markdown index 78daeb5641..44221f6371 100644 --- a/source/_components/light.hive.markdown +++ b/source/_components/light.hive.markdown @@ -14,12 +14,13 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' light component integrates your Hive lights into Home Assistant, enabling control of various settings, depending on the model light. +The `hive` light platform integrates your Hive lights into Home Assistant, enabling control of various settings, depending on the model light. -The Hive light component supports the following Hive products: -- **Hive Active Light Dimmable** -- **Hive Active Light Cool to Warm White** -- **Hive Active Light Color Changing** +The platform supports the following Hive products: + +- Hive Active Light Dimmable +- Hive Active Light Cool to Warm White +- Hive Active Light Color Changing

diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index 0c6dc4d2d3..13a50152dc 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Local Polling" The `onkyo` platform allows you to control a [Onkyo](http://www.onkyo.com/) and some recent [Pioneer](http://www.pioneerelectronics.com) receivers from Home Assistant. Please be aware that you need to enable "Network Standby" for this component to work in your Hardware. +## {% linkable_title Configuration %} + To add an Onkyo or Pioneer receiver to your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/notify.clicksend.markdown b/source/_components/notify.clicksend.markdown index a5f9d587fd..8d619617b4 100644 --- a/source/_components/notify.clicksend.markdown +++ b/source/_components/notify.clicksend.markdown @@ -15,9 +15,12 @@ ha_release: 0.48 The `clicksend` platform uses [ClickSend](https://clicksend.com) to deliver notifications from Home Assistant. -### Get your ClickSend API Credentials +## {% linkable_title Prerequisites %} + Go to your [ClickSend Dashboard](https://dashboard.clicksend.com) section and create your new project. After creating your project, you should now be able to obtain your `username` and `api_key`. +## {% linkable_title Configuration %} + To add ClickSend to your installation, add the following to your Home Assistant `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.hive.markdown b/source/_components/sensor.hive.markdown index 4fa0221f31..0d4d087516 100644 --- a/source/_components/sensor.hive.markdown +++ b/source/_components/sensor.hive.markdown @@ -14,11 +14,12 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' sensor component exposes hive data as a sensor. +The `hive` sensor component exposes Hive data as a sensor. -The Hive sensor component exposes the following sensors: -- **Hive Hub Online Status** -- **Hive Outside Temperature** +The platform exposes the following sensors: + +- Hive Hub Online Status +- Hive Outside Temperature

Full configuration details can be found on the main [Hive component](/components/hive/) page. diff --git a/source/_components/sensor.sht31.markdown b/source/_components/sensor.sht31.markdown index 73660bbbdc..7adbfc2cee 100644 --- a/source/_components/sensor.sht31.markdown +++ b/source/_components/sensor.sht31.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `sht31` sensor platform allows you to get the current temperature and humidity from a Sensirion SHT31 device. +## {% linkable_title Configuration %} + To use your SHT31 sensor in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.thethingsnetwork.markdown b/source/_components/sensor.thethingsnetwork.markdown index cce7aad569..faeb8b7e65 100644 --- a/source/_components/sensor.thethingsnetwork.markdown +++ b/source/_components/sensor.thethingsnetwork.markdown @@ -17,6 +17,8 @@ The `thethingsnetwork` sensor platform allows you to get data from a [The Things This platform requires that the [The Things Network component](/components/thethingsnetwork/) is set up and the [The Things Network Storage Integration](https://www.thethingsnetwork.org/docs/applications/storage/) as well. +## {% linkable_title Prerequisites %} + Visit the [The Things Network Console](https://console.thethingsnetwork.org/) website, log in with your The Things Network credentials, choose your application from **Applications** and go to **Integrations**. Add a new integration. @@ -54,6 +56,8 @@ Select **Devices** to get the ID of your device that you want to use. Devices overview

+## {% linkable_title Configuration %} + To enable this platform, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/switch.hive.markdown b/source/_components/switch.hive.markdown index 8f7d867722..e4ea483797 100644 --- a/source/_components/switch.hive.markdown +++ b/source/_components/switch.hive.markdown @@ -14,10 +14,11 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' switch component integrates your Hive plugs into Home Assistant, enabling control of your devices. +The `hive` switch platform integrates your Hive plugs into Home Assistant, enabling control of your devices. -The Hive switch component supports the following Hive products: -- **Hive Active Plug** +The platform supports the following Hive products: + +- Hive Active Plug

diff --git a/source/_components/switch.rainbird.markdown b/source/_components/switch.rainbird.markdown index 6fba9a2f99..673c4d1928 100644 --- a/source/_components/switch.rainbird.markdown +++ b/source/_components/switch.rainbird.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" This `rainbird` switch platform allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. +## {% linkable_title Configuration %} + Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index 79388ff24b..65f0afcd3e 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `rest` switch platform allows you to control a given endpoint that supports a [RESTful API](https://en.wikipedia.org/wiki/Representational_state_transfer). The switch can get the state via GET and set the state via POST on a given REST resource. +## {% linkable_title Configuration %} + To enable this switch, add the following lines to your `configuration.yaml` file: ```yaml @@ -93,7 +95,7 @@ switch: resource: http://IP_ADDRESS/led_endpoint body_on: '{"active": "true"}' body_off: '{"active": "false"}' - is_on_template: '{{value_json.is_active}}' + is_on_template: '{{ value_json.is_active }}' headers: Content-Type: application/json ``` diff --git a/source/_components/tts.amazon_polly.markdown b/source/_components/tts.amazon_polly.markdown index 6561bc6d09..8be1fdc0a5 100644 --- a/source/_components/tts.amazon_polly.markdown +++ b/source/_components/tts.amazon_polly.markdown @@ -15,6 +15,8 @@ ha_release: 0.37 The `amazon_polly` text-to-speech platform that works with [Amazon Polly](https://aws.amazon.com/polly/) to create the spoken output. Polly is a paid service via Amazon Web Services. There is a [free tier](https://aws.amazon.com/polly/pricing/) for the first 12 months and then a charge per million characters afterwards. +## {% linkable_title Configuration %} + To get started, add the following lines to your `configuration.yaml` (example for Amazon Polly): ```yaml @@ -23,33 +25,62 @@ tts: - platform: amazon_polly aws_access_key_id: AWS_ACCESS_KEY_ID aws_secret_access_key: AWS_SECRET_ACCESS_KEY - profile_name: AWS_PROFILE - region_name: 'us-east-1' - voice: Joanna ``` -Configuration variables: +{% configuration %} +aws_access_key_id: + description: "Your AWS Access Key ID. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name`." + required: true + type: string +aws_secret_access_key: + description: "Your AWS Secret Access Key. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`." + required: true + type: string +profile_name: + description: A credentials profile name. For more information, please see the [boto3 Documentation](http://boto3.readthedocs.io/en/latest/guide/configuration.html#shared-credentials-file) for more information. + required: false + type: string +region_name: + description: "The region identifier to connect to. The default is `us-east-1`. See the [AWS Regions and Endpoints Reference](https://docs.aws.amazon.com/general/latest/gr/rande.html#pol_region) for available regions." + required: false + type: string or list +name: + description: "Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`." + required: false + type: string +text_type: + description: "Specify wherever to use text (default) or ssml markup by default." + required: false + type: string + default: text +voice: + description: "Voice name to be used. See the [Amazon Documentation](http://docs.aws.amazon.com/polly/latest/dg/voicelist.html) for available voices." + required: false + type: string +output_format: + description: "Override the default output format, e.g., `mp3`, `ogg_vorbis` or `pcm`." + required: false + type: string + default: mp3 +sample_rate: + description: "Override the default sample rate, defaults to 22050 for MP3 and Ogg Vorbis, 16000 for pcm." + required: false + type: string +{% endconfiguration %} -| Parameter | Value | Description | -|---------------------|----------|-------------| -| `aws_access_key_id` | Required | Your AWS Access Key ID. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name` | -| `aws_secret_access_key` | Required | Your AWS Secret Access Key. For more information, please read the [AWS General Reference regarding Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html). If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`. | -| `profile_name` | Optional | A credentials profile name. For more information, please see the [boto3 Documentation](http://boto3.readthedocs.io/en/latest/guide/configuration.html#shared-credentials-file) for more information. | -| `region_name` | Optional | The region identifier to connect to. The default is `us-east-1`. See the [AWS Regions and Endpoints Reference](https://docs.aws.amazon.com/general/latest/gr/rande.html#pol_region) for available regions. | -| `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`. | -| `text_type` | text/ssml | text or ssml: Specify wherever to use text (default) or ssml markup by default. | -| `voice` | Optional | Voice name to be used. See the [Amazon Documentation](http://docs.aws.amazon.com/polly/latest/dg/voicelist.html) for available voices. | -| `output_format` | mp3/ogg_vorbis/pcm | Override the default output format, defaults to MP3. | -| `sample_rate` | 8000/16000/22050 | Override the default sample rate, defaults to 22050 for MP3 and Ogg Vorbis, 16000 for pcm. | -## Usage +## {% linkable_title Usage %} + Say to all `media_player` device entities: + ```yaml - service: tts.amazon_polly_say data_template: message: 'Hello from Amazon Polly' ``` + or + ```yaml - service: tts.amazon_polly_say data_template: From d7fcb153de9f791bfbfa83db9ee459498120a94b Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 3 May 2018 14:56:01 -0600 Subject: [PATCH 40/71] Adds docs for RainMachine component/hub (#5251) * Adds docs for RainMachine component/hub * Removing references to remote API * Collaborator-requested changes * Adding new info (per home-assistant/home-assistant#14225) * Collaborator-requested changes * Collaborator-requested changes * Revert "Collaborator-requested changes" This reverts commit 34f75ffab911dcd9a9ae3163645c7c6e9dbf54ee. * I think I got it this time... * Collaborator-requested changes * Collaborator-requested changes * Small tweak --- source/_components/rainmachine.markdown | 71 +++++++++++++++ .../_components/switch.rainmachine.markdown | 88 +++---------------- 2 files changed, 85 insertions(+), 74 deletions(-) create mode 100644 source/_components/rainmachine.markdown diff --git a/source/_components/rainmachine.markdown b/source/_components/rainmachine.markdown new file mode 100644 index 0000000000..e416c7f626 --- /dev/null +++ b/source/_components/rainmachine.markdown @@ -0,0 +1,71 @@ +--- +layout: page +title: "RainMachine" +description: "Instructions on how to integrate RainMachine units within Home Assistant." +date: 2018-04-25 20:32 +sidebar: true +comments: false +sharing: true +footer: true +logo: rainmachine.png +ha_category: Hub +ha_release: 0.69 +ha_iot_class: "Cloud Polling" +--- + +The `rainmachine` component is the main component to integrate all platforms +related to [RainMachine smart Wi-Fi sprinkler controllers](http://www.rainmachine.com/). + +## {% linkable_title Base Configuration %} + +To connect to your RainMachine device, add the following to your +`configuration.yaml` file: + +```yaml +rainmachine: + ip_address: 192.168.1.100 + password: YOUR_PASSWORD +``` + +To configure switch-related functionality, add configuration options beneath +a `switches` key within the `rainmachine` sections of `configuration.yaml` +as below: + +```yaml +rainmachine: + ip_address: 192.168.1.100 + password: YOUR_PASSWORD + switches: + # switch configuration options... +``` + +{% configuration %} +ip_address: + description: the IP address or hostname of your RainMachine unit + required: optional + type: string +password: + description: your RainMachine password. + required: true + type: string +port: + description: the TCP port used by your unit for the REST API + required: false + type: int + default: 8080 +ssl: + description: whether communication with the local device should occur over HTTPS + required: false + type: boolean + default: true +switches: + description: switch-related configuration options + required: false + type: map + keys: + zone_run_time: + description: the default number of seconds that a zone should run when turned on + required: false + type: int + default: 600 +{% endconfiguration %} diff --git a/source/_components/switch.rainmachine.markdown b/source/_components/switch.rainmachine.markdown index 26b73e0aa8..f37ce0fbd5 100644 --- a/source/_components/switch.rainmachine.markdown +++ b/source/_components/switch.rainmachine.markdown @@ -13,84 +13,24 @@ ha_iot_class: "Cloud Polling" ha_release: 0.51 --- -The `rainmachine` switch platform allows you to control programs and zones within a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). - -## {% linkable_title Configuring the Platform %} - -The platform allows for either local (i.e., directly across the LAN) or remote (i.e., through RainMachine's cloud API) access; the route you choose will dictate what your configuration should look like. - -For local access, specify the IP address/hostname of your RainMachine unit, your RainMachine password, and optionally, the device's HTTP port: - -```yaml -switch: - platform: rainmachine - ip_address: 192.168.1.100 - password: YOUR_PASSWORD -``` - -For remote access, specify your RainMachine username/email and password: - -```yaml -switch: - platform: rainmachine - email: user@host.com - password: YOUR_PASSWORD -``` - -{% configuration %} -password: - description: Your RainMachine password. - required: true - type: string -email: - description: "Your RainMachine username/email. Cannot be used with the `ip_address` parameter." - required: false - type: string -ip_address: - description: "The IP address of your RainMachine unit; cannot be used with the `email` parameter." - required: optional - type: string -port: - description: The TCP port used by your unit for the REST API. - required: false - type: int - default: 8080 -ssl: - description: Whether communication with the local device should occur over HTTPS. - required: false - type: boolean - default: true -zone_run_time: - description: The number of seconds that a zone should run when turned on. - required: false - type: int - default: 600 -{% endconfiguration %} +The `rainmachine` switch platform allows you to control programs and zones +within a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). +

+You must have the [RainMachine component](https://www.home-assistant.io/components/rainmachine/) +configured to use this switch. After configuring that component, switches will +automatically appear. +

## {% linkable_title Controlling Your Device %} -After Home Assistant loads, you will see new switches for every enabled program and zone. These work as expected: +After Home Assistant loads, new switches will be added for every enabled +program and zone. These work as expected: - Program On/Off: starts/stops a program -- Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to determine how long to run for) +- Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to +determine how long to run for) -Programs and zones are linked. If a program is running its final zone, you will see both the program and zone switches turned on; turning either one off will turn the other one off (just like in the web app). - -## {% linkable_title Weblink %} - -If you would like to see and control more detailed information, create an [iFrame](/components/panel_iframe/) that renders the RainMachine web app: - -```yaml -panel_iframe: - rainmachine: - title: RainMachine - url: "https://my.rainmachine.com/s//ui/" - icon: mdi:water-pump -``` - -You can find `` by logging into [https://my.rainmachine.com](https://my.rainmachine.com ) and taking note of the URL. - -## {% linkable_title For Awareness %} - -The remote RainMachine API currently has two broken operations (i.e., they return error codes): starting a program and stopping a program. Please note that starting/stopping programs with the remote API is disabled until RainMachine can fix the issue. +Programs and zones are linked. While a program is running, you will see both +the program and zone switches turned on; turning either one off will turn the +other one off (just like in the web app). From f02495713b5b8cfdc9c2169812c602ee69e19e25 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 4 May 2018 08:19:02 +0100 Subject: [PATCH 41/71] Re-ordered the automation blocks (#5305) The automations were as the editor produces them, so not logically ordered or clear to read. I've re-written them to match the rest of the documentation. --- source/_components/timer.markdown | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index 9f28b2ec7a..eb6db877f3 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -107,30 +107,29 @@ timer: ```yaml # Example automations.yaml entry -- action: - - service: timer.start - entity_id: timer.test - alias: Timerswitch +- alias: Timerswitch id: 'Timerstart' - -# Timer is started when the switch pumprun is set to on. + # Timer is started when the switch pumprun is set to on. trigger: - platform: state + - platform: state entity_id: switch.pumprun to: 'on' + action: + - service: timer.start + entity_id: timer.test # When timer is stopped, the time run out, another message is sent -- action: - - service: notify.nma - data: - message: "Timer stop" - alias: Timerstop +- alias: Timerstop id: 'Timerstop' trigger: - platform: event + - platform: event event_type: timer.finished event_data: entity_id: timer.test + action: + - service: notify.nma + data: + message: "Timer stop" ``` ### {% linkable_title Control a timer from the frontend %} From 49c697004a4c81e7acec37eea9810c8e0f6b0d1c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 4 May 2018 08:20:00 +0100 Subject: [PATCH 42/71] Added explicit call out about Z-Wave (#5294) * Added explicit call out about Z-Wave Called out the need to disable the auto-start when you're using Z-Wave * Included details about `discovery:` --- source/_components/homekit.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index f0723ba4ac..a28655751b 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -81,6 +81,9 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap default: '' {% endconfiguration %} +

+ If you use Z-Wave, or `discovery:` you'll need to disable auto-start, see the [section below](#disable-auto-start) for details on how to do this. You'll then need to start the HomeKit component once Z-Wave is ready, or an appropriate delay to allow your entities to be discovered. +

## {% linkable_title Setup %} @@ -120,7 +123,7 @@ A common situation might be if you decide to disable parts of the configuration Depending on your individual setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully setup when the `HomeKit` component is started, can be added. To start `HomeKit` when `auto_start: False`, you can call the service `homekit.start`. -This can be automated using an `automation`. +If you have Z-Wave entities you want exposed to HomeKit then you'll need to disable auto start and then start it after the Z-Wave mesh is ready. This is because the Z-Wave entities won't be fully set up until then. This can be automated using an automation: {% raw %} ```yaml @@ -138,6 +141,8 @@ automation: ``` {% endraw %} +For a general delay where your component doesn't generate an event, you can also do: + {% raw %} ```yaml # Example using a delay after start of Home Assistant From cb8cdf34529f2c309c4b7ea7c52aaa142e91755e Mon Sep 17 00:00:00 2001 From: Tod Schmidt Date: Fri, 4 May 2018 03:43:51 -0400 Subject: [PATCH 43/71] Update snips.markdown (#5292) * Update snips.markdown Updated to reference latest add on. * Update snips.markdown * Fix escaping --- source/_addons/snips.markdown | 96 ++++++++++++++++++++++++----------- 1 file changed, 65 insertions(+), 31 deletions(-) diff --git a/source/_addons/snips.markdown b/source/_addons/snips.markdown index 55a1dca239..2160608694 100644 --- a/source/_addons/snips.markdown +++ b/source/_addons/snips.markdown @@ -2,7 +2,7 @@ layout: page title: "Snips.ai" description: "Enhance your Hass.io installation with a local voice assistant." -date: 2018-03-22 13:28 +date: 2018-05-02 13:28 sidebar: true comments: false sharing: true @@ -25,42 +25,17 @@ Open garage door What is on my shopping list ``` -To get started creating your own configuration, follow [their tutorial](https://github.com/snipsco/snips-platform-documentation/wiki/2.-Create-an-assistant-using-an-existing-bundle) to create an assistant and download the training data. You can add the HomeAssistant bundle to your assistant to enable the built-in intents, and add or create your own intents to do more complex tasks. +To get started creating your own configuration, follow [their tutorial](https://snips.gitbook.io/documentation/console) to create an assistant and download the training data. You can also add the HomeAssistant Skill to your assistant to enable the built-in intents, and add or create your own intents to do more complex tasks. -Now install and activate the [Samba] add-on so you can upload your training data. Connect to the "share" Samba share and copy your training data over. Name the file `assistant.zip`. - -Now it's time to start Snips for the first time. When the Snips add-on starts, it will output your audio devices. If you are using a USB mic and the raspberry pi output, you won't need to change anything: - -```text -**** List of PLAYBACK Hardware Devices **** -card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] - Subdevices: 8/8 - Subdevice #0: subdevice #0 - Subdevice #1: subdevice #1 - Subdevice #2: subdevice #2 - Subdevice #3: subdevice #3 - Subdevice #4: subdevice #4 - Subdevice #5: subdevice #5 - Subdevice #6: subdevice #6 - Subdevice #7: subdevice #7 -card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] - Subdevices: 1/1 - Subdevice #0: subdevice #0 -``` - -You need to use this information to point the add-on at the right speakers and microphone. The information describes different cards and devices. On a Raspberry Pi 3, card 0 - device 0 is the built-in headset port, card 0 - device 1 is the HDMI port. In the example above, the USB microphone showed up as card 1 - device 0. - -Find the microphone and speakers that you want to use and note down their device and card number. We will need that to configure the add-on options `mic` (microphone to use) and `speaker` (speaker to use). The format for these options is `,`. Change the configuration options and click save. +Now install and activate the [Samba] add-on so you can upload your training data. Connect to the "share" Samba share and copy your assistant over. Name the file `assistant.zip` or whatever you have configured in the configuration options. +Now it's time to start Snips for the first time. You can configure the microphone and sound card using the addon gui. Now start the add-on. ### Add-On configuration ```json { - "mic": "1,0", - "speaker": "1,0", - "assistant": "assistant.zip", "mqtt_bridge": { "active": true, "host": "172.17.0.1", @@ -68,23 +43,82 @@ Now start the add-on. "user": "", "password": "" }, + "assistant": "assistant.zip", + "language": "en", + "custom_tts": false, + "tts_platform": "amazon_polly" } ``` Configuration variables: - **mqtt_bridge** : Snips uses MQTT to communicate and defaults to their own broker. Use this config option to bridge their broker to your the Mosquitto add-on. -- **mic**: This is the hardware address of your microphone. Look at the Snips output if you are using different hardware. +- **assistant** : The name of your custom assistant in /share. If no assistant is found 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. ### {% linkable_title Home Assistant configuration %} -Use the Home Assistant [Snips.ai component][comp] to integrate the add-on into Home Assistant. +A simple configuration just requires this. Consult [Snips.ai component][comp] for more options ```yaml snips: ``` +### {% linkable_title Home Assistant configuration %} + +There is an active [discord](https://discordapp.com/invite/3939Kqx) channel for further support. + +### Examples + +So now you can turn lights on and off, let's check the weather. Log on to the [console](https://console.snips.ai/). If this is your first time, create a new assistant and add the Home Assistant skill, along with the Weather skill by snips. Download your assistant manually and copy it to the /share folder on your HassIO installation using the Samba addon. + +Next create a weather sensor, I happen to use (Dark Sky)[/components/sensor.darksky/] and have my api_key in my secrets file. + +```yaml +- platform: darksky + name: "Dark Sky Weather" + api_key: !secret dark_sky_key + update_interval: + minutes: 10 + monitored_conditions: + - summary + - hourly_summary + - temperature + - temperature_max + - temperature_min +``` +Next add this to your configuration.yaml to reference a new intent_script component. +This is a good practice to split your config files up. + +```yaml +intent_script: !include intent_script.yaml +``` + +Finally, create this intent_script.yaml file in your config directory + +{% raw %} +```yaml +searchWeatherForecast: + speech: + type: plain + text: > + The weather is currently + {{ states('sensor.dark_sky_weather_temperature') | round(0) }} + degrees outside and {{ states('sensor.dark_sky_weather_summary') }}. + The high today will be + {{ 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! + + + [Snips.ai]: https://snips.ai/ [their tutorial]: https://github.com/snipsco/snips-platform-documentation/wiki/2.-Create-an-assistant-using-an-existing-bundle [Samba]: /addons/samba/ [comp]: /components/snips/ + From c66bde18435b54313308e14f70eeba70ff77370e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 4 May 2018 09:52:24 +0200 Subject: [PATCH 44/71] Fix formatting and some sentences --- source/_addons/snips.markdown | 41 +++++++++++++------------------ source/_components/snips.markdown | 8 +++--- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/source/_addons/snips.markdown b/source/_addons/snips.markdown index 2160608694..851afd8e7d 100644 --- a/source/_addons/snips.markdown +++ b/source/_addons/snips.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -[Snips.ai] is an AI-powered voice assistant that runs on the Raspberry Pi 3 and x86 platforms. It runs on-device and is Private by Design. +[Snips.ai](https://snips.ai/) is an AI-powered voice assistant that runs on the Raspberry Pi 3 and x86 platforms. It runs on-device and is Private by Design. The Snips add-on depends on the Mosquitto add on to bridge to Home Assistant, so make sure that is installed. @@ -17,7 +17,7 @@ HomeAssistant comes with certain Intents builtin to handle common tasks. A compl The Snips addon by default comes with an assistant that allows you to turn on lights or switches, open covers, or add and list items to a shopping list if that component is enabled. -If using a USB microphone and speakers plugged into the raspberry pi output, Snips will work without any change to the configuration. Trying saying things like: +If using a USB microphone and speakers plugged into the Raspberry Pi output, Snips will work without any change to the configuration. Trying saying things like: ``` Turn on kitchen light @@ -27,12 +27,11 @@ What is on my shopping list To get started creating your own configuration, follow [their tutorial](https://snips.gitbook.io/documentation/console) to create an assistant and download the training data. You can also add the HomeAssistant Skill to your assistant to enable the built-in intents, and add or create your own intents to do more complex tasks. -Now install and activate the [Samba] add-on so you can upload your training data. Connect to the "share" Samba share and copy your assistant over. Name the file `assistant.zip` or whatever you have configured in the configuration options. +Now install and activate the [Samba](/addons/samba/) add-on so you can upload your training data. Connect to the "share" Samba share and copy your assistant over. Name the file `assistant.zip` or whatever you have configured in the configuration options. -Now it's time to start Snips for the first time. You can configure the microphone and sound card using the addon gui. -Now start the add-on. +Now it's time to start Snips for the first time. You can configure the microphone and sound card using the Add-on interface. Now start the add-on. -### Add-On configuration +### {% linkable_title Add-On configuration %} ```json { @@ -52,15 +51,15 @@ Now start the add-on. Configuration variables: -- **mqtt_bridge** : Snips uses MQTT to communicate and defaults to their own broker. Use this config option to bridge their broker to your the Mosquitto add-on. -- **assistant** : The name of your custom assistant in /share. If no assistant is found 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. +- **mqtt_bridge**: Snips uses MQTT to communicate and defaults to their own broker. Use this config option to bridge their broker to your the Mosquitto add-on. +- **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. ### {% linkable_title Home Assistant configuration %} -A simple configuration just requires this. Consult [Snips.ai component][comp] for more options +A simple configuration just requires this. Consult [Snips.ai component](/components/snips/) for more options. ```yaml snips: @@ -70,11 +69,11 @@ snips: There is an active [discord](https://discordapp.com/invite/3939Kqx) channel for further support. -### Examples +### {% linkable_title Examples %} -So now you can turn lights on and off, let's check the weather. Log on to the [console](https://console.snips.ai/). If this is your first time, create a new assistant and add the Home Assistant skill, along with the Weather skill by snips. Download your assistant manually and copy it to the /share folder on your HassIO installation using the Samba addon. +So now you can turn lights on and off, let's check the weather. Log on to the [console](https://console.snips.ai/). If this is your first time, create a new assistant and add the Home Assistant skill, along with the Weather skill by snips. Download your assistant manually and copy it to the `/share` folder on your HassIO installation using the Samba addon. -Next create a weather sensor, I happen to use (Dark Sky)[/components/sensor.darksky/] and have my api_key in my secrets file. +Next create a weather sensor, e.g., one for (Dark Sky)[/components/sensor.darksky/] and put the `api_key` in your `secrets.yaml` file. ```yaml - platform: darksky @@ -89,14 +88,13 @@ Next create a weather sensor, I happen to use (Dark Sky)[/components/sensor.dark - temperature_max - temperature_min ``` -Next add this to your configuration.yaml to reference a new intent_script component. -This is a good practice to split your config files up. +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 intent_script: !include intent_script.yaml ``` -Finally, create this intent_script.yaml file in your config directory +Finally, create this `intent_script.yaml` file in your configuration directory. {% raw %} ```yaml @@ -113,12 +111,7 @@ searchWeatherForecast: ``` {% endraw %} -Now just restart HassIO and ask it what the weather is like! +Now just restart HassIO and ask it what the weather is like. - - -[Snips.ai]: https://snips.ai/ [their tutorial]: https://github.com/snipsco/snips-platform-documentation/wiki/2.-Create-an-assistant-using-an-existing-bundle -[Samba]: /addons/samba/ -[comp]: /components/snips/ diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index cc2aa3248c..e7086ac9dc 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -97,7 +97,7 @@ followed by a command, e.g. > Set the lights to green in the living room -As the Snips Platform parses this query into an intent, it will be published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. +As the Snips Platform parses this query into an intent, it will be published on MQTT, on the `hermes/intent/` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml` file, as explained below. #### {% linkable_title Optional: specifying an external MQTT broker %} @@ -256,9 +256,7 @@ intent_script: ##### {% linkable_title Weather %} -So now you can open and close your garage door, let's check the weather. Add the Weather by Snips Skill to your assistant. - -Create a weather sensor, in this example (Dark Sky)[/components/sensor.darksky/] and the api_key in the secrets file. +So now you can open and close your garage door, let's check the weather. Add the Weather by Snips Skill to your assistant. Create a weather sensor, in this example (Dark Sky)[/components/sensor.darksky/] and the `api_key` in the `secrets.yaml` file. ```yaml - platform: darksky @@ -274,7 +272,7 @@ Create a weather sensor, in this example (Dark Sky)[/components/sensor.darksky/] - temperature_min ``` -Then create this intent_script.yaml file in your config directory +Then create this `intent_script.yaml` file in your configuration directory. {% raw %} ```yaml From 05916670688398ef9afb55416f2ac3d7e8cedd60 Mon Sep 17 00:00:00 2001 From: lbouriez Date: Fri, 4 May 2018 04:20:20 -0400 Subject: [PATCH 45/71] fix yaml example (#5275) * fix yaml example * Fix configuration sample --- source/_components/device_tracker.google_maps.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.google_maps.markdown b/source/_components/device_tracker.google_maps.markdown index 5b16f3c785..d05c9e35d2 100644 --- a/source/_components/device_tracker.google_maps.markdown +++ b/source/_components/device_tracker.google_maps.markdown @@ -29,9 +29,9 @@ To integrate Google Maps Location Sharing in Home Assistant, add the following s ```yaml # Example configuration.yaml entry device_tracker: - platform: google_maps - username: example@gmail.com - password: password + - platform: google_maps + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} From 99b142470d51393ed2b6dd8e7ba09ab3ec53ba1c Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Sat, 5 May 2018 15:38:37 +0200 Subject: [PATCH 46/71] Updated sensor device_classes (#5306) * Updated sensor device_classes * Removed lux * Changed device_class name * Updated homekit doc --- source/_components/homekit.markdown | 2 +- source/_components/sensor.markdown | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 631ddf592c..c50ce9b6be 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -206,7 +206,7 @@ The following components are currently supported: | sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` or `humidity` as their `device_class`. | | sensor | AirQualitySensor | All sensors that have `pm25` as part of their `entity_id` or `pm25` as their `device_class` | | sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `co2` as their `device_class` | -| sensor | LightSensor | All sensors that have `lm`/`lux` as their `unit_of_measurement` or `light` as their `device_class` | +| sensor | LightSensor | All sensors that have `lm` or `lx` as their `unit_of_measurement` or `illuminance` as their `device_class` | | switch / remote / input_boolean / script | Switch | All represented as switches. | diff --git a/source/_components/sensor.markdown b/source/_components/sensor.markdown index d973c2442e..647f0e7ab0 100644 --- a/source/_components/sensor.markdown +++ b/source/_components/sensor.markdown @@ -20,6 +20,7 @@ The way these sensors are displayed in the frontend can be modified in the [cust - **None**: Generic sensor. This is the default and doesn't need to be set. - **battery**: Percentage of battery that is left. - **humidity**: Percentage of humidity in the air. +- **illuminance**: The current light level in lx or lm. - **temperature**: Temperature in °C or °F.

From 69405f1edc24dfea0342bc10b0c90678acedb6e8 Mon Sep 17 00:00:00 2001 From: Lukas Barth Date: Sat, 5 May 2018 19:05:15 +0200 Subject: [PATCH 47/71] Add matrix documentation (#5019) * Add matrix documentation * Try to use new config tags * Use new config tag * :arrow_up: Added ha_version tag * :arrow_up: ha_release -> 0.68 * update version number --- source/_components/matrix.markdown | 136 ++++++++++++++++++++++ source/_components/notify.matrix.markdown | 10 +- 2 files changed, 138 insertions(+), 8 deletions(-) create mode 100644 source/_components/matrix.markdown diff --git a/source/_components/matrix.markdown b/source/_components/matrix.markdown new file mode 100644 index 0000000000..1047d54053 --- /dev/null +++ b/source/_components/matrix.markdown @@ -0,0 +1,136 @@ +--- +layout: page +title: "Matrix" +description: "Matrix chatbot support" +date: 2018-03-25 18:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: matrix.png +ha_category: Hub +ha_version: 0.69 +--- + +This component allows you to send messages to matrix rooms, as well as to react to messages in matrix rooms. Reacting to commands is accomplished by firing an event when one of the configured commands is triggered. + +```yaml +# Example configuration.yaml entry +matrix: + homeserver: https://matrix.org + username: "@my_matrix_user:matrix.org" + password: supersecurepassword + rooms: + - "#hasstest:matrix.org" + commands: + - word: my_command + name: my_command +``` + +Configuration variables: + +{% configuration %} +username: + description: "The matrix username that home assistant should use to log in. *Note*: You must specify a full matrix ID here, including the homeserver domain, e.g. '@my_matrix_bot:matrix.org'. Please note also that the '@' character has a special meaning in YAML, so this must always be given in quotes." + required: true + type: string +password: + description: The password for your Matrix account. + required: true + type: string +homeserver: + description: "The full URL for your homeserver. If you use the defauls matrix.org homeserver, this is 'https://matrix.org'." + required: true + type: string +verify_ssl: + description: Verify the homeservers certificate. + required: false + type: string + default: true +rooms: + description: "The list of rooms that the bot should join and listen for commands (see below) in. While you can limit the list of rooms that a certain command applies to on a per-command basis (see below), you must still list all rooms here that commands should be received in. Rooms can be given either by their internal ID (e.g., '!cURbafjkfsMDVwdRDQ:matrix.org') or any of their aliases (e.g., '#matrix:matrix.org')." + required: false + type: [string] + default: empty +commands: + description: "A list of commands that the bot should listen for. If a command is triggered (via its *word* or *expression*, see below), an event is fired that you can handle using automations. Every command consists of these possible configuration options:" + required: false + type: map + default: empty + keys: + word: + description: "Specifies a word that the bot should listen for. If you specify 'my_command' here, the bot will react to any message starting with '!my_command'." + required: false + type: string + expression: + description: "Specifies a regular expression (in python regexp syntax) that the bot should listen to. The bot will react to any message that matches the regular expression." + required: false + type: string + name: + description: "The name of the command. This will be an attribute of the event that is fired when this command triggers." + required: true + type: string + rooms: + description: "A list of rooms that the bot should listen for this command in. If this is not given, the *rooms* list from the main config is used. Please note that every room in this list must also be in the main *room* config." + required: false + type: [string] + default: empty +{% endconfiguration %} + +### {% linkable_title Event Data %} + +If a command is triggered, a `matrix_command` event is fired. The event contains the name of the command in the `name` field. If the command is a word command that has no name set, the `name` field contains the word instead. + +If the command is a word command, the `data` field contains a list of the command's arguments, i.e., everything that stood behind the word, split at spaces. If the command is an expression command, the `data` field contains the [group dictionary](https://docs.python.org/3.6/library/re.html?highlight=re#re.match.groupdict) of the regular expression that matched the message. + +### {% linkable_title Comprehensive Configuration Example %} + +This example also uses the [matrix `notify` platform](/components/notify.matrix/). + +```yaml +# The Matrix component +matrix: + homeserver: https://matrix.org + username: "@my_matrix_user:matrix.org" + password: supersecurepassword + rooms: + - "#hasstest:matrix.org" + - "#someothertest:matrix.org" + commands: + - word: testword + rooms: + - "#someothertest:matrix.org" + - expression: "My name is (?P.*)" + name: introduction + +notify: + - name: matrix_notify + platform: matrix + default_room: "#hasstest:matrix.org" + +automation: + - alias: 'React to !testword' + trigger: + platform: event + event_type: matrix_command + event_data: + command: testword + action: + service: notify.matrix_notify + data: + message: 'It looks like you wrote !testword' + - alias: 'React to an introduction' + trigger: + platform: event + event_type: matrix_command + event_data: + command: introduction + action: + service: notify.matrix_notify + data_template: + message: "Hello {{trigger.event.data.name}}" +``` + +This configuration will: +- Listen for "!testword" in the room "#someothertest:matrix.org" (and *only*) there. If such a message is encountered, it will answer with "It looks like you wrote !testword" into the "#hasstest:matrix.org" channel. +- Listen in both rooms for any message matching "My name is " and answer with "Hello " into "#hasstest:matrix.org". diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index 2d9aff6a04..29890d46c8 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -17,27 +17,21 @@ The `matrix` platform allows you to deliver notifications from Home Assistant to ## {% linkable_title Configuration %} -To enable Matrix notifications in your installation, add the following to your `configuration.yaml` file: +To enable Matrix notifications in your installation, you first need to configure +the [Matrix component](/components/matrix/). Then, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME platform: matrix - homeserver: HOMESERVER - username: YOUR_USERNAME - password: YOUR_PASSWORD default_room: ROOM_ID_OR_ALIAS ``` 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`. -- **homeserver** (*Required*): The base URL of the homeserver, where the notifier account is registered (e.g., `https://matrix.org`). -- **username** (*Required*): The username of the notifying Matrix account. -- **password** (*Required*): The password for the given Matrix account. - **default_room** (*Required*): The room all messages will be sent to, when no other target is given. -- **verify_ssl** (*Optional*): Verify the homeservers certificate. Defaults to `true`. The target room has to be precreated, the room id can be obtained from the rooms settings dialog. Rooms by default have a canonical id of the form `"!:homeserver.tld"`, but can also be allocated aliases like `"#roomname:homeserver.tld"`. Make sure to use quotes around the room id or alias to escape special characters (`!`, and `#`) in YAML. The notifying account may need to be invited to the room, depending on the individual rooms policies. From ba630fb068bec34736d3a9e8cf4135d1dfa48223 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Sat, 5 May 2018 19:05:49 +0200 Subject: [PATCH 48/71] Updated Sensor device_class requirement - HomeKit (#5304) * HomeKit - sensor device_class requirement * Limit breaking change to Humidity Sensor --- source/_components/homekit.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index c50ce9b6be..bb2b4649f8 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -202,8 +202,8 @@ The following components are currently supported: | cover | WindowCovering | All covers that support `open_cover`, `stop_cover` and `close_cover` through value mapping. (`open` -> `>70`; `close` -> `<30`; `stop` -> every value in between) | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | -| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | -| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` or `humidity` as their `device_class`. | +| sensor | TemperatureSensor | All sensors that have `Celsius` or `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | +| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` and `humidity` as their `device_class`. | | sensor | AirQualitySensor | All sensors that have `pm25` as part of their `entity_id` or `pm25` as their `device_class` | | sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `co2` as their `device_class` | | sensor | LightSensor | All sensors that have `lm` or `lx` as their `unit_of_measurement` or `illuminance` as their `device_class` | From 8187c4aebe4fc0edc551ed2f508ec15748e89bbc Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Sat, 5 May 2018 19:06:14 +0200 Subject: [PATCH 49/71] Add sensor.postnl documentation (#5231) * Add sensor.postnl documentation * Update ha_release --- source/_components/sensor.postnl.markdown | 47 ++++++++++++++++++++++ source/images/supported_brands/postnl.png | Bin 0 -> 190385 bytes 2 files changed, 47 insertions(+) create mode 100644 source/_components/sensor.postnl.markdown create mode 100644 source/images/supported_brands/postnl.png diff --git a/source/_components/sensor.postnl.markdown b/source/_components/sensor.postnl.markdown new file mode 100644 index 0000000000..3087ce4b01 --- /dev/null +++ b/source/_components/sensor.postnl.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: PostNL Sensor +description: "Instructions on how to set up PostNL sensors within Home Assistant." +date: 2017-04-22 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: postnl.png +ha_category: Sensor +ha_release: 0.69 +ha_iot_class: "Cloud Polling" +--- + +The `postnl` platform allows one to track deliveries by [PostNL](https://www.postnl.nl) (Dutch Postal Services). To use this sensor, you need a [PostNL Account](https://jouw.postnl.nl). It is possible to add multiple accounts to your Home Assistant configuration. + +## {% linkable_title Configuration %} + +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +sensors: + - platform: postnl + username: POSTNL_USERNAME + password: POSTNL_PASSWORD +``` + +{% configuration %} +name: + description: Sensor name + required: false + default: "postnl" + type: string +username: + description: Account username of jouw.postnl.nl + required: true + type: string +password: + description: Account password of jouw.postnl.nl + required: true + type: string +{% endconfiguration %} + +

+This component is not affiliated with PostNL and retrieves date from the endpoints of the mobile application. Use at your own risk. +

diff --git a/source/images/supported_brands/postnl.png b/source/images/supported_brands/postnl.png new file mode 100644 index 0000000000000000000000000000000000000000..93d54db18c92d5d4513e65a159d7a9074266aeb6 GIT binary patch literal 190385 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%0A-a$wDl-R6sc!u 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 Date: Sat, 5 May 2018 19:06:35 +0200 Subject: [PATCH 50/71] Netgear: doc for tracking devices on APs, URL support and autodetection (#4958) --- .../_components/device_tracker.netgear.markdown | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/source/_components/device_tracker.netgear.markdown b/source/_components/device_tracker.netgear.markdown index f8dace0e12..8bdcacc8cd 100644 --- a/source/_components/device_tracker.netgear.markdown +++ b/source/_components/device_tracker.netgear.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Local Polling" ha_release: pre 0.7 --- - This platform allows you to detect presence by looking at connected devices to a [Netgear](http://www.netgear.com/) device. To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -29,10 +28,18 @@ device_tracker: Configuration variables: -- **host** (*Optional*): The IP address of your router, e.g., `192.168.1.1`. If not provided `routerlogin.net` will be used. -- **username** (*Optional*): The username of an user with administrative privileges. If not provided `admin` will be used. -- **port** (*Optional*): The port your router communicates with (defaults to `5000`, but `80` is also known to be used on some models). +- **url** (*Optional*): The base URL, e.g., `http://routerlogin.com:5000` for example. If not provided `host` and `port` are used. If none provided autodetection of the URL will be used. +- **host** (*Optional*): The IP address of your router, e.g., `192.168.1.1`. +- **port** (*Optional*): The port your router communicates with. +- **username** (*Optional*): The username of a user with administrative privileges. If not provided `admin` will be used. - **password** (*Required*): The password for your given admin account. +- **devices** (*Optional*): If provided only specified devices will be reported. Can be MAC address or the device name as reported in the Netgear UI. +- **exclude** (*Optional*): Devices to exclude from the scan. +- **accesspoints** (*Optional*): Also track devices on the specified APs. Only supports MAC address. + +When `accesspoints` is specified an extra device will be reported for each device connected to the APs specified here, as `MY-LAPTOP on RBS40`. `Router` will be reported as AP name for the main AP. Only tested with Orbi. + +The use of `devices` or `exclude` is recommended when using `accesspoints` to avoid having a lot of entries. List of models that are known to use port 80: - Nighthawk X4S - AC2600 (R7800) From 65ab88cd5d5b8af9bb3b478da9793ea426d4abc9 Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Sat, 5 May 2018 13:07:24 -0400 Subject: [PATCH 51/71] Add Socialblade Markdown (#5237) * Adding markdown and imagie for USCIS sensor * Update the markdown * Update sensor.uscis.markdown * Update sensor.uscis.markdown * Update sensor.uscis.markdown * Minor changes * Add :markdown for social blade * Update links * Update links * Update sensor.uscis.markdown * Remove USCIS docmenetation from this branch * Update sensor.socialblade.markdown * Update sensor.socialblade.markdown --- .../_components/sensor.socialblade.markdown | 37 ++++++++++++++++++ .../images/supported_brands/socialblade.png | Bin 0 -> 4952 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_components/sensor.socialblade.markdown create mode 100644 source/images/supported_brands/socialblade.png diff --git a/source/_components/sensor.socialblade.markdown b/source/_components/sensor.socialblade.markdown new file mode 100644 index 0000000000..cf106c9133 --- /dev/null +++ b/source/_components/sensor.socialblade.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: Social Blade Sensor +description: "Instructions on how to set up Social Blade Sensor within Home Assistant." +date: 2018-04-23 08:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: socialblade.png +ha_category: Sensor +ha_release: 0.69 +ha_iot_class: "Cloud Polling" +--- + +The `socialblade` sensor component allows you get updates on a youtube channel using your social blade channel id. The sensor gets the subscribers and total views count from [Social Blade Website]( https://socialblade.com/) + +to get the channel id you can go to [Social Blade Website]( https://socialblade.com/) and search for youtube channel by username, then select the channel and grab the id from the url. +The channel id will be the last part of the url : +https://socialblade.com/youtube/channel/{channel_id} + +## Example for `configuration.yaml` : + +```yaml +sensor: + - platform: socialblade + channel_id: YOUR_CHANNEL_NUMBER +``` + +{% configuration %} +channel_id: + description: channel id number optained from the URL when you access Social Blade web client. + required: true + type: string +{% endconfiguration %} + +All the data will be fetch from [Social Blade]( https://socialblade.com/). diff --git a/source/images/supported_brands/socialblade.png b/source/images/supported_brands/socialblade.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2de38de204215a25dc517c58b69b4706d21250 GIT binary patch literal 4952 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 literal 0 HcmV?d00001 From 5a9d5c54275cdd5bf8d39ab0b948e03eeead3d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20=C3=98stergaard=20Nielsen?= Date: Sat, 5 May 2018 19:11:47 +0200 Subject: [PATCH 52/71] Added update_interval to maxcube (#5265) * Added update_interval to maxcube * Renamed update_interval to scan_interval * Update maxcube.markdown --- source/_components/maxcube.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/maxcube.markdown b/source/_components/maxcube.markdown index 69713a6469..7439d2d19f 100644 --- a/source/_components/maxcube.markdown +++ b/source/_components/maxcube.markdown @@ -58,4 +58,9 @@ maxcube: required: false type: int default: 62910 + scan_interval: + description: The update interval in seconds + required: false + type: int + default: 300 {% endconfiguration %} From 78f19d989a247e2bcb3b368a85ac94ff067ef25b Mon Sep 17 00:00:00 2001 From: Jason Kingsbury Date: Sat, 5 May 2018 18:12:10 +0100 Subject: [PATCH 53/71] Add max_volume option to Onkyo media player (#5153) * Update media_player.onkyo.markdown * onkyo: removed optional value from sample config, update max_volume documentation to include required volume range --- source/_components/media_player.onkyo.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index 13a50152dc..19854cfe60 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -39,6 +39,10 @@ name: description: Name of the device. (*Required if host is specified*) required: false type: string +max_volume: + description: Maximum volume. Defaults to 80. + required: false + type: number sources: description: A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. required: false From 50775dc3b172d1ac7fa32735cc8b3af9cdb41e55 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 5 May 2018 13:34:58 -0400 Subject: [PATCH 54/71] Add blog post 0.69 draft --- _config.yml | 8 +- source/_posts/2018-05-11-release-69.markdown | 437 +++++++++++++++++++ 2 files changed, 441 insertions(+), 4 deletions(-) create mode 100644 source/_posts/2018-05-11-release-69.markdown diff --git a/_config.yml b/_config.yml index 502ae90635..45147f16ca 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 68 -current_patch_version: 1 -date_released: 2018-04-30 +current_minor_version: 69 +current_patch_version: 0 +date_released: 2018-05-11 # 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-0681---april-30" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-05-11-release-69.markdown b/source/_posts/2018-05-11-release-69.markdown new file mode 100644 index 0000000000..988d2b6cca --- /dev/null +++ b/source/_posts/2018-05-11-release-69.markdown @@ -0,0 +1,437 @@ +--- +layout: post +title: "0.69: TBD - Update date" +description: "TBD." +date: 2018-05-05 00:01:00 +date_formatted: "May 11, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-05-0.69/components.png +--- + + + +## {% linkable_title New Platforms %} + +- New sensor domain expiry ([@masarliev] - [#14067]) ([sensor.domain_expiry docs]) (new-platform) +- Support Xiaomi Mijia Bluetooth Wireless Temperature and Humidity Sensor ([@ratcashdev] - [#13955]) ([sensor.mitemp_bt docs]) (new-platform) +- Move RainMachine to component/hub model ([@bachya] - [#14085]) ([rainmachine docs]) ([switch.rainmachine docs]) (breaking change) (new-platform) +- Foundation for users ([@balloob] - [#13968]) ([auth docs]) ([http docs]) (new-platform) +- Add Social Blade Sensor ([@meauxt] - [#14060]) ([sensor.socialblade docs]) ([sensor.uscis docs]) (new-platform) +- Add PostNL sensor (Dutch Postal Services) ([@iMicknl] - [#12366]) ([sensor.postnl docs]) (new-platform) +- Issue/add template fans ([@giangvo] - [#12027]) ([fan.template docs]) (new-platform) +- Matrix Chatbot ([@tinloaf] - [#13355]) ([matrix docs]) ([notify docs]) (breaking change) (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 %} + +- Pollen.com: Added attributes on top 3 allergens ([@bachya] - [#14018]) ([sensor.pollen docs]) (breaking change) +- Add Sonos device attribute with grouping information ([@amelchio] - [#13553]) ([media_player.sonos docs]) (breaking change) +- Re-implement HomematicIP cloud to async ([@mxworm] - [#13468]) ([homematicip_cloud docs]) ([sensor.homematicip_cloud docs]) (breaking change) +- Move RainMachine to component/hub model ([@bachya] - [#14085]) ([rainmachine docs]) ([switch.rainmachine docs]) (breaking change) (new-platform) +- System log: make firing event optional ([@balloob] - [#14102]) ([system_log docs]) (breaking change) +- Disable eliqonline requirement ([@balloob] - [#14156]) ([sensor.eliqonline docs]) (breaking change) +- Custom component loading cleanup ([@balloob] - [#14211]) (breaking change) +- Converts RainMachine to hub model (part 2) ([@bachya] - [#14225]) ([rainmachine docs]) ([switch.rainmachine docs]) (breaking change) +- Homekit: Changed device_class requirement Humidity Sensor ([@cdce8p] - [#14277]) ([homekit docs]) (breaking change) +- Sensor device classes ([@cdce8p] - [#14282]) ([sensor docs]) (breaking change) +- Matrix Chatbot ([@tinloaf] - [#13355]) ([matrix docs]) ([notify docs]) (breaking change) (new-platform) + +## {% linkable_title All changes %} + +- Pollen.com: Added attributes on top 3 allergens ([@bachya] - [#14018]) ([sensor.pollen docs]) (breaking change) +- Expose the condition code on condition sensors ([@maddox] - [#14011]) ([sensor.yweather docs]) +- upgrade rfxtrx lib, dimming support for Lighting3 ([@danielhiversen] - [#14026]) ([rfxtrx docs]) +- Add Accuracy to Google Location Sharing ([@rdbahm] - [#14039]) ([device_tracker docs]) +- bump gogogate2 version ([@dlbroadfoot] - [#14044]) ([cover.gogogate2 docs]) +- device_tracker.ubus: catch ConnectionError ([@stintel] - [#14045]) ([device_tracker docs]) +- Show a notification when a config entry is discovered ([@balloob] - [#14022]) +- deCONZ use forward entry setup ([@Kane610] - [#13990]) ([binary_sensor docs]) ([deconz docs]) ([scene docs]) ([sensor docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([scene.deconz docs]) ([sensor.deconz docs]) +- Bump pyEight version to update API & reduce connection issues ([@mezz64] - [#14058]) ([eight_sleep docs]) +- Bump locationsharinglib to 1.2.2 ([@thelittlefireman] - [#14070]) ([device_tracker docs]) +- Remove excessive debugging in webostv module ([@stephanerosi] - [#14056]) ([media_player.webostv docs]) +- Support new Xiaomi Aqara device model names and LAN protocol 2.0 ([@ileler] - [#13540]) ([xiaomi_aqara docs]) ([binary_sensor.xiaomi_aqara docs]) ([light.xiaomi_aqara docs]) ([sensor.xiaomi_aqara docs]) ([switch.xiaomi_aqara docs]) +- Add devices to Tahoma ([@bakedraccoon] - [#14075]) ([tahoma docs]) ([cover.tahoma docs]) ([sensor.tahoma docs]) +- New sensor domain expiry ([@masarliev] - [#14067]) ([sensor.domain_expiry docs]) (new-platform) +- Modify weather components for "new" frontend card ([@c727] - [#14076]) ([weather.buienradar docs]) ([weather.darksky docs]) ([weather.openweathermap docs]) +- Add Sonos device attribute with grouping information ([@amelchio] - [#13553]) ([media_player.sonos docs]) (breaking change) +- Re-implement HomematicIP cloud to async ([@mxworm] - [#13468]) ([homematicip_cloud docs]) ([sensor.homematicip_cloud docs]) (breaking change) +- Update pyhomematic to 0.1.42 ([@danielperna84] - [#14095]) ([homematic docs]) +- Adds update file_path service to local_file camera ([@robmarkcole] - [#13976]) ([camera.local_file docs]) +- Zone component config entry support ([@Kane610] - [#14059]) ([zone docs]) +- Improve MQTT topic validation ([@OttoWinter] - [#14099]) ([mqtt docs]) +- Fix the optional friendly name of the Yeelight (Closes: #14088) ([@syssi] - [#14110]) ([light.yeelight docs]) +- Update QNAP lib to 0.2.6; handle null temps gracefully ([@colinodell] - [#14117]) ([sensor.qnap docs]) +- Support Xiaomi Mijia Bluetooth Wireless Temperature and Humidity Sensor ([@ratcashdev] - [#13955]) ([sensor.mitemp_bt docs]) (new-platform) +- Upgrade colorlog to 3.1.4 ([@fabaff] - [#14132]) +- Move RainMachine to component/hub model ([@bachya] - [#14085]) ([rainmachine docs]) ([switch.rainmachine docs]) (breaking change) (new-platform) +- Add support for light sensors with 'lx' unit to HomeKit ([@bieniu] - [#14131]) ([homekit docs]) +- Upgrade restrictedpython to 4.0b3 ([@fabaff] - [#14140]) ([python_script docs]) +- Logitech Pop support for emulated_hue component ([@dgraye] - [#12833]) ([emulated_hue docs]) +- Bump pyvizio to 0.0.3 ([@cgarwood] - [#14147]) ([media_player.vizio docs]) +- System log: make firing event optional ([@balloob] - [#14102]) ([system_log docs]) (breaking change) +- Upgrade pylast to 2.2.0 ([@fabaff] - [#14139]) ([sensor.lastfm docs]) +- Upgrade sqlalchemy to 1.2.7 ([@fabaff] - [#14138]) +- Upgrade tapsaff to 0.2.0 ([@fabaff] - [#14137]) ([binary_sensor.tapsaff docs]) +- Upgrade python-telegram-bot to 10.0.2 ([@fabaff] - [#14144]) +- Upgrade youtube_dl to 2018.04.25 ([@fabaff] - [#14136]) ([media_extractor docs]) +- Clean up HomeKit accessory information characteristics ([@schmittx] - [#14114]) ([homekit docs]) +- Upgrade psutil to 5.4.5 ([@fabaff] - [#14135]) +- Fixed datetime values ([@gives1976] - [#14153]) ([sensor.sql docs]) +- deluge-components-update ([@engrbm87] - [#14016]) ([sensor.deluge docs]) ([switch.deluge docs]) +- Light mqtt_json: Add HS color support ([@OttoWinter] - [#14029]) ([light.mqtt_json docs]) +- Convert more files to async/await syntax ([@OttoWinter] - [#14142]) +- Disable eliqonline requirement ([@balloob] - [#14156]) ([sensor.eliqonline docs]) (breaking change) +- deCONZ allow unloading of config entry ([@Kane610] - [#14115]) ([binary_sensor docs]) ([deconz docs]) ([scene docs]) ([sensor docs]) +- Upgrade netdisco to 1.4.0 ([@fabaff] - [#14152]) +- Add precipitation to OpenWeatherMap forecast ([@escoand] - [#13971]) ([weather.openweathermap docs]) +- Allow transitioning to colour temp for tradfri ([@Hate-Usernames] - [#14157]) +- Added update_interval to maxcube ([@dingusdk] - [#14143]) ([maxcube docs]) +- zha: Support remotes/buttons ([@rcloran] - [#12528]) ([zha docs]) ([binary_sensor.zha docs]) +- Upgrade numpy to 1.14.3 ([@fabaff] - [#14187]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) +- Updating darksky default update interval to 5 mins ([@msubra] - [#14195]) ([sensor.darksky docs]) +- Fix TypeError on round(self.humidity) (fixes #13116) ([@mvn23] - [#14174]) ([weather docs]) +- Add room hint support to Google Assistant cloud ([@balloob] - [#14180]) +- Update CODEOWNERS ([@pschmitt] - [#14214]) +- Fixes #14169 (Upgrade pyupnp-async to 0.1.0.2) ([@dgomes] - [#14210]) ([upnp docs]) +- zha: Clean up binary_sensor listener registration/state updates ([@rcloran] - [#14197]) +- HomematicIP cloud: Add logic to check accesspoint connection state ([@sander76] - [#14203]) ([homematicip_cloud docs]) +- Foundation for users ([@balloob] - [#13968]) ([auth docs]) ([http docs]) (new-platform) +- Allow easy extension of websocket API ([@balloob] - [#14186]) ([frontend docs]) ([websocket_api docs]) +- Change the divisor for total consumption output ([@CM000n] - [#14215]) ([switch.fritzbox docs]) +- Upgrade mypy to 0.590 ([@fabaff] - [#14207]) +- Template Sensor add device_class support ([@OttoWinter] - [#14034]) ([sensor.template docs]) +- Add more parameters for DSMR sensor ([@rubenvandeven] - [#13967]) ([sensor.dsmr docs]) +- Support setting explicit mute value for Panasonic Viera TV ([@blackwind] - [#13954]) ([media_player.panasonic_viera docs]) +- Allow to set a desired update interval for camera_proxy_stream view ([@NovapaX] - [#13350]) ([camera docs]) +- panasonic_viera: Provide unique_id from SSDP UDN, if available ([@scop] - [#13541]) ([media_player.panasonic_viera docs]) +- Custom component loading cleanup ([@balloob] - [#14211]) (breaking change) +- Buienradar improvements: continuous sensors and unique ID's ([@corneyl] - [#13249]) ([sensor.buienradar docs]) +- add volumio discovery ([@escoand] - [#14220]) ([media_player.volumio docs]) +- Converts RainMachine to hub model (part 2) ([@bachya] - [#14225]) ([rainmachine docs]) ([switch.rainmachine docs]) (breaking change) +- Add MQTT Sensor device_class ([@OttoWinter] - [#14033]) ([sensor.mqtt docs]) +- Allow independent control of white level on flux_led component ([@oblogic7] - [#13985]) ([light.flux_led docs]) +- Add Social Blade Sensor ([@meauxt] - [#14060]) ([sensor.socialblade docs]) ([sensor.uscis docs]) (new-platform) +- UPnP code cleanup ([@dgomes] - [#14235]) ([upnp docs]) ([sensor.upnp docs]) +- Improve config schema of the blackbird component ([@syssi] - [#14007]) ([media_player.blackbird docs]) +- Add support for tracking devices on Netgear access points ([@MatMaul] - [#13331]) ([device_tracker docs]) +- WUnderground unique ids ([@OttoWinter] - [#13311]) ([sensor.wunderground docs]) +- Add PostNL sensor (Dutch Postal Services) ([@iMicknl] - [#12366]) ([sensor.postnl docs]) (new-platform) +- python_openzwave update config service ([@perosb] - [#12060]) ([zwave docs]) +- Add unique_id to zwave node entity ([@andrey-git] - [#14201]) ([zwave docs]) +- Add prereqs for HomeKit Controller ([@marthoc] - [#14172]) +- Restores switch state, case the switch is optimistic ([@dgomes] - [#14151]) ([switch.mqtt docs]) +- Issue/add template fans ([@giangvo] - [#12027]) ([fan.template docs]) (new-platform) +- HomeKit - Climate: power state on/off support ([@roiff] - [#14082]) ([homekit docs]) +- Demo Sensor - Added device_class support ([@cdce8p] - [#14269]) ([sensor.demo docs]) +- Re-enable eliqonline requirement ([@molobrakos] - [#14265]) ([sensor.eliqonline docs]) +- Add fetching camera thumbnails over websocket ([@balloob] - [#14231]) ([camera docs]) ([frontend docs]) ([image_processing docs]) ([microsoft_face docs]) ([websocket_api docs]) +- Allow fetching media player covers via websocket connection ([@balloob] - [#14233]) ([media_player docs]) +- Fix ZWave light brightness ([@cdce8p] - [#14261]) ([light.zwave docs]) +- fix check config not working after #14211 ([@fanthos] - [#14259]) +- Issue Template Fix CRLF ([@OttoWinter] - [#14283]) +- Upgrade attrs to 18.1.0 ([@fabaff] - [#14281]) +- Update HAP-python to 2.0.0 ([@cdce8p] - [#14278]) ([homekit docs]) +- Upgrade holidays to 0.9.5 ([@fabaff] - [#14274]) ([binary_sensor.workday docs]) +- Homekit: Changed device_class requirement Humidity Sensor ([@cdce8p] - [#14277]) ([homekit docs]) (breaking change) +- HomeKit: Support triggered state for alarm_control_panel ([@schmittx] - [#14285]) ([homekit docs]) +- Upgrade astral to 1.6.1 ([@fabaff] - [#14297]) +- BOM Weather throttle fix ([@nickw444] - [#14234]) ([sensor.bom docs]) +- Publish attributes unconditionally ([@blackwind] - [#14179]) ([mqtt_statestream docs]) +- Sensor device classes ([@cdce8p] - [#14282]) ([sensor docs]) (breaking change) +- Matrix Chatbot ([@tinloaf] - [#13355]) ([matrix docs]) ([notify docs]) (breaking change) (new-platform) +- deCONZ add new device without restart ([@Kane610] - [#14221]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([sensor.deconz docs]) +- Add alarmdotcom sensor status ([@jnewland] - [#14254]) ([alarm_control_panel.alarmdotcom docs]) +- Add domain to labels and count state changes to Prometheus ([@jnewland] - [#14253]) ([prometheus docs]) +- Add support for max_volume ([@relvacode] - [#13822]) ([media_player.onkyo docs]) +- Refactor ImageProcessingFaceEntity ([@robmarkcole] - [#14296]) ([image_processing docs]) ([image_processing.demo docs]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) ([image_processing.microsoft_face_detect docs]) ([image_processing.microsoft_face_identify docs]) +- Onkyo: SUPPORT_VOLUME_STEP ([@rsmeral] - [#14299]) ([media_player.onkyo docs]) +- Add All-Linking capabilities ([@teharris1] - [#14065]) ([insteon_plm docs]) ([binary_sensor.insteon_plm docs]) ([fan.insteon_plm docs]) ([light.insteon_plm docs]) ([sensor.insteon_plm docs]) ([switch.insteon_plm docs]) + +[#12027]: https://github.com/home-assistant/home-assistant/pull/12027 +[#12060]: https://github.com/home-assistant/home-assistant/pull/12060 +[#12366]: https://github.com/home-assistant/home-assistant/pull/12366 +[#12528]: https://github.com/home-assistant/home-assistant/pull/12528 +[#12833]: https://github.com/home-assistant/home-assistant/pull/12833 +[#13249]: https://github.com/home-assistant/home-assistant/pull/13249 +[#13311]: https://github.com/home-assistant/home-assistant/pull/13311 +[#13331]: https://github.com/home-assistant/home-assistant/pull/13331 +[#13350]: https://github.com/home-assistant/home-assistant/pull/13350 +[#13355]: https://github.com/home-assistant/home-assistant/pull/13355 +[#13468]: https://github.com/home-assistant/home-assistant/pull/13468 +[#13540]: https://github.com/home-assistant/home-assistant/pull/13540 +[#13541]: https://github.com/home-assistant/home-assistant/pull/13541 +[#13553]: https://github.com/home-assistant/home-assistant/pull/13553 +[#13822]: https://github.com/home-assistant/home-assistant/pull/13822 +[#13954]: https://github.com/home-assistant/home-assistant/pull/13954 +[#13955]: https://github.com/home-assistant/home-assistant/pull/13955 +[#13967]: https://github.com/home-assistant/home-assistant/pull/13967 +[#13968]: https://github.com/home-assistant/home-assistant/pull/13968 +[#13971]: https://github.com/home-assistant/home-assistant/pull/13971 +[#13976]: https://github.com/home-assistant/home-assistant/pull/13976 +[#13985]: https://github.com/home-assistant/home-assistant/pull/13985 +[#13990]: https://github.com/home-assistant/home-assistant/pull/13990 +[#14007]: https://github.com/home-assistant/home-assistant/pull/14007 +[#14011]: https://github.com/home-assistant/home-assistant/pull/14011 +[#14016]: https://github.com/home-assistant/home-assistant/pull/14016 +[#14018]: https://github.com/home-assistant/home-assistant/pull/14018 +[#14022]: https://github.com/home-assistant/home-assistant/pull/14022 +[#14026]: https://github.com/home-assistant/home-assistant/pull/14026 +[#14029]: https://github.com/home-assistant/home-assistant/pull/14029 +[#14033]: https://github.com/home-assistant/home-assistant/pull/14033 +[#14034]: https://github.com/home-assistant/home-assistant/pull/14034 +[#14039]: https://github.com/home-assistant/home-assistant/pull/14039 +[#14044]: https://github.com/home-assistant/home-assistant/pull/14044 +[#14045]: https://github.com/home-assistant/home-assistant/pull/14045 +[#14056]: https://github.com/home-assistant/home-assistant/pull/14056 +[#14058]: https://github.com/home-assistant/home-assistant/pull/14058 +[#14059]: https://github.com/home-assistant/home-assistant/pull/14059 +[#14060]: https://github.com/home-assistant/home-assistant/pull/14060 +[#14065]: https://github.com/home-assistant/home-assistant/pull/14065 +[#14067]: https://github.com/home-assistant/home-assistant/pull/14067 +[#14070]: https://github.com/home-assistant/home-assistant/pull/14070 +[#14075]: https://github.com/home-assistant/home-assistant/pull/14075 +[#14076]: https://github.com/home-assistant/home-assistant/pull/14076 +[#14082]: https://github.com/home-assistant/home-assistant/pull/14082 +[#14085]: https://github.com/home-assistant/home-assistant/pull/14085 +[#14095]: https://github.com/home-assistant/home-assistant/pull/14095 +[#14099]: https://github.com/home-assistant/home-assistant/pull/14099 +[#14102]: https://github.com/home-assistant/home-assistant/pull/14102 +[#14110]: https://github.com/home-assistant/home-assistant/pull/14110 +[#14114]: https://github.com/home-assistant/home-assistant/pull/14114 +[#14115]: https://github.com/home-assistant/home-assistant/pull/14115 +[#14117]: https://github.com/home-assistant/home-assistant/pull/14117 +[#14131]: https://github.com/home-assistant/home-assistant/pull/14131 +[#14132]: https://github.com/home-assistant/home-assistant/pull/14132 +[#14135]: https://github.com/home-assistant/home-assistant/pull/14135 +[#14136]: https://github.com/home-assistant/home-assistant/pull/14136 +[#14137]: https://github.com/home-assistant/home-assistant/pull/14137 +[#14138]: https://github.com/home-assistant/home-assistant/pull/14138 +[#14139]: https://github.com/home-assistant/home-assistant/pull/14139 +[#14140]: https://github.com/home-assistant/home-assistant/pull/14140 +[#14142]: https://github.com/home-assistant/home-assistant/pull/14142 +[#14143]: https://github.com/home-assistant/home-assistant/pull/14143 +[#14144]: https://github.com/home-assistant/home-assistant/pull/14144 +[#14147]: https://github.com/home-assistant/home-assistant/pull/14147 +[#14151]: https://github.com/home-assistant/home-assistant/pull/14151 +[#14152]: https://github.com/home-assistant/home-assistant/pull/14152 +[#14153]: https://github.com/home-assistant/home-assistant/pull/14153 +[#14156]: https://github.com/home-assistant/home-assistant/pull/14156 +[#14157]: https://github.com/home-assistant/home-assistant/pull/14157 +[#14172]: https://github.com/home-assistant/home-assistant/pull/14172 +[#14174]: https://github.com/home-assistant/home-assistant/pull/14174 +[#14179]: https://github.com/home-assistant/home-assistant/pull/14179 +[#14180]: https://github.com/home-assistant/home-assistant/pull/14180 +[#14186]: https://github.com/home-assistant/home-assistant/pull/14186 +[#14187]: https://github.com/home-assistant/home-assistant/pull/14187 +[#14195]: https://github.com/home-assistant/home-assistant/pull/14195 +[#14197]: https://github.com/home-assistant/home-assistant/pull/14197 +[#14201]: https://github.com/home-assistant/home-assistant/pull/14201 +[#14203]: https://github.com/home-assistant/home-assistant/pull/14203 +[#14207]: https://github.com/home-assistant/home-assistant/pull/14207 +[#14210]: https://github.com/home-assistant/home-assistant/pull/14210 +[#14211]: https://github.com/home-assistant/home-assistant/pull/14211 +[#14214]: https://github.com/home-assistant/home-assistant/pull/14214 +[#14215]: https://github.com/home-assistant/home-assistant/pull/14215 +[#14220]: https://github.com/home-assistant/home-assistant/pull/14220 +[#14221]: https://github.com/home-assistant/home-assistant/pull/14221 +[#14225]: https://github.com/home-assistant/home-assistant/pull/14225 +[#14231]: https://github.com/home-assistant/home-assistant/pull/14231 +[#14233]: https://github.com/home-assistant/home-assistant/pull/14233 +[#14234]: https://github.com/home-assistant/home-assistant/pull/14234 +[#14235]: https://github.com/home-assistant/home-assistant/pull/14235 +[#14253]: https://github.com/home-assistant/home-assistant/pull/14253 +[#14254]: https://github.com/home-assistant/home-assistant/pull/14254 +[#14259]: https://github.com/home-assistant/home-assistant/pull/14259 +[#14261]: https://github.com/home-assistant/home-assistant/pull/14261 +[#14265]: https://github.com/home-assistant/home-assistant/pull/14265 +[#14269]: https://github.com/home-assistant/home-assistant/pull/14269 +[#14274]: https://github.com/home-assistant/home-assistant/pull/14274 +[#14277]: https://github.com/home-assistant/home-assistant/pull/14277 +[#14278]: https://github.com/home-assistant/home-assistant/pull/14278 +[#14281]: https://github.com/home-assistant/home-assistant/pull/14281 +[#14282]: https://github.com/home-assistant/home-assistant/pull/14282 +[#14283]: https://github.com/home-assistant/home-assistant/pull/14283 +[#14285]: https://github.com/home-assistant/home-assistant/pull/14285 +[#14296]: https://github.com/home-assistant/home-assistant/pull/14296 +[#14297]: https://github.com/home-assistant/home-assistant/pull/14297 +[#14299]: https://github.com/home-assistant/home-assistant/pull/14299 +[@CM000n]: https://github.com/CM000n +[@Hate-Usernames]: https://github.com/Hate-Usernames +[@Kane610]: https://github.com/Kane610 +[@MatMaul]: https://github.com/MatMaul +[@NovapaX]: https://github.com/NovapaX +[@OttoWinter]: https://github.com/OttoWinter +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@bachya]: https://github.com/bachya +[@bakedraccoon]: https://github.com/bakedraccoon +[@balloob]: https://github.com/balloob +[@bieniu]: https://github.com/bieniu +[@blackwind]: https://github.com/blackwind +[@c727]: https://github.com/c727 +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@colinodell]: https://github.com/colinodell +[@corneyl]: https://github.com/corneyl +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dgomes]: https://github.com/dgomes +[@dgraye]: https://github.com/dgraye +[@dingusdk]: https://github.com/dingusdk +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@engrbm87]: https://github.com/engrbm87 +[@escoand]: https://github.com/escoand +[@fabaff]: https://github.com/fabaff +[@fanthos]: https://github.com/fanthos +[@giangvo]: https://github.com/giangvo +[@gives1976]: https://github.com/gives1976 +[@iMicknl]: https://github.com/iMicknl +[@ileler]: https://github.com/ileler +[@jnewland]: https://github.com/jnewland +[@maddox]: https://github.com/maddox +[@marthoc]: https://github.com/marthoc +[@masarliev]: https://github.com/masarliev +[@meauxt]: https://github.com/meauxt +[@mezz64]: https://github.com/mezz64 +[@molobrakos]: https://github.com/molobrakos +[@msubra]: https://github.com/msubra +[@mvn23]: https://github.com/mvn23 +[@mxworm]: https://github.com/mxworm +[@nickw444]: https://github.com/nickw444 +[@oblogic7]: https://github.com/oblogic7 +[@perosb]: https://github.com/perosb +[@pschmitt]: https://github.com/pschmitt +[@ratcashdev]: https://github.com/ratcashdev +[@rcloran]: https://github.com/rcloran +[@rdbahm]: https://github.com/rdbahm +[@relvacode]: https://github.com/relvacode +[@robmarkcole]: https://github.com/robmarkcole +[@roiff]: https://github.com/roiff +[@rsmeral]: https://github.com/rsmeral +[@rubenvandeven]: https://github.com/rubenvandeven +[@sander76]: https://github.com/sander76 +[@schmittx]: https://github.com/schmittx +[@scop]: https://github.com/scop +[@stephanerosi]: https://github.com/stephanerosi +[@stintel]: https://github.com/stintel +[@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 +[@thelittlefireman]: https://github.com/thelittlefireman +[@tinloaf]: https://github.com/tinloaf +[alarm_control_panel.alarmdotcom docs]: /components/alarm_control_panel.alarmdotcom/ +[auth docs]: /components/auth/ +[binary_sensor docs]: /components/binary_sensor/ +[binary_sensor.deconz docs]: /components/binary_sensor.deconz/ +[binary_sensor.insteon_plm docs]: /components/binary_sensor.insteon_plm/ +[binary_sensor.tapsaff docs]: /components/binary_sensor.tapsaff/ +[binary_sensor.trend docs]: /components/binary_sensor.trend/ +[binary_sensor.workday docs]: /components/binary_sensor.workday/ +[binary_sensor.xiaomi_aqara docs]: /components/binary_sensor.xiaomi_aqara/ +[binary_sensor.zha docs]: /components/binary_sensor.zha/ +[camera docs]: /components/camera/ +[camera.local_file docs]: /components/camera.local_file/ +[cover.gogogate2 docs]: /components/cover.gogogate2/ +[cover.tahoma docs]: /components/cover.tahoma/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[eight_sleep docs]: /components/eight_sleep/ +[emulated_hue docs]: /components/emulated_hue/ +[fan.insteon_plm docs]: /components/fan.insteon_plm/ +[fan.template docs]: /components/fan.template/ +[frontend docs]: /components/frontend/ +[homekit docs]: /components/homekit/ +[homematic docs]: /components/homematic/ +[homematicip_cloud docs]: /components/homematicip_cloud/ +[http docs]: /components/http/ +[image_processing docs]: /components/image_processing/ +[image_processing.demo docs]: /components/image_processing.demo/ +[image_processing.dlib_face_detect docs]: /components/image_processing.dlib_face_detect/ +[image_processing.dlib_face_identify docs]: /components/image_processing.dlib_face_identify/ +[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/ +[insteon_plm docs]: /components/insteon_plm/ +[light.deconz docs]: /components/light.deconz/ +[light.flux_led docs]: /components/light.flux_led/ +[light.insteon_plm docs]: /components/light.insteon_plm/ +[light.mqtt_json docs]: /components/light.mqtt_json/ +[light.xiaomi_aqara docs]: /components/light.xiaomi_aqara/ +[light.yeelight docs]: /components/light.yeelight/ +[light.zwave docs]: /components/light.zwave/ +[matrix docs]: /components/matrix/ +[maxcube docs]: /components/maxcube/ +[media_extractor docs]: /components/media_extractor/ +[media_player docs]: /components/media_player/ +[media_player.blackbird docs]: /components/media_player.blackbird/ +[media_player.onkyo docs]: /components/media_player.onkyo/ +[media_player.panasonic_viera docs]: /components/media_player.panasonic_viera/ +[media_player.sonos docs]: /components/media_player.sonos/ +[media_player.vizio docs]: /components/media_player.vizio/ +[media_player.volumio docs]: /components/media_player.volumio/ +[media_player.webostv docs]: /components/media_player.webostv/ +[microsoft_face docs]: /components/microsoft_face/ +[mqtt docs]: /components/mqtt/ +[mqtt_statestream docs]: /components/mqtt_statestream/ +[notify docs]: /components/notify/ +[prometheus docs]: /components/prometheus/ +[python_script docs]: /components/python_script/ +[rainmachine docs]: /components/rainmachine/ +[rfxtrx docs]: /components/rfxtrx/ +[scene docs]: /components/scene/ +[scene.deconz docs]: /components/scene.deconz/ +[sensor docs]: /components/sensor/ +[sensor.bom docs]: /components/sensor.bom/ +[sensor.buienradar docs]: /components/sensor.buienradar/ +[sensor.darksky docs]: /components/sensor.darksky/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.deluge docs]: /components/sensor.deluge/ +[sensor.demo docs]: /components/sensor.demo/ +[sensor.domain_expiry docs]: /components/sensor.domain_expiry/ +[sensor.dsmr docs]: /components/sensor.dsmr/ +[sensor.eliqonline docs]: /components/sensor.eliqonline/ +[sensor.homematicip_cloud docs]: /components/sensor.homematicip_cloud/ +[sensor.insteon_plm docs]: /components/sensor.insteon_plm/ +[sensor.lastfm docs]: /components/sensor.lastfm/ +[sensor.mitemp_bt docs]: /components/sensor.mitemp_bt/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.pollen docs]: /components/sensor.pollen/ +[sensor.postnl docs]: /components/sensor.postnl/ +[sensor.qnap docs]: /components/sensor.qnap/ +[sensor.socialblade docs]: /components/sensor.socialblade/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.tahoma docs]: /components/sensor.tahoma/ +[sensor.template docs]: /components/sensor.template/ +[sensor.upnp docs]: /components/sensor.upnp/ +[sensor.uscis docs]: /components/sensor.uscis/ +[sensor.wunderground docs]: /components/sensor.wunderground/ +[sensor.xiaomi_aqara docs]: /components/sensor.xiaomi_aqara/ +[sensor.yweather docs]: /components/sensor.yweather/ +[switch.deluge docs]: /components/switch.deluge/ +[switch.fritzbox docs]: /components/switch.fritzbox/ +[switch.insteon_plm docs]: /components/switch.insteon_plm/ +[switch.mqtt docs]: /components/switch.mqtt/ +[switch.rainmachine docs]: /components/switch.rainmachine/ +[switch.xiaomi_aqara docs]: /components/switch.xiaomi_aqara/ +[system_log docs]: /components/system_log/ +[tahoma docs]: /components/tahoma/ +[upnp docs]: /components/upnp/ +[weather docs]: /components/weather/ +[weather.buienradar docs]: /components/weather.buienradar/ +[weather.darksky docs]: /components/weather.darksky/ +[weather.openweathermap docs]: /components/weather.openweathermap/ +[websocket_api docs]: /components/websocket_api/ +[xiaomi_aqara docs]: /components/xiaomi_aqara/ +[zha docs]: /components/zha/ +[zone docs]: /components/zone/ +[zwave docs]: /components/zwave/ From e46a4d4f3f1fa5b67021e89bd11dbc25f3bcad8f Mon Sep 17 00:00:00 2001 From: Tom Harris Date: Sat, 5 May 2018 15:08:41 -0400 Subject: [PATCH 55/71] Describe the new services added (#5239) * Describe the new services added * Edits per review * UTF-8 error * UTF-8 Error * Convert to utf-8 --- source/_components/insteon_plm.markdown | 55 ++++++++++++++++++------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/source/_components/insteon_plm.markdown b/source/_components/insteon_plm.markdown index 58a1bad12c..9e15bb0f7d 100644 --- a/source/_components/insteon_plm.markdown +++ b/source/_components/insteon_plm.markdown @@ -63,26 +63,52 @@ a responder or a controller. In order for any two Insteon devices to talk with one another, they must be linked. For an overview of device linking please read the Insteon page on -[understanding linking]. Currently Insteon PLM does not support software -linking of devices. If you need software that can link your devices (if you -are using a USB Stick PLM for example), you can download [HouseLinc] which runs -on any Windows PC, or you can use [Insteon Terminal] which is open source and -runs on most platforms. HouseLinc is no longer supported by SmartHome but it -still works. Insteon Terminal is a very useful tool but please read the -disclaimers carefully, they are important. +[understanding linking]. The Insteon PLM module supports All-Linking through +[Development Tools] service calls. The following services are available: + +In order for any two Insteon devices to talk with one another, they must be +linked. For an overview of device linking, please read the Insteon page on +[understanding linking]. The Insteon PLM module supports All-Linking through +[Development Tools] service calls. The following services are available: +- **insteon_plm.add_all_link**: Tells the Insteon Modem (IM) start All-Linking +mode. Once the IM is in All-Linking mode, press the link button on the device +to complete All-Linking. +- **insteon_plm.delete_all_link**: Tells the Insteon Modem (IM) to remove an +All-Link record from the All-Link Database of the IM and a device. Once the IM +is set to delete the link, press the link button on the corresponding device +to complete the process. +- **insteon_plm.load_all_link_database**: Load the All-Link Database for a +device. WARNING - Loading a device All-Link database is very time consuming +and inconsistent. This may take a LONG time and may need to be repeated to +obtain all records. +- **insteon_plm.print_all_link_database**: Print the All-Link Database for a +device. Requires that the All-Link Database is loaded into memory. +- **insteon_plm.print_im_all_link_database**: Print the All-Link Database for +the INSTEON Modem (IM). + +If you are looking for more advanced options, you can use the +[insteonplm_interactive] command line tool that is distributed with the +[insteonplm] Python module. Please see the documentation on the [insteonplm] +GitHub site. Alternatively, you can download [HouseLinc] which runs on any +Windows PC, or you can use [Insteon Terminal] which is open source and runs +on most platforms. SmartHome no longer supports HouseLinc, but it still +works. Insteon Terminal is a very useful tool but please read the disclaimers +carefully, they are important. [understanding linking]: http://www.insteon.com/support-knowledgebase/2015/1/28/understanding-linking +[Development Tools]: https://www.home-assistant.io/docs/tools/dev-tools/ [HouseLinc]: https://www.smarthome.com/houselinc.html [Insteon Terminal]: https://github.com/pfrommerd/insteon-terminal +[insteonplm_interactive]: https://github.com/nugget/python-insteonplm#command-line-interface ### {% linkable_title Customization %} -The only configuration item that is absolutely necessary is the port so that -Home Assistant can connect to the PLM. This will expose all the supported INSTEON -devices which exist in the modem's ALL-Link database. However, devices will -only be shown by their INSTEON hex address (e.g., "1A.2B.3C") which can be a bit -unwieldy. As you link and unlink devices using the 'Set' buttons, they'll be -added and removed from Home Assistant automatically. +The only configuration item that is absolutely necessary is the port so that +Home Assistant can connect to the PLM. This will expose all the supported +INSTEON devices which exist in the modem’s ALL-Link database. However, devices +will only be shown by their INSTEON hex address (e.g., “1A.2B.3C”) which can +be a bit unwieldy. As you link and unlink devices using the ‘Set’ buttons, +they’ll be added and removed from Home Assistant automatically. You can use the normal Home Assistant [device customization] section of your configuration to assign friendly names and special icons to your devices. This @@ -123,7 +149,9 @@ insteon_plm: cat: 0x10 subcat: 0x11 ``` + ### {% linkable_title What NOT to do %} + Insteon PLM is a top level component and device discovery will identify the Home Assistant platform the device belongs in. As such, do not declare Insteon devices in other platforms. For example, this configuration @@ -134,4 +162,3 @@ light: - platform: insteon_plm address: 1a2b3c ``` - From 669b736ac16f32df427afa631258303d84c71a10 Mon Sep 17 00:00:00 2001 From: Tom Harris Date: Sat, 5 May 2018 15:08:41 -0400 Subject: [PATCH 56/71] Describe the new services added (#5239) * Describe the new services added * Edits per review * UTF-8 error * UTF-8 Error * Convert to utf-8 --- source/_components/insteon_plm.markdown | 55 ++++++++++++++++++------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/source/_components/insteon_plm.markdown b/source/_components/insteon_plm.markdown index 58a1bad12c..9e15bb0f7d 100644 --- a/source/_components/insteon_plm.markdown +++ b/source/_components/insteon_plm.markdown @@ -63,26 +63,52 @@ a responder or a controller. In order for any two Insteon devices to talk with one another, they must be linked. For an overview of device linking please read the Insteon page on -[understanding linking]. Currently Insteon PLM does not support software -linking of devices. If you need software that can link your devices (if you -are using a USB Stick PLM for example), you can download [HouseLinc] which runs -on any Windows PC, or you can use [Insteon Terminal] which is open source and -runs on most platforms. HouseLinc is no longer supported by SmartHome but it -still works. Insteon Terminal is a very useful tool but please read the -disclaimers carefully, they are important. +[understanding linking]. The Insteon PLM module supports All-Linking through +[Development Tools] service calls. The following services are available: + +In order for any two Insteon devices to talk with one another, they must be +linked. For an overview of device linking, please read the Insteon page on +[understanding linking]. The Insteon PLM module supports All-Linking through +[Development Tools] service calls. The following services are available: +- **insteon_plm.add_all_link**: Tells the Insteon Modem (IM) start All-Linking +mode. Once the IM is in All-Linking mode, press the link button on the device +to complete All-Linking. +- **insteon_plm.delete_all_link**: Tells the Insteon Modem (IM) to remove an +All-Link record from the All-Link Database of the IM and a device. Once the IM +is set to delete the link, press the link button on the corresponding device +to complete the process. +- **insteon_plm.load_all_link_database**: Load the All-Link Database for a +device. WARNING - Loading a device All-Link database is very time consuming +and inconsistent. This may take a LONG time and may need to be repeated to +obtain all records. +- **insteon_plm.print_all_link_database**: Print the All-Link Database for a +device. Requires that the All-Link Database is loaded into memory. +- **insteon_plm.print_im_all_link_database**: Print the All-Link Database for +the INSTEON Modem (IM). + +If you are looking for more advanced options, you can use the +[insteonplm_interactive] command line tool that is distributed with the +[insteonplm] Python module. Please see the documentation on the [insteonplm] +GitHub site. Alternatively, you can download [HouseLinc] which runs on any +Windows PC, or you can use [Insteon Terminal] which is open source and runs +on most platforms. SmartHome no longer supports HouseLinc, but it still +works. Insteon Terminal is a very useful tool but please read the disclaimers +carefully, they are important. [understanding linking]: http://www.insteon.com/support-knowledgebase/2015/1/28/understanding-linking +[Development Tools]: https://www.home-assistant.io/docs/tools/dev-tools/ [HouseLinc]: https://www.smarthome.com/houselinc.html [Insteon Terminal]: https://github.com/pfrommerd/insteon-terminal +[insteonplm_interactive]: https://github.com/nugget/python-insteonplm#command-line-interface ### {% linkable_title Customization %} -The only configuration item that is absolutely necessary is the port so that -Home Assistant can connect to the PLM. This will expose all the supported INSTEON -devices which exist in the modem's ALL-Link database. However, devices will -only be shown by their INSTEON hex address (e.g., "1A.2B.3C") which can be a bit -unwieldy. As you link and unlink devices using the 'Set' buttons, they'll be -added and removed from Home Assistant automatically. +The only configuration item that is absolutely necessary is the port so that +Home Assistant can connect to the PLM. This will expose all the supported +INSTEON devices which exist in the modem’s ALL-Link database. However, devices +will only be shown by their INSTEON hex address (e.g., “1A.2B.3C”) which can +be a bit unwieldy. As you link and unlink devices using the ‘Set’ buttons, +they’ll be added and removed from Home Assistant automatically. You can use the normal Home Assistant [device customization] section of your configuration to assign friendly names and special icons to your devices. This @@ -123,7 +149,9 @@ insteon_plm: cat: 0x10 subcat: 0x11 ``` + ### {% linkable_title What NOT to do %} + Insteon PLM is a top level component and device discovery will identify the Home Assistant platform the device belongs in. As such, do not declare Insteon devices in other platforms. For example, this configuration @@ -134,4 +162,3 @@ light: - platform: insteon_plm address: 1a2b3c ``` - From e9aad886413c9c8a5018a8410616c7c9ffe9def2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 May 2018 08:54:51 -0400 Subject: [PATCH 57/71] Fix broken templating --- source/_components/fan.template.markdown | 2 +- source/_docs/configuration/templating.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/fan.template.markdown b/source/_components/fan.template.markdown index 2b7a984508..9868a85639 100644 --- a/source/_components/fan.template.markdown +++ b/source/_components/fan.template.markdown @@ -61,7 +61,7 @@ fan: required: false type: string value_template: - description: "Defines a template to get the state of the fan. Valid value: 'on'/'off' + description: "Defines a template to get the state of the fan. Valid value: 'on'/'off'" required: true type: template speed_template: diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 9eafdece87..dfcd8bddce 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -140,7 +140,7 @@ With strings ```text {% raw %}{% set tracker_name = "paulus"%} - + {% if states("device_tracker." + tracker_name) != "unknown" %} {{ state_attr("device_tracker." + tracker_name, "battery")}} {% else %} From 3ca0be1d3fca38a08b97658eaaca031c5a7cc6be Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 May 2018 10:15:03 -0400 Subject: [PATCH 58/71] Another yaml mistake --- source/_components/fan.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/fan.template.markdown b/source/_components/fan.template.markdown index 9868a85639..5ebd666594 100644 --- a/source/_components/fan.template.markdown +++ b/source/_components/fan.template.markdown @@ -69,7 +69,7 @@ fan: required: false type: template oscillating_template: - description: Defines a template to get the osc state of the fan. Valid value: True/False + description: "Defines a template to get the osc state of the fan. Valid value: True/False" required: false type: template turn_on: From 536ed8557fd5d513d5942f7ea825a7b5c245bd51 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sun, 6 May 2018 23:15:58 +0200 Subject: [PATCH 59/71] Change to advertise esphomeyaml (#5318) --- source/_docs/mqtt/discovery.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index e238c1777f..27b588f015 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -56,7 +56,7 @@ The `` level can be used by clients to only subscribe to their own (com The following firmware for ESP8266, ESP32 and Sonoff unit has built-in support for MQTT discovery: - [Sonoff-Tasmota](https://github.com/arendst/Sonoff-Tasmota) (starting with 5.11.1e) -- [esphomelib](https://github.com/OttoWinter/esphomelib) +- [esphomeyaml](https://esphomelib.com/esphomeyaml/index.html) - [ESPurna](https://github.com/xoseperez/espurna) - [Arilux AL-LC0X LED controllers](https://github.com/mertenats/Arilux_AL-LC0X) From 68aa5a339ffb0bcf4d20e155200d8c63be1254a9 Mon Sep 17 00:00:00 2001 From: MithrasPan <31153922+MithrasPan@users.noreply.github.com> Date: Sun, 6 May 2018 16:16:23 -0500 Subject: [PATCH 60/71] Update remember_the_milk.markdown (#5317) small typo (Rember->Remember) --- source/_components/remember_the_milk.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown index 62d7deab2a..70abbed77e 100644 --- a/source/_components/remember_the_milk.markdown +++ b/source/_components/remember_the_milk.markdown @@ -51,7 +51,7 @@ Configuration variables: ### {% linkable_title Step 2: registering your account %} -After saving the configuration, you need to (re-)start Home Assistant. On the first start you will notice a new "Configuration" panel appearing on the Home Assistant page. After opening the configuration page, follow the link "Remember The Milk login". This will take you to a login page where you have to log in with your normal Rember The Milk credentials. This will authorize Home Assistant to access your Remember The Milk account. +After saving the configuration, you need to (re-)start Home Assistant. On the first start you will notice a new "Configuration" panel appearing on the Home Assistant page. After opening the configuration page, follow the link "Remember The Milk login". This will take you to a login page where you have to log in with your normal Remember The Milk credentials. This will authorize Home Assistant to access your Remember The Milk account. After that click on the "login completed" button. This will tell Home Assistant that you have completed the login process on the Remember The Milk page and Home Assistant should try to register with this account. From c46f152d8deb25bbf0fa131c6bd10f60a56010aa Mon Sep 17 00:00:00 2001 From: stephanerosi Date: Sun, 6 May 2018 23:58:57 +0200 Subject: [PATCH 61/71] Add help on converation/process service (#5320) --- source/_components/conversation.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/conversation.markdown b/source/_components/conversation.markdown index d9dff87aa5..e9bb86aaab 100644 --- a/source/_components/conversation.markdown +++ b/source/_components/conversation.markdown @@ -87,3 +87,9 @@ intent_script: - "{% if color == 'blue' %}255{% else %}0{% endif %}" {% endraw %} ``` + +#### {% linkable_title Service `conversation.process` %} + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `text` | yes | Transcribed text | From b749b17ed225f6043dc544d5bf31e44190133b7c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 7 May 2018 10:05:23 -0400 Subject: [PATCH 62/71] Update blog post --- source/_posts/2018-05-11-release-69.markdown | 26 ++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-05-11-release-69.markdown b/source/_posts/2018-05-11-release-69.markdown index 988d2b6cca..4063660e8c 100644 --- a/source/_posts/2018-05-11-release-69.markdown +++ b/source/_posts/2018-05-11-release-69.markdown @@ -47,11 +47,20 @@ Experiencing issues introduced by this release? Please report them in our [issue - Sensor device classes ([@cdce8p] - [#14282]) ([sensor docs]) (breaking change) - Matrix Chatbot ([@tinloaf] - [#13355]) ([matrix docs]) ([notify docs]) (breaking change) (new-platform) +## {% linkable_title Beta Fixes %} + +- Add missing 'sensor' to ABODE_PLATFORMS ([@jloutsenhizer] - [#14313]) ([abode docs]) (beta fix) +- Add debounce to move_cover ([@cdce8p] - [#14314]) ([homekit docs]) (beta fix) +- Fix module names for custom components ([@balloob] - [#14317]) (beta fix) +- Revert custom component loading logic ([@balloob] - [#14327]) (beta fix) +- fix(hbmqtt): partial packets breaking hbmqtt ([@graffic] - [#14329]) ([mqtt docs]) (beta fix) +- Fix Yeelight naming ([@syssi]) + ## {% linkable_title All changes %} - Pollen.com: Added attributes on top 3 allergens ([@bachya] - [#14018]) ([sensor.pollen docs]) (breaking change) - Expose the condition code on condition sensors ([@maddox] - [#14011]) ([sensor.yweather docs]) -- upgrade rfxtrx lib, dimming support for Lighting3 ([@danielhiversen] - [#14026]) ([rfxtrx docs]) +- upgrade rfxtrx lib, dimming support for Lighting3 ([@Danielhiversen] - [#14026]) ([rfxtrx docs]) - Add Accuracy to Google Location Sharing ([@rdbahm] - [#14039]) ([device_tracker docs]) - bump gogogate2 version ([@dlbroadfoot] - [#14044]) ([cover.gogogate2 docs]) - device_tracker.ubus: catch ConnectionError ([@stintel] - [#14045]) ([device_tracker docs]) @@ -157,6 +166,11 @@ Experiencing issues introduced by this release? Please report them in our [issue - Refactor ImageProcessingFaceEntity ([@robmarkcole] - [#14296]) ([image_processing docs]) ([image_processing.demo docs]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) ([image_processing.microsoft_face_detect docs]) ([image_processing.microsoft_face_identify docs]) - Onkyo: SUPPORT_VOLUME_STEP ([@rsmeral] - [#14299]) ([media_player.onkyo docs]) - Add All-Linking capabilities ([@teharris1] - [#14065]) ([insteon_plm docs]) ([binary_sensor.insteon_plm docs]) ([fan.insteon_plm docs]) ([light.insteon_plm docs]) ([sensor.insteon_plm docs]) ([switch.insteon_plm docs]) +- Add missing 'sensor' to ABODE_PLATFORMS ([@jloutsenhizer] - [#14313]) ([abode docs]) (beta fix) +- Add debounce to move_cover ([@cdce8p] - [#14314]) ([homekit docs]) (beta fix) +- Fix module names for custom components ([@balloob] - [#14317]) (beta fix) +- Revert custom component loading logic ([@balloob] - [#14327]) (beta fix) +- fix(hbmqtt): partial packets breaking hbmqtt ([@graffic] - [#14329]) ([mqtt docs]) (beta fix) [#12027]: https://github.com/home-assistant/home-assistant/pull/12027 [#12060]: https://github.com/home-assistant/home-assistant/pull/12060 @@ -266,7 +280,13 @@ Experiencing issues introduced by this release? Please report them in our [issue [#14296]: https://github.com/home-assistant/home-assistant/pull/14296 [#14297]: https://github.com/home-assistant/home-assistant/pull/14297 [#14299]: https://github.com/home-assistant/home-assistant/pull/14299 +[#14313]: https://github.com/home-assistant/home-assistant/pull/14313 +[#14314]: https://github.com/home-assistant/home-assistant/pull/14314 +[#14317]: https://github.com/home-assistant/home-assistant/pull/14317 +[#14327]: https://github.com/home-assistant/home-assistant/pull/14327 +[#14329]: https://github.com/home-assistant/home-assistant/pull/14329 [@CM000n]: https://github.com/CM000n +[@Danielhiversen]: https://github.com/Danielhiversen [@Hate-Usernames]: https://github.com/Hate-Usernames [@Kane610]: https://github.com/Kane610 [@MatMaul]: https://github.com/MatMaul @@ -284,7 +304,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@cgarwood]: https://github.com/cgarwood [@colinodell]: https://github.com/colinodell [@corneyl]: https://github.com/corneyl -[@danielhiversen]: https://github.com/danielhiversen [@danielperna84]: https://github.com/danielperna84 [@dgomes]: https://github.com/dgomes [@dgraye]: https://github.com/dgraye @@ -296,8 +315,10 @@ Experiencing issues introduced by this release? Please report them in our [issue [@fanthos]: https://github.com/fanthos [@giangvo]: https://github.com/giangvo [@gives1976]: https://github.com/gives1976 +[@graffic]: https://github.com/graffic [@iMicknl]: https://github.com/iMicknl [@ileler]: https://github.com/ileler +[@jloutsenhizer]: https://github.com/jloutsenhizer [@jnewland]: https://github.com/jnewland [@maddox]: https://github.com/maddox [@marthoc]: https://github.com/marthoc @@ -329,6 +350,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@teharris1]: https://github.com/teharris1 [@thelittlefireman]: https://github.com/thelittlefireman [@tinloaf]: https://github.com/tinloaf +[abode docs]: /components/abode/ [alarm_control_panel.alarmdotcom docs]: /components/alarm_control_panel.alarmdotcom/ [auth docs]: /components/auth/ [binary_sensor docs]: /components/binary_sensor/ From ee59dbd06227372fe4eaffc3e8c9cee6a62a0c55 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 8 May 2018 08:49:44 +0200 Subject: [PATCH 63/71] Add HackSpace article --- source/help/index.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/help/index.markdown b/source/help/index.markdown index d1573cd86e..105bf91613 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -50,6 +50,7 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)? Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). +- [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 - [The winners of the Thomas-Krenn-Awards 2018](https://www.thomas-krenn.com/de/tkmag/allgemein/die-gewinner-des-thomas-krenn-awards-2018-stehen-fest/) - March 2018 - [Hausautomations-Schaltzentrale Home Assistant auf Python-Basis](https://www.heise.de/ct/ausgabe/2017-26-Hausautomations-Schaltzentrale-Home-Assistant-3909532.html) - December 2017 - [Using Home Assistant the ARTIK Cloud](https://developer.artik.io/documentation/developer-guide/wireless-iot/hass.html) - September 2017 From 17e65feefa0d1002e14df8cc57d45ede2d41c764 Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Tue, 8 May 2018 01:54:01 -0500 Subject: [PATCH 64/71] Fix Templates URL and other minor format issues (#5327) * Fix Templates URL and other minor format issues * Update template example --- source/_components/sensor.mqtt.markdown | 42 ++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 5f36c9de1d..cb5ae80742 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -19,7 +19,7 @@ This `mqtt` sensor platform uses the MQTT message payload as the sensor value. I To use your MQTT sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt state_topic: "home/bedroom/temperature" @@ -92,17 +92,17 @@ In this section you find some real life examples of how to use this sensor. ### {% linkable_title JSON attributes configuration %} -The example sensor below shows a configuration example which uses JSON in the state topic to add extra attributes. It also makes use of the availability topic. Attributes can then be extracted in [Templates](configuration/templating/#attributes); Example to extract data from the sensor below {% raw %}'{{ states.sensor.bs_client_name.attributes.ClientName }}'{% endraw %}. +The example sensor below shows a configuration example which uses JSON in the state topic to add extra attributes. It also makes use of the availability topic. Attributes can then be extracted in [Templates](/docs/configuration/templating/#attributes). For example, to extract the `ClientName` attribute from the sensor below, use a template similar to: {% raw %}`{{ state_attr('sensor.bs_rssi', 'ClientName') }}`{% endraw %}. {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt - state_topic: "HUISHS/BunnyShed/NodeHealthJSON" name: "BS RSSI" - unit_of_measurement: "dBm" - value_template: '{{ value_json.RSSI }}' + state_topic: "HUISHS/BunnyShed/NodeHealthJSON" + unit_of_measurement: 'dBm' + value_template: "{{ value_json.RSSI }}" availability_topic: "HUISHS/BunnyShed/status" payload_available: "online" payload_not_available: "offline" @@ -118,7 +118,7 @@ sensor: ### {% linkable_title Get battery level %} -If you are using the [Owntracks](/components/device_tracker.owntracks/) and enable the reporting of the battery level then you can use a MQTT sensor to keep track of your battery. A regular MQTT message from Owntracks looks like this: +If you are using the [OwnTracks](/components/device_tracker.owntracks/) and enable the reporting of the battery level then you can use a MQTT sensor to keep track of your battery. A regular MQTT message from OwnTracks looks like this: ```bash owntracks/tablet/tablet {"_type":"location","lon":7.21,"t":"u","batt":92,"tst":144995643,"tid":"ta","acc":27,"lat":46.12} @@ -128,13 +128,13 @@ Thus the trick is extracting the battery level from the payload. {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt - state_topic: "owntracks/tablet/tablet" name: "Battery Tablet" - unit_of_measurement: "%" - value_template: '{{ value_json.batt }}' + state_topic: "owntracks/tablet/tablet" + unit_of_measurement: '%' + value_template: "{{ value_json.batt }}" ``` {% endraw %} @@ -154,18 +154,18 @@ Then use this configuration example to extract the data from the payload: {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt - state_topic: 'office/sensor1' - name: 'Temperature' + name: "Temperature" + state_topic: "office/sensor1" unit_of_measurement: '°C' - value_template: '{{ value_json.temperature }}' + value_template: "{{ value_json.temperature }}" - platform: mqtt - state_topic: 'office/sensor1' - name: 'Humidity' + name: "Humidity" + state_topic: "office/sensor1" unit_of_measurement: '%' - value_template: '{{ value_json.humidity }}' + value_template: "{{ value_json.humidity }}" ``` {% endraw %} @@ -190,10 +190,10 @@ The configuration will look like the example below: {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mqtt - state_topic: 'home/bathroom/analog/brightness' - name: Brightness + name: "Brightness" + state_topic: "home/bathroom/analog/brightness" ``` {% endraw %} From fc56ec7921345ab0889a758544a3f93b859fe9f6 Mon Sep 17 00:00:00 2001 From: wbradmoore Date: Tue, 8 May 2018 03:21:57 -0400 Subject: [PATCH 65/71] Update sqlite query for new device names (#5328) The new Xiaomi vacuums show up with different names, e.g "Roborock Vacuum" --- source/_components/vacuum.xiaomi_miio.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index c8f9f7c872..9fa8cbe3da 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -127,7 +127,7 @@ The following table shows the units of measurement for each attribute:

As per [python-miio issue 185](https://github.com/rytilahti/python-miio/issues/185) the Mi-Home app no longer stores the token within the database (it's retrieved from Xiaomi servers from version 5.0.31+). Currently the only known fix is to uninstall, then install a downgraded version of the apk. Apkmirror is a trusted source for older versions of the app. [Mi-Home version 5.0.0](https://www.apkmirror.com/apk/xiaomi-inc/mihome/mihome-5-0-0-release/) is confirmed as working for the following Android methods. -This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained +This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Mi Robot 2 (Roborock) Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained easily via a hidden menu item at the Mi-Home app or using the `miio` command line tool.

@@ -203,7 +203,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 6. Download the 'ADB Backup Extractor' from [here](https://sourceforge.net/projects/adbextractor/files/latest/download) 7. Extract the data from the backup: `java -jar Android\ Backup\ Utilities/Android\ Backup\ Extractor/android-backup-extractor-20171005-bin/abe.jar unpack backup.ab unpacked.tar` (enter the password, if prompted) 8. Untar the unpacked data: `tar -xvf unpacked.tar` -9. `sqlite3 apps/com.xiaomi.smarthome/db/miio2.db 'select token from devicerecord where name = "Mi Robot Vacuum";'` returns the token for your Xiaomi vacuum bot. +9. `sqlite3 apps/com.xiaomi.smarthome/db/miio2.db 'select token from devicerecord where name like "%Vacuum%";'` returns the token for your Xiaomi vacuum bot. #### {% linkable_title Linux and Android (rooted!) %} @@ -245,7 +245,7 @@ To fetch the token follow these instructions depending on your mobile phone plat 8. Install [DB Browser for SQLite](http://sqlitebrowser.org/). 9. Open DB Browser and load the `.sqlite` file you saved from your backup. 10. Click on the `Execute SQL` tab. -11. Input and run this query: `SELECT ZTOKEN FROM ZDEVICE WHERE ZNAME = "Mi Robot Vacuum"` +11. Input and run this query: `SELECT ZTOKEN FROM ZDEVICE WHERE ZNAME LIKE "%Vacuum%"` 12. Copy the returned 32-digit hexadecimal string to your clipboard. 13. Open `Terminal` and execute this command: `echo '0: ' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000` 14. Use the resulting string as your token. From 49ea67b97e5c49e973372d00a0f6bbd879a1c07a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 8 May 2018 08:22:50 +0100 Subject: [PATCH 66/71] Added note about tabs (#5325) --- source/_docs/configuration/yaml.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown index 9398ec30bd..68503dab96 100644 --- a/source/_docs/configuration/yaml.markdown +++ b/source/_docs/configuration/yaml.markdown @@ -93,3 +93,15 @@ lights: !include lights.yaml ``` More information about this feature can also be found at [splitting configuration](/docs/configuration/splitting_configuration/). + +## {% linkable_title Common Issues %} + +### {% linkable_title found character '\t' %} + +If you see the following message: + +``` +found character '\t' that cannot start any token +``` + +This means that you've mistakenly entered a tab character, instead of spaces. From e1ccd79776e7c7424e0366fbbf5458311543e31c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 8 May 2018 08:28:16 +0100 Subject: [PATCH 67/71] Added note about instant updates (#5308) Added note about instant updates and the Controlled command classes that are required for it to work. --- source/_docs/z-wave.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index c6a68fb3c6..6ee6a284fa 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -37,3 +37,9 @@ There are 12 different regions for Z-Wave devices, which relates to the frequenc You'll now need to connect your [controller](/docs/z-wave/controllers/), [configure](/docs/z-wave/installation) the Z-Wave component, then [add some devices](/docs/z-wave/adding) using the [control panel](/docs/z-wave/control-panel). [This explains](/docs/z-wave/devices/) about devices, and how [entities are named](/docs/z-wave/entities). You can get more information on the [available services](/docs/z-wave/services/) and [events](/docs/z-wave/events/), what the [query stages](/docs/z-wave/query-stage) of battery powered devices are, as well as details on configuring [specific devices](/docs/z-wave/device-specific/). + +## {% linkable_title Instant status updates %} + +When you toggle a switch or control a light locally you may find that it takes some time for that to be reflected in Home Assistant. That's because Lutron had patents on the status updates using the *Hail* command class, the traditional way of allowing devices to tell the controller that something happened locally. The same result can be achieved through the *Association* command class, or *Central Scene* command class (though, *Central Scene* isn't [fully supported](https://github.com/OpenZWave/open-zwave/pull/1125) in OpenZWave). + +If you search [the Z-Wave products database](http://products.z-wavealliance.org/) for your product and it lists one of those in the **Controlled** command classes (not the **Supported** command classes), then your device will be able to report state changes when they happen. If it doesn't then updates may either happen eventually, or you may need to (carefully) [enable polling](https://www.home-assistant.io/docs/z-wave/control-panel/#entities-of-this-node). From 243d1587e8d3c3375eeaee439e82f1120a44194d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 8 May 2018 09:34:28 +0200 Subject: [PATCH 68/71] Fix typos in file name (#5330) --- .../_components/binary_sensor.modbus.markdown | 6 ++-- .../_components/binary_sensor.mqtt.markdown | 2 +- .../binary_sensor.pilight.markdown | 4 ++- source/_components/climate.modbus.markdown | 13 +++---- source/_components/cover.gogogate2.markdown | 2 +- source/_components/cover.mqtt.markdown | 10 ++++-- source/_components/cover.myq.markdown | 4 ++- .../_components/device_tracker.fritz.markdown | 2 ++ source/_components/discoverable.markdown | 2 +- source/_components/fan.mqtt.markdown | 6 ++-- source/_components/fritzbox.markdown | 34 +++++++++---------- source/_components/juicenet.markdown | 4 ++- source/_components/light.mochad.markdown | 7 ++-- source/_components/light.mqtt.markdown | 10 +++--- source/_components/lock.mqtt.markdown | 2 +- source/_components/mochad.markdown | 18 ++++++++-- source/_components/modbus.markdown | 2 ++ source/_components/pilight.markdown | 2 ++ .../sensor.fritzbox_callmonitor.markdown | 15 ++++---- source/_components/sensor.gitter.markdown | 20 +++++++---- source/_components/sensor.modbus.markdown | 4 ++- source/_components/sensor.mqtt.markdown | 2 ++ source/_components/sensor.mqtt_room.markdown | 2 ++ source/_components/sensor.mvglive.markdown | 4 ++- source/_components/sensor.openevse.markdown | 4 ++- source/_components/sensor.pilight.markdown | 4 ++- source/_components/sensor.qnap.markdown | 4 ++- source/_components/sensor.radarr.markdown | 4 ++- source/_components/sensor.sonarr.markdown | 4 ++- .../_components/sensor.synologydsm.markdown | 6 ++-- source/_components/switch.fritzdect.markdown | 20 ++++++++--- source/_components/switch.mochad.markdown | 6 +++- source/_components/switch.modbus.markdown | 4 ++- source/_components/switch.mqtt.markdown | 8 +++-- source/_components/switch.pilight.markdown | 2 ++ .../_components/switch.wake_on_lan.markdown | 7 ++-- ...mped-ui-and-improved-distribution.markdown | 4 +-- 37 files changed, 172 insertions(+), 82 deletions(-) diff --git a/source/_components/binary_sensor.modbus.markdown b/source/_components/binary_sensor.modbus.markdown index 55450b908e..62f5765dd3 100644 --- a/source/_components/binary_sensor.modbus.markdown +++ b/source/_components/binary_sensor.modbus.markdown @@ -15,10 +15,12 @@ ha_iot_class: "Local Push" The `modbus` binary sensor allows you to gather data from [Modbus](http://www.modbus.org/) coils. +## {% linkable_title Configuration %} + To use your Modbus binary sensors in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry binary_sensor: - platform: modbus coils: @@ -39,7 +41,7 @@ Configuration variables: It's possible to change the default 30 seconds scan interval for the sensor updates as shown in the [Platform options](/docs/configuration/platform_options/#scan-interval) documentation. -### {% linkable_title Full example %} +## {% linkable_title Full example %} Example a sensor with a 10 seconds scan interval: diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 1c6a6d87ef..92ac12ccb0 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -133,7 +133,7 @@ The configuration will look like the example below: {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry binary_sensor: - platform: mqtt name: Bathroom diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index 7d2ccf976b..ee7a729196 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -15,10 +15,12 @@ ha_iot_class: "Local Polling" The `pilight` binary sensor platform implement the [pilight hub](/components/pilight/) binary sensor functionality. Two type of Pilight binary sensor configuration available. A normal sensor which send the on and off state cyclical and a trigger sensor which send only a trigger when an event happened (for example lots of cheap PIR motion detector). + + To enable a Pilight binary sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry binary_sensor: - platform: pilight variable: 'state' diff --git a/source/_components/climate.modbus.markdown b/source/_components/climate.modbus.markdown index f489d27a4b..eeb376ef8e 100644 --- a/source/_components/climate.modbus.markdown +++ b/source/_components/climate.modbus.markdown @@ -14,20 +14,20 @@ ha_iot_class: "Local Polling" --- -The `modbus` thermostat allows you to use a sensor value (current temperature) -and target value (target temperature) from [Modbus](http://www.modbus.org/) -registers. +The `modbus` thermostat allows you to use a sensor value (current temperature) and target value (target temperature) from [Modbus](http://www.modbus.org/) registers. + +## {% linkable_title Configuration %} To use your Modbus thermostat in your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry climate: - platform: modbus name: Watlow F4T slave: 1 target_temp_register: 2782 current_temp_register: 27586 - ``` {% configuration %} @@ -49,17 +49,18 @@ current_temp_register: type: int data_type: description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. - Default float. required: false type: string + default: float count: description: Number of registers to read. required: false type: int precision: - description: Number of valid decimals, default 0. + description: Number of valid decimals. required: false type: int + default: 0 {% endconfiguration %} diff --git a/source/_components/cover.gogogate2.markdown b/source/_components/cover.gogogate2.markdown index bf6d62d37b..a24ef1fd02 100644 --- a/source/_components/cover.gogogate2.markdown +++ b/source/_components/cover.gogogate2.markdown @@ -20,7 +20,7 @@ The `gogogate2` cover platform lets you control Gogogate2-Enabled garage doors t To use your Gogogate2 cover in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: gogogate2 username: email@email.com diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 8af2d728aa..81358f8776 100755 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -15,6 +15,8 @@ ha_release: 0.18 The `mqtt` cover platform allows you to control an MQTT cover (such as blinds, a rollershutter, or a garage door). +## {% linkable_title Configuration %} + The device state (`open` or `closed`) will be updated only after a new message is published on `state_topic` matching `state_open` or `state_closed`. If these messages are published with the `retain` flag set, the cover will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. There is an attribute that stores the relative position of the device, where 0 means the device is `closed` and all other intermediate positions means the device is `open`. @@ -164,7 +166,7 @@ In this section you will find some real life examples of how to use this platfor The example below shows a full configuration for a cover without tilt. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: mqtt name: "MQTT Cover" @@ -188,8 +190,9 @@ cover: The example below shows a full configuration for a cover. +{% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: mqtt name: "MQTT Cover" @@ -206,7 +209,7 @@ cover: payload_available: "online" payload_not_available: "offline" optimistic: false - value_template: '{% raw %}{{ value.x }}{% endraw %}' + value_template: '{{ value.x }}' tilt_command_topic: 'home-assistant/cover/tilt' tilt_status_topic: 'home-assistant/cover/tilt-state' tilt_min: 0 @@ -214,6 +217,7 @@ cover: tilt_closed_value: 70 tilt_opened_value: 180 ``` +{% endraw %} To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. This allows you to operate your cover manually: diff --git a/source/_components/cover.myq.markdown b/source/_components/cover.myq.markdown index 160b4f75f7..419e65ef7a 100644 --- a/source/_components/cover.myq.markdown +++ b/source/_components/cover.myq.markdown @@ -15,10 +15,12 @@ ha_iot_class: Cloud Polling The `myq` cover platform lets you control MyQ-Enabled garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your MyQ Device mobile app. +## {% linkable_title Configuration %} + To use your MyQ cover in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: myq username: YOUR_USERNAME diff --git a/source/_components/device_tracker.fritz.markdown b/source/_components/device_tracker.fritz.markdown index 66ed60a157..3e4a745d99 100644 --- a/source/_components/device_tracker.fritz.markdown +++ b/source/_components/device_tracker.fritz.markdown @@ -15,6 +15,8 @@ ha_release: "0.10" The `fritz` platform offers presence detection by looking at connected devices to a [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) based router. +## {% linkable_title Configuration %} +

It might be necessary to install additional packages: $ sudo apt-get install libxslt-dev libxml2-dev python3-lxml If you are working with the All-in-One installation, you may also need to execute also within your virtual environment the command pip install lxml; be patient this will take a while.

diff --git a/source/_components/discoverable.markdown b/source/_components/discoverable.markdown index 49e9f82111..12c170a1ee 100644 --- a/source/_components/discoverable.markdown +++ b/source/_components/discoverable.markdown @@ -23,7 +23,7 @@ for state in hass.states(): To enable `discovery` in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry discoverable: expose_password: yes ``` diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 94a02b1a9e..45fa55d41b 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt` fan platform lets you control your MQTT enabled fans. +## {% linkable_title Configuration %} + In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with a `RETAIN` flag, the MQTT fan will receive an instant state update after subscription and will start with the correct state. Otherwise, the initial state of the fan will be `false` / `off`. When a `state_topic` is not available, the fan will work in optimistic mode. In this mode, the fan will immediately change state after every command. Otherwise, the fan will wait for state confirmation from the device (message from `state_topic`). @@ -24,7 +26,7 @@ Optimistic mode can be forced even if a `state_topic` is available. Try to enabl To enable MQTT fans in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry fan: - platform: mqtt command_topic: "bedroom_fan/on/set" @@ -155,7 +157,7 @@ In this section you find some real life examples of how to use this fan. The example below shows a full configuration for a MQTT fan. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry fan: - platform: mqtt name: "Bedroom Fan" diff --git a/source/_components/fritzbox.markdown b/source/_components/fritzbox.markdown index 351f63e35d..a5ca0a5f68 100644 --- a/source/_components/fritzbox.markdown +++ b/source/_components/fritzbox.markdown @@ -35,21 +35,21 @@ fritzbox: ``` {% configuration %} - devices: - description: A list of Fritzbox devices. - required: true - type: map - keys: - host: - description: The hostname or IP address of the Fritzbox. - required: true - type: optional - username: - description: The username for Smart Home access. - required: true - type: string - password: - description: The password of the user. - required: true - type: string +devices: + description: A list of Fritzbox devices. + required: true + type: map + keys: + host: + description: The hostname or IP address of the Fritzbox. + required: true + type: optional + username: + description: The username for Smart Home access. + required: true + type: string + password: + description: The password of the user. + required: true + type: string {% endconfiguration %} diff --git a/source/_components/juicenet.markdown b/source/_components/juicenet.markdown index 5df8b274e6..74cc2fdb89 100644 --- a/source/_components/juicenet.markdown +++ b/source/_components/juicenet.markdown @@ -15,10 +15,12 @@ ha_release: 0.47 The `juicenet` sensor platform pulls data from a [JuiceNet](https://emotorwerks.com/products/juicenet/) charging station equipped with a wifi connection. It will access and make available all of the devices attached to your account. +## {% linkable_title Configuration %} + To enable the platform in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry juicenet: access_token: ACCESS_TOKEN ``` diff --git a/source/_components/light.mochad.markdown b/source/_components/light.mochad.markdown index fdd288113f..9721e9d6c9 100644 --- a/source/_components/light.mochad.markdown +++ b/source/_components/light.mochad.markdown @@ -11,13 +11,14 @@ ha_category: Light ha_release: 0.51 --- -The `mochad` light platform lets you control an X10 enabled dimmer/light -device. +The `mochad` light platform lets you control an X10 enabled dimmer/light device. + + To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mochad devices: diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 13e1cd9f86..8b8a67393e 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -14,6 +14,8 @@ ha_iot_class: depends The `mqtt` light platform lets you control your MQTT enabled lights. It supports setting brightness, color temperature, effects, flashing, on/off, RGB colors, transitions, XY colors and white values. +## {% linkable_title Configuration %} + In an ideal scenario, the MQTT device will have a state topic to publish state changes. If these messages are published with a `RETAIN` flag, the MQTT light will receive an instant state update after subscription and will start with the correct state. Otherwise, the initial state of the switch will be `false` / `off`. When a state topic is not available, the light will work in optimistic mode. In this mode, the light will immediately change state after every command. Otherwise, the light will wait for state confirmation from the device (message from `state_topic`). @@ -21,7 +23,7 @@ When a state topic is not available, the light will work in optimistic mode. In Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect light operation. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt command_topic: "office/rgb1/light/switch" @@ -206,7 +208,7 @@ To enable a light with brightness and RGB support in your installation, add the {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt name: "Office Light RGB" @@ -231,7 +233,7 @@ light: To enable a light with brightness (no RGB version) in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt name: "Office light" @@ -250,7 +252,7 @@ light: To enable a light that sends only brightness topics to turn it on, add the following to your `configuration.yaml` file. The `command_topic` is only used to send an off command in this case: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry light: - platform: mqtt name: "Brightness light" diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index b0669cfb7f..ff8eb05170 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -24,7 +24,7 @@ Optimistic mode can be forced, even if state topic is available. Try to enable i To enable MQTT locks in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry lock: - platform: mqtt command_topic: "home/frontdoor/set" diff --git a/source/_components/mochad.markdown b/source/_components/mochad.markdown index df42020a21..bf0617cefb 100644 --- a/source/_components/mochad.markdown +++ b/source/_components/mochad.markdown @@ -13,6 +13,8 @@ ha_release: 0.32 The `mochad` component is the main component to integrate all X10 platforms being controlled by [mochad](https://sourceforge.net/projects/mochad/). Besides this component you will have to setup your X10 devices separately. +## {% linkable_title Configuration %} + To integrate your Mochad units with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml @@ -20,10 +22,20 @@ To integrate your Mochad units with Home Assistant, add the following section to mochad: ``` -Configuration variables: +{% configuration %} +host: + description: The host that mochad is running on. + required: false + type: string + default: localhost +port: + description: The port that mochad is running on. + required: false + type: int + default: 1099 +{% endconfiguration %} -- **host** (*Optional*): The host that mochad is running on. Defaults to `localhost`. -- **port** (*Optional*): The port that mochad is running on. Defaults to `1099`. +## {% linkable_title Example %} A full configuration sample could look like the one below: diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index 30a2b62382..dcccf0ede6 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Local Push" [Modbus](http://www.modbus.org/) is a serial communication protocol to control PLCs (Programmable logic controller). It currently supports sensors and switches which can be controlled over serial, TCP, and UDP connections. +## {% linkable_title Configuration %} + To add modbus to your installation, add the following to your `configuration.yaml` file: For a network connection: diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown index 2e7e1b0150..45e9832381 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -19,6 +19,8 @@ This pilight hub connects to the [pilight-daemon](https://manual.pilight.org/pro The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g., automation). Additionally a send service is provided to send RF codes. +## {% linkable_title Configuration %} + To integrate pilight into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.fritzbox_callmonitor.markdown b/source/_components/sensor.fritzbox_callmonitor.markdown index 85643e2dff..dd57677a9c 100644 --- a/source/_components/sensor.fritzbox_callmonitor.markdown +++ b/source/_components/sensor.fritzbox_callmonitor.markdown @@ -14,10 +14,11 @@ ha_iot_class: "Local Polling" --- -The `fritzbox_callmonitor` sensor monitors the call monitor exposed by [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) routers -on TCP port 1012. It will assume the values `idle`, `ringing`, `dialing`, or `talking` with the phone numbers involved contained in the state attributes. +The `fritzbox_callmonitor` sensor monitors the call monitor exposed by [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) routers on TCP port 1012. It will assume the values `idle`, `ringing`, `dialing` or `talking` with the phone numbers involved contained in the state attributes. It can also access the internal phone book of the router to look up the names corresponding to the phone numbers and store them in the state attributes. +## {% linkable_title Configuration %} + To activate the call monitor on your Fritz!Box, dial #96\*5\* from any phone connected to it. To use the Fritz!Box call monitor in your installation, add the following to your `configuration.yaml` file: @@ -44,7 +45,7 @@ Configuration variables: The example below shows a full configuration for a call monitor with phone book support. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: fritzbox_callmonitor name: Phone @@ -61,8 +62,9 @@ sensor: This example shows how to send notifications whenever the sensor's state changes. You will get notified both when you receive a call and also when a call is placed. +{% raw %} ```yaml -# Example configuration.yml entry. +# Example configuration.yaml entry. automation: - alias: "Notify about phone state" trigger: @@ -73,7 +75,7 @@ automation: data: title: "Phone" message: >- - {% raw %}{% if is_state("sensor.phone", "idle") %} + {% if is_state("sensor.phone", "idle") %} Phone is idle {% elif is_state("sensor.phone", "dialing") %} Calling {{ states.sensor.phone.attributes.to_name }} ({{ states.sensor.phone.attributes.to }}) @@ -81,5 +83,6 @@ automation: Incoming call from {{ states.sensor.phone.attributes.from_name }} ({{ states.sensor.phone.attributes.from }}) {% else %} Talking to {{ states.sensor.phone.attributes.with_name }} ({{ states.sensor.phone.attributes.with }}) - {% endif %}{% endraw %} + {% endif %} ``` +{% endraw %} diff --git a/source/_components/sensor.gitter.markdown b/source/_components/sensor.gitter.markdown index a114887f97..72f3c4b7dc 100644 --- a/source/_components/sensor.gitter.markdown +++ b/source/_components/sensor.gitter.markdown @@ -15,19 +15,27 @@ ha_release: 0.47 This `gitter` sensor allows one to monitor a [Gitter.im](https://gitter.im) chatroom for unread messages. +## {% linkable_title Configuration %} + Visit [Gitter Developer Apps](https://developer.gitter.im/apps) to retrieve your "Personal Access Token". To use a Gitter sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: gitter api_key: YOUR_API_TOKEN ``` -Configuration variables: - -- **api_key** (*Required*): Your Gitter.im API token. -- **room** (*Optional*): Gitter room to monitor. Defaults to `home-assistant/home-assistant` - +{% configuration %} +api_key: + description: Your Gitter.im API token. + required: true + type: string +room: + description: Gitter room to monitor. + required: false + type: string + default: home-assistant/home-assistant +{% endconfiguration %} diff --git a/source/_components/sensor.modbus.markdown b/source/_components/sensor.modbus.markdown index a94d711fda..5868888488 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -16,10 +16,12 @@ ha_iot_class: "Local Push" The `modbus` sensor allows you to gather data from [Modbus](http://www.modbus.org/) registers. +## {% linkable_title Configuration %} + To use your Modbus sensors in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: platform: modbus registers: diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index cb5ae80742..5db0e56393 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -16,6 +16,8 @@ ha_iot_class: depends This `mqtt` sensor platform uses the MQTT message payload as the sensor value. If messages in this `state_topic` are published with *RETAIN* flag, the sensor will receive an instant update with last known value. Otherwise, the initial state will be undefined. +## {% linkable_title Configuration %} + To use your MQTT sensor in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.mqtt_room.markdown b/source/_components/sensor.mqtt_room.markdown index 598dafefb1..96aaa9dc7d 100644 --- a/source/_components/sensor.mqtt_room.markdown +++ b/source/_components/sensor.mqtt_room.markdown @@ -16,6 +16,8 @@ ha_iot_class: depends The `mqtt_room` sensor platform allows you to detect the indoor location of devices using MQTT clients. +## {% linkable_title Configuration %} + To use this device tracker in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.mvglive.markdown b/source/_components/sensor.mvglive.markdown index 16ee5f4a5e..7d613d8598 100644 --- a/source/_components/sensor.mvglive.markdown +++ b/source/_components/sensor.mvglive.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Cloud Polling" The `mvglive` sensor will give you the departure time of the next bus, tram, subway, or train at the next station or stop in the Munich public transport network. Additional details such as the line number and destination are present in the attributes. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml @@ -42,7 +44,7 @@ Configuration variables: The example below shows a full configuration with three sensors that showcase the various configuration options. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: mvglive nextdeparture: diff --git a/source/_components/sensor.openevse.markdown b/source/_components/sensor.openevse.markdown index 04568f0459..e9df04e8da 100644 --- a/source/_components/sensor.openevse.markdown +++ b/source/_components/sensor.openevse.markdown @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" This `openevse` sensor platform pulls data from an [OpenEVSE](https://www.openevse.com/) Charging station equipped with an ESP8266-based wifi connection. +## {% linkable_title Configuration %} + To enable this sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: openevse host: IP_ADDRESS diff --git a/source/_components/sensor.pilight.markdown b/source/_components/sensor.pilight.markdown index cae336b6d8..2a33cc2a1d 100644 --- a/source/_components/sensor.pilight.markdown +++ b/source/_components/sensor.pilight.markdown @@ -16,10 +16,12 @@ ha_iot_class: depends This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g., _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. +## {% linkable_title Configuration %} + To use your sensor via pilight, make sure it is [supported](https://wiki.pilight.org/doku.php/protocols) and add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: pilight variable: temperature diff --git a/source/_components/sensor.qnap.markdown b/source/_components/sensor.qnap.markdown index 66dd99404b..3814f37bd0 100644 --- a/source/_components/sensor.qnap.markdown +++ b/source/_components/sensor.qnap.markdown @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" This `qnap` sensor allows getting various statistics from your [QNAP NAS](https://www.qnap.com/en-us/). +## {% linkable_title Configuration %} + To use the `qnap` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: qnap host: IP_ADDRESS_OF_QNAP_NAS diff --git a/source/_components/sensor.radarr.markdown b/source/_components/sensor.radarr.markdown index 42294c8628..94a4665548 100644 --- a/source/_components/sensor.radarr.markdown +++ b/source/_components/sensor.radarr.markdown @@ -15,10 +15,12 @@ ha_release: 0.47 This `radarr` sensor platform pulls data from a given [Radarr](https://radarr.video/) instance. +## {% linkable_title Configuration %} + To use your Radarr sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY diff --git a/source/_components/sensor.sonarr.markdown b/source/_components/sensor.sonarr.markdown index 0257c70b55..13a4944fea 100644 --- a/source/_components/sensor.sonarr.markdown +++ b/source/_components/sensor.sonarr.markdown @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" This `sonarr` sensor platform pulls data from a given [Sonarr](https://sonarr.tv/) instance. +## {% linkable_title Configuration %} + To use your Sonarr sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index d9f4dddf51..0b4b4ba197 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -16,10 +16,12 @@ ha_iot_class: "Local Polling" The `synologydsm` sensor platform allows getting various statistics from your [Synology NAS](https://www.synology.com). +## {% linkable_title Configuration %} + To use the `synologydsm` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: synologydsm host: IP_ADDRESS_OF_SYNOLOGY_NAS @@ -33,7 +35,7 @@ sensor: Configuration variables: -- **host** (*Required*): The IP address of the Synology NAS to monitor +- **host** (*Required*): The IP address of the Synology NAS to monitor. - **port** (*Optional*): The port number on which the Synology NAS is reachable. Defaults to `5000`. - **username** (*Required*): An user to connect to the Synology NAS (a separate account is advised, see the Separate User Configuration section below for details). - **password** (*Required*): The password of the user to connect to the Synology NAS. diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index cceeffaef3..380deebdaf 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -35,11 +35,21 @@ switch: password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for your Fritz!Box. -- **password** (*Required*): The password for your Fritz!Box. -- **host** (*Optional*): The IP address/hostname of your Fritz!Box. Defaults to `fritz.box`. +{% configuration %} +username: + description: The username for your Fritz!Box. + required: true + type: string +password: + description: The password for your Fritz!Box. + required: true + type: string +host: + description: The IP address/hostname of your Fritz!Box. + required: false + type: string + default: fritz.box +{% endconfiguration %} It is recommended to create a dedicated user for Home Assistant and only allow access to "Smart Home". diff --git a/source/_components/switch.mochad.markdown b/source/_components/switch.mochad.markdown index 5ffbdb3bf2..a1d7569ec1 100644 --- a/source/_components/switch.mochad.markdown +++ b/source/_components/switch.mochad.markdown @@ -14,10 +14,12 @@ ha_release: 0.32 The `mochad` switch platform lets you control an X10 enabled switch device. +## {% linkable_title Configuration %} + To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mochad devices: @@ -31,3 +33,5 @@ Configuration variables: - **name** (*Optional*): The name of the switch. Default is: x10_switch_dev_*address*. - **comm_type** (*Optional*): pl (powerline) or rf (radio frequency). Default is pl. + + diff --git a/source/_components/switch.modbus.markdown b/source/_components/switch.modbus.markdown index 201e7b5daa..3bf176c125 100644 --- a/source/_components/switch.modbus.markdown +++ b/source/_components/switch.modbus.markdown @@ -16,10 +16,12 @@ ha_iot_class: "Local Push" The `modbus` switch platform allows you to control [Modbus](http://www.modbus.org/) coils or registers. +## {% linkable_title Configuration %} + To use your Modbus switches in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: platform: modbus slave: 1 diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index d440902e7e..295ae106db 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt` switch platform lets you control your MQTT enabled switches. +## {% linkable_title Configuration %} + In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with a `RETAIN` flag, the MQTT switch will receive an instant state update after subscription, and will start with the correct state. Otherwise, the initial state of the switch will be `false` / `off`. When a `state_topic` is not available, the switch will work in optimistic mode. In this mode, the switch will immediately change state after every command. Otherwise, the switch will wait for state confirmation from the device (message from `state_topic`). @@ -24,7 +26,7 @@ Optimistic mode can be forced, even if the `state_topic` is available. Try to en To enable this switch in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mqtt command_topic: "home/bedroom/switch1/set" @@ -106,7 +108,7 @@ In this section you will find some real life examples of how to use this sensor. The example below shows a full configuration for a switch. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mqtt name: "Bedroom Switch" @@ -140,7 +142,7 @@ The configuration will look like the example below: {% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: mqtt name: bathroom diff --git a/source/_components/switch.pilight.markdown b/source/_components/switch.pilight.markdown index ffeeb1a947..ca2c837986 100644 --- a/source/_components/switch.pilight.markdown +++ b/source/_components/switch.pilight.markdown @@ -19,6 +19,8 @@ Additionally, RF commands can be defined that trigger this switch to turn on and To be really sure that Home Assistant knows the actual state of your device it is recommended to use the RF remote with codes unknown to any of your 433 MHz devices. Thus you use the remote to trigger this switch to send the correct RF code to the device. +## {% linkable_title Configuration %} + To define a Pilight switch, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index f30f120134..161cfcd1b5 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `wake_on_lan` (WOL) switch platform allows you to turn on a [WOL](https://en.wikipedia.org/wiki/Wake-on-LAN) enabled computer. +## {% linkable_title Configuration %} +

The WOL switch can only turn on your computer and monitor the state. There is no universal way to turn off a computer remotely. The `turn_off` variable is there to help you call a script when you have figured out how to remotely turn off your computer. See below for suggestions on how to do this. @@ -23,7 +25,7 @@ See below for suggestions on how to do this. To enable this switch in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry switch: - platform: wake_on_lan mac_address: "00-01-02-03-04-05" @@ -42,7 +44,8 @@ Configuration variables: Here are some real life examples of how to use the **turn_off** variable. ### {% linkable_title Suspending Linux %} -Suggested recipe for letting the turn_off script suspend a Linux computer (the **target**) + +Suggested recipe for letting the `turn_off` script suspend a Linux computer (the **target**) from Home Assistant running on another Linux computer (the **server**). 1. On the **server**, log in as the user account Home Assistant is running under. (I'm using `hass` in this example) diff --git a/source/_posts/2015-08-31-version-7-revamped-ui-and-improved-distribution.markdown b/source/_posts/2015-08-31-version-7-revamped-ui-and-improved-distribution.markdown index 19ab9e50a6..37178a2d66 100644 --- a/source/_posts/2015-08-31-version-7-revamped-ui-and-improved-distribution.markdown +++ b/source/_posts/2015-08-31-version-7-revamped-ui-and-improved-distribution.markdown @@ -61,12 +61,12 @@ __MQTT Sensors and Switches__ [mqtt-switch]: /components/switch.mqtt/ ```yaml -# Example configuration.yml entr +# Example configuration.yaml entry sensor: platform: mqtt name: "MQTT Sensor" state_topic: "home/bedroom/temperature" - unit_of_measurement: "ºC" + unit_of_measurement: "°C" switch: platform: mqtt From 9dce793b65e4c3d82850714193945520f7445daf Mon Sep 17 00:00:00 2001 From: Evgeniy <592652+evgeniy-khatko@users.noreply.github.com> Date: Tue, 8 May 2018 14:45:03 -0700 Subject: [PATCH 69/71] Improving icloud device tracker (#5240) * Improving icloud device tracker Updating documentation for new pull request to main HA codebase: "Improving icloud device tracker" * Update device_tracker.icloud.markdown --- source/_components/device_tracker.icloud.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/device_tracker.icloud.markdown b/source/_components/device_tracker.icloud.markdown index f2f902bd30..a57ba44d4b 100644 --- a/source/_components/device_tracker.icloud.markdown +++ b/source/_components/device_tracker.icloud.markdown @@ -33,9 +33,11 @@ Configuration variables: - **username** (*Required*): The username for the iCloud account. - **password** (*Required*): The password for your given username. - **account_name** (*Optional*): The friendly name for the account_name. If this isn't given, it will use the account_name of the username (so the part before the `@` in the email address). +- **max_interval** (*Optional*): Maximum interval in minutes between subsequent location upates. This tracker uses dynamic intervals for requesting location updates. When iphone is stationary, interval will eventually be set to `max_interval` to save battery. When iphone starts moving again interval will be dynamically updated to 1 min. Note that updating interval to 1 min might be delayed by maximum `max_interval` minutes. Default is 30 min. Minimum value is 1 min. +- **gps_accuracy_threshold** (*Optional*): iCloud location updates come with some gps_accuracy varying from 10 to 5000 meters. This setting defines the accuracy threshold in meters for a location update. Less accurate updates will be discarded by this tracker. This allows more precise location monitoring and fewer false positive zone changes. Default is 1000 meters.

-This may cause battery drainage as it wakes up your device to get the current location. +Low `max_interval` may cause battery drainage as it wakes up your device to get the current location.

@@ -48,7 +50,7 @@ To disable the drainage of the battery, a dynamic interval is being used for eac 2 Factor Authentication is the improved version of 2 Steps Authentication, this is still not supported by the pyicloud library. Therefore it's not possible to use it with the device_tracker yet. 4 services are available for this component: -- **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. +- **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. Request will result in new Home Assistant [state_changed](/docs/configuration/events/#event-state_changed) event describing current iphone location. Can be used in automations when manual location update is needed, e.g. to check if anyone is home when door's been opened. - **icloud_lost_iphone**: This service will play the Lost iPhone sound on a certain iDevice. The `account_name` and `device_name` are optional. - **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to its default dynamic interval based on its current zone, its distance towards home and its battery level. - **icloud_reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are being found by the component or if you have added a new iDevice to your account. The `account_name` is optional. From e06c9adce7ff4166cd22b20616e910d4d761f780 Mon Sep 17 00:00:00 2001 From: Mario Di Raimondo Date: Wed, 9 May 2018 00:35:12 +0200 Subject: [PATCH 70/71] Waze Travel Time: optional inclusive/exclusive filters (#5208) * Waze Travel Time: optional inclusive/exclusive filters documentation update about the new optional filtering params * Update --- source/_components/sensor.waze_travel_time.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/sensor.waze_travel_time.markdown b/source/_components/sensor.waze_travel_time.markdown index 2440930b9f..db3e3f0418 100644 --- a/source/_components/sensor.waze_travel_time.markdown +++ b/source/_components/sensor.waze_travel_time.markdown @@ -48,4 +48,12 @@ name: required: false default: "Waze Travel Time" type: string +incl_filter: + description: A substring that has to be present in the description of the selected route (a simple case-insensitive matching). + required: false + type: string +excl_filter: + description: A substring that has to be NOT present in the description of the selected route (a simple case-insensitive matching). + required: false + type: string {% endconfiguration %} From a17ecf7a2f594013e0c1c992e5b621e230b7b99c Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Wed, 9 May 2018 01:06:33 +0200 Subject: [PATCH 71/71] Add link to a video of a talk at foss-north 2018 I gave a talk at foss-north, which is a free / open source conference covering both software and hardware from the technical perspective. They recorded it and put it on YouTube. This patch adds a link to that talk on the help page under "Videos, talks, workshops and alike". --- source/help/index.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/help/index.markdown b/source/help/index.markdown index 105bf91613..881204f047 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -31,6 +31,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R ### {% linkable_title Videos, talks, workshops and alike %} +- [Automate your home with Home Assistant](https://www.youtube.com/watch?v=SSrgi4iHGbs) at [foss-north 2018](http://foss-north.se/2018/speakers-and-talks.html#jparadies) - March 2018 - [Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/english/2017-qecampX) at QECampX 2017 - October 2017 - [Open Source Heimautomation mit Home Assistant](https://github.com/home-assistant/home-assistant-assets/tree/master/german/2017-maker-faire-zurich) at [Mini Maker Faire Zurich 2017](https://www.makerfairezurich.ch/en/) - September 2017 - [Why we can't have the Internet of Nice Things: A home automation primer](https://www.openwest.org/custom/description.php?id=92) at [OpenWest 2017](https://www.openwest.org) - July 2017