From 2d3818a4b927d765f19c4a2bfae59f783c71e2d4 Mon Sep 17 00:00:00 2001 From: Brendon Baumgartner Date: Sat, 3 Jun 2017 11:54:41 -0700 Subject: [PATCH 01/44] Update remote.itach.markdown (#2750) * Update remote.itach.markdown add links to API. note that GC devices use same IR instructions accross other products and this componenet works on gc-100 as well as itach. service call example * Make list --- source/_components/remote.itach.markdown | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/_components/remote.itach.markdown b/source/_components/remote.itach.markdown index bd6862fdded..cdfd5eff7c5 100755 --- a/source/_components/remote.itach.markdown +++ b/source/_components/remote.itach.markdown @@ -14,7 +14,7 @@ ha_release: 0.39 --- -The `itach` remote platform allows you to control IR devices with a [Global Caché iTach Device](https://www.globalcache.com/products/itach/ip2irspecs) +The `itach` remote platform allows you to control IR devices with a [Global Caché iTach Device](https://www.globalcache.com/products/itach/ip2irspecs) and GC-100 devices. The Global Cache IR API are similar accross their product line. See API documentation links at the end of this page. To use your iTach remote in your installation, you will need to know the IR commands for your devices in Pronto hex format and add the following to your `configuration.yaml` file: @@ -35,13 +35,21 @@ remote: ``` Configuration variables: -- **name** (*Required*): The iTach's name to display in the front end. +- **name** (*Optional*): The iTach's name to display in the front end. - **host** (*Required*): The iTach's IP address. - **port** (*Optional*): The iTach's port. 4998 is default. - **devices** array (*Required*): Devices controlled by the iTach. - **name** (*Required*): Name of the device. - **modaddr** (*Optional*): iTach module address for the IR emitter. 1 is default. - - **connaddr** (*Required*): iTach connection address for the IR emitter. + - **connaddr** (*Required*): iTach connection location for the IR emitter. (Note connaddr is a misleading label. Do not put the connection address here. Technically the connection address is the combination of the module address plus the connection location). - **commands** array (*Required*): Commands available to send to the device. - **name** (*Required*): Command name. - **data** (*Required*): Hex command data. + +An example to call the component from developer tools using the remote, send_command service `{ "entity_id":"remote.tv", "device":"0", "command":"menu" }` + +Note: Global Cache devices expect data in their own format of "sendir...". This component converts hex code to Global Cache IR form. + +API Docs: +- [iTach](https://www.globalcache.com/files/docs/API-iTach.pdf) +- [GC-100](http://www.globalcache.com/files/docs/API-GC-100.pdf) From d72fe784c26e46757e184fe3c79305bf0e10111e Mon Sep 17 00:00:00 2001 From: R Huish Date: Sat, 3 Jun 2017 19:58:12 +0100 Subject: [PATCH 02/44] Axis component: Added steps for Raspberry Pi All-In-One Installer (#2749) --- source/_components/axis.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index 6e9ad277ae7..fb935bd19dc 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -41,12 +41,20 @@ axis: sudo apt-get install python3-gi gir1.2-gstreamer-1.0 ``` -Depending on how you run Home Assistant you might be needed to symlink the `gi` module into your environment (e.g. in Hassbian): +Depending on how you run Home Assistant you might be needed to symlink the `gi` module into your environment. + +Hassbian: ```bash ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/lib/python3.4/site-packages ``` +Raspberry Pi All-In-One Installer: + +```bash +ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages +``` + ## {% linkable_title Configuration variables %} - **device** (*Required*): Unique name From 47774ab8ef9a6e67446c019ff456b27532df04c6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 3 Jun 2017 21:12:15 +0200 Subject: [PATCH 03/44] Minimize configuration sample --- source/_components/axis.markdown | 98 ++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index fb935bd19dc..5e0fe5819b5 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -16,8 +16,57 @@ ha_release: "0.45" Home Assistant will automatically discover their presence on your network. +## {% linkable_title Dependencies %} + +```bash +$ sudo apt-get install python3-gi gir1.2-gstreamer-1.0 +``` + +Depending on how you run Home Assistant you might be needed to symlink the `gi` module into your environment. + +Hassbian: + +```bash +$ ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/lib/python3.4/site-packages +``` + +Raspberry Pi All-In-One Installer: + +```bash +$ ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages +``` + You can also manually configure your devices by adding the following lines to your `configuration.yaml` file: +```yaml +# Example configuration.yaml entry +axis: + m1065lw: + host: IP ADDRESS + include: + - camera +``` + +Configuration variables: + +- **device** (*Required*): Unique name for the Axis device. + - **host** (*Required*): The IP address to your Axis device. + - **username** (*Optional*): The username to your Axis device. Defaults to `root`. + - **password** (*Optional*): The password to your Axis device. Defaults to `pass`. + - **trigger_time** (*Optional*): Minimum time (in seconds) a sensor should keep its positive value. Defaults to 0. + - **location** (*Optional*): Physical location of your Axis device. Default not set. + - **include** (*Required*): This cannot be empty else there would be no use adding the device at all. + - **camera**: Stream MJPEG video to Home Assistant. + - **motion**: The built-in motion detection in Axis cameras. + - **vmd3**: ACAP Motion Detection app which has better algorithms for motion detection. + - **pir**: PIR sensor that can trigger on motion. + - **sound**: Sound detector. + - **daynight**: Certain cameras have day/night mode if they have built-in IR lights. + - **tampering**: Signals when camera believes that it has been tampered with. + - **input**: Trigger on whatever you have connected to device input port. + +A full configuration example could look like this: + ```yaml # Example configuration.yaml entry axis: @@ -26,54 +75,15 @@ axis: username: USERNAME password: PASSWORD include: - - camera - - motion - - pir - - sound - - daynight + - camera + - motion + - pir + - sound + - daynight trigger_time: 0 location: köket ``` -## {% linkable_title Dependencies %} - -```bash -sudo apt-get install python3-gi gir1.2-gstreamer-1.0 -``` - -Depending on how you run Home Assistant you might be needed to symlink the `gi` module into your environment. - -Hassbian: - -```bash -ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/lib/python3.4/site-packages -``` - -Raspberry Pi All-In-One Installer: - -```bash -ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages -``` - -## {% linkable_title Configuration variables %} - -- **device** (*Required*): Unique name -- **host** (*Required*): The IP address to your Axis device. -- **username** (*Optional*): The username to your Axis device. Default 'root'. -- **password** (*Optional*): The password to your Axis device. Default 'pass'. -- **trigger_time** (*Optional*): Minimum time (in seconds) a sensor should keep its positive value. Default 0. -- **location** (*Optional*): Physical location of your Axis device. Default not set. - -- **include** (*Required*): This cannot be empty else there would be no use adding the device at all. - - **camera**: Stream MJPEG video to Home Assistant - - **motion**: The Built in motion detection in Axis cameras - - **vmd3**: ACAP Motion Detection app which has better algorithms for motion detection - - **pir**: PIR sensor that can trigger on motion - - **sound**: Sound detector - - **daynight**: Certain cameras have day/night mode if they have built-in IR lights - - **tampering**: signals when camera believes that it has been tampered with - - **input**: trigger on whatever you have connected to device input port -

Any specific levels for triggers needs to be configured on the device.

From f663f36d1ac5c9383107d8187b77dbe016e85b5a Mon Sep 17 00:00:00 2001 From: Wilco Land Date: Sat, 3 Jun 2017 21:43:43 +0200 Subject: [PATCH 04/44] Update device_tracker.upc_connect.markdown (#2751) --- source/_components/device_tracker.upc_connect.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/device_tracker.upc_connect.markdown b/source/_components/device_tracker.upc_connect.markdown index 99f74999926..bb5261269a5 100644 --- a/source/_components/device_tracker.upc_connect.markdown +++ b/source/_components/device_tracker.upc_connect.markdown @@ -33,4 +33,5 @@ See the [device tracker component page](/components/device_tracker/) for instruc Also known to be working with the following devices: - Irish Virgin Media Super Hub 3.0 + - Ziggo Connectbox NL From 0e1b2a5d39b045c0c0911650d65a5f340d171f6d Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sat, 3 Jun 2017 14:49:37 -0400 Subject: [PATCH 05/44] Support for ZWave value renaming (#2716) --- source/_docs/z-wave.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index f219cf86755..d482e746810 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -205,6 +205,7 @@ The `zwave` component exposes multiple services to help maintain the network. | refresh_node| Refresh Z-Wave node. | | remove_node | Put the Z-Wave controller in exclusion mode. Allows one to remove a device from the Z-Wave network.| | rename_node | Sets a node's name. Requires a `node_id` and `name` field. | +| rename_value | Sets a value's name. Requires a `node_id`, `value_id`, and `name` field. | | remove_failed_node | Remove a failed node from the network. The Node should be on the Controllers Failed Node List, otherwise this command will fail.| | replace_failed_node | Replace a failed device with another. If the node is not in the controller's failed nodes list, or the node responds, this command will fail.| | reset_node_meters | Reset a node's meter values. Only works if the node supports this. | From d6beb8e05a01a29e5d6682b1bb7b1de4c3cb7bf7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 3 Jun 2017 20:13:37 -0700 Subject: [PATCH 06/44] Add release blog post --- _config.yml | 8 +- source/_posts/2017-06-04-release-46.markdown | 373 +++++++++++++++++++ 2 files changed, 377 insertions(+), 4 deletions(-) create mode 100644 source/_posts/2017-06-04-release-46.markdown diff --git a/_config.yml b/_config.yml index 6de62f081e9..5b3671eca58 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 45 -current_patch_version: 1 -date_released: 2017-05-22 +current_minor_version: 46 +current_patch_version: 0 +date_released: 2017-06-04 # 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-0451---may-22" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): #patch_version_notes: "#release-0451---may-X" diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown new file mode 100644 index 00000000000..1a4c21c843e --- /dev/null +++ b/source/_posts/2017-06-04-release-46.markdown @@ -0,0 +1,373 @@ +--- +layout: post +title: "0.46: Rachio sprinklers, Netgear Arlo cameras and Z-Wave fans" +description: "Another great new release with a major focus on bugfixes." +date: 2017-06-04 01:04:05 +0000 +date_formatted: "June 4, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +--- + +It's time for 0.46! This release does not have too many new integrations, instead it focussed on bug fixes. + +## New platforms + +- Template light ([@cribbstechnologies] - [#7657]) ([light.template docs]) (new-platform) +- Support for GE Zwave fan controller ([@armills] - [#7767]) ([zwave docs]) ([fan.zwave docs]) (new-platform) +- Rachio (Sprinklers) ([@Klikini] - [#7600]) ([switch.rachio docs]) (new-platform) +- Introduced support to Netgear Arlo Cameras ([@tchellomello] - [#7826]) ([arlo docs]) ([camera.arlo docs]) ([sensor.arlo docs]) (new-platform) + +## Breaking changes + +- The USPS sensor entity names have changed as there are now two. One for packages and one for mail. Config will now also use `scan_interval` instead of `update_interval` ([@happyleavesaoc] - [#7655]) ([sensor.usps docs]) (breaking change) +- Automation state trigger: From/to checks will now ignore state changes that are just attribute changess ([@amelchio] - [#7651]) ([automation.state docs]) (breaking change) +- Redesign monitored variables for hp_ilo sensor. `monitored_variables` is now a list of `name` and `sensor_type` values ([@Juggels] - [#7534]) ([sensor.hp_ilo docs]) (breaking change) + +```yaml +sensor: + - platform: hp_ilo + host: IP_ADDRESS or HOSTNAME + username: USERNAME + password: PASSWORD + monitored_variables: + - name: SENSOR NAME + sensor_type: SENSOR TYPE +``` + +- Automation - time: the `after` keyword has been deprecated in favor of the `at` keyword. This resembles better what it does (old one still works, gives a warning) ([@armills] - [#7846]) ([automation.time docs]) (breaking change) +- Automation - numeric_state: `above` and `below` will no longer trigger if it is equal. ([@armills] - [#7857]) (breaking change) +- Broadlink switches: Entity ids will change for switches that don't have a default name set. In this case the object_id is now used. ([@abmantis] - [#7845]) ([switch.broadlink docs]) (breaking change) +- Disallow ambiguous color descriptors in the light.turn_on schema. This means that you can no longer specify both `xy_color` and `rgb_color`. ([@amelchio] - [#7765]) (breaking change) + +## {% linkable_title If you need help... %} +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][gitter]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} +Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template. + + +## All changes + +- Align with OpenALPR platform for naming conf variables ([@fabaff] - [#7650]) ([image_processing.seven_segments docs]) +- Added support to Amcrest camera to feed using RTSP via ffmpeg ([@tchellomello] - [#7646]) ([camera.amcrest docs]) ([sensor.amcrest docs]) +- bump fedex version ([@happyleavesaoc] - [#7653]) ([sensor.fedex docs]) +- bump ups version ([@happyleavesaoc] - [#7654]) +- update usps ([@happyleavesaoc] - [#7655]) ([sensor.usps docs]) (breaking change) +- Final tweaks for Zwave panel ([@turbokongen] - [#7652]) ([zwave docs]) +- Add network_key as a config option ([@robbiet480] - [#7637]) ([zwave docs]) +- Bugfix #7586 ([@turbokongen] - [#7661]) ([lock.zwave docs]) +- Fix tests ([@balloob] - [#7659]) +- Change line endings to LN ([@fabaff] - [#7660]) ([calendar.demo docs]) ([calendar.google docs]) ([camera.synology docs]) ([climate.tado docs]) ([remote.harmony docs]) ([sensor.synologydsm docs]) +- Point pylutron to pypi ([@thecynic] - [#7664]) ([lutron docs]) +- Upgrade Openhome library ([@bazwilliams] - [#7671]) ([media_player.openhome docs]) +- Ignore attribute changes in automation trigger from/to ([@amelchio] - [#7651]) ([automation.state docs]) (breaking change) +- Switch pymodbus to pypi ([@andrey-git] - [#7677]) ([modbus docs]) +- zoneminder: fix incorrect use of logging.exception. ([@tobygray] - [#7675]) ([zoneminder docs]) +- Zwave: Apply refresh_node workaround on 1st instance only ([@andrey-git] - [#7579]) ([zwave docs]) +- Guard against new and removed state change events ([@balloob] - [#7687]) ([automation.state docs]) +- ZWave: Add reset service to meters ([@turbokongen] - [#7676]) ([zwave docs]) +- Remove defunct INSTALL_OPENZWAVE from Dockerfile ([@armills] - [#7697]) +- Fix telegram chats ([@azogue] - [#7689]) ([notify.telegram docs]) +- Fix playback control of web streams ([@cgtobi] - [#7683]) ([media_player.volumio docs]) +- Sort entities in default groups by name ([@amelchio] - [#7681]) +- Continue tracking device over dhcp lease table if wireless adapter not installed ([@LvivEchoes] - [#7690]) ([device_tracker.mikrotik docs]) +- device_tracker.ubus: Handle empty results ([@tobygray] - [#7673]) ([device_tracker.ubus docs]) +- Bump pyEight version ([@mezz64] - [#7701]) ([eight_sleep docs]) +- Upgrade python-telegram-bot to 6.0.1 ([@fabaff] - [#7704]) +- Make 'sender' as requirement for the config (fixes #7698) ([@fabaff] - [#7706]) ([notify.smtp docs]) +- Allow fetching hass.io panel without auth ([@balloob] - [#7714]) ([hassio docs]) +- update apcacccess used in apcupsd to 0.0.10, which fixes random file drop from apcaccess ([@infamy] - [#7722]) ([apcupsd docs]) +- Constrain requests to a version ([@balloob] - [#7725]) +- Asuswrt continuous ssh ([@aronsky] - [#7728]) +- Ensure https base_url in telegram bot ([@bzillins] - [#7726]) ([telegram_bot.webhooks docs]) +- Prevent the random template filter from caching its output. Fixes #5678 ([@antsar] - [#7716]) +- Don't initialize mqtt components which have already been discovered ([@nordeep] - [#7625]) ([mqtt.discovery docs]) +- LIFX: disable color features for white-only bulbs ([@amelchio] - [#7742]) ([light.lifx docs]) +- Don't block startup more than 60 seconds while waiting for components. ([@antsar] - [#7739]) +- Always return rgb color of bulbs ([@w1ll1am23] - [#7743]) ([light.wink docs]) +- Redesign monitored variables for hp_ilo sensor ([@Juggels] - [#7534]) ([sensor.hp_ilo docs]) (breaking change) +- Fix time_date sensor to update at predictable intervals ([@stu-gott] - [#7644]) ([sensor.time_date docs]) +- Added new commands and functionality to the harmony remote component. ([@everix1992] - [#7113]) ([remote docs]) ([remote.harmony docs]) ([remote.services.yaml docs]) +- Template light ([@cribbstechnologies] - [#7657]) ([light.template docs]) (new-platform) +- Exclude filter for event types ([@amigian74] - [#7627]) +- Change setup script to use pip install instead of setup.py develop ([@hoh] - [#7756]) +- Add icons to device tracker. ([@antsar] - [#7759]) +- Rename of the zwave hass.data constants ([@armills] - [#7768]) ([zwave docs]) ([cover.zwave docs]) ([lock.zwave docs]) +- Get rid of mock http component app ([@balloob] - [#7775]) +- Remove usage of event_loop fixture ([@balloob] - [#7776]) +- assertEquals is deprecated ([@balloob] - [#7777]) +- Support for GE Zwave fan controller ([@armills] - [#7767]) ([zwave docs]) ([fan.zwave docs]) (new-platform) +- Replace executor with async_add_job ([@balloob] - [#7658]) +- Fix Telegram Bot send file to multiple targets, snapshots of HA cameras, variable templating, digest auth ([@azogue] - [#7771]) +- Fix more deprecation warnings ([@balloob] - [#7778]) +- Powerview to async ([@sander76] - [#7682]) ([scene.hunterdouglas_powerview docs]) +- Fix home/stay in concord232 ([@CTLS] - [#7789]) ([alarm_control_panel.concord232 docs]) +- Add Marantz SSDP discovery / Detect error string in AppCommand.xml body ([@scarface-4711] - [#7779]) ([media_player.denonavr docs]) +- Upgrade Sphinx to 1.6.2 ([@fabaff] - [#7805]) +- Upgrade slacker to 0.9.50 ([@fabaff] - [#7797]) ([notify.slack docs]) +- Bump pyenvisalink to version 2.1 ([@Cinntax] - [#7803]) ([envisalink docs]) +- Upgrade pysnmp to 4.3.6 ([@fabaff] - [#7806]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) +- Rachio (Sprinklers) ([@Klikini] - [#7600]) ([switch.rachio docs]) (new-platform) +- Rest notify data ([@Teagan42] - [#7757]) ([notify.rest docs]) +- Added handling of an AssertionError from pxssh failed login ([@aronsky] - [#7750]) ([device_tracker.asuswrt docs]) +- Upgrade sqlalchemy to 1.1.10 ([@fabaff] - [#7807]) +- Upgrade mypy to 0.511 ([@fabaff] - [#7809]) +- Allow configuring DSMR5 protocol. ([@aequitas] - [#7535]) ([sensor.dsmr docs]) +- Telegram send image: fix mimetype detection ([@azogue] - [#7802]) +- Bump aiohttp to 2.1.0 ([@mezz64] - [#7825]) +- Cleanup telegram / Add url to webhook ([@pvizeli] - [#7824]) ([telegram_bot.polling docs]) ([telegram_bot.webhooks docs]) (breaking change) +- Upgrade pysnmp to 4.3.7 ([@fabaff] - [#7828]) ([device_tracker.snmp docs]) ([sensor.snmp docs]) +- Flux led fix ([@danielhiversen] - [#7829]) ([light.flux_led docs]) +- update snapcast media player ([@happyleavesaoc] - [#7079]) ([media_player.services.yaml docs]) ([media_player.snapcast docs]) +- Update docstrings and log messages ([@fabaff] - [#7709]) +- Upgrade PyMVGLive to 1.1.4 ([@fabaff] - [#7832]) ([sensor.mvglive docs]) +- Added persistent error message if cover.myq fails to load ([@tchellomello] - [#7700]) ([cover.myq docs]) +- Add initial benchmark framework ([@balloob] - [#7827]) +- Downgrade Docker to Python 3.5 to solve Segmentation Faults ([@philhawthorne] - [#7799]) +- Introduced support to Netgear Arlo Cameras ([@tchellomello] - [#7826]) ([arlo docs]) ([camera.arlo docs]) ([sensor.arlo docs]) (new-platform) +- Allow 'base_url' (fixes #7784) ([@fabaff] - [#7796]) ([upnp docs]) +- Expose the node name on the zwave node entity ([@armills] - [#7787]) ([zwave docs]) +- Bumped pyhomematic version ([@danielperna84] - [#7861]) ([homematic docs]) +- Rename time trigger 'after' to 'at' ([@armills] - [#7846]) ([automation.time docs]) (breaking change) +- Use expected behvaior for above/below ([@armills] - [#7857]) (breaking change) +- log time delay of domain setup in info level ([@azogue] - [#7808]) +- Optimize history_stats efficiency and database usage ([@bokub] - [#7858]) ([sensor.history_stats docs]) +- dont use default for switch name, so that the object id is used ([@abmantis] - [#7845]) ([switch.broadlink docs]) (breaking change) +- Disallow ambiguous color descriptors in the light.turn_on schema ([@amelchio] - [#7765]) (breaking change) +- Make monkey patch work in Python 3.6 ([@balloob] - [#7848]) +- fix permissions issue for Insteon Local #6558 ([@wardcraigj] - [#7860]) ([insteon_local docs]) +- Start of migration framework, to allow moving of files in the config … ([@infamy] - [#7740]) ([ios docs]) ([notify.ios docs]) (breaking change) +- Spotify aliases ([@Teagan42] - [#7702]) ([media_player.spotify docs]) +- Query in InfluxDB sensor is now templatable ([@titilambert] - [#7634]) ([sensor.influxdb docs]) +- fix for https://github.com/home-assistant/home-assistant/issues/7019 ([@molobrakos] - [#7618]) ([tellduslive docs]) +- Check if media commands are actually applicable ([@Juggels] - [#7595]) ([media_player.sonos docs]) +- Quickfix Bug #7384 ([@DavidLP] - [#7582]) ([media_player.spotify docs]) +- Align switch group handling with light. ([@aequitas] - [#7577]) ([switch.rflink docs]) +- Update netdisco ([@balloob] - [#7865]) +- Fix telegram_bot ([@balloob] - [#7877]) ([telegram_bot.polling docs]) ([telegram_bot.webhooks docs]) +- [light.lifx] Update aiolifx ([@amelchio] - [#7882]) ([light.lifx docs]) +- Fix MQTT camera test ([@balloob] - [#7878]) + +[#7079]: https://github.com/home-assistant/home-assistant/pull/7079 +[#7113]: https://github.com/home-assistant/home-assistant/pull/7113 +[#7534]: https://github.com/home-assistant/home-assistant/pull/7534 +[#7535]: https://github.com/home-assistant/home-assistant/pull/7535 +[#7577]: https://github.com/home-assistant/home-assistant/pull/7577 +[#7579]: https://github.com/home-assistant/home-assistant/pull/7579 +[#7582]: https://github.com/home-assistant/home-assistant/pull/7582 +[#7595]: https://github.com/home-assistant/home-assistant/pull/7595 +[#7600]: https://github.com/home-assistant/home-assistant/pull/7600 +[#7618]: https://github.com/home-assistant/home-assistant/pull/7618 +[#7625]: https://github.com/home-assistant/home-assistant/pull/7625 +[#7627]: https://github.com/home-assistant/home-assistant/pull/7627 +[#7634]: https://github.com/home-assistant/home-assistant/pull/7634 +[#7637]: https://github.com/home-assistant/home-assistant/pull/7637 +[#7644]: https://github.com/home-assistant/home-assistant/pull/7644 +[#7646]: https://github.com/home-assistant/home-assistant/pull/7646 +[#7650]: https://github.com/home-assistant/home-assistant/pull/7650 +[#7651]: https://github.com/home-assistant/home-assistant/pull/7651 +[#7652]: https://github.com/home-assistant/home-assistant/pull/7652 +[#7653]: https://github.com/home-assistant/home-assistant/pull/7653 +[#7654]: https://github.com/home-assistant/home-assistant/pull/7654 +[#7655]: https://github.com/home-assistant/home-assistant/pull/7655 +[#7657]: https://github.com/home-assistant/home-assistant/pull/7657 +[#7658]: https://github.com/home-assistant/home-assistant/pull/7658 +[#7659]: https://github.com/home-assistant/home-assistant/pull/7659 +[#7660]: https://github.com/home-assistant/home-assistant/pull/7660 +[#7661]: https://github.com/home-assistant/home-assistant/pull/7661 +[#7664]: https://github.com/home-assistant/home-assistant/pull/7664 +[#7671]: https://github.com/home-assistant/home-assistant/pull/7671 +[#7673]: https://github.com/home-assistant/home-assistant/pull/7673 +[#7675]: https://github.com/home-assistant/home-assistant/pull/7675 +[#7676]: https://github.com/home-assistant/home-assistant/pull/7676 +[#7677]: https://github.com/home-assistant/home-assistant/pull/7677 +[#7681]: https://github.com/home-assistant/home-assistant/pull/7681 +[#7682]: https://github.com/home-assistant/home-assistant/pull/7682 +[#7683]: https://github.com/home-assistant/home-assistant/pull/7683 +[#7687]: https://github.com/home-assistant/home-assistant/pull/7687 +[#7689]: https://github.com/home-assistant/home-assistant/pull/7689 +[#7690]: https://github.com/home-assistant/home-assistant/pull/7690 +[#7697]: https://github.com/home-assistant/home-assistant/pull/7697 +[#7700]: https://github.com/home-assistant/home-assistant/pull/7700 +[#7701]: https://github.com/home-assistant/home-assistant/pull/7701 +[#7702]: https://github.com/home-assistant/home-assistant/pull/7702 +[#7704]: https://github.com/home-assistant/home-assistant/pull/7704 +[#7706]: https://github.com/home-assistant/home-assistant/pull/7706 +[#7709]: https://github.com/home-assistant/home-assistant/pull/7709 +[#7714]: https://github.com/home-assistant/home-assistant/pull/7714 +[#7716]: https://github.com/home-assistant/home-assistant/pull/7716 +[#7722]: https://github.com/home-assistant/home-assistant/pull/7722 +[#7725]: https://github.com/home-assistant/home-assistant/pull/7725 +[#7726]: https://github.com/home-assistant/home-assistant/pull/7726 +[#7728]: https://github.com/home-assistant/home-assistant/pull/7728 +[#7739]: https://github.com/home-assistant/home-assistant/pull/7739 +[#7740]: https://github.com/home-assistant/home-assistant/pull/7740 +[#7742]: https://github.com/home-assistant/home-assistant/pull/7742 +[#7743]: https://github.com/home-assistant/home-assistant/pull/7743 +[#7750]: https://github.com/home-assistant/home-assistant/pull/7750 +[#7756]: https://github.com/home-assistant/home-assistant/pull/7756 +[#7757]: https://github.com/home-assistant/home-assistant/pull/7757 +[#7759]: https://github.com/home-assistant/home-assistant/pull/7759 +[#7765]: https://github.com/home-assistant/home-assistant/pull/7765 +[#7767]: https://github.com/home-assistant/home-assistant/pull/7767 +[#7768]: https://github.com/home-assistant/home-assistant/pull/7768 +[#7771]: https://github.com/home-assistant/home-assistant/pull/7771 +[#7775]: https://github.com/home-assistant/home-assistant/pull/7775 +[#7776]: https://github.com/home-assistant/home-assistant/pull/7776 +[#7777]: https://github.com/home-assistant/home-assistant/pull/7777 +[#7778]: https://github.com/home-assistant/home-assistant/pull/7778 +[#7779]: https://github.com/home-assistant/home-assistant/pull/7779 +[#7787]: https://github.com/home-assistant/home-assistant/pull/7787 +[#7789]: https://github.com/home-assistant/home-assistant/pull/7789 +[#7796]: https://github.com/home-assistant/home-assistant/pull/7796 +[#7797]: https://github.com/home-assistant/home-assistant/pull/7797 +[#7799]: https://github.com/home-assistant/home-assistant/pull/7799 +[#7802]: https://github.com/home-assistant/home-assistant/pull/7802 +[#7803]: https://github.com/home-assistant/home-assistant/pull/7803 +[#7805]: https://github.com/home-assistant/home-assistant/pull/7805 +[#7806]: https://github.com/home-assistant/home-assistant/pull/7806 +[#7807]: https://github.com/home-assistant/home-assistant/pull/7807 +[#7808]: https://github.com/home-assistant/home-assistant/pull/7808 +[#7809]: https://github.com/home-assistant/home-assistant/pull/7809 +[#7824]: https://github.com/home-assistant/home-assistant/pull/7824 +[#7825]: https://github.com/home-assistant/home-assistant/pull/7825 +[#7826]: https://github.com/home-assistant/home-assistant/pull/7826 +[#7827]: https://github.com/home-assistant/home-assistant/pull/7827 +[#7828]: https://github.com/home-assistant/home-assistant/pull/7828 +[#7829]: https://github.com/home-assistant/home-assistant/pull/7829 +[#7832]: https://github.com/home-assistant/home-assistant/pull/7832 +[#7845]: https://github.com/home-assistant/home-assistant/pull/7845 +[#7846]: https://github.com/home-assistant/home-assistant/pull/7846 +[#7848]: https://github.com/home-assistant/home-assistant/pull/7848 +[#7857]: https://github.com/home-assistant/home-assistant/pull/7857 +[#7858]: https://github.com/home-assistant/home-assistant/pull/7858 +[#7860]: https://github.com/home-assistant/home-assistant/pull/7860 +[#7861]: https://github.com/home-assistant/home-assistant/pull/7861 +[#7865]: https://github.com/home-assistant/home-assistant/pull/7865 +[#7877]: https://github.com/home-assistant/home-assistant/pull/7877 +[#7878]: https://github.com/home-assistant/home-assistant/pull/7878 +[#7882]: https://github.com/home-assistant/home-assistant/pull/7882 +[@CTLS]: https://github.com/CTLS +[@Cinntax]: https://github.com/Cinntax +[@DavidLP]: https://github.com/DavidLP +[@Juggels]: https://github.com/Juggels +[@Klikini]: https://github.com/Klikini +[@LvivEchoes]: https://github.com/LvivEchoes +[@Teagan42]: https://github.com/Teagan42 +[@abmantis]: https://github.com/abmantis +[@aequitas]: https://github.com/aequitas +[@amelchio]: https://github.com/amelchio +[@amigian74]: https://github.com/amigian74 +[@andrey-git]: https://github.com/andrey-git +[@antsar]: https://github.com/antsar +[@armills]: https://github.com/armills +[@aronsky]: https://github.com/aronsky +[@azogue]: https://github.com/azogue +[@balloob]: https://github.com/balloob +[@bazwilliams]: https://github.com/bazwilliams +[@bokub]: https://github.com/bokub +[@bzillins]: https://github.com/bzillins +[@cgtobi]: https://github.com/cgtobi +[@cribbstechnologies]: https://github.com/cribbstechnologies +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@everix1992]: https://github.com/everix1992 +[@fabaff]: https://github.com/fabaff +[@happyleavesaoc]: https://github.com/happyleavesaoc +[@hoh]: https://github.com/hoh +[@infamy]: https://github.com/infamy +[@mezz64]: https://github.com/mezz64 +[@molobrakos]: https://github.com/molobrakos +[@nordeep]: https://github.com/nordeep +[@philhawthorne]: https://github.com/philhawthorne +[@pvizeli]: https://github.com/pvizeli +[@robbiet480]: https://github.com/robbiet480 +[@sander76]: https://github.com/sander76 +[@scarface-4711]: https://github.com/scarface-4711 +[@stu-gott]: https://github.com/stu-gott +[@tchellomello]: https://github.com/tchellomello +[@thecynic]: https://github.com/thecynic +[@titilambert]: https://github.com/titilambert +[@tobygray]: https://github.com/tobygray +[@turbokongen]: https://github.com/turbokongen +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[alarm_control_panel.concord232 docs]: https://home-assistant.io/components/alarm_control_panel.concord232/ +[apcupsd docs]: https://home-assistant.io/components/apcupsd/ +[arlo docs]: https://home-assistant.io/components/arlo/ +[automation.state docs]: https://home-assistant.io/components/automation.state/ +[automation.time docs]: https://home-assistant.io/components/automation.time/ +[calendar.demo docs]: https://home-assistant.io/components/calendar.demo/ +[calendar.google docs]: https://home-assistant.io/components/calendar.google/ +[camera.amcrest docs]: https://home-assistant.io/components/camera.amcrest/ +[camera.arlo docs]: https://home-assistant.io/components/camera.arlo/ +[camera.synology docs]: https://home-assistant.io/components/camera.synology/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[cover.myq docs]: https://home-assistant.io/components/cover.myq/ +[cover.zwave docs]: https://home-assistant.io/components/cover.zwave/ +[device_tracker.__init__ docs]: https://home-assistant.io/components/device_tracker.__init__/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.mikrotik docs]: https://home-assistant.io/components/device_tracker.mikrotik/ +[device_tracker.snmp docs]: https://home-assistant.io/components/device_tracker.snmp/ +[device_tracker.ubus docs]: https://home-assistant.io/components/device_tracker.ubus/ +[eight_sleep docs]: https://home-assistant.io/components/eight_sleep/ +[envisalink docs]: https://home-assistant.io/components/envisalink/ +[fan.zwave docs]: https://home-assistant.io/components/fan.zwave/ +[hassio docs]: https://home-assistant.io/components/hassio/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[image_processing.seven_segments docs]: https://home-assistant.io/components/image_processing.seven_segments/ +[insteon_local docs]: https://home-assistant.io/components/insteon_local/ +[ios docs]: https://home-assistant.io/components/ios/ +[light.__init__ docs]: https://home-assistant.io/components/light.__init__/ +[light.flux_led docs]: https://home-assistant.io/components/light.flux_led/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.template docs]: https://home-assistant.io/components/light.template/ +[light.wink docs]: https://home-assistant.io/components/light.wink/ +[lock.zwave docs]: https://home-assistant.io/components/lock.zwave/ +[lutron docs]: https://home-assistant.io/components/lutron/ +[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/ +[media_player.openhome docs]: https://home-assistant.io/components/media_player.openhome/ +[media_player.services.yaml docs]: https://home-assistant.io/components/media_player.services.yaml/ +[media_player.snapcast docs]: https://home-assistant.io/components/media_player.snapcast/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/ +[media_player.volumio docs]: https://home-assistant.io/components/media_player.volumio/ +[modbus docs]: https://home-assistant.io/components/modbus/ +[mqtt.discovery docs]: https://home-assistant.io/components/mqtt.discovery/ +[notify.ios docs]: https://home-assistant.io/components/notify.ios/ +[notify.rest docs]: https://home-assistant.io/components/notify.rest/ +[notify.slack docs]: https://home-assistant.io/components/notify.slack/ +[notify.smtp docs]: https://home-assistant.io/components/notify.smtp/ +[notify.telegram docs]: https://home-assistant.io/components/notify.telegram/ +[recorder.__init__ docs]: https://home-assistant.io/components/recorder.__init__/ +[remote docs]: https://home-assistant.io/components/remote/ +[remote.harmony docs]: https://home-assistant.io/components/remote.harmony/ +[remote.services.yaml docs]: https://home-assistant.io/components/remote.services.yaml/ +[scene.hunterdouglas_powerview docs]: https://home-assistant.io/components/scene.hunterdouglas_powerview/ +[sensor.amcrest docs]: https://home-assistant.io/components/sensor.amcrest/ +[sensor.arlo docs]: https://home-assistant.io/components/sensor.arlo/ +[sensor.dsmr docs]: https://home-assistant.io/components/sensor.dsmr/ +[sensor.fedex docs]: https://home-assistant.io/components/sensor.fedex/ +[sensor.history_stats docs]: https://home-assistant.io/components/sensor.history_stats/ +[sensor.hp_ilo docs]: https://home-assistant.io/components/sensor.hp_ilo/ +[sensor.influxdb docs]: https://home-assistant.io/components/sensor.influxdb/ +[sensor.mvglive docs]: https://home-assistant.io/components/sensor.mvglive/ +[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/ +[sensor.synologydsm docs]: https://home-assistant.io/components/sensor.synologydsm/ +[sensor.time_date docs]: https://home-assistant.io/components/sensor.time_date/ +[sensor.usps docs]: https://home-assistant.io/components/sensor.usps/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.rachio docs]: https://home-assistant.io/components/switch.rachio/ +[switch.rflink docs]: https://home-assistant.io/components/switch.rflink/ +[telegram_bot.__init__ docs]: https://home-assistant.io/components/telegram_bot.__init__/ +[telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/ +[telegram_bot.webhooks docs]: https://home-assistant.io/components/telegram_bot.webhooks/ +[tellduslive docs]: https://home-assistant.io/components/tellduslive/ +[upnp docs]: https://home-assistant.io/components/upnp/ +[zoneminder docs]: https://home-assistant.io/components/zoneminder/ +[zwave docs]: https://home-assistant.io/components/zwave/ +[forum]: https://community.home-assistant.io/ +[gitter]: https://gitter.im/home-assistant/home-assistant +[issue]: https://github.com/home-assistant/home-assistant/issues From 5a39723ca5044eee9b9d303f572bc6bd2dadfef3 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 4 Jun 2017 04:25:39 -0400 Subject: [PATCH 07/44] Added authentication parameter to telegram_bot preferences (#2755) * Added authentication parameter option to telegram_bot preferences * Update format --- source/_components/telegram_bot.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index 946772a6a13..46e91394524 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -44,6 +44,7 @@ Send a photo. | `caption` | yes | The title of the image. | | `username` | yes | Username for a URL which require HTTP basic authentication. | | `password` | yes | Password for a URL which require HTTP basic authentication. | +| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | | `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | @@ -59,6 +60,7 @@ Send a document. | `caption` | yes | The title of the document. | | `username` | yes | Username for a URL which require HTTP basic authentication. | | `password` | yes | Password for a URL which require HTTP basic authentication. | +| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | | `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | From 0de17d8d9551c6af013f4d644493019ab9045b6e Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 4 Jun 2017 04:26:08 -0400 Subject: [PATCH 08/44] Fixed typo on TelegramBot docs (#2754) --- source/_components/notify.telegram.markdown | 8 ++++---- source/_components/telegram_bot.markdown | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index 7dde8c1dca1..f2a85fcc46b 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -89,7 +89,7 @@ Configuration variables: - **message** (*Required*): Message text. - **title** (*Optional*): Will be composed as '%title\n%message'. - **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. +- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. ### {% linkable_title Photo support %} @@ -119,7 +119,7 @@ Configuration variables: - **password** (*Optional*): Username for a URL which require HTTP authentication. - **authentication** (*Optional*): Set to 'digest' to use HTTP digest authentication, defaults to 'basic'. - **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. +- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. ### {% linkable_title Document support %} @@ -148,7 +148,7 @@ Configuration variables: - **password** (*Optional*): Username for a URL which require HTTP authentication. - **authentication** (*Optional*): Set to 'digest' to use HTTP digest authentication, defaults to 'basic'. - **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. +- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. ### {% linkable_title Location support %} @@ -171,4 +171,4 @@ Configuration variables: - **latitude** (*Required*): The latitude to send. - **longitude** (*Required*): The longitude to send. - **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. +- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index 46e91394524..5cc99311a9f 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -32,7 +32,7 @@ Send a notification. | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/send_photo` %} Send a photo. @@ -48,7 +48,7 @@ Send a photo. | `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/send_document` %} Send a document. @@ -64,7 +64,7 @@ Send a document. | `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/send_location` %} Send a location. @@ -76,7 +76,7 @@ Send a location. | `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/edit_message` %} Edit a previusly sent message in a conversation. @@ -89,7 +89,7 @@ Edit a previusly sent message in a conversation. | `title` | yes | Optional title for your notification. Will be composed as '%title\n%message'. | | `parse_mode` | yes | Parser for the message text: `html` or `markdown`. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/edit_caption` %} Edit the caption of a previusly sent message. @@ -100,7 +100,7 @@ Edit the caption of a previusly sent message. | `chat_id` | no | The chat_id where to edit the caption. | | `caption` | no | Message body of the notification. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/edit_replymarkup` %} Edit the inline keyboard of a previusly sent message. @@ -110,7 +110,7 @@ Edit the inline keyboard of a previusly sent message. | `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. | | `chat_id` | no | The chat_id where to edit the reply_markup. | | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | -| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | #### {% linkable_title Service `telegram_bot/answer_callback_query` %} Respond to a callback query originated by clicking on an online keyboard button. The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. From 87ab5b6cf8b6d1a12bb9360b308cb78d8ca49b45 Mon Sep 17 00:00:00 2001 From: yankees9920 Date: Sun, 4 Jun 2017 04:27:48 -0400 Subject: [PATCH 09/44] Tweaks for Google Home support (#2753) I had to explicitly set `listen_port: 80` for Google Home to work properly. It was defaulting to port 8300 without that declaration. Also the docs should be more explicit in the Troubleshooting section because the URLs you need to confirm for Google Home are actually - http://:80/description.xml - http://:80/api/pi/lights --- source/_components/emulated_hue.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 8db5a8205c5..c50f15861ed 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -28,6 +28,8 @@ To enable the emulated Hue bridge, add one of the following configs to your `con ```yaml # Google Home example configuration.yaml entry emulated_hue: + type: google_home + listen_port: 80 # Google Home does not work on different ports. ``` @@ -111,6 +113,8 @@ You can verify that the `emulated_hue` component has been loaded and is respondi - `http://:8300/description.xml` - This URL should return a descriptor file in the form of an XML file. - `http://:8300/api/pi/lights` - This will return a list of devices, lights, scenes, groups, etc.. that `emulated_hue` is exposing to Alexa. +For Google Home, verify that the URLs above are using port 80, rather than port 8300 (i.e. http://:80/description.xml). + An additional step is required to run Home Assistant as non-root user and use port 80 when using the AiO script. Execute the following command to allow `emulated_hue` to use port 80 as non-root user. ```bash From c65cec1a6686aded1d96b4a67f4a846a2dd0571a Mon Sep 17 00:00:00 2001 From: R Huish Date: Sun, 4 Jun 2017 09:30:10 +0100 Subject: [PATCH 10/44] Moved warning above command. (#2752) * Moved warning above command. Moved warning above command to ease reading. * Remove note --- .../_docs/installation/raspberry-pi-all-in-one.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_docs/installation/raspberry-pi-all-in-one.markdown b/source/_docs/installation/raspberry-pi-all-in-one.markdown index 97da2ba5a98..bff307a8b50 100644 --- a/source/_docs/installation/raspberry-pi-all-in-one.markdown +++ b/source/_docs/installation/raspberry-pi-all-in-one.markdown @@ -19,14 +19,15 @@ Note that as of 2016-11-30 SSH is disabled by default in the official Raspbian i Irrespective of whether you use SSH to connect to the Pi from another computer or not, you need SSH to install Home Assistant. So go ahead and enable SSH. * Login to Raspberry Pi. For example with `ssh pi@your_raspberry_pi_ip` -* Run the following command +* Run the following command: + +

+ This command is a one-liner and not run as sudo. +

```bash $ curl -O https://raw.githubusercontent.com/home-assistant/fabric-home-assistant/master/hass_rpi_installer.sh && sudo chown pi:pi hass_rpi_installer.sh && bash hass_rpi_installer.sh ``` -

- Note this command is one-line and not run as sudo. -

Installation will take approx. 1-2 hours depending on the Raspberry Pi model the installer is being run against. The installer will identitfy what Raspberry Pi hardware revision you are using and adjust commands accordingly. A complete log of the install is located at: `/home/pi/fabric-home-assistant/installation_report.txt` The installer has been updated to simply log any errors encountered, but resume installing. Please consult the "installation report" if your install encountered issues. From e8ada0ee2d3fe254de5521f9368d9e738189bbe6 Mon Sep 17 00:00:00 2001 From: bigbadblunt Date: Sun, 4 Jun 2017 09:33:46 +0100 Subject: [PATCH 11/44] Behaviour of learn_request (#2748) Corrected documentation to not state the learned codes are shown in the log --- source/_components/switch.broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 4a56445d2b3..297b55b266c 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -47,7 +47,7 @@ Information about how to install on Windows can be found [here](https://home-ass ### {% linkable_title How to obtain IR/RF packets? %} -Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of Available services: and hit CALL SERVICE. Press the button on your remote with in 20 seconds. The packet will be printed in the log and as a persistent notification. +Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of Available services: and hit CALL SERVICE. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in theg States page of the web interface. Example config for rm, rm2, rm_mini, rm_pro_phicomm, rm2_home_plus, rm2_home_plus_gdt, rm2_pro_plus, rm2_pro_plus2, rm2_pro_plus_bl and rm_mini_shate devices: From 7af26b0a0b9e943cefa1b494d813fb158060ffd3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Jun 2017 10:43:30 +0200 Subject: [PATCH 12/44] Fix typo introduced with #2748 and other modifications --- source/_components/switch.broadlink.markdown | 151 +++++++++---------- 1 file changed, 68 insertions(+), 83 deletions(-) diff --git a/source/_components/switch.broadlink.markdown b/source/_components/switch.broadlink.markdown index 297b55b266c..e04f7d7d7ca 100644 --- a/source/_components/switch.broadlink.markdown +++ b/source/_components/switch.broadlink.markdown @@ -19,107 +19,93 @@ To enable it, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry switch: - platform: broadlink - host: IP_ADDRESS - mac: 'MAC_ADDRESS' - switches: - reciever: - command_on: 'switch_packet on' - command_off: 'switch_packet off' + - platform: broadlink + host: IP_ADDRESS + mac: 'MAC_ADDRESS' + switches: + reciever: + command_on: 'switch_packet on' + command_off: 'switch_packet off' ``` Configuration variables: - **host** (*Required*): The hostname/IP address to connect to. -- **mac** (*Required*): Device mac address. -- **timeout** (*Optional*): Timeout in seconds for the connection to the device +- **mac** (*Required*): Device MAC address. +- **timeout** (*Optional*): Timeout in seconds for the connection to the device. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. -- **type** (*Optional*): Switch type. (rm, rm2, rm_mini, rm_pro_phicomm, rm2_home_plus, rm2_home_plus_gdt, rm2_pro_plus, rm2_pro_plus2, rm2_pro_plus_bl, rm_mini_shate, sp1, sp2, honeywell_sp2, sp3, spmini2 or spminiplus) +- **type** (*Optional*): Switch type. Choose one from: `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl`, `rm_mini_shate`, `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2` or `spminiplus`. - **switches** (*Optional*): The array that contains all switches. - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - **friendly_name** (*Optional*): The name used to display the switch in the frontend. - **command_on** (*Required*): Base64 encoded packet from RM device to take for on. - **command_off** (*Required*): Base64 encoded packet from RM device to take for off. - Information about how to install on Windows can be found [here](https://home-assistant.io/components/sensor.broadlink/#microsoft-windows-installation) ### {% linkable_title How to obtain IR/RF packets? %} -Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of Available services: and hit CALL SERVICE. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in theg States page of the web interface. +Choose Call Service from the Developer Tools. Choose the service broadlink/learn_command from the list of **Available services:** and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface. - -Example config for rm, rm2, rm_mini, rm_pro_phicomm, rm2_home_plus, rm2_home_plus_gdt, rm2_pro_plus, rm2_pro_plus2, rm2_pro_plus_bl and rm_mini_shate devices: +Example config for `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl` and `rm_mini_shate` devices: ```yaml -switch 2: - platform: broadlink - host: 192.168.1.2 - mac: 'B4:43:0D:CC:0F:58' - timeout: 15 - switches: -# Will work on most Phillips tvs: - tv_phillips: - friendly_name: "Phillips Tv Power" - command_on: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' - command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' - -# Will work on most LG tvs - tv_lg: - friendly_name: "LG Tv Power" - command_on: 'JgBYAAABIJISExETETcSEhISEhQQFBETETcROBESEjcRNhM1EjcTNRMTERISNxEUERMSExE2EjYSNhM2EhIROBE3ETcREhITEgAFGwABH0oSAAwzAAEfShEADQU=' - command_off: 'JgBYAAABIJISExETETcSEhISEhQQFBETETcROBESEjcRNhM1EjcTNRMTERISNxEUERMSExE2EjYSNhM2EhIROBE3ETcREhITEgAFGwABH0oSAAwzAAEfShEADQU=' - - tv_lg_hdmi1_hdmi2: - friendly_name: "LG Tv HDMI12" - command_on: 'JgBIAAABIZMRExITEjYSExMRERURExEUEDkRNxEUEjYSNhM3ETcSNxITETgSNhI2ExMQExE4ETYSNxIUERMSExE4ETcRFBETEQANBQ==' - command_off: 'JgBQAAABJJMSEhISETgSEhITEBMSEhMSETcSNxMREjcSNxI3EjcSOBETERITNhM2EhITERM2EzcRNxI3ExISEhI3EjcRExETEgAFLQABJEoRAA0FAAAAAAAAAAA=' - - tv_lg_hdmi3: - friendly_name: "LG Tv HDMI3" - command_on: 'JgBIAAABIZMSFBISETgRExEUERQQFBETEjcTNhMSETgRNxE3EjcROBM2ERMSFBE4ERMSNxM2EjUSFBE2ETgRExM2ExITEhATEwANBQ==' - - tv_lg_av1_av2: - friendly_name: "LG Tv AV12" - command_on: 'JgBIAAABIpQPFBITETgSEw8UEhQSEhEVDzgSOBAUETgQOQ84EjgRNxITETgSExA5EDgREhI3EhMROBMSEDkQFBETEjYTEhE4EQANBQ==' - command_off: 'JgBIAAABH5YPFBETETgUERAUEBURFBATETgROBEUETcSNxE4ETcSOBISEBUQFREUEjUSFBA5ETcRNxE4ETkQOBAUEjcRFRAUEQANBQ==' - - -switch 2: - platform: broadlink - host: 192.168.1.2 - mac: 'B4:43:0D:CC:0F:58' - timeout: 15 - switches: -# Will work on most Phillips tvs: - tv: - friendly_name: "Phillips Tv" - command_on: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' - command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' - +switch: + - platform: broadlink + host: 192.168.1.2 + mac: 'B4:43:0D:CC:0F:58' + timeout: 15 + switches: + # Will work on most Phillips TVs: + tv_phillips: + friendly_name: "Phillips Tv Power" + command_on: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' + command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' + # Will work on most LG TVs + tv_lg: + friendly_name: "LG Tv Power" + command_on: 'JgBYAAABIJISExETETcSEhISEhQQFBETETcROBESEjcRNhM1EjcTNRMTERISNxEUERMSExE2EjYSNhM2EhIROBE3ETcREhITEgAFGwABH0oSAAwzAAEfShEADQU=' + command_off: 'JgBYAAABIJISExETETcSEhISEhQQFBETETcROBESEjcRNhM1EjcTNRMTERISNxEUERMSExE2EjYSNhM2EhIROBE3ETcREhITEgAFGwABH0oSAAwzAAEfShEADQU=' + tv_lg_hdmi1_hdmi2: + friendly_name: "LG Tv HDMI12" + command_on: 'JgBIAAABIZMRExITEjYSExMRERURExEUEDkRNxEUEjYSNhM3ETcSNxITETgSNhI2ExMQExE4ETYSNxIUERMSExE4ETcRFBETEQANBQ==' + command_off: 'JgBQAAABJJMSEhISETgSEhITEBMSEhMSETcSNxMREjcSNxI3EjcSOBETERITNhM2EhITERM2EzcRNxI3ExISEhI3EjcRExETEgAFLQABJEoRAA0FAAAAAAAAAAA=' + tv_lg_hdmi3: + friendly_name: "LG Tv HDMI3" + command_on: 'JgBIAAABIZMSFBISETgRExEUERQQFBETEjcTNhMSETgRNxE3EjcROBM2ERMSFBE4ERMSNxM2EjUSFBE2ETgRExM2ExITEhATEwANBQ==' + tv_lg_av1_av2: + friendly_name: "LG Tv AV12" + command_on: 'JgBIAAABIpQPFBITETgSEw8UEhQSEhEVDzgSOBAUETgQOQ84EjgRNxITETgSExA5EDgREhI3EhMROBMSEDkQFBETEjYTEhE4EQANBQ==' + command_off: 'JgBIAAABH5YPFBETETgUERAUEBURFBATETgROBEUETcSNxE4ETcSOBISEBUQFREUEjUSFBA5ETcRNxE4ETkQOBAUEjcRFRAUEQANBQ==' + - platform: broadlink + host: 192.168.1.2 + mac: 'B4:43:0D:CC:0F:58' + timeout: 15 + switches: + # Will work on most Phillips TVs: + tv: + friendly_name: "Phillips Tv" + command_on: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' + command_off: 'JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=' ``` - Example config for sp1, sp2, honeywell_sp2, sp3, spmini2 and spminiplus devices: +Example config for `sp1`, `sp2`, `honeywell_sp2`, `sp3`, `spmini2` and `spminiplus` devices: ```yaml -switch 1: - platform: broadlink - host: IP_ADDRESS - mac: 'MAC_ADDRESS' - type: sp1 - friendly_name: 'Humidifier' - -switch 2: - platform: broadlink - host: IP_ADDRESS - mac: 'MAC_ADDRESS' - type: sp2 - friendly_name: 'Humidifier' - +switch: + - platform: broadlink + host: IP_ADDRESS + mac: 'MAC_ADDRESS' + type: sp1 + friendly_name: 'Humidifier' + - platform: broadlink + host: IP_ADDRESS + mac: 'MAC_ADDRESS' + type: sp2 + friendly_name: 'Humidifier' ``` - ### {% linkable_title Service `send_packet` %} You can use the service broadlink/send_packet to directly send IR packets without the need to assign a switch entity for each command. @@ -141,12 +127,11 @@ script: - "JgBGAJSTFDUUNhM2ExITEhMSExITEhM2EzYTNhQRFBEUERQRFBEUNRQ2ExITNhMSExITNhMSExITEhM2ExITNhQ1FBEUNhMADQUAAA==" ``` - ### {% linkable_title Using E-Control Remotes %} -If you already have your remotes learned on E-Control app you can use this method to "copy" trem to HA. +If you already have your remotes learned on E-Control app you can use this method to "copy" them to Home Assistant. -First get or learn all the remotes you want to add on HA in E-Control +First get or learn all the remotes you want to add to Home Assistant in E-Control 1. Download @@ -158,7 +143,7 @@ First get or learn all the remotes you want to add on HA in E-Control 3. Get data from your Android device - Connect your Android device to your computer and browse the SD card / External Storage folder "/broadlink/newremote/SharedData/". You need to get the following files and put them in the same folder as this script.: + Connect your Android device to your computer and browse the SD card/External Storage folder "/broadlink/newremote/SharedData/". You need to get the following files and put them in the same folder as this script: jsonSubIr jsonButton @@ -179,11 +164,11 @@ First get or learn all the remotes you want to add on HA in E-Control 3. `sudo python setup.py install` 7. Test the codes -Use the `sendcode` script you have already downloded to test the codes you got from the device -You need to edit the script with your RM Pro IP Address and MAC Address and with the code in hex format. -When run the script, you know the code works when get message +Use the `sendcode` script you have already downloded to test the codes you got from the device. +You need to edit the script with your RM Pro IP Address and MAC Address and with the code in HEX format. +When run the script, you know the code works when get message . Code sent... Not every code works. -8. Convert the hex codes to base64 +8. Convert the HEX codes to base64 Use [this](http://tomeko.net/online_tools/hex_to_base64.php?lang=en1) tool to convert the hex codes to base64 for use with Home Assistant. From b56b04c5de3954cd5b98a80da592eb0cfa5cc9f0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Jun 2017 11:28:36 +0200 Subject: [PATCH 13/44] Update for 0.46 --- source/_components/ha.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/ha.markdown b/source/_components/ha.markdown index 56812a8129d..89d7bcaff95 100644 --- a/source/_components/ha.markdown +++ b/source/_components/ha.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Home Assistant 0.45" +title: "Home Assistant 0.46" description: "" date: 2016-12-16 17:00 sidebar: true @@ -9,7 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other -ha_release: 0.45 +ha_release: 0.46 --- Details about the latest release can always be found at: From f35c0d20e7f9f0a70655c39518357a4bd31a7d8f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Jun 2017 11:39:03 +0200 Subject: [PATCH 14/44] Add screenshot --- source/_posts/2017-06-04-release-46.markdown | 1 + source/images/blog/2017-06-0.46/components.png | Bin 0 -> 32611 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/blog/2017-06-0.46/components.png diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index 1a4c21c843e..dfcf77a7c90 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -8,6 +8,7 @@ author: Paulus Schoutsen author_twitter: balloob comments: true categories: Release-Notes +og_image: /images/blog/2017-06-0.46/components.png --- It's time for 0.46! This release does not have too many new integrations, instead it focussed on bug fixes. diff --git a/source/images/blog/2017-06-0.46/components.png b/source/images/blog/2017-06-0.46/components.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a443074c563b177d16c1d1755d58354406b24b GIT binary patch literal 32611 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%0AmY_ojQR;6@r!m^#}wZ@M)08F7!D|0T`fWSGg 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 U62T+9fd@a2WR#>c@9Vw$A3MxvmjD0& literal 0 HcmV?d00001 From c2133ae81647e31d8d09e91577a5455e6541402c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Jun 2017 11:55:58 +0200 Subject: [PATCH 15/44] Add screenshot --- source/_posts/2017-06-04-release-46.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index dfcf77a7c90..a903e775432 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -11,6 +11,8 @@ categories: Release-Notes og_image: /images/blog/2017-06-0.46/components.png --- + + It's time for 0.46! This release does not have too many new integrations, instead it focussed on bug fixes. ## New platforms From 31628bfd6d1023345539c01f4fca3607aacc24a5 Mon Sep 17 00:00:00 2001 From: Jonatan Castro Date: Sun, 4 Jun 2017 12:02:08 +0200 Subject: [PATCH 16/44] Update light.markdown (#2744) * Update light.markdown I had a hard time setting up attributes to entities until I research for some other user's examples and saw they were using "data:". I feel like this should be mentioned or at least exposed with an example. I saw being used in 2 different ways: ```yaml action: service: light.turn_on data: entity_id: light.kitchen_lights brightness: 200 ``` ```yaml action: - service: light.turn_on entity_id: light.kitchen_lights data: brightness: 200 ``` I'm not sure which one is the best/correct way but tried with both and they work * Fix typos --- source/_components/light.markdown | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/source/_components/light.markdown b/source/_components/light.markdown index 27ad3eb65be..c4ec7bce9ec 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -36,6 +36,27 @@ Most lights do not support all attributes. You can check the platform documentat | `flash` | yes | Tell light to flash, can be either value `short` or `long`. | `effect`| yes | Applies an effect such as `colorloop` or `random`. +

+In order to apply attributes to an entity you will need to add `data:` to the configuration. See example below +

+ +```yaml +# Example configuration.yaml entry +automation: +- id: one + alias: Turn on light when motion is detected + trigger: + - platform: state + entity_id: binary_sensor.motion_1 + to: 'on' + action: + - service: light.turn_on + data: + entity_id: light.living_room + brightness: 255 + kelvin: 2700 +``` + ### {% linkable_title Service `light.turn_off` %} Turns one or multiple lights off. From 954e46c820672a55fcf0b7c8e536017b725a806c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Jun 2017 16:16:00 +0200 Subject: [PATCH 17/44] Add note about time triggers (after->at) --- source/_posts/2017-06-04-release-46.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index a903e775432..401f8c49a96 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -39,7 +39,7 @@ sensor: sensor_type: SENSOR TYPE ``` -- Automation - time: the `after` keyword has been deprecated in favor of the `at` keyword. This resembles better what it does (old one still works, gives a warning) ([@armills] - [#7846]) ([automation.time docs]) (breaking change) +- Automation - time: The `after` keyword for time triggers (not conditions) has been deprecated in favor of the `at` keyword. This resembles better what it does (old one still works, gives a warning) ([@armills] - [#7846]) ([automation.time docs]) (breaking change) - Automation - numeric_state: `above` and `below` will no longer trigger if it is equal. ([@armills] - [#7857]) (breaking change) - Broadlink switches: Entity ids will change for switches that don't have a default name set. In this case the object_id is now used. ([@abmantis] - [#7845]) ([switch.broadlink docs]) (breaking change) - Disallow ambiguous color descriptors in the light.turn_on schema. This means that you can no longer specify both `xy_color` and `rgb_color`. ([@amelchio] - [#7765]) (breaking change) From 8c13dcfe994a071a51c9ddb8be23a98b5c0c0548 Mon Sep 17 00:00:00 2001 From: vrs01 Date: Sun, 4 Jun 2017 18:18:24 +0200 Subject: [PATCH 18/44] Update notify.telegram.markdown (#2759) --- source/_components/notify.telegram.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index f2a85fcc46b..aa49ca3d955 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -13,7 +13,7 @@ ha_release: 0.7.5 --- -The `telegram` platform uses [Telegram](https://web.telegram.org) to delivery notifications from Home Assistant to your Android device, your Windows phone, or your iOS device. +The `telegram` platform uses [Telegram](https://web.telegram.org) to deliver notifications from Home Assistant to your Android device, your Windows phone, or your iOS device. The requirements are: From 476449131c96adff08a641f778c0d0c8cae78a46 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sun, 4 Jun 2017 18:45:40 +0200 Subject: [PATCH 19/44] The automation state trigger has deprecated its state alias (#2758) The "state" used to be an alias for "to" but this was deprecated to make the meaning more clear. This commit updates the examples to no longer use the deprecated name. --- source/_components/alarm_control_panel.manual.markdown | 8 ++++---- source/_components/ifttt.manything.markdown | 8 ++++---- source/_components/media_player.frontier_silicon.markdown | 2 -- source/_components/notify.webostv.markdown | 2 +- source/_components/sensor.modem_callerid.markdown | 6 +++--- source/_cookbook/automation_flashing_lights.markdown | 8 ++++---- source/_cookbook/automation_for_rainy_days.markdown | 4 ++-- .../restart_ha_if_wemo_switch_is_not_detected.markdown | 2 +- ..._on_light_for_10_minutes_when_motion_detected.markdown | 4 ++-- source/_docs/automation/examples.markdown | 4 ++-- 10 files changed, 23 insertions(+), 25 deletions(-) diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index e500f2603ec..b30ceb63a2c 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -43,16 +43,16 @@ automation: trigger: - platform: state entity_id: sensor.pir1 - state: 'active' + to: 'active' - platform: state entity_id: sensor.pir2 - state: 'active' + to: 'active' - platform: state entity_id: sensor.door - state: 'open' + to: 'open' - platform: state entity_id: sensor.window - state: 'open' + to: 'open' condition: - condition: state entity_id: alarm_control_panel.ha_alarm diff --git a/source/_components/ifttt.manything.markdown b/source/_components/ifttt.manything.markdown index 0a872785773..5113b8bbcb7 100644 --- a/source/_components/ifttt.manything.markdown +++ b/source/_components/ifttt.manything.markdown @@ -26,22 +26,22 @@ automation: trigger: - platform: state entity_id: group.all_devices - state: 'not_home' + to: 'not_home' condition: - platform: state entity_id: sun.sun - state: 'above_horizon' + state: 'above_horizon' action: service: ifttt.trigger data: {"event":"manything_on"} - alias: 'ManyThing Recording OFF' # This calls an IFTTT recipe to turn off recording of the ManyThing Camera - # when we are home unless it's nighttime. + # when we get home unless it's nighttime. trigger: - platform: state entity_id: group.all_devices - state: 'home' + to: 'home' condition: - condition: state entity_id: sun.sun diff --git a/source/_components/media_player.frontier_silicon.markdown b/source/_components/media_player.frontier_silicon.markdown index 6507bd0ad82..3300f8dffd1 100644 --- a/source/_components/media_player.frontier_silicon.markdown +++ b/source/_components/media_player.frontier_silicon.markdown @@ -53,10 +53,8 @@ alias: "Bathroom Motion Detected" trigger: platform: state entity_id: binary_sensor.motion_sensor_166d0001171111 - from: 'off' to: 'on' - state: 'on' action: service: media_player.turn_on data: diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 8bfdc9cd640..408c31eef02 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -59,7 +59,7 @@ automation: trigger: platform: state entity_id: binary_sensor.front_door_motion - state: 'on' + to: 'on' action: service: notify.livingroom_tv data: diff --git a/source/_components/sensor.modem_callerid.markdown b/source/_components/sensor.modem_callerid.markdown index 3226f51990d..1c17c3f4742 100644 --- a/source/_components/sensor.modem_callerid.markdown +++ b/source/_components/sensor.modem_callerid.markdown @@ -45,7 +45,7 @@ Some example automations: trigger: platform: state entity_id: sensor.modem_callerid - state: "callerid" + to: "callerid" action: service: notify.notify data: @@ -54,7 +54,7 @@ Some example automations: trigger: platform: state entity_id: sensor.modem_callerid - state: "callerid" + to: "callerid" action: service: persistent_notification.create data: @@ -64,7 +64,7 @@ Some example automations: trigger: platform: state entity_id: sensor.modem_callerid - state: "callerid" + to: "callerid" action: service: tts.google_say data_template: diff --git a/source/_cookbook/automation_flashing_lights.markdown b/source/_cookbook/automation_flashing_lights.markdown index cf09063f1f2..df141213070 100644 --- a/source/_cookbook/automation_flashing_lights.markdown +++ b/source/_cookbook/automation_flashing_lights.markdown @@ -23,7 +23,7 @@ automation: trigger: platform: state entity_id: binary_sensor.PIR1 - state: 'on' + to: 'on' condition: - condition: state entity_id: switch.AlmAct1 @@ -41,7 +41,7 @@ automation: trigger: platform: state entity_id: switch.AlmSnd1 - state: 'on' + to: 'on' action: service: script.turn_on entity_id: script.flash_room1 @@ -50,11 +50,11 @@ automation: trigger: platform: state entity_id: switch.REL1 - state: 'off' + to: 'off' condition: condition: state entity_id: switch.AlmSnd1 - state: 'off' + to: 'off' action: service: script.turn_off entity_id: script.flash_room1 diff --git a/source/_cookbook/automation_for_rainy_days.markdown b/source/_cookbook/automation_for_rainy_days.markdown index d33a8cbef24..0a1d8a7c6f5 100644 --- a/source/_cookbook/automation_for_rainy_days.markdown +++ b/source/_cookbook/automation_for_rainy_days.markdown @@ -20,7 +20,7 @@ automation: trigger: - platform: state entity_id: sensor.precip_intensity - state: 'rain' + to: 'rain' condition: - platform: state entity_id: group.all_devices @@ -40,7 +40,7 @@ And then of course turn off the lamp when it stops raining but only if it's with trigger: - platform: state entity_id: sensor.precip_intensity - state: 'None' + to: 'None' condition: - condition: sun after: 'sunset' diff --git a/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown b/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown index cdb5fd2e8f6..9e2f0663378 100644 --- a/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown +++ b/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown @@ -80,7 +80,7 @@ automation: trigger: - platform: state entity_id: switch.KillHass - state: 'on' + to: 'on' action: service: homeassistant.stop - alias: 'Stop restarting HA is WeMo is found' diff --git a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown index ed859cdaeed..4da386bbbc9 100644 --- a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown +++ b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown @@ -20,7 +20,7 @@ automation: trigger: platform: state entity_id: sensor.motion_sensor - state: 'on' + to: 'on' action: service: homeassistant.turn_on entity_id: light.kitchen @@ -29,7 +29,7 @@ automation: trigger: platform: state entity_id: sensor.motion_sensor - state: 'off' + to: 'off' for: minutes: 10 action: diff --git a/source/_docs/automation/examples.markdown b/source/_docs/automation/examples.markdown index f31c35df84e..a1eb7ddfae7 100644 --- a/source/_docs/automation/examples.markdown +++ b/source/_docs/automation/examples.markdown @@ -26,7 +26,7 @@ automation: offset: '-01:00:00' - platform: state entity_id: group.all_devices - state: 'home' + to: 'home' condition: # Prefix the first line of each condition configuration # with a '-'' to enter multiple @@ -45,7 +45,7 @@ automation: trigger: platform: state entity_id: group.all_devices - state: 'not_home' + to: 'not_home' action: service: light.turn_off entity_id: group.all_lights From 6c3476ae952d7497e645180a24827cb8d8074246 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sun, 4 Jun 2017 18:46:55 +0200 Subject: [PATCH 20/44] The above/below conditions no longer match equal values (#2757) --- source/_cookbook/automation_first_light.markdown | 6 +++--- source/_docs/scripts/conditions.markdown | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_cookbook/automation_first_light.markdown b/source/_cookbook/automation_first_light.markdown index e2f857912f1..098036db77f 100644 --- a/source/_cookbook/automation_first_light.markdown +++ b/source/_cookbook/automation_first_light.markdown @@ -75,15 +75,15 @@ automation: # if light is off, force a 0, otherwise use the brightness value value_template: {% raw %}'{% if states.light.livingroom_ec.state == "on" %}{{ states.light.livingroom_ec.attributes.brightness }}{% else %}0{% endif %}'{% endraw %} # brightness below 50% (255 = 100%) - below: 127 + below: 128 - condition: numeric_state entity_id: light.kitchen_bar value_template: {% raw %}'{% if states.light.kitchen_bar.state == "on" %}{{ states.light.kitchen_bar.attributes.brightness }}{% else %}0{% endif %}'{% endraw %} - below: 127 + below: 128 - condition: numeric_state entity_id: light.kitchen_ceiling value_template: {% raw %}'{% if states.light.kitchen_ceiling.state == "on" %}{{ states.light.kitchen_ceiling.attributes.brightness }}{% else %}0{% endif %}'{% endraw %} - below: 127 + below: 128 # Trigger a scene # You could add as many services or scenes as you'd like diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index ac33901d7ee..5763106da34 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -68,9 +68,9 @@ condition: ### {% linkable_title Numeric state condition %} -This type of condition attempts to parse the state of specified entity as a number and triggers if the value matches all of the above or below thresholds. +This type of condition attempts to parse the state of specified entity as a number and triggers if the value matches the thresholds. -For above, the condition passes if `value >= above`. For below, the condition passes if `value <= below`. If both `below` and `above` are specified, both tests have to pass. +If both `below` and `above` are specified, both tests have to pass. You can optionally use a `value_template` to process the value of the state before testing it. From 2660f3f55c24bd43101e471216b35b2d2a126932 Mon Sep 17 00:00:00 2001 From: Brent Saltzman Date: Sun, 4 Jun 2017 15:22:04 -0500 Subject: [PATCH 21/44] Added example for automation based on solar elevation (#2760) * Added example for automation based on solar elevation Added example for automation based on solar elevation angle trigger. * Escape the template --- source/_docs/automation/trigger.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index ac7e7a4ca4d..6f8d346e895 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -111,6 +111,23 @@ automation: offset: '-00:45:00' ``` +Sometimes you may want more grainular control over an automation based on the elevation of the sun. This can be used to layer automations to occur as the sun lowers on the horizon even after when it is below the horizon. This is also useful when the "sunset" event is not dark enough outside and you would like the automation to run later at a precise solar angle instead of the time offset such as turning on exterior lighting. + +```yaml +automation: + alias: "Exterior Lighting on when dark outside" + trigger: + platform: numeric_state + entity_id: sun.sun + value_template: "{% raw %}{{ state.attributes.elevation }}{% endraw %}" + # Can be a positive or negetive number + below: -4.0 + action: + service: switch.turn_on + entity_id: switch.exterior_lighting +``` +The US Naval Observatory has a [tool](http://aa.usno.navy.mil/data/docs/AltAz.php) that will help you estimate what the solar angle will be at any specific time. + ### {% linkable_title Template trigger %} Template triggers work by evaluating a [template] on each state change. The trigger will fire if the state change caused the template to render 'true'. This is achieved by having the template result in a true boolean expression (`{% raw %}{{ is_state('device_tracker.paulus', 'home') }}{% endraw %}`) or by having the template render 'true' (example below). From fbc2e8fc5b9c23ea89ecfd3d838625cbc6ab1f28 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Jun 2017 22:22:17 +0200 Subject: [PATCH 22/44] Revert changes from #2293 (fixes #2738) (#2761) --- source/_components/blink.markdown | 32 ++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/source/_components/blink.markdown b/source/_components/blink.markdown index 086bb9a1799..e14d68d0d55 100644 --- a/source/_components/blink.markdown +++ b/source/_components/blink.markdown @@ -25,7 +25,13 @@ blink: password: YOUR_PASSWORD ``` +Configuration variables: + +- **username** (*Required*): Your username to login to Blink. +- **password** (*Required*): Your password to login to Blink. + Once loaded, your front end will have the following components: + * A camera image for each camera in your system. * A binary_sensor per camera that indicates whether motion detection is enabled. * A binary_sensor for the system that indicates if the system is armed or disarmed. @@ -33,25 +39,27 @@ Once loaded, your front end will have the following components: * A sensor per camera that reports battery level. * A sensor per camera that reports unread notification (ie. detected motion events). -Since the cameras are battery operated, the images are only updated in Home Assistant when the user manually forces a new photo. This image can be updated with the `blink.snap_picture` service followed by a `blink.force_update` service call to force Home Assistant to request an update from Blink's servers. If the `blink.force_update` service is not called, the image will be updated within a 180 second interval, set so that automatic server requests don't overwhelm the Blink API. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended. +Since the cameras are battery operated, the images are only updated in Home Assistant when the user manually forces a new photo. This image can be updated with the `snap_picture` service to force Home Assistant to request an update from Blink's servers. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended. Services: -There are three services availiabe for the blink platform: + +This services are available for the `blink` component: + - arm_system - arm_camera - snap_picture -- force_update -For `blink.arm_system`, the value sent can be either "True" or "False" and will arm and disarm the whole blink system, respectively -Arm system example +For `arm_system`, the value sent can be either `True` or `False` and will arm and disarm the whole Blink system. Arm system example: + ```json { "device_armed": "True" } ``` -Arm camera follows a similar structure, but each indidivual camera can have motion detection enabled or disabled. Because of this, you also need to supply a name. For example, if I have a camera named "Living Room" and I want to turn off motion detection on that camera, I'd call the `blink.arm_camera` service with the following payload: +Arm camera follows a similar structure, but each indidivual camera can have motion detection enabled or disabled. Because of this, you also need to supply a name. For example, if you have a camera named "Living Room" and you want to turn off motion detection on that camera, you would call the `arm_camera` service with the following payload: + ```json { "friendly_name": "Living Room", @@ -59,20 +67,14 @@ Arm camera follows a similar structure, but each indidivual camera can have moti } ``` -The `blink.snap_picture` service takes the camera name as the payload and with take a new picture with your camera. -``` +The `snap_picture` service takes the camera name as the payload and with take a new picture with your camera. + +```json { "friendly_name": "Living Room" } ``` -The `blink.force_update` service can simply be called with no payload to force a server update. - -Configuration variables: - -- **username** (*Required*): Your username to login to Blink -- **password** (*Required*): Your password to login to Blink -

From 06eaac8d79b1e3dc9422f80ce877f03e19b60b99 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 4 Jun 2017 23:56:21 +0200 Subject: [PATCH 23/44] Create bluetooth_bcm43xx.markdonw --- source/_addons/bluetooth_bcm43xx.markdonw | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_addons/bluetooth_bcm43xx.markdonw diff --git a/source/_addons/bluetooth_bcm43xx.markdonw b/source/_addons/bluetooth_bcm43xx.markdonw new file mode 100644 index 00000000000..86fdf43922d --- /dev/null +++ b/source/_addons/bluetooth_bcm43xx.markdonw @@ -0,0 +1,12 @@ +--- +layout: page +title: "Bluetooth BCM43xx" +description: "Activate bluetooth for bcm43xx" +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Start Bluetooth for BCM43xx chipset on startup. Like Raspberry Pi3 From b5696673413c2270f0fe5c14bbe65379068c5d77 Mon Sep 17 00:00:00 2001 From: Denix Date: Mon, 5 Jun 2017 11:23:24 +0200 Subject: [PATCH 24/44] Update sensor.sensehat.markdown (#2765) * Update sensor.sensehat.markdown updated installation steps * Revert ha_release --- source/_components/sensor.sensehat.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.sensehat.markdown b/source/_components/sensor.sensehat.markdown index 03a4a95a6d0..f2b28881bad 100644 --- a/source/_components/sensor.sensehat.markdown +++ b/source/_components/sensor.sensehat.markdown @@ -2,7 +2,7 @@ layout: page title: "Sense HAT" description: "Instructions how to integrate Sense HAT within Home Assistant." -date: 2016-12-05 07:00 +date: 2017-06-03 04:00 sidebar: true comments: false sharing: true @@ -124,18 +124,18 @@ As all of the following steps should be under the `pi` user environment. ###### Install _RTIMU_ ```bash -# Install RTIMU to pi user environment +# pi user environment: Install RTIMU pip3 install rtimulib -# Add symlink to RTIMU in _homeassistant_venv_ -# Create a symlink using the following command: -ln -s /usr/lib/python3/dist-packages/RTIMU.cpython-34m-arm-linux-gnueabihf.so /srv/homeassistant/homeassistant_venv/lib/python3.4/ - -# Add _homeassistant_ user to the _input_ and the _i2c_ groups +# pi user environment: Add _homeassistant_ user to the _input_, _video_ and the _i2c_ groups sudo addgroup homeassistant input sudo addgroup homeassistant i2c +sudo addgroup homeassistant video -# Reboot Raspberry Pi to apply changes +# HA environment: Add symlink to RTIMU +ln -s /usr/lib/python3/dist-packages/RTIMU.cpython-35m-arm-linux-gnueabihf.so /srv/homeassistant/lib/python3.5/site-packages/ + +# pi user environment: Reboot Raspberry Pi to apply changes sudo reboot ``` From 227e97c39ae4027bc41f99e943979488116de9d1 Mon Sep 17 00:00:00 2001 From: Denix Date: Mon, 5 Jun 2017 11:23:56 +0200 Subject: [PATCH 25/44] Update apache.markdown (#2763) corrected typo --- source/_docs/ecosystem/apache.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/apache.markdown b/source/_docs/ecosystem/apache.markdown index 31747c477a2..9e5806fe59d 100644 --- a/source/_docs/ecosystem/apache.markdown +++ b/source/_docs/ecosystem/apache.markdown @@ -22,7 +22,7 @@ This is useful if you want to have: So you already have a working Apache server available at example.org. Your Home Assistant is correctly working on this web server and available at http://localhost:8123 -Enable [`mod_proxy_wstunnel`](https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.htm) by running if you encounter issues while serving Home Assistant through your proxy: +Enable [`mod_proxy_wstunnel`](https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html) by running if you encounter issues while serving Home Assistant through your proxy: ```bash $ sudo a2enmod proxy_wstunnel From 3da185b8d6b8f249e8bfec03a2681cb7e3520721 Mon Sep 17 00:00:00 2001 From: Brent Saltzman Date: Mon, 5 Jun 2017 04:24:25 -0500 Subject: [PATCH 26/44] Spelling correct (#2762) Corrected some spelling errors. --- source/_docs/automation/trigger.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 6f8d346e895..8614cbba115 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -111,7 +111,7 @@ automation: offset: '-00:45:00' ``` -Sometimes you may want more grainular control over an automation based on the elevation of the sun. This can be used to layer automations to occur as the sun lowers on the horizon even after when it is below the horizon. This is also useful when the "sunset" event is not dark enough outside and you would like the automation to run later at a precise solar angle instead of the time offset such as turning on exterior lighting. +Sometimes you may want more granular control over an automation based on the elevation of the sun. This can be used to layer automations to occur as the sun lowers on the horizon or even after it is below the horizon. This is also useful when the "sunset" event is not dark enough outside and you would like the automation to run later at a precise solar angle instead of the time offset such as turning on exterior lighting. ```yaml automation: @@ -120,7 +120,7 @@ automation: platform: numeric_state entity_id: sun.sun value_template: "{% raw %}{{ state.attributes.elevation }}{% endraw %}" - # Can be a positive or negetive number + # Can be a positive or negative number below: -4.0 action: service: switch.turn_on From c670fab49a1d8539b6e332d6cac3ecc76808059c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Jun 2017 18:47:16 +0200 Subject: [PATCH 27/44] Fix configuration sample --- source/_components/sensor.waqi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.waqi.markdown b/source/_components/sensor.waqi.markdown index 2e6de105df7..ca10f70edb6 100644 --- a/source/_components/sensor.waqi.markdown +++ b/source/_components/sensor.waqi.markdown @@ -21,7 +21,7 @@ To enable this sensor, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry sensor: - platform: waqi - token: AQICN_API_TOKEN + token: AQICN_API_TOKEN locations: - beijing stations: From 4bd194871dc94c246d8481bcca22e7c0f74624b0 Mon Sep 17 00:00:00 2001 From: Erik-jan Riemers Date: Mon, 5 Jun 2017 22:30:54 +0200 Subject: [PATCH 28/44] Remark on customize since it cannot live outside homeassistant: (#2768) * Remark on customize * Update formatting --- source/_docs/configuration/customizing-devices.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 7c0a0395f9e..3aa9180c7a8 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -12,6 +12,10 @@ redirect_from: /getting-started/customizing-devices/ By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities. +

+Be carefull not to forget to place `customize`, customize_domain`, and `customize_glob` inside `homeassistant:` or it will fail. +

+ ```yaml homeassistant: name: Home From 4aaa5c4054397b1e7095ec492abd64ae9ca0813d Mon Sep 17 00:00:00 2001 From: CHAPELLE Quentin Date: Mon, 5 Jun 2017 22:32:34 +0200 Subject: [PATCH 29/44] Update ifttt.markdown (#2769) --- source/_components/ifttt.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/ifttt.markdown b/source/_components/ifttt.markdown index c43e86268ae..811f2c2972f 100644 --- a/source/_components/ifttt.markdown +++ b/source/_components/ifttt.markdown @@ -68,8 +68,8 @@ You need to setup a unique trigger for each event you sent to IFTTT. automation: alias: Startup Notification trigger: - platform: event - event_type: homeassistant_start + platform: homeassistant + event: start action: service: ifttt.trigger data: {"event":"TestHA_Trigger", "value1":"Hello World!"} @@ -82,8 +82,8 @@ IFTTT can also be used in scripts and with `data_template`. Here is the above a automation: alias: Startup Notification trigger: - platform: event - event_type: homeassistant_start + platform: homeassistant + event: start action: service: script.ifttt_notify data_template: From 88f6f3af7a0354d6a799c4c9b4f45534f7d5a009 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Jun 2017 18:57:30 +0200 Subject: [PATCH 30/44] Move details about API token up --- source/_components/sensor.waqi.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/sensor.waqi.markdown b/source/_components/sensor.waqi.markdown index ca10f70edb6..30ac8d193a3 100644 --- a/source/_components/sensor.waqi.markdown +++ b/source/_components/sensor.waqi.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `waqi` sensor platform will query [World Air Quality Index](http://aqicn.org) service to check AQI value for a specific set of locations. The resulting indexes will be added to the Home Assistant as sensor outputs. +This sensor requires an API token. Please obtain one at [AQICN API token](http://aqicn.org/data-platform/token/#/). + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml @@ -30,11 +32,9 @@ sensor: Configuration variables: -- **locations** (*Required*): a list of location names to look for air quality data. In case a specific location has multiple registered stations all of them will be added to Home Assistant - -- **token** (*Required*): a token for the AQICN public API. Please obtain one at [AQICN API token](http://aqicn.org/data-platform/token/#/) - -- **stations** (*Optional*): a list of station names to look for air quality data. Station should be within locations specified above. +- **locations** (*Required*): A list of location names to look for air quality data. In case a specific location has multiple registered stations all of them will be added to Home Assistant. +- **token** (*Required*): The token for the AQICN public API. +- **stations** (*Optional*): A list of station names to look for air quality data. Station should be within locations specified above. The value reported is an overall AQ index for the location. The values of the index can be interpreted as following: From 45ae40e3a06029563b18283d2f1d8fa556590ed6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Jun 2017 22:47:51 +0200 Subject: [PATCH 31/44] Fix markdown --- source/_docs/configuration/customizing-devices.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 3aa9180c7a8..00d50671ce1 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -13,7 +13,7 @@ redirect_from: /getting-started/customizing-devices/ By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities.

-Be carefull not to forget to place `customize`, customize_domain`, and `customize_glob` inside `homeassistant:` or it will fail. +Be carefull not to forget to place `customize`, `customize_domain`, and `customize_glob` inside `homeassistant:` or it will fail.

```yaml From 536425b457f024bfa3d417a776130d8ddbe6d7e4 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Mon, 5 Jun 2017 17:14:15 -0400 Subject: [PATCH 32/44] Minor Edit - Typo. (#2775) --- source/_components/switch.rachio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.rachio.markdown b/source/_components/switch.rachio.markdown index e75c4ed155e..59ac66bb059 100644 --- a/source/_components/switch.rachio.markdown +++ b/source/_components/switch.rachio.markdown @@ -33,7 +33,7 @@ switch: Configuration variables: -- **access_token** (*Required3): Your Rachio API Access Token. +- **access_token** (*Required): Your Rachio API Access Token. - **manual_run_mins** (*Optional*): For how long, in minutes, to turn on a station when the switch is enabled. Defaults to 10 minutes. ## {% linkable_title Examples %} From 5c35282fa3174af4940c36599b3a7bc432ef8e1c Mon Sep 17 00:00:00 2001 From: vrs01 Date: Tue, 6 Jun 2017 07:39:00 +0200 Subject: [PATCH 33/44] Update systemd.markdown (#2776) --- source/_docs/autostart/systemd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/autostart/systemd.markdown b/source/_docs/autostart/systemd.markdown index c46da344485..c829df3312d 100644 --- a/source/_docs/autostart/systemd.markdown +++ b/source/_docs/autostart/systemd.markdown @@ -23,7 +23,7 @@ If you want Home Assistant to be launched automatically, an extra step is needed - `ExecStart` contains the path to `hass` and this may vary. Check with `whereis hass` for the location. - If running Home Assistant in a Python virtual environment or a Docker container, please skip to section below. - For most systems, the file is `/etc/systemd/system/home-assistant@[your user].service` with [your user] replaced by the user account that Home Assistant will run as - normally `homeassistant`. For Ubuntu 16.04, the file is `/lib/systemd/system/home-assistant.service` and requires running this command `sudo ln -s /lib/systemd/system/home-assistant.service /etc/systemd/system/home-assistant.service` after file is created. -- If unfamiliar with command-line text editors, `sudo nano -w [filename]` can be used with `[filename]` replaced with the full path to the file. Ex. `sudo nano -w /etc/systemd/system/home-assistant@homeassistant.service`. After text entered, press CTRL-X then press Y to save and exit. +- If unfamiliar with command-line text editors, `sudo nano -w [filename]` can be used with `[filename]` replaced with the full path to the file. Ex. `sudo nano -w /etc/systemd/system/home-assistant@[your user].service`. After text entered, press CTRL-X then press Y to save and exit. ``` [Unit] From cba4617cde4c4e18c0c604c7024e67f52ee8b3e1 Mon Sep 17 00:00:00 2001 From: skanab Date: Tue, 6 Jun 2017 00:39:34 -0500 Subject: [PATCH 34/44] Update camera.arlo.markdown (#2777) --- source/_components/camera.arlo.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/camera.arlo.markdown b/source/_components/camera.arlo.markdown index c66cfc63efb..51ea29fa9b8 100644 --- a/source/_components/camera.arlo.markdown +++ b/source/_components/camera.arlo.markdown @@ -12,7 +12,7 @@ ha_category: Camera ha_release: 0.46 --- -To get your [Arlo](https://arlo.netgear.com/) sensors working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). +To get your [Arlo](https://arlo.netgear.com/) cameras working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). This component is not yet able to live stream from your Arlo camera, but it will be able to playback the last video capture. From 035e79aa0fbb311e97c736b9474e7d5aff0d1a82 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 5 Jun 2017 23:33:30 -0700 Subject: [PATCH 35/44] Hide multiple instances docs --- source/_includes/asides/developers_navigation.html | 1 - source/developers/multiple_instances.markdown | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 1f7c6f02f23..7a595c2da4d 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -83,7 +83,6 @@
  • {% active_link /developers/helpers/ Online helpers %}
  • -
  • {% active_link /developers/multiple_instances/ Multiple Instances %}
  • {% active_link /developers/website/ Home-Assistant.io %}
  • {% active_link /developers/releasing/ Releasing %}
  • {% active_link /developers/maintenance/ Maintenance %}
  • diff --git a/source/developers/multiple_instances.markdown b/source/developers/multiple_instances.markdown index 07238c5d0bd..ffdfd6b5053 100644 --- a/source/developers/multiple_instances.markdown +++ b/source/developers/multiple_instances.markdown @@ -9,6 +9,8 @@ sharing: true footer: true --- +# {% linkable_title This has been deprecated and is no longer supported. %} + Home Assistant supports running multiple synchronised instances using a master-slave model. Whenever `events.fire` or `states.set` is called on the slave it will forward it to the master. The master will replicate all events and changed states to its slaves.

    From 68c8617120347c94fcf719b70aa396496a48d855 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 6 Jun 2017 11:33:04 +0200 Subject: [PATCH 36/44] Update addon_config.markdown --- source/hassio/addon_config.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/hassio/addon_config.markdown b/source/hassio/addon_config.markdown index 76a2df6470d..d10e9ae1724 100644 --- a/source/hassio/addon_config.markdown +++ b/source/hassio/addon_config.markdown @@ -91,7 +91,7 @@ The config for an add-on is stored in `config.json`. | boot | yes | `auto` by system and manual or only `manual` | ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. | host_network | no | If that is True, the add-on run on host network. -| devices | no | Device list to map into add-on. Format is: `::` +| devices | no | Device list to map into add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` | map | no | List of maps for additional hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Default it map it `ro`, you can change that if you add a ":rw" at the end of name. | environment | no | A dict of environment variable to run add-on. | options | yes | Default options value of the add-on From 4100eb395c4f8c273e611576c73f58b208c4fa02 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 6 Jun 2017 11:34:20 +0200 Subject: [PATCH 37/44] Update addon_config.markdown --- source/hassio/addon_config.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/hassio/addon_config.markdown b/source/hassio/addon_config.markdown index d10e9ae1724..382bf4be477 100644 --- a/source/hassio/addon_config.markdown +++ b/source/hassio/addon_config.markdown @@ -92,6 +92,7 @@ The config for an add-on is stored in `config.json`. | ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. | host_network | no | If that is True, the add-on run on host network. | devices | no | Device list to map into add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` +| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN` | map | no | List of maps for additional hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Default it map it `ro`, you can change that if you add a ":rw" at the end of name. | environment | no | A dict of environment variable to run add-on. | options | yes | Default options value of the add-on From 54afdf450e5abcd09236cc2a37a76fd6e3e36076 Mon Sep 17 00:00:00 2001 From: vrs01 Date: Tue, 6 Jun 2017 19:23:58 +0200 Subject: [PATCH 38/44] media_content_type should be lowercase (#2778) --- source/_components/media_player.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index d69b770fa69..e0a5fc8ff94 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -47,7 +47,7 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, | -----------------------| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `entity_id` | yes | Target a specific media player. Defaults to all. | | `media_content_id` | no | A media identifier. The format of this is component dependent. For example, you can provide URLs to Sonos and Cast but only a playlist ID to iTunes. | -| `media_content_type` | no | A media type. Must be one of `MUSIC`, `TVSHOW`, `VIDEO`, `EPISODE`, `CHANNEL` or `PLAYLIST`. For example, to play music you would set `media_content_type` to `MUSIC`. | +| `media_content_type` | no | A media type. Must be one of `music`, `tvshow`, `video`, `episode`, `channel` or `playlist`. For example, to play music you would set `media_content_type` to `music`. | #### {% linkable_title Service `media_player/select_source` %} From 741c0a0d972c35055d08f0587d9542b9636222a8 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Tue, 6 Jun 2017 15:15:41 -0400 Subject: [PATCH 39/44] Minor TYPO (#2779) --- source/_components/feedreader.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index b1eee59e2ad..efaee1fb50a 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -52,7 +52,7 @@ automation: data_template: "{{ trigger.event.data.title }}" ``` -*Any field under the `` tag in the feed can be used for example `tigger.event.data.content` will get the body of the feed entry. +*Any field under the `` tag in the feed can be used for example `trigger.event.data.content` will get the body of the feed entry. For more advanced use cases, a custom component registering to the `feedreader` event type could be used instead: From 86b7fc42311f2c0e6b9850d569c01a3da18e5e9e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 6 Jun 2017 22:13:18 -0700 Subject: [PATCH 40/44] Update python_api.markdown --- source/developers/python_api.markdown | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/source/developers/python_api.markdown b/source/developers/python_api.markdown index 8b7c74e0329..727e94f071e 100644 --- a/source/developers/python_api.markdown +++ b/source/developers/python_api.markdown @@ -9,9 +9,11 @@ sharing: true footer: true --- -In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](/developers/api/) can be found. +See the [developer documentation][devdocs] for a full overview of the documentation. The rest of this page will contain examples on how to use it. -Note: This page is not full documentation for this API, but a collection of examples showing its use. +[devdocs]: https://dev-docs.home-assistant.io/en/master/api/homeassistant.html#module-homeassistant.remote + +In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](/developers/api/) can be found. A simple way to get all current entities is to visit the "Set State" page in the "Developer Tools". For the examples below just choose one from the available entries. Here the sensor `sensor.office_temperature` and the switch `switch.livingroom_pin_2` are used. @@ -24,17 +26,6 @@ api = remote.API('127.0.0.1', 'password') print(remote.validate_api(api)) ``` -Here's another way to use the `homeassistant.remote` package: - -```python -import homeassistant.remote as remote - -api = remote.API('127.0.0.1', 'password') -hass = remote.HomeAssistant(api) -hass.start() -living_room = hass.states.get('group.living_room') -``` - ### {% linkable_title Get configuration %} Get the current configuration of a Home Assistant instance: @@ -81,7 +72,7 @@ import homeassistant.remote as remote api = remote.API('127.0.0.1', 'YOUR_PASSWORD') office_temperature = remote.get_state(api, 'sensor.office_temperature') -print('{} is {} {}.'.format(office_temperature.attributes['friendly_name'], +print('{} is {} {}.'.format(office_temperature.name, office_temperature.state, office_temperature.attributes['unit_of_measurement'] ) @@ -101,7 +92,7 @@ import homeassistant.remote as remote api = remote.API('127.0.0.1', 'YOUR_PASSWORD') switch_livingroom = remote.get_state(api, 'switch.livingroom_pin_2') -print('{} is {}.'.format(switch_livingroom.attributes['friendly_name'], +print('{} is {}.'.format(switch_livingroom.name, switch_livingroom.state ) ) @@ -193,5 +184,3 @@ data = {"title":"Test", "message":"A simple test message from HA."} remote.call_service(api, domain, 'jabber', data) ``` - -For more details, please check the source of [homeassistant.remote](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py). From c8b92a0df83c1d9ef786d57b5f24e6032fb5d016 Mon Sep 17 00:00:00 2001 From: Jan Wh Date: Wed, 7 Jun 2017 17:02:28 +0200 Subject: [PATCH 41/44] switch.flux: Corrected update service name in docs (#2783) The docs previously suggested a "generalized" service name for updating flux manually, when the name is actually determined by the name of the switch in the config. --- source/_components/switch.flux.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index e90b4b59f97..a48b0367b13 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -18,7 +18,7 @@ The component will update your lights based on the the time of day. It will only During the day (in between `start time` and `sunset time`), it will fade the lights from the `start_colortemp` to the `sunset_colortemp`. After sunset (between `sunset_time` and `stop_time`), the lights will fade from the the `sunset_colortemp` to the `stop_colortemp`. If the lights are still on after the `stop_time` it will continue to change the light to the `stop_colortemp` until the light is turned off. The fade effect is created by updating the lights every 30 seconds with a 30 second transition time. -If you don't wish to have flux update on 30 second intervals, you can leave the switch turned off and use automation rules that call the service `switch.flux_update` whenever you want the lights updated. +If you don't wish to have flux update on 30 second intervals, you can leave the switch turned off and use automation rules that call the service `switch._update` whenever you want the lights updated, where `` equals the `name:` property in the switch configuration. To use the Flux switch in your installation, add the following to your `configuration.yaml` file: From e5e3f865e449471a5fb5e00133804c9bce3c3bef Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 8 Jun 2017 14:02:13 +0200 Subject: [PATCH 42/44] Make titles linkable --- source/_posts/2017-06-04-release-46.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index 401f8c49a96..33e44e87f15 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -15,14 +15,14 @@ og_image: /images/blog/2017-06-0.46/components.png It's time for 0.46! This release does not have too many new integrations, instead it focussed on bug fixes. -## New platforms +## {% linkable_title New platforms %} - Template light ([@cribbstechnologies] - [#7657]) ([light.template docs]) (new-platform) - Support for GE Zwave fan controller ([@armills] - [#7767]) ([zwave docs]) ([fan.zwave docs]) (new-platform) - Rachio (Sprinklers) ([@Klikini] - [#7600]) ([switch.rachio docs]) (new-platform) - Introduced support to Netgear Arlo Cameras ([@tchellomello] - [#7826]) ([arlo docs]) ([camera.arlo docs]) ([sensor.arlo docs]) (new-platform) -## Breaking changes +## {% linkable_title Breaking changes %} - The USPS sensor entity names have changed as there are now two. One for packages and one for mail. Config will now also use `scan_interval` instead of `update_interval` ([@happyleavesaoc] - [#7655]) ([sensor.usps docs]) (breaking change) - Automation state trigger: From/to checks will now ignore state changes that are just attribute changess ([@amelchio] - [#7651]) ([automation.state docs]) (breaking change) @@ -51,7 +51,7 @@ sensor: Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template. -## All changes +## {% linkable_title All changes %} - Align with OpenALPR platform for naming conf variables ([@fabaff] - [#7650]) ([image_processing.seven_segments docs]) - Added support to Amcrest camera to feed using RTSP via ffmpeg ([@tchellomello] - [#7646]) ([camera.amcrest docs]) ([sensor.amcrest docs]) From 0b5dc82360bdb61fd0dbaad1bdb3faf83c7e92c1 Mon Sep 17 00:00:00 2001 From: Samuel Maggs Date: Thu, 8 Jun 2017 13:05:40 +0100 Subject: [PATCH 43/44] Change to home assistant log file (#2784) Should have been home-assistant. Otherwise it just tries to create a new file --- source/_docs/hassbian/common-tasks.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/hassbian/common-tasks.markdown b/source/_docs/hassbian/common-tasks.markdown index 4b97ac1fd91..262770e8d20 100644 --- a/source/_docs/hassbian/common-tasks.markdown +++ b/source/_docs/hassbian/common-tasks.markdown @@ -84,7 +84,7 @@ Log in as the `pi` account and execute the following commands: ```bash $ sudo su -s /bin/bash homeassistant $ cd /home/homeassistant/.homeassistant -$ nano homeassistant.log +$ nano home-assistant.log ``` This will in order do the following: From 2532986fe8f34338203002517ee66eab7536ec01 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 8 Jun 2017 22:24:48 -0700 Subject: [PATCH 44/44] Release 0.46.1 --- _config.yml | 8 +++---- source/_posts/2017-06-04-release-46.markdown | 23 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index 5b3671eca58..c6dbb537997 100644 --- a/_config.yml +++ b/_config.yml @@ -141,12 +141,12 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 46 -current_patch_version: 0 -date_released: 2017-06-04 +current_patch_version: 1 +date_released: 2017-06-09 # 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: "#" +patch_version_notes: "#release-0461---june-9" # Minor release (Example #release-0431---april-25): -#patch_version_notes: "#release-0451---may-X" + diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index 33e44e87f15..b18554d5c28 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -22,6 +22,16 @@ It's time for 0.46! This release does not have too many new integrations, instea - Rachio (Sprinklers) ([@Klikini] - [#7600]) ([switch.rachio docs]) (new-platform) - Introduced support to Netgear Arlo Cameras ([@tchellomello] - [#7826]) ([arlo docs]) ([camera.arlo docs]) ([sensor.arlo docs]) (new-platform) +## {% linkable_title Release 0.46.1 - June 9 %} + +- Support for renaming ZWave values ([@armills] - [#7780]) ([zwave docs]) +- Dsmr5 revert ([@aequitas] - [#7900]) ([sensor.dsmr docs]) +- Fix typos in Wunderground component (Percipitation -> Precipitation) ([@mje-nz] - [#7901]) ([sensor.wunderground docs]) +- Mqtt cover: Making command topic optional and add ability to set up/down position including ability to template the value ([@cribbstechnologies] - [#7841]) ([cover.mqtt docs]) +- Media Player - OpenHome: Fixed metadata issue ([@bazwilliams] - [#7932]) ([media_player.openhome docs]) +- Sensor - MetOffice: Fix last updated date ([@cyberjacob] - [#7965]) ([sensor.metoffice docs]) +- Prevent Roku doing I/O in event loop ([@balloob] - [#7969]) ([media_player.roku docs]) + ## {% linkable_title Breaking changes %} - The USPS sensor entity names have changed as there are now two. One for packages and one for mail. Config will now also use `scan_interval` instead of `update_interval` ([@happyleavesaoc] - [#7655]) ([sensor.usps docs]) (breaking change) @@ -374,3 +384,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [forum]: https://community.home-assistant.io/ [gitter]: https://gitter.im/home-assistant/home-assistant [issue]: https://github.com/home-assistant/home-assistant/issues +[#7780]: https://github.com/home-assistant/home-assistant/pull/7780 +[#7841]: https://github.com/home-assistant/home-assistant/pull/7841 +[#7900]: https://github.com/home-assistant/home-assistant/pull/7900 +[#7901]: https://github.com/home-assistant/home-assistant/pull/7901 +[#7932]: https://github.com/home-assistant/home-assistant/pull/7932 +[#7965]: https://github.com/home-assistant/home-assistant/pull/7965 +[#7969]: https://github.com/home-assistant/home-assistant/pull/7969 +[@cyberjacob]: https://github.com/cyberjacob +[@mje-nz]: https://github.com/mje-nz +[cover.mqtt docs]: https://home-assistant.io/components/cover.mqtt/ +[sensor.metoffice docs]: https://home-assistant.io/components/sensor.metoffice/ +[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/ +[media_player.roku docs]: https://home-assistant.io/components/media_player.roku/