From afae5d4ebce785c9988d01d5038e69f3d3c5e62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Sandstr=C3=B6m?= Date: Thu, 25 Aug 2016 10:38:14 +0200 Subject: [PATCH 01/76] modbus write register service --- source/_components/modbus.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index 9f206276fc7..7a07e8aa244 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -57,6 +57,14 @@ Configuration variables: - **bytesize** (*Required*): The bytesize for the serial connection. - **parity** (*Required*): The parity for the serial connection. +### {% linkable_title Services %} + + +| Service | Description | +| ------- | ----------- | +| write_register | Write single register. Requires `unit`, `address` and `value` fields. | + + ## {% linkable_title Building on top of Modbus %} - [Modbus Sensor](/components/sensor.modbus/) From 990b1fe507c0f506c4c3d7f8075f0adc2926997b Mon Sep 17 00:00:00 2001 From: NMA Date: Thu, 25 Aug 2016 17:18:15 +0530 Subject: [PATCH 02/76] Import Owntracks waypoints into HA as zone definitions Configuration variable waypoint_import_user for enabling importing waypoints from Owntracks as zone definitions in HA. --- source/_components/device_tracker.owntracks.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 3b15ac8eeac..c1f747c5a7a 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -25,12 +25,15 @@ To integrate Owntracks in Home Assistant, add the following section to your `con device_tracker: platform: owntracks max_gps_accuracy: 200 + waypoint_import_user: jon ``` Configuration variables: - **max_gps_accuracy** (*Optional*): Sometimes Owntracks can report GPS location with a very low accuracy (few kilometers). That can trigger false zoning in your Home Assistant installation. With the parameter, you can filter these GPS reports. The number has to be in meter. For example, if you put 200 only GPS report with an accuracy under 200 will be take in account. +- **waypoint_import_user** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) which are similar in spirit to Home Assistant zones. If this configuration variable is defined, the Owntracks user matching user name specified here can export waypoints from the device and Home Assistant will import them as zone definitions. + ### {% linkable_title Using Owntracks with other device trackers %} Owntracks can also be used with other device trackers, such as [Nmap](/components/device_tracker.nmap_scanner/) or [Netgear](/components/device_tracker.netgear/). To do this, fill in the `mac` field to the Owntracks entry in `known_devices.yaml` with the MAC address of the device you want to track. This way the state of the device will be determined by the source that reported last. The naming convention for known device list is `_` and could be set in app configuration. More details about this config can found in [device tracker](/components/device_tracker/). From 10317da5507f047f51bf531819cebc28b212fb76 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 28 Aug 2016 00:53:11 -0400 Subject: [PATCH 03/76] Updated documentation to match with voluptuous config validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -- After the upgrade to use voluptuous to parse the configuration, sensor.imap needs to pass username instead user. Note that user also works, but to keep it coherent, we are updating the documentation. (home_assistant) ↪ hass --script check_config Testing configuration at /home/hass/.homeassistant 16-08-28 00:49:35 ERROR (MainThread) [homeassistant.bootstrap] Invalid config for [sensor.imap]: required key not provided @ data['username']. Got None Failed config sensor.imap: user: port: 993 platform: imap password: server: imap.gmail.com name: Gmail Alerts Successful config (partial) sensor.imap: After replacing ```user``` by ```username```, ```hass --script check_config``` works as expected. --- source/_components/sensor.imap.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.imap.markdown b/source/_components/sensor.imap.markdown index 69ab3bbe64e..b091483a012 100644 --- a/source/_components/sensor.imap.markdown +++ b/source/_components/sensor.imap.markdown @@ -23,7 +23,7 @@ sensor: server: imap.gmail.com port: 993 name: Emails - user: USERNAME + username: USERNAME password: PASSWORD ``` @@ -32,6 +32,6 @@ Configuration variables: - **server** (*Required*): The IP address or hostname of the IMAP server. - **port** (*Required*): The port where the server is accessible. - **name** (*Optional*): Name of the IMAP sensor. -- **user** (*Required*): Username for the IMAP server. +- **username** (*Required*): Username for the IMAP server. - **password** (*Required*): Password for the IMAP server. From 65390c187b66bf5b8932156636cfa2eac05ba36e Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 28 Aug 2016 03:17:40 -0400 Subject: [PATCH 04/76] Fixed typo for climate component --- source/_components/climate.homematic.markdown | 2 +- source/_components/climate.honeywell.markdown | 4 ++-- source/_components/climate.nest.markdown | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/climate.homematic.markdown b/source/_components/climate.homematic.markdown index 61b3d6bd4af..ac5458d592b 100644 --- a/source/_components/climate.homematic.markdown +++ b/source/_components/climate.homematic.markdown @@ -14,6 +14,6 @@ ha_iot_class: "Local Push" --- -The `homematic` cliamte platform lets you control [Homematic](http://www.homematic.com/) thermostats through Home Assistant. +The `homematic` climate platform lets you control [Homematic](http://www.homematic.com/) thermostats through Home Assistant. Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown index 28b5fd13e34..923f8a229ec 100644 --- a/source/_components/climate.honeywell.markdown +++ b/source/_components/climate.honeywell.markdown @@ -12,12 +12,12 @@ ha_category: Climate --- -The `honeywell` cliamte platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. +The `honeywell` climate platform let you control [Honeywell Connected](http://getconnected.honeywell.com/en/) thermostats from Home Assistant. To set it up, add the following information to your `configuration.yaml` file: ```yaml -cliamte: +climate: platform: honeywell username: YOUR_USERNAME password: YOUR_PASSWORD diff --git a/source/_components/climate.nest.markdown b/source/_components/climate.nest.markdown index 78123905739..69dbc90fdb0 100644 --- a/source/_components/climate.nest.markdown +++ b/source/_components/climate.nest.markdown @@ -17,7 +17,7 @@ The `nest` climate platform let you control a thermostat from [Nest](https://nes To set it up, add the following information to your `configuration.yaml` file: ```yaml -cliamte: +climate: platform: nest ``` From 18d61c115c17d24d03788c09094e3eb47aad29a1 Mon Sep 17 00:00:00 2001 From: NMA Date: Sun, 28 Aug 2016 14:05:19 +0530 Subject: [PATCH 05/76] Updated waypoint import description Updated to match the final changes. --- .../_components/device_tracker.owntracks.markdown | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index c1f747c5a7a..b63c97d8dbf 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -25,14 +25,17 @@ To integrate Owntracks in Home Assistant, add the following section to your `con device_tracker: platform: owntracks max_gps_accuracy: 200 - waypoint_import_user: jon + waypoints: True + waypoint_whitelist: + - jon + - ram ``` Configuration variables: - **max_gps_accuracy** (*Optional*): Sometimes Owntracks can report GPS location with a very low accuracy (few kilometers). That can trigger false zoning in your Home Assistant installation. With the parameter, you can filter these GPS reports. The number has to be in meter. For example, if you put 200 only GPS report with an accuracy under 200 will be take in account. - -- **waypoint_import_user** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) which are similar in spirit to Home Assistant zones. If this configuration variable is defined, the Owntracks user matching user name specified here can export waypoints from the device and Home Assistant will import them as zone definitions. +- **waypoints** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) (a.k.a regions) which are similar in spirit to Home Assistant zones. If this configuration variable is `True`, the Owntracks users who are in `waypoint_whitelist` can export waypoints from the device and Home Assistant will import them as zone definitions. Defaults to `True`. +- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](https://home-assistant.io/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. Defaults to all users who are connected to Home Assistant via Owntracks. ### {% linkable_title Using Owntracks with other device trackers %} Owntracks can also be used with other device trackers, such as [Nmap](/components/device_tracker.nmap_scanner/) or [Netgear](/components/device_tracker.netgear/). To do this, fill in the `mac` field to the Owntracks entry in `known_devices.yaml` with the MAC address of the device you want to track. This way the state of the device will be determined by the source that reported last. The naming convention for known device list is `_` and could be set in app configuration. More details about this config can found in [device tracker](/components/device_tracker/). @@ -67,3 +70,8 @@ This allows you to write zone automations for devices that can't track themselve ### {% linkable_title Using mobile and fixed iBeacons together %} You can use iBeacons of both types together, so if you have a Zone `drive` with an iBeacon region called `-drive` and you arrive home with a mobile iBeacon called `-car`, then `device_tracker.beacon_car` will be set to a state of `drive`. +### {% linkable_title Importing Owntracks waypoints as zones %} +By default, any Owntracks user connected to Home Assistant can export their waypoint definitions (from the `Export - Export to Endpoint` menu item) which will then be translated to zone definitions in Home Assistant. The zones will be named `- - `. This functionality can be controlled in 2 ways: + +1. The configuration variable `waypoints` can be set to `False` which will disable importing waypoints for all users. +2. The configuration variable `waypoint_whitelist` can contain a list of users who are allowed to import waypoints. From 9f7923e82724693d5990eaa1386c36c504a323ee Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Sun, 28 Aug 2016 20:58:32 -0400 Subject: [PATCH 06/76] Link to more things --- source/developers/add_new_platform.markdown | 6 +++--- source/developers/architecture_components.markdown | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/developers/add_new_platform.markdown b/source/developers/add_new_platform.markdown index 73bf3e5367c..aeee02c6b29 100644 --- a/source/developers/add_new_platform.markdown +++ b/source/developers/add_new_platform.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Components that interact with devices are called Entity Components. They are structured in core- and platform logic. This allows the same logic to handle a light to be used by different brands. +Components that interact with devices are called [Entity Components](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/entity_component.py). They are structured in core- and platform logic. This allows the same logic to handle a light to be used by different brands. For example, the built-in `switch` component consists of various platform in [`homeassistant/components/switch/`](https://github.com/home-assistant/home-assistant/tree/master/homeassistant/components/switch). The file `__init__.py` contains the core logic of all platform and the `vendor_name.py` files only the relevant platform code. @@ -22,11 +22,11 @@ If you are planning to add support for a new type of device to an existing compo One of the rules for Home Assistant is that platform logic should never interface directly with devices but use a third-party Python 3 library to do so. This way Home Assistant is able to share code with the Python community and we can keep the project maintainable. -To integrate the third-party library you create an Entity class for your device. Entities are Home Assistant's representation of lights, switches, sensors, etc. and are derived from the [Entity Abstract Class](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/entity.py). This abstract class contains logic for integrating most standard features into your entities, such as visibility, entity IDs, updates, and much more. +To integrate the third-party library you create an [Entity class](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/entity.py) for your device. Entities are Home Assistant's representation of lights, switches, sensors, etc. and are derived from the [Entity Abstract Class](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/entity.py). This abstract class contains logic for integrating most standard features into your entities, such as visibility, entity IDs, updates, and much more. ### {% linkable_title Requirements and dependencies %} -Platforms can specify dependencies and requirements the same way as a component does. +Platforms can specify dependencies and requirements [the same way as a component does](/developers/component_deps_and_reqs): ```python REQUIREMENTS = ['some-package==2.0.0', 'some-other-package==2.5.0'] diff --git a/source/developers/architecture_components.markdown b/source/developers/architecture_components.markdown index ae8b36320df..c6612fb2964 100644 --- a/source/developers/architecture_components.markdown +++ b/source/developers/architecture_components.markdown @@ -22,7 +22,7 @@ We can differentiate between two different types of components within Home Assis These components will track devices within a specific domain and consist of a core part and platform-specific logic. These components make their information available via the State Machine and the Event Bus. The component will also register services in the Service Registry to expose control of the devices. -For example, one of the built-in components is the `switch` component. This component is responsible for interaction with different types of switches. +For example, one of the built-in components is the [`switch` component](/components/switch/). This component is responsible for interaction with different types of switches. A platform provides support for a particular kind/brand of device. For example, a switch could use a WeMo or Orvibo platform, and a light component might interact with the Hue or LiFX platform. From 2f0b1e49793df181da0f9b3b390ab1bbde5d2ac4 Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Sun, 28 Aug 2016 21:01:34 -0400 Subject: [PATCH 07/76] Document macOS zwave device path --- source/getting-started/z-wave.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index b83b986428d..57e8dc4c9c7 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -86,6 +86,12 @@ Or, on some other systems (such as Raspberry Pi), use: $ ls /dev/ttyACM* ``` +Or, on macOS, use: + +```bash +$ ls /dev/cu.usbmodem* +``` +

Depending on what's plugged into your USB ports, the name found above may change. You can lock in a name, such as `/dev/zwave`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/).

From d60ae6a6be8cd4a8a9e62ec9894a3e20b5be3467 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Sun, 28 Aug 2016 21:06:13 -0600 Subject: [PATCH 08/76] Allow specification of server for speedtest.net (#847) --- source/_components/sensor.speedtest.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index 3036a0a54f6..a6875aa36b6 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -24,6 +24,7 @@ Once per hour, on the hour (default): ```yaml sensor: platform: speedtest + server_id: 1234 monitored_conditions: - ping - download @@ -69,6 +70,7 @@ Configuration variables: - **ping**: Reaction time in ms of your connection, (how fast you get a response after you've sent out a request). - **download**: Download speed in Mbps. - **upload**: Upload speed in Mbps. +- **server_id (*Optional*): Specify the speedtest server to perform test against. - **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0. - **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None. - **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None. From e3a51b49a02944879c313e748aaa3abe59944e1d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 29 Aug 2016 22:30:15 +0200 Subject: [PATCH 09/76] Update notify.file.markdown --- source/_components/notify.file.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.file.markdown b/source/_components/notify.file.markdown index 4084f2bbed2..531d0fa4a1b 100644 --- a/source/_components/notify.file.markdown +++ b/source/_components/notify.file.markdown @@ -23,13 +23,13 @@ notify: name: NOTIFIER_NAME platform: file filename: FILENAME - timestamp: 1 or 0 + timestamp: true or false ``` Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **filename** (*Required*): Name of the file to use. The file will be created if it doesn't exist and saved in your `config/` folder. -- **timestamp** (*Optional*): Setting `timestamp` to 1 adds a timestamp to every entry. +- **timestamp** (*Optional*): Setting `timestamp` to True adds a timestamp to every entry. To use notifications, please see the [getting started with automation page](/getting-started/automation/). From 20d259dfc68d36e52a0c987617008b4e91128383 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 29 Aug 2016 22:32:06 +0200 Subject: [PATCH 10/76] Update notify.smtp.markdown --- source/_components/notify.smtp.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.smtp.markdown b/source/_components/notify.smtp.markdown index 308044ad2e1..d47604532ee 100644 --- a/source/_components/notify.smtp.markdown +++ b/source/_components/notify.smtp.markdown @@ -25,7 +25,7 @@ notify: server: MAIL_SERVER port: YOUR_SMTP_PORT sender: SENDER_EMAIL_ADDRESS - starttls: 1 or 0 + starttls: true or false username: YOUR_SMTP_USERNAME password: YOUR_SMTP_PASSWORD recipient: YOUR_RECIPIENT @@ -40,7 +40,8 @@ Configuration variables: - **username** (*Optional*): Username for the SMTP account. - **password** (*Optional*): Password for the SMTP server that belongs to the given username. If the password contains a colon it need to be wrapped in apostrophes. - **recipient** (*Required*): Recipient of the notification. -- **starttls** (*Optional*): Enables STARTTLS, eg. 1 or 0. Defaults to 0. +- **starttls** (*Optional*): Enables STARTTLS, eg. True or False. Defaults to False. +- **debug** (*Optional*): Enables Debug, eg. True or False. Defaults to False. To use the SMTP notification, refer to it in an automation or script like in this example: From a9ad7545625a3cbce93c57f412e68c6582b96c51 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Tue, 30 Aug 2016 05:51:56 -0400 Subject: [PATCH 11/76] Added example for Flux Led to use effect:random (#868) * Added example for Flux Led to use effect:random * Modified descriptive text --- source/_components/light.flux_led.markdown | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index 32ab0808cff..7fce612f3a5 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -54,7 +54,7 @@ light: automatic_add: True ``` -Will add two lights with given name: +Will add two lights with given name and create an automation rule to randomly set color each 45 seconds: ```yaml light: @@ -65,5 +65,15 @@ light: name: flux_lamppost 192.168.0.109: name: flux_living_room_lamp -``` +automation: + random_flux_living_room_lamp: + trigger: + platform: time + seconds: '/45' + action: + service: light.turn_on + data: + entity_id: light.flux_living_room_lamp + effect: random +``` From fed6dd8289133e7856ce1af04587ac5cbbaec992 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 1 Sep 2016 10:46:10 +0200 Subject: [PATCH 12/76] Inital blog post for 0.28 --- source/_posts/2016-09-01-0-28.markdown | 93 ++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 source/_posts/2016-09-01-0-28.markdown diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown new file mode 100644 index 00000000000..e26f8925299 --- /dev/null +++ b/source/_posts/2016-09-01-0-28.markdown @@ -0,0 +1,93 @@ +--- +layout: post +title: "0.28: " +description: "" +date: 2016-09-01 08:00:00 +0200 +date_formatted: "September 01, 2016" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +--- + + + +### {% linkable_title All changes %} + + + +- + +### {% linkable_title Breaking changes %} + +- OpenweatherMap entity IDs are now like `sensor.owm_temperature`. Previously they were like `sensor.weather_temperature`. Apologies for this change, but we needed to make OpenWeatherMap more generic now that we have many weather platforms. +- + +[@arsaboo]: https://github.com/arsaboo +[@auchter]: https://github.com/auchter +[@balloob]: https://github.com/balloob +[@blocke]: https://github.com/blocke +[@BluGeni]: https://github.com/BluGeni +[@danielperna84]: https://github.com/danielperna84 +[@DavidMStraub]: https://github.com/DavidMStraub +[@dpford]: https://github.com/dpford +[@fabaff]: https://github.com/fabaff +[@infamy]: https://github.com/infamy +[@jnewland]: https://github.com/jnewland +[@Juggels]: https://github.com/Juggels +[@kellerza]: https://github.com/kellerza +[@mcdeck]: https://github.com/mcdeck +[@meatz]: https://github.com/meatz +[@mgbowen]: https://github.com/mgbowen +[@mKerix]: https://github.com/mKerix +[@nkgilley]: https://github.com/nkgilley +[@nunofgs]: https://github.com/nunofgs +[@open-homeautomation]: https://github.com/open-homeautomation +[@pavoni]: https://github.com/pavoni +[@pvizeli]: https://github.com/pvizeli +[@robbiet480]: https://github.com/robbiet480 +[@roidayan]: https://github.com/roidayan +[@roidayan]: ttps://github.com/roidayan +[@shmuelzon]: https://github.com/shmuelzon +[@Teagan42]: https://github.com/Teagan42 +[@technicalpickles]: https://github.com/technicalpickles +[@tobiebooth]: https://github.com/tobiebooth +[@turbokongen]: https://github.com/turbokongen +[@w1ll1am23]: https://github.com/w1ll1am23 + +[checking]: /components/sensor.dht/ +[FFMpeg]: /components/binary_sensor.ffmpeg/ +[Climate]: /components/climate/ +[NZBGet]: /components/sensor.nzbget/ +[SABnzbd]: /components/sensor.sabnzbd/ +[HP]: /components/sensor.hp_ilo/ +[Fritzbox]: /components/sensor.fritzbox_callmonitor/ +[webos]: /components/media_player.webostv/ +[HTML5]: /components/notify.html5/ +[Gravatar]: /components/device_tracker/ +[Loop]: /components/sensor.loop_energy/ +[cover]: /components/cover/ +[climate]: /components/climate/ +[expose]: /components/light/ +[Automate]: /components/notify.llamalab_automate/ +[Secrets]: /topics/secrets/ +[trigger]: /components/alarm_control_panel.manual/ +[CO2]: /components/sensor.mhz19/ +[presence]: /components/sensor.mqtt_room +[grouping]: /components/notify.group/ +[Wunderground]: /components/sensor.wunderground/ +[monitoring]: /components/binary_sensor.ffmpeg/ +[MJPEG]: /components/camera.mjpeg/ +[Generic]: /components/camera.generic/ +[positions]: /components/cover.zwave/ +[forecast]: /components/sensor.forecast/ +[Bluetooth]: /components/device_tracker.bluetooth_le_tracker/ +[Slack]: /components/notify.slack/ +[template]: /components/camera.generic/ +[Bug]: /components/wink/ +[support]: /components/homematic/ +[node]: /components/zwave/ +[found]: /components/device_tracker.tplink/ +[attachments]: /components/notify.slack/ +[Hue]: /components/emulated_hue/ +[fan]: /components/fan/ From fa3bebf39ab9225af140ad771c164262fddfe374 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 1 Sep 2016 19:03:52 +0200 Subject: [PATCH 13/76] Update octoprint docs --- source/_components/binary_sensor.octoprint.markdown | 7 +++++-- source/_components/octoprint.markdown | 7 ++++--- source/_components/sensor.octoprint.markdown | 7 +++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/source/_components/binary_sensor.octoprint.markdown b/source/_components/binary_sensor.octoprint.markdown index 7a05254c5e4..c8ef090c450 100644 --- a/source/_components/binary_sensor.octoprint.markdown +++ b/source/_components/binary_sensor.octoprint.markdown @@ -13,7 +13,11 @@ ha_release: 0.19 --- -The `OctoPrint` binary sensor platform let you monitor if your 3D printer is printing or if there was a printing error. +The `octoprint` binary sensor platform let you monitor if your 3D printer is printing or if there was a printing error. + +

+You must have the [OctoPrint component](/components/octoprint/) configured to use this sensor. +

To set it up, add the following information to your `configuration.yaml` file: @@ -31,4 +35,3 @@ Configuration variables: - Printing - Printing Error -

You must have the [OctoPrint component](/components/octoprint/) configured to use this sensor.

diff --git a/source/_components/octoprint.markdown b/source/_components/octoprint.markdown index 9642fb40701..9103ad5e9c5 100644 --- a/source/_components/octoprint.markdown +++ b/source/_components/octoprint.markdown @@ -15,18 +15,19 @@ ha_release: 0.19 [OctoPrint](http://octoprint.org/) is a web interface for your 3D printer. This is the main component to integrate OctoPrint sensors, you will have to setup sensors and binary sensors separately. -To get started with the OctoPrint API, please follow the directions on their [site](http://docs.octoprint.org/en/master/api/general.html). Once OctoPrint is configured you will need to add your API key and host to your configuration.yaml. +To get started with the OctoPrint API, please follow the directions on their [site](http://docs.octoprint.org/en/master/api/general.html). Once OctoPrint is configured you will need to add your API key and host to your `configuration.yaml`. ```yaml octoprint: - host: http://YOUR_OCTOPRINT_HOST + host: YOUR_OCTOPRINT_HOST api_key: YOUR_API_KEY ``` Configuration variables: -- **api_key** (*Required*): The retrieved api key. - **host** (*Required*): The octoprint host. +- **api_key** (*Required*): The retrieved api key. + **NOTE** If your 3D printer isn't connected to the OctoPrint server during the startup of Home Assistant this component will fail to load. diff --git a/source/_components/sensor.octoprint.markdown b/source/_components/sensor.octoprint.markdown index 58aaacb01b8..20682101264 100644 --- a/source/_components/sensor.octoprint.markdown +++ b/source/_components/sensor.octoprint.markdown @@ -13,7 +13,11 @@ ha_release: 0.19 --- -The `OctoPrint` sensor platform let you monitor various states of your 3D printer and its print jobs. +The `octoprint` sensor platform let you monitor various states of your 3D printer and its print jobs. + +

+You must have the [OctoPrint component](/components/octoprint/) configured to use this sensor. +

To set it up, add the following information to your `configuration.yaml` file: @@ -33,4 +37,3 @@ Configuration variables: - Temperatures (Temperatures of all available tools)(print head, print bed, ...) These will be displayed as tool0, tool1, ... please refer to your OctoPrint frontend to associate tool number with actual device. - Job Percentage -

You must have the [OctoPrint component](/components/octoprint/) configured to use this sensor.

From 721999d00b7f6b0be6b89862e81e077b48d1c0ec Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 1 Sep 2016 19:25:42 +0200 Subject: [PATCH 14/76] Add missing variable --- source/_components/binary_sensor.octoprint.markdown | 6 ++++-- source/_components/sensor.octoprint.markdown | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/source/_components/binary_sensor.octoprint.markdown b/source/_components/binary_sensor.octoprint.markdown index c8ef090c450..309685014d9 100644 --- a/source/_components/binary_sensor.octoprint.markdown +++ b/source/_components/binary_sensor.octoprint.markdown @@ -24,6 +24,7 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml binary_sensor: platform: octoprint + name: OctoPrint monitored_conditions: - Printing - Printing Error @@ -31,7 +32,8 @@ binary_sensor: Configuration variables: +- **name** (*Optional*): The name of the sensor. Default is 'OctoPrint'. - **monitored_conditions** array (*Required*): States to monitor. - - Printing - - Printing Error + - **Printing**: State of the printer. + - **Printing Error**: Error while printing. diff --git a/source/_components/sensor.octoprint.markdown b/source/_components/sensor.octoprint.markdown index 20682101264..0cdc090fd68 100644 --- a/source/_components/sensor.octoprint.markdown +++ b/source/_components/sensor.octoprint.markdown @@ -24,6 +24,7 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml sensor: platform: octoprint + name: OctoPrint monitored_conditions: - Current State - Temperatures @@ -32,8 +33,9 @@ sensor: Configuration variables: +- **name** (*Optional*): The name of the sensor. Default is 'OctoPrint'. - **monitored_conditions** array (*Required*): States to monitor. - - Current State (Text of current state) - - Temperatures (Temperatures of all available tools)(print head, print bed, ...) These will be displayed as tool0, tool1, ... please refer to your OctoPrint frontend to associate tool number with actual device. - - Job Percentage + - **Current State**: Text of current state) + - **Temperatures**: Temperatures of all available tools, eg. `print`, `head`, `print bed`, etc. These will be displayed as `tool0`, `tool1`, or `toolN` please refer to your OctoPrint frontend to associate the tool number with an actual device. + - **Job Percentage**: From ed379cbf63998b6c404025f4e2625b4c0c63b806 Mon Sep 17 00:00:00 2001 From: AlucardZero Date: Thu, 1 Sep 2016 14:39:48 -0400 Subject: [PATCH 15/76] Edit WUnderground markdown (#880) Correcting some typos, capitalizing some letters, and improving some sentence structures --- source/_components/sensor.wunderground.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index fc084aaaa7a..00780d77a46 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -14,10 +14,10 @@ ha_iot_class: "Cloud Polling" --- -The `wunderground` platform uses [Weather Underground](http://www.wunderground.com) as an source for current weather information. +The `wunderground` platform uses [Weather Underground](http://www.wunderground.com) as a source for current weather information.

-Obtain WUnderground API [here](https://www.wunderground.com/weather/api). Free account allows 500 requests per day or 10 per minute. +Obtain a WUnderground API key [here](https://www.wunderground.com/weather/api). A free account allows 500 requests per day or 10 per minute.

To add Wunderground to your installation, add the following to your `configuration.yaml` file: @@ -61,20 +61,20 @@ sensor: Configuration variables: - **api_key** (Required): See above -- **pws_id** (Optional): You can enter your PWS id. Current list of Wunderground PWS stations is available [here](https://www.wunderground.com/weatherstation/ListStations.asp). If you do not enter the PWS ID, the current location information (latitude and longitude) from your `configuration.yaml` will be used to display weather conditions. +- **pws_id** (Optional): You can enter a Personal Weather Station id. The current list of Wunderground PWS stations is available [here](https://www.wunderground.com/weatherstation/ListStations.asp). If you do not enter a PWS ID, the current location information (latitude and longitude) from your `configuration.yaml` will be used to display weather conditions. - **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. - **weather**: A human-readable text summary with picture from Wunderground. - **temp_f**: Current temperature in Fahrenheit - **temp_c**: Current temperature in Celsius - **station_id**: Your personal weather station (PWS) ID - - **feelslike_c**: Feels like (or apparent) temperature in celsius + - **feelslike_c**: Feels like (or apparent) temperature in Celsius - **feelslike_f**: Feels like (or apparent) temperature in Fahrenheit - - **feelslike_string**: Text summary of how the current teperature feels like + - **feelslike_string**: Text summary of how the current temperature feels like - **heat_index_c**: Heat index (combined effects of the temperature and humidity of the air) in Celsius - **heat_index_f**: Heat index (combined effects of the temperature and humidity of the air) in Fahrenheit - **heat_index_string**: Text summary of current heat index - - **dewpoint_c**: Temperature in celsius below which water droplets begin to condense and dew can form - - **dewpoint_f**: Temperature in fahrenheit below which water droplets begin to condense and dew can form + - **dewpoint_c**: Temperature in Celsius below which water droplets begin to condense and dew can form + - **dewpoint_f**: Temperature in Fahrenheit below which water droplets begin to condense and dew can form - **dewpoint_string**: Text summary of dew point - **wind_kph**: Current wind speed in kph - **wind_mph**: Current wind speed in mph @@ -83,7 +83,7 @@ Configuration variables: - **pressure_mb**: Atmospheric air pressure in millibars - **wind_dir**: Wind direction - **wind_string**: Text summary of current wind conditions - - **relative_humidity**: Reltive humidity + - **relative_humidity**: Relative humidity - **visibility_mi**: Average visibility in miles - **visibility_km**: Average visibility in km - **precip_today_in**: Total precipitation in inches From d5256e8584203aa2a27a6f82a4235f6fc84b599f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 2 Sep 2016 16:59:16 +0200 Subject: [PATCH 16/76] Add inital docs for coinmarketcap (#874) --- .../_components/sensor.coinmarketcap.markdown | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 source/_components/sensor.coinmarketcap.markdown diff --git a/source/_components/sensor.coinmarketcap.markdown b/source/_components/sensor.coinmarketcap.markdown new file mode 100644 index 00000000000..32c521a62d8 --- /dev/null +++ b/source/_components/sensor.coinmarketcap.markdown @@ -0,0 +1,30 @@ +--- +layout: page +title: "CoinMarketCap" +description: "Instructions how to integrate CoinMarketCap data within Home Assistant." +date: 2016-08-31 08:15 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Finance +ha_release: 0.28 +ha_iot_class: "Cloud Polling" +--- + + +The `coinmarketcap` sensor platform displays various details about a crypto currency provided by [CoinMarketCap](http://coinmarketcap.com/). + +To add the CoinMarketCap sensor to your installation, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: coinmarketcap + currency: bitcoin +``` + +Configuration variables: + +- **currency** (*Optional*): The currency to display, eg. `bitcoin`, `litecoin`, `steem`, etc. Default is `bitcoin`. + From 167d5632b1a9016496bf12461afd5b6d8f2d0015 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 3 Sep 2016 21:40:14 +0200 Subject: [PATCH 17/76] Sync with configuration check --- source/_components/sensor.mfi.markdown | 8 ++++---- source/_components/switch.mfi.markdown | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.mfi.markdown b/source/_components/sensor.mfi.markdown index 58b25e26ea6..4909c6225b5 100644 --- a/source/_components/sensor.mfi.markdown +++ b/source/_components/sensor.mfi.markdown @@ -24,8 +24,8 @@ sensor: port: PORT username: USERNAME password: PASSWORD - use_tls: true - verify_tls: true + ssl: true + verify_ssl: true ``` Configuration variables: @@ -34,6 +34,6 @@ Configuration variables: - **port** (*Optional*): The port of your mFi controller. Defaults to 6443 for TLS, otherwise 6080. - **username** (*Required*): The mFi admin username. - **password** (*Required*): The mFi admin user's password. -- **use_tls** (*Optional*): If true, use TLS to contact the mFi controller. Defaults to true. -- **verify_tls** (*Optional*): Set this to false if your mFi controller has a self-signed certificate. Defaults to true. +- **ssl** (*Optional*): If `True`, use SSL/TLS to contact the mFi controller. Defaults to `True`. +- **verify_ssl** (*Optional*): Set this to `False` if your mFi controller has a self-signed certificate. Defaults to `True`. diff --git a/source/_components/switch.mfi.markdown b/source/_components/switch.mfi.markdown index 7c0bd1c582b..5e7f850a7f3 100644 --- a/source/_components/switch.mfi.markdown +++ b/source/_components/switch.mfi.markdown @@ -24,8 +24,8 @@ sensor: port: PORT username: USERNAME password: PASSWORD - use_tls: true - verify_tls: true + ssl: true + verify_ssl: true ``` Configuration variables: @@ -34,5 +34,5 @@ Configuration variables: - **port** (*Optional*): The port of your mFi controller. Defaults to 6443. - **username** (*Required*): The mFi admin username. - **password** (*Required*): The mFi admin user's password. -- **use_tls** (*Optional*): If true, use TLS to contact the mFi controller. Defaults to true. -- **verify_tls** (*Optional*): Set this to false if your mFi controller has a self-signed certificate. Defaults to true. +- **ssl** (*Optional*): If `True`, use SSL/TLS to contact the mFi controller. Defaults to `True`. +- **verify_ssl** (*Optional*): Set this to `False` if your mFi controller has a self-signed certificate. Defaults to `True`. From 7bb10f1fd15466dea409682dc329048619afb8e7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 3 Sep 2016 21:46:30 +0200 Subject: [PATCH 18/76] Add new breaking changes --- source/_posts/2016-09-01-0-28.markdown | 45 ++++---------------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index e26f8925299..22453e213ea 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -20,8 +20,9 @@ categories: Release-Notes ### {% linkable_title Breaking changes %} -- OpenweatherMap entity IDs are now like `sensor.owm_temperature`. Previously they were like `sensor.weather_temperature`. Apologies for this change, but we needed to make OpenWeatherMap more generic now that we have many weather platforms. -- +- [OpenweatherMap] entity IDs are now like `sensor.owm_temperature`. Previously they were like `sensor.weather_temperature`. Apologies for this change, but we needed to make OpenWeatherMap more generic now that we have many weather platforms. +- The configuration for the [OctoPrint] component was updated. +- The mFi platform ([switch][mfi-switch] and [sensor][mfi-sensor]) are no aligned with the configuration of other platforms. [@arsaboo]: https://github.com/arsaboo [@auchter]: https://github.com/auchter @@ -55,39 +56,7 @@ categories: Release-Notes [@turbokongen]: https://github.com/turbokongen [@w1ll1am23]: https://github.com/w1ll1am23 -[checking]: /components/sensor.dht/ -[FFMpeg]: /components/binary_sensor.ffmpeg/ -[Climate]: /components/climate/ -[NZBGet]: /components/sensor.nzbget/ -[SABnzbd]: /components/sensor.sabnzbd/ -[HP]: /components/sensor.hp_ilo/ -[Fritzbox]: /components/sensor.fritzbox_callmonitor/ -[webos]: /components/media_player.webostv/ -[HTML5]: /components/notify.html5/ -[Gravatar]: /components/device_tracker/ -[Loop]: /components/sensor.loop_energy/ -[cover]: /components/cover/ -[climate]: /components/climate/ -[expose]: /components/light/ -[Automate]: /components/notify.llamalab_automate/ -[Secrets]: /topics/secrets/ -[trigger]: /components/alarm_control_panel.manual/ -[CO2]: /components/sensor.mhz19/ -[presence]: /components/sensor.mqtt_room -[grouping]: /components/notify.group/ -[Wunderground]: /components/sensor.wunderground/ -[monitoring]: /components/binary_sensor.ffmpeg/ -[MJPEG]: /components/camera.mjpeg/ -[Generic]: /components/camera.generic/ -[positions]: /components/cover.zwave/ -[forecast]: /components/sensor.forecast/ -[Bluetooth]: /components/device_tracker.bluetooth_le_tracker/ -[Slack]: /components/notify.slack/ -[template]: /components/camera.generic/ -[Bug]: /components/wink/ -[support]: /components/homematic/ -[node]: /components/zwave/ -[found]: /components/device_tracker.tplink/ -[attachments]: /components/notify.slack/ -[Hue]: /components/emulated_hue/ -[fan]: /components/fan/ +[OpenweatherMap]: /components/sensor.openweathermap/ +[OctoPrint]: /components/octoprint/ +[mfi-switch]: /components/switch.mfi/ +[mfi-sensor]: /components/sensor.mfi/ From fa4c97cbb5df9f284e1a256d00b515ddd1f148bc Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sat, 3 Sep 2016 21:54:32 -0700 Subject: [PATCH 19/76] Occupancy sensor class (#894) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🐬 --- source/_components/binary_sensor.markdown | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index d15152753e2..0464d81f912 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -16,17 +16,19 @@ Knowing that there are only two states allows Home Assistant to represent the se Most binary sensors support the `SENSOR_CLASSES` which let you specify the type of your sensor. The following types are supported: - **None**: Generic on/off -- **opening**: Door, window, etc -- **motion**: Motion sensor +- **cold**: On means cold (or too cold) +- **connectivity**: On means connection present, Off means no connection - **gas**: CO, CO2, etc -- **smoke**: Smoke detector -- **moisture**: Specifically a wetness sensor +- **heat**: On means hot (or too hot) - **light**: Lightness threshold +- **moisture**: Specifically a wetness sensor +- **motion**: Motion sensor +- **moving**: On means moving, Off means stopped +- **occupancy**: On means occupied, Off means not occupied +- **opening**: Door, window, etc - **power**: Power, over-current, etc - **safety**: On means unsafe, Off means safe -- **heat**: On means hot (or too hot) -- **cold**: On means cold (or too cold) -- **moving**: On means moving, Off means stopped +- **smoke**: Smoke detector - **sound**: On means sound detected, Off means no sound - **vibration**: On means vibration detected, Off means no vibration From 333766a03709629c5480c00c32b20f5933964711 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Sep 2016 11:41:03 +0200 Subject: [PATCH 20/76] Add ssl option (#888) --- source/_components/sensor.sabnzbd.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 1be51e231a2..1a8c9fe258d 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -26,6 +26,7 @@ sensor: api_key: YOUR_API_KEY host: YOUR_SABNZBD_HOST port: 8080 + ssl: True monitored_variables: - 'current_status' - 'speed' @@ -41,6 +42,7 @@ Configuration variables: - **port** (*Optional*): The port to use whith SABnzbd instance. Defaults to `8080`. - **api_key** (*Required*): Name that will be used in the frontend for the pin. - **name** (*Optional*): The name to use when displaying this SABnzbd instance. +- **ssl** (*Optional*): Use `https` instead of `http` to connect. Defaults to False. - **monitored_variables** array (*Required*): List of the monitored variables. - **current_status**: current status of the SABnzbd instance - **speed**: Current speed From 4e8407cd56fadb6976a4a1ea8b39ac640de1717d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Sep 2016 11:41:10 +0200 Subject: [PATCH 21/76] Add verify_sll option (#889) --- source/_components/binary_sensor.rest.markdown | 2 ++ source/_components/sensor.rest.markdown | 2 ++ 2 files changed, 4 insertions(+) diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 7ef84e74f77..1be2b677cf1 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -37,6 +37,7 @@ binary_sensor: name: REST GET binary sensor sensor_class: opening value_template: '{% raw %}{{ value_json.state }}{% endraw %}' + verify_ssl: False ``` or for a POST request: @@ -61,6 +62,7 @@ Configuration variables: - **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the value. - **payload** (*Optional*): The payload to send with a POST request. Usualy formed as a dictionary. +- **verify_ssl** (*Optional*): Verify the certification of the endpoint. Default to True.

Make sure that the URL matches exactly your endpoint or resource. diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index aae1513a326..1d919c161a4 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -39,6 +39,7 @@ sensor: payload: '{ "device" : "heater" }' name: REST POST sensor unit_of_measurement: "°C" + verify_ssl: False ``` Configuration variables: @@ -49,6 +50,7 @@ Configuration variables: - **payload** (*Optional*): The payload to send with a POST request. Depends on the service, but usually formed as JSON. - **name** (*Optional*): Name of the REST sensor. - **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. +- **verify_ssl** (*Optional*): Verify the certification of the endpoint. Default to True.

Make sure that the URL matches exactly your endpoint or resource. From 0da1ee9f55ba11eba85a7ba8548edf91759ee842 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Sun, 4 Sep 2016 03:42:40 -0600 Subject: [PATCH 22/76] Automatic ODB reader docs (#863) --- .../device_tracker.automatic.markdown | 41 ++++++++++++++++++ source/images/supported_brands/automatic.png | Bin 0 -> 13733 bytes 2 files changed, 41 insertions(+) create mode 100644 source/_components/device_tracker.automatic.markdown create mode 100644 source/images/supported_brands/automatic.png diff --git a/source/_components/device_tracker.automatic.markdown b/source/_components/device_tracker.automatic.markdown new file mode 100644 index 00000000000..9d38582459d --- /dev/null +++ b/source/_components/device_tracker.automatic.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Automatic" +description: "Instructions for how to integrate Automatic ODB readers into Home Assistant." +date: 2015-08-28 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: automatic.png +ha_category: Presence Detection +ha_release: 0.28 +--- + + +The `automatic` platform offers presence detection by retrieving your car's information from the [Automatic](http://automatic.com/) cloud service. + +To use an Automatic ODB reader in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: automatic + client_id: 1234567 + secret: 0987654321 + username: your@email.com + password: your_password + devices: + - 2007 Honda Element + - 2004 Subaru Impreza +``` + +Configuration variables: + +- **client_id** (*Required*): The OAuth client id (get from https://developer.automatic.com/). +- **secret** (*Require*): The OAuth client secret (get from https://developer.automatic.com/). +- **username** (*Required*): The username associated with your ODB reader. +- **password** (*Required*): The password for your given ODB reader account. +- **devices** (*Optional*): The list of vehicle display names you wish to track. If not provided, all vehicles will be tracked. + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/images/supported_brands/automatic.png b/source/images/supported_brands/automatic.png new file mode 100644 index 0000000000000000000000000000000000000000..26d71a1768e9c6a87cc84b185903bc1a60d8f2bc GIT binary patch literal 13733 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 Date: Sun, 4 Sep 2016 05:43:52 -0400 Subject: [PATCH 23/76] orvibo doc (#846) * orvibo doc * switch->socket --- source/_components/switch.orvibo.markdown | 28 ++++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/source/_components/switch.orvibo.markdown b/source/_components/switch.orvibo.markdown index a68cf2761e3..5f8efc3892d 100644 --- a/source/_components/switch.orvibo.markdown +++ b/source/_components/switch.orvibo.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Orvibo Switch" -description: "Instructions how to integrate Orvibo switches within Home Assistant." +description: "Instructions how to integrate Orvibo sockets within Home Assistant." date: 2015-11-15 18:15 sidebar: true comments: false @@ -11,20 +11,32 @@ logo: orvibo.png ha_category: Switch --- -The `orvibo` switch platform allows you to toggle your Orvibo S20 Wifi Smart Switch. +The `orvibo` switch platform allows you to toggle your Orvibo S20 Wifi Smart Sockets. -To use your Orvibo switch in your installation, add the following to your `configuration.yaml` file: +To automatically discover Orvibo sockets on your network: ```yaml -# Example configuration.yaml entry switch: platform: orvibo - host: IP_ADDRESS - mac: MA:CA:DD:RE:SS:00 +``` + +To specify Orvibo sockets and skip discovery: + +```yaml +switch: + platform: orvibo + discovery: false + switches: + - host: IP_ADDRESS + mac: MA:CA:DD:RE:SS:00 + name: "My Socket" ``` Configuration variables: -- **host** (*Required*): IP address of your switch, eg. 192.168.1.10. -- **mac** (*Optional*): MAC address of the switch, eg "AA:BB:CC:DD:EE:FF". This is required if the switch is connected to a different subnet to the machine running Home Assistant +- **discovery** (*Optional*): Whether to discover sockets (default true). +- **switches** (*Optional*): + - **host** (*Required*): IP address of your socket, eg. 192.168.1.10. + - **mac** (*Optional*): MAC address of the socket, eg "AA:BB:CC:DD:EE:FF". This is required if the socket is connected to a different subnet to the machine running Home Assistant + - **name** (*Optional*): Your name for the socket. From 3af7bd885ea33f69246b4e093cfbbfd6e813e089 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Sep 2016 14:17:38 +0200 Subject: [PATCH 24/76] Add name option --- source/_components/sensor.gtfs.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index 18a0aa5d916..d474d12b0f2 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -52,3 +52,5 @@ Configuration variables: - **origin** (*Required*): The stop ID of your origin station. - **destination** (*Required*): The stop ID of your destination station. - **data** (*Required*): The name of the ZIP file or folder containing the GTFS data. It must be located inside the `gtfs` folder of your configuration directory. +- **name** (*Optional*): Name to use in the frontend. + From 0bd7559de7c2e5105eb6f37f6b1a0374f6b29b15 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Sep 2016 22:48:27 +0200 Subject: [PATCH 25/76] Update configuration variables --- source/_components/switch.hikvision.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/switch.hikvision.markdown b/source/_components/switch.hikvision.markdown index 6434dcc5f46..6fa0aedba40 100644 --- a/source/_components/switch.hikvision.markdown +++ b/source/_components/switch.hikvision.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hikvision Camera Switch" -description: "Instructions how to integrate Hikvision camera's into Home Assistant." +description: "Instructions how to integrate Hikvision camera switches into Home Assistant." date: 2015-06-10 22:54 sidebar: true comments: false @@ -34,8 +34,8 @@ switch: Configuration variables: -- **host** *Required*: The IP address of your Hikvision camera, eg. 192.168.1.32 -- **port** *Optional*: The port to connec to your Hikvision camera (default is 80). -- **name** *Optional*: This parameter allows you to override the name of your camera. -- **username** *Required*: The username for accessing your Hikvision camera. -- **password** *Required*: The password to access your Hikvision camera. +- **host** (*Required*): The IP address of your Hikvision camera, eg. 192.168.1.32 +- **port** (*Optional*): The port to connec to your Hikvision camera. Defaults to 80. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **username** (*Optional*): The username for accessing your Hikvision camera. Defaults to "admin". +- **password** (*Optional*): The password to access your Hikvision camera. Defaults to "12345". From 3430f8a2395c72606a951fe4a6a7914ad285385c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 4 Sep 2016 22:58:13 +0200 Subject: [PATCH 26/76] Update configuration variables --- source/_components/switch.edimax.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.edimax.markdown b/source/_components/switch.edimax.markdown index 8f6164d32b6..b3e51d1c33e 100644 --- a/source/_components/switch.edimax.markdown +++ b/source/_components/switch.edimax.markdown @@ -30,7 +30,7 @@ switch: Configuration variables: - **host** (*Required*): The IP address of your Edimax switch, eg. 192.168.1.32 -- **username** (*Required*): Your username for the Edimax switch. -- **password** (*Required*): Your password for the Edimax switch. +- **username** (*Optional*): Your username for the Edimax switch. Defaults to "admin". +- **password** (*Optional*): Your password for the Edimax switch. Defaults to "1234". - **name** (*Optional*): The name to use when displaying this switch. From 4ff066730146b393dc18c9a1678dade8dc44018a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 07:21:40 +0200 Subject: [PATCH 27/76] Add port as configuration variable --- source/_components/media_player.directv.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_components/media_player.directv.markdown b/source/_components/media_player.directv.markdown index e33834f248a..68ceaf4329a 100644 --- a/source/_components/media_player.directv.markdown +++ b/source/_components/media_player.directv.markdown @@ -9,7 +9,8 @@ sharing: true footer: true logo: directv.png ha_category: Media Player -ha_release: "0.25" +ha_release: 0.25 +ha_iot_class: "Local Polling" --- The [DirecTV](http://www.directv.com/) receivers will be automatically discovered if you enable the [discovery component](/components/discovery/). @@ -21,10 +22,13 @@ The `directv` media player platform can also be forced to load by adding the fol media_player: platform: directv host: 192.168.1.10 + port: 8080 name: DirecTV Living Room ``` Configuration variables: -- **host** *Optional*: Use only if you don't want to scan for devices. -- **name** *Optional*: Use to give a specific name to the device. +- **host** (*Optional*): Use only if you don't want to scan for devices. +- **port** (*Optional*): The port your receiver is using. Defaults to `8080`. +- **name** (*Optional*): Use to give a specific name to the device. + From db4c627bf6fe9016397722c323e72c0487829050 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 07:50:54 +0200 Subject: [PATCH 28/76] Split host:port to align with other platforms --- source/_components/media_player.firetv.markdown | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index bb1a9ae3d59..2369b7a66d5 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -1,7 +1,7 @@ --- layout: page title: "FireTV" -description: "Instructions how to integrate Music Player Daemon into Home Assistant." +description: "Instructions how to integrate FIre-TV into Home Assistant." date: 2015-10-23 18:00 sidebar: true comments: false @@ -10,6 +10,7 @@ footer: true logo: firetv.png ha_category: Media Player ha_release: 0.7.6 +ha_iot_class: "Local Polling" --- @@ -38,19 +39,21 @@ To add FireTV to your installation, add the following to your `configuration.yam # Example configuration.yaml entry media_player: platform: firetv - host: localhost:5556 + host: localhost + port: 5556 device: livingroom-firetv name: My Amazon Fire TV ``` Configuration variables: -- **host** (*Optional*): Where `firetv-server` is running. Default is *localhost:5556*. -- **device** (*Optional*): The device ID, default is *default*. +- **host** (*Optional*): Where `firetv-server` is running. Default is localhost. +- **port** (*Optional*): THe port where `firetv-server` is running. Default is 5556. +- **device** (*Optional*): The device ID. Defaults to `default`. - **name** (*Optional*): The friendly name of the device, default is 'Amazon Fire TV'.

-Note that python-firetv has support for multiple Amazon Fire TV devices. If you have more than one configured, be sure to specify the device id used. Run `firetv-server -h` and/or view the source for complete capabilities. +Note that python-firetv has support for multiple Amazon Fire TV devices. If you have more than one configured, be sure to specify the device ID in `device`. Run `firetv-server -h` and/or view the source for complete capabilities.

From 35cac58d1d951ffa856d12a0f0e438dc7aabba4c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 07:51:29 +0200 Subject: [PATCH 29/76] Add FireTV as breaking change --- source/_posts/2016-09-01-0-28.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index 22453e213ea..cc55f7ffa77 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -23,6 +23,7 @@ categories: Release-Notes - [OpenweatherMap] entity IDs are now like `sensor.owm_temperature`. Previously they were like `sensor.weather_temperature`. Apologies for this change, but we needed to make OpenWeatherMap more generic now that we have many weather platforms. - The configuration for the [OctoPrint] component was updated. - The mFi platform ([switch][mfi-switch] and [sensor][mfi-sensor]) are no aligned with the configuration of other platforms. +- Fire-TV configuration was updated. [@arsaboo]: https://github.com/arsaboo [@auchter]: https://github.com/auchter @@ -60,3 +61,4 @@ categories: Release-Notes [OctoPrint]: /components/octoprint/ [mfi-switch]: /components/switch.mfi/ [mfi-sensor]: /components/sensor.mfi/ +[FireTV]: /components/media_player.firetv/ From c9a06bb874ba5b695b5fdafea76bd354d3608d1a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 07:55:59 +0200 Subject: [PATCH 30/76] Typos --- source/_components/media_player.firetv.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index 2369b7a66d5..f5b9de02247 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -47,8 +47,8 @@ media_player: Configuration variables: -- **host** (*Optional*): Where `firetv-server` is running. Default is localhost. -- **port** (*Optional*): THe port where `firetv-server` is running. Default is 5556. +- **host** (*Optional*): The host where `firetv-server` is running. Default is localhost. +- **port** (*Optional*): The port where `firetv-server` is running. Default is 5556. - **device** (*Optional*): The device ID. Defaults to `default`. - **name** (*Optional*): The friendly name of the device, default is 'Amazon Fire TV'. From 8ab5349718ed0093b4bfbd4b30339b39a97fe442 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 13:06:59 +0200 Subject: [PATCH 31/76] Update configuration variables --- source/_components/media_player.kodi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index fd7d5ccf387..849b3cd9c0f 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -33,7 +33,7 @@ media_player: Configuration variables: - **host** (*Required*): The host name or address of the device that is running XBMC/Kodi -- **port** (*Required*): The port number, default 8080 +- **port** (*Optional*): The port number. Defaults to 8080. - **name** (*Optional*): The name of the device used in the frontend. - **username** (*Optional*): The XBMC/Kodi HTTP username. - **password** (*Optional*): The XBMC/Kodi HTTP password. From 583b8c4b79a0292a05a660450d5373386ca296bd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 14:14:32 +0200 Subject: [PATCH 32/76] Update configuration variables --- source/_components/media_player.mpchc.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/media_player.mpchc.markdown b/source/_components/media_player.mpchc.markdown index c03a58c18a1..5b761b2ac3f 100644 --- a/source/_components/media_player.mpchc.markdown +++ b/source/_components/media_player.mpchc.markdown @@ -10,7 +10,7 @@ footer: true logo: mpchc.png ha_category: Media Player featured: false -ha_release: 0.25.0 +ha_release: 0.25 --- @@ -41,6 +41,6 @@ media_player: Configuration variables: -- **host** (*Required*): The host name or address of the device that is running MPC-HC -- **port** (*Required*): The port number, default 13579 +- **host** (*Required*): The host name or address of the device that is running MPC-HC. +- **port** (*Optional*): The port number. Defaults to 13579. - **name** (*Optional*): The name of the device used in the frontend. From 97eb16671161a1e5d165f05978cae652f173e5b7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 15:35:24 +0200 Subject: [PATCH 33/76] Change variable name --- source/_components/media_player.mpd.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown index b5d10aee92d..af2d60a87b1 100644 --- a/source/_components/media_player.mpd.markdown +++ b/source/_components/media_player.mpd.markdown @@ -21,7 +21,7 @@ To add MPD to your installation, add the following to your `configuration.yaml` # Example configuration.yaml entry media_player: platform: mpd - server: IP_ADDRESS + host: IP_ADDRESS port: 6600 location: bedroom password: PASSWORD @@ -29,9 +29,9 @@ media_player: Configuration variables: -- **server** (*Required*): IP address of the Music Player Daemon, eg. 192.168.1.32 -- **port** (*Optional*): Port of the Music Player Daemon, defaults to 6600. -- **location** (*Optional*): Location of your Music Player Daemon. +- **host** (*Required*): IP address of the Host where Music Player Daemon is running. +- **port** (*Optional*): Port of the Music Player Daemon. Defaults to 6600. +- **location** (*Optional*): Location of your Music Player Daemon. Defaults to "MPD". - **password** (*Optional*): Password for your Music Player Daemon. This platform works with [Music Player Daemon](http://www.musicpd.org/) and [mopidy](https://www.mopidy.com/) with [Mopidy-MPD](https://docs.mopidy.com/en/latest/ext/mpd/) as used by [Pi MusicBox](http://www.pimusicbox.com/). From 54d71bb227ea971d7f3a29f4266e798712034904 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 15:54:25 +0200 Subject: [PATCH 34/76] Fix format --- source/_components/sensor.speedtest.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index a6875aa36b6..35afbedb411 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -70,7 +70,7 @@ Configuration variables: - **ping**: Reaction time in ms of your connection, (how fast you get a response after you've sent out a request). - **download**: Download speed in Mbps. - **upload**: Upload speed in Mbps. -- **server_id (*Optional*): Specify the speedtest server to perform test against. +- **server_id** (*Optional*): Specify the speedtest server to perform test against. - **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0. - **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None. - **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None. From 99d147c547253c263fa3c53bbb9b54ada3afae74 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 15:54:39 +0200 Subject: [PATCH 35/76] Remove note --- source/_components/media_player.pandora.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/media_player.pandora.markdown b/source/_components/media_player.pandora.markdown index 6d6e3b2a563..efa8c2bc614 100644 --- a/source/_components/media_player.pandora.markdown +++ b/source/_components/media_player.pandora.markdown @@ -60,5 +60,3 @@ That's it! Now you will find a media player. If you click it you will find all y

-

This is a new component and it has some issues.

- From ff3b39f74448ffba224db9b980a4208099a03f8e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 18:35:08 +0200 Subject: [PATCH 36/76] Add link to retrieve server_id --- source/_components/sensor.speedtest.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index 35afbedb411..d7257c9a12f 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -15,7 +15,7 @@ ha_release: 0.13 The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance. -By default, it will run every hour. The user can change the update frequency in the config by defining the minute, hour, and day for a speedtest to run. +By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speedtest to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file: From 6f9e234ee6576c241a2a56d9bdf1744d0bbeafb6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 5 Sep 2016 18:47:24 +0200 Subject: [PATCH 37/76] Add missing configuration variables --- source/_components/media_player.samsungtv.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 8b4f5ec3d62..da430989421 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -24,13 +24,17 @@ To add a TV to your installation, add the following to your `configuration.yaml` media_player: platform: samsungtv host: 192.168.0.10 + port: 55000 name: Living Room TV + timeout: 2 ``` Configuration variables: - **host** (*Required*): The IP of the Samsung Smart TV, eg. 192.168.0.10 +- **port** (*Optional*): The port of the Samsung Smart TV. Defaults to 55000. - **name** (*Optional*): The name you would like to give to the Samsung Smart TV. +- **timeout** (*Optional*): The time-out for the communication with the TV. Defaults to 0. Currently known supported models: From 86f298e1c5f81e034c4faa9350ffa1cadf094387 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 6 Sep 2016 15:17:58 +0200 Subject: [PATCH 38/76] Update configuration variables --- source/_components/alarm_control_panel.nx584.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_components/alarm_control_panel.nx584.markdown b/source/_components/alarm_control_panel.nx584.markdown index 64bb0963997..19981212ae4 100644 --- a/source/_components/alarm_control_panel.nx584.markdown +++ b/source/_components/alarm_control_panel.nx584.markdown @@ -14,17 +14,18 @@ ha_release: 0.13 The `nx584` platform provides integration with GE, Caddx, Interlogix (and other brands) alarm panels that support the NX584 interface module (or have it built in). Supported panels include NX4/6/8/8E. Actual integration is done through [pynx584](http://github.com/kk7ds/pynx584) which is required for this to work. - To enable this, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry alarm_control_panel: platform: nx584 - host: ADDRESS + host: IP_ADDRESS + port: 5007 ``` Configuration variables: -- **host** (*Optional*): This is the host connection string (host:port) for the nx584 server process. If unset, it is assumed to be `localhost:5007`, which will work if the server process is running on the same system as home-assistant. +- **host** (*Optional*): The host where the nx584 server process is running. Defaults to localhost. +- **port** (*Optional*): The port where the Alarm panel ist listening. Defaults to 5007. From 955e5d6819549d6754d5571164e9ee8c58e12421 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 6 Sep 2016 15:20:37 +0200 Subject: [PATCH 39/76] Add breaking changes as list --- source/_posts/2016-09-01-0-28.markdown | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index cc55f7ffa77..8140a4e2808 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -21,9 +21,12 @@ categories: Release-Notes ### {% linkable_title Breaking changes %} - [OpenweatherMap] entity IDs are now like `sensor.owm_temperature`. Previously they were like `sensor.weather_temperature`. Apologies for this change, but we needed to make OpenWeatherMap more generic now that we have many weather platforms. -- The configuration for the [OctoPrint] component was updated. -- The mFi platform ([switch][mfi-switch] and [sensor][mfi-sensor]) are no aligned with the configuration of other platforms. -- Fire-TV configuration was updated. +- Updates of configuration variables due to configuration check or alignment with other platforms. Please update your configuration entries according to the documentation: + - [OctoPrint] component + - mFi platform ([switch][mfi-switch] and [sensor][mfi-sensor]) + - NX584 Alarm Control Panel + - Fire-TV + [@arsaboo]: https://github.com/arsaboo [@auchter]: https://github.com/auchter From 91c0e6488aba540c25be693ec040a93fad4bd888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Br=C3=A6dstrup?= Date: Wed, 7 Sep 2016 15:52:43 +0200 Subject: [PATCH 40/76] D-Link switch added legacy protocol variable (#899) --- source/_components/switch.dlink.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown index 8f2379408b9..a0b8424f234 100644 --- a/source/_components/switch.dlink.markdown +++ b/source/_components/switch.dlink.markdown @@ -31,6 +31,7 @@ switch: name: D-Link plug username: YOUR_USERNAME password: YOUR_PASSWORD + use_legacy_protocol: False ``` Configuration variables: @@ -39,4 +40,5 @@ Configuration variables: - **name** (*Optional*): The name to use when displaying this switch. - **username** (*Required*): The username for your plug. Defaults to `admin`. - **password** (*Required*): The password for your plug. Default password is the `PIN` inlcuded on the configuration card. +- **use_legacy_protocol** (*Optional*): Enable limited support for legacy firmware protocols (Tested with v1.24). From 78eab791e6d6981abe7e45468716b3051f29711b Mon Sep 17 00:00:00 2001 From: Greg Dowling Date: Wed, 7 Sep 2016 14:57:08 +0100 Subject: [PATCH 41/76] Add trend sensor docs. (#904) --- .../_components/binary_sensor.trend.markdown | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 source/_components/binary_sensor.trend.markdown diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown new file mode 100644 index 00000000000..739ce499770 --- /dev/null +++ b/source/_components/binary_sensor.trend.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Trend Binary Sensor" +description: "Instructions how to integrate Trend binary sensors into Home Assistant." +date: 2016-09-05 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Binary Sensor +logo: home-assistant.png +--- + +The `trend` platform allows you to create sensors which show the trend of numeric `state` or`state_attributes` from other entities. + +This sensor requires two updates of the underlying sensor to establish a trend - so it can take some time to show an accurate state. + +It can be useful as part of automations, where you want to base an action on a trend. + +To enable Trend binary sensors in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: trend + sensors: + solar_angle: + friendly_name: 'Sun rising' + entity_id: sun.sun + sensor_class: light + attribute: elevation +``` + +Configuration variables: + +- **sensors** array (*Required*): List of your sensors. + - **friendly_name** (*Optional*): Name to use in the Frontend. + - **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. + - **entity_id** (*Required*): The entity that this sensor tracks. + - **attribute** (*Optional*): The attribute of the entity that this sensor tracks. If no attribute is specified - the sensor will track the state. + - **invert** (*Optional*): Invert the result (so `true` means decending rather than ascending) + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Temperature trend %} + +This example indicates true if the temperture is rising: + +```yaml +binary_sensor: + - platform: trend + sensors: + temperature_up: + friendly_name: 'Temp increasing' + entity_id: sensor.skylight_temperature + sensor_class: heat +``` + +And this one indicates true if the temperture is falling: + +```yaml +binary_sensor: + - platform: trend + sensors: + temperature_down: + friendly_name: 'Temp decreasing' + entity_id: sensor.skylight_temperature + sensor_class: cold + invert: Yes +``` From 71f224934098c41c134c16103b827890ad88f676 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 7 Sep 2016 15:59:46 +0200 Subject: [PATCH 42/76] Add ha_release --- source/_components/binary_sensor.trend.markdown | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 739ce499770..404c6a949ef 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -9,13 +9,11 @@ sharing: true footer: true ha_category: Binary Sensor logo: home-assistant.png +ha_release: 0.28 +ha_iot_class: "Local Push" --- -The `trend` platform allows you to create sensors which show the trend of numeric `state` or`state_attributes` from other entities. - -This sensor requires two updates of the underlying sensor to establish a trend - so it can take some time to show an accurate state. - -It can be useful as part of automations, where you want to base an action on a trend. +The `trend` platform allows you to create sensors which show the trend of numeric `state` or`state_attributes` from other entities. This sensor requires two updates of the underlying sensor to establish a trend - so it can take some time to show an accurate state. It can be useful as part of automations, where you want to base an action on a trend. To enable Trend binary sensors in your installation, add the following to your `configuration.yaml` file: From 3ebaef2102e605fe3bb3de56527d5c956902bf41 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 7 Sep 2016 16:32:55 +0200 Subject: [PATCH 43/76] Add batinfo sensor docs (#903) * Add batinfo sensor docs * Fix typo * Rename to linux_battery * Add new configuration variable and update description --- .../_components/sensor.linux_battery.markdown | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 source/_components/sensor.linux_battery.markdown diff --git a/source/_components/sensor.linux_battery.markdown b/source/_components/sensor.linux_battery.markdown new file mode 100644 index 00000000000..f0ab5a44008 --- /dev/null +++ b/source/_components/sensor.linux_battery.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Linux Battery" +description: "Instructions how to integrate Linux Battery information into Home Assistant." +date: 2016-09-06 07:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: System Monitor +ha_release: 0.28 +ha_iot_class: "Local Polling" +--- + +The `linux_battery` sensor platform is using the information stored in `/sys/class/power_supply/` on your local Linux system to display details about the current state of your battery. + +To setup a battery sensor to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: linux_battery + name: Laptop + battery: 1 +``` + +Configuration variables: + +- **name** (*Optional*): Friendly name to use for the frontend. Default to "Battery". +- **battery** (*Optional*): Number of the battery. Default to `1`. + From 76938c36c1c31dbf5277acc2faad011ba420a0ab Mon Sep 17 00:00:00 2001 From: Landrash Date: Mon, 5 Sep 2016 20:42:10 +0200 Subject: [PATCH 44/76] Rewriting of installation guide for Raspberry Pi and cleanup of associated components. --- .../binary_sensor.rpi_gpio.markdown | 8 - source/_components/camera.rpi_camera.markdown | 8 +- .../device_tracker.bluetooth_tracker.markdown | 4 - source/_components/switch.rpi_gpio.markdown | 3 - .../installation-raspberry-pi.markdown | 145 ++++++++++++++++-- 5 files changed, 135 insertions(+), 33 deletions(-) diff --git a/source/_components/binary_sensor.rpi_gpio.markdown b/source/_components/binary_sensor.rpi_gpio.markdown index 235a9198189..d5fe8ddb50c 100644 --- a/source/_components/binary_sensor.rpi_gpio.markdown +++ b/source/_components/binary_sensor.rpi_gpio.markdown @@ -12,7 +12,6 @@ ha_category: Binary Sensor ha_release: pre 0.7 --- - The `rpi_gpio` binary sensor platform allows you to read sensor values of the GPIOs of your [Raspberry Pi](https://www.raspberrypi.org/). To use your Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: @@ -39,10 +38,3 @@ Configuration variables: For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. -

-If you are not running Raspbian Jessie, you will need to run Home Assistant as root. -

- -

-To avoid having to run Home Assistant as root when using this component, run a Raspbian version released at or after September 29, 2015. -

diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown index 1a5428afdbc..56aacbc0775 100644 --- a/source/_components/camera.rpi_camera.markdown +++ b/source/_components/camera.rpi_camera.markdown @@ -14,7 +14,7 @@ ha_release: 0.17 --- -The `rpi` platform allows you to integrate the Raspberry Pi camera into Home Assistant. This component uses the application [`raspistill`](https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md) to store the image from camera. +The `rpi_camera` platform allows you to integrate the Raspberry Pi camera into Home Assistant. This component uses the application [`raspistill`](https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md) to store the image from camera. To enable this camera in your installation, add the following to your `configuration.yaml` file: @@ -47,9 +47,3 @@ Configuration variables: The given **file_path** must be an existing file because the camera platform setup make a writeable check on it. -Ensure that the user who is running Home Assistant is in the video group. Eg. for the user `hass`: - -```bash -$ sudo usermod -a -G video hass -``` - diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index 7fb68509c21..ff4e0e67e6e 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -16,10 +16,6 @@ ha_release: 0.18 This tracker discovers new devices on boot and tracks bluetooth devices periodically based on interval_seconds value. It is not required to pair the devices with each other! Devices discovered are stored with 'bt_' as the prefix for device mac addresses in `known_devices.yaml`. -

-Requires PyBluez. If you are on Raspbian, make sure you first install `bluetooth` and `libbluetooth-dev` by running `sudo apt install bluetooth libbluetooth-dev` -

- To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 81e09670203..2cff44f0ed0 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -35,6 +35,3 @@ Configuration variables: For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. -

-If you are not running Raspbian Jessie, you will need to run Home Assistant as root. -

diff --git a/source/getting-started/installation-raspberry-pi.markdown b/source/getting-started/installation-raspberry-pi.markdown index f9fc2400bbc..67e4be1656d 100644 --- a/source/getting-started/installation-raspberry-pi.markdown +++ b/source/getting-started/installation-raspberry-pi.markdown @@ -1,29 +1,152 @@ --- layout: page -title: "Installation on a Raspberry Pi" -description: "Instructions to install Home Assistant on a Raspberry Pi." -date: 2016-04-16 11:36 +title: "Raspbian Lite on a Raspberry Pi" +description: "Instructions to install Home Assistant on a Raspberry Pi runnning Raspbian Lite." +date: 2016-09-05 16:00 sidebar: true comments: false sharing: true footer: true --- -Home Assistant requires the Raspberry Pi to run [Raspbian Jessie](https://www.raspberrypi.org/downloads/raspbian/). This version was released on September 24, 2015 and comes by default with Python 3.4 which is required for Home Assistant. +### {% linkable_title Installation %} -Execute the following code in a console: +This installation of Home Assistant requires the Raspberry Pi to run [Raspbian Lite](https://www.raspberrypi.org/downloads/raspbian/). +The installation will be installed in a [Virtual Environment](/getting-started/installation-virtualenv) with minimal overhead. Instructions assume this is a new installation of Raspbian Lite. +Connect to the Raspberry Pi over ssh. Default password is `raspberry`. ```bash -$ sudo pip3 install homeassistant -$ hass +$ ssh pi@ipadress ``` -Running these commands will: +Changing the default password is encouraged. +```bash +$ passwd +``` - - Install Home Assistant - - Launch Home Assistant and serve the web interface on [http://localhost:8123](http://localhost:8123) +Update the system. +```bash +$ sudo apt-get update +$ sudo apt-get upgrade -y +``` -There is also a [video tutorial](https://www.youtube.com/watch?v=GjzOXkPb7XE) created by [brusc](https://github.com/brusc). +Install the dependencies. +```bash +$ sudo apt-get install python3 python3-venv python3-pip +``` + +Add an account for Home Assistant called `homeassistant`. +Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. +```bash +$ sudo useradd -rm homeassistant +``` + +Next we will create a directory for the installation of Home Assistant and change the owner to the `homeassistant` account. +```bash +$ cd /srv +$ sudo mkdir homeassistant +$ sudo chown homeassistant:homeassistant homeassistant +``` + +Next up is to create and change to a virtual environment for Home Assistant. This will be done as the `homeassistant` account. +```bash +$ sudo su -s /bin/bash homeassistant +$ cd /srv/homeassistant +$ python3 -m venv homeassistant_venv +$ source /srv/homeassistant/homeassistant_venv/bin/activate +``` +Once you have activated the virtual environment you will notice the prompt change and then you can install Home Assistant. +```bash +(homeassistant_venv) homeassistant@raspberrypi:/srv/homeassistant $ pip3 install homeassistant +``` + +Start Home Assistant for the first time. This will complete the installation, create the `.homeasssistant` configuration directory in the `/home/homeassistant` directory and install any basic dependencies. +```bash +(homeassistant_venv) $ hass +``` + +You can now reach your installation on your raspberry pi over the web interface on [http://ipaddress:8123](http://ipaddress:8123). +For instruction on how to configure Home Assistant continue on with [Configuring Home Assistant](/getting-started/configuration/). + +### {% linkable_title Raspberry Pi Hardware Specific Components %} + +Some components that are specific for the Raspberry Pi can require some further configuration outside of Home Assistant. All commands below are assumed to be executed with the `pi` account. For full documentation of these components refer to the [components](/components) page. + +### {% linkable_title Bluetooth Tracker %} +The Bluetooth tracker will work on a Raspberry Pi 3 with the built-in Bluetooth module or with a USB Bluetooth device on any of the other Raspberry Pi's. + +Install the following external dependencies. +```bash +$ sudo apt-get install bluetooth libbluetooth-dev +``` +After this follow the [Bluetooth Tracker component](/components/device_tracker.bluetooth_tracker/) and [Device Tracker page](/components/device_tracker/) pages. + + +### {% linkable_title Raspberry Pi Camera %} +The Raspberry Pi Camera is a specific camera for the Raspberry Pi boards. For more information about the camera I suggest reading the [documentation](https://www.raspberrypi.org/documentation/usage/camera/) from the Raspberry Pi foundation. + +To use the camera it needs to be enabled with the `raspi-config` utility. +```bash +$ sudo raspi-config +``` +Select `Enable camera` choose `` and hit `Enter`, then go to `Finish` and you'll be prompted to reboot. +After reboot add your `homeassistant` account to the `video` group. +```bash +$ sudo adduser homeassistant video +``` +After this follow the [Raspberry Pi Camera component](/components/camera.rpi_camera/) page. + +### {% linkable_title Raspberry Pi GPIO %} +Each of the following devices are connected to the GPIO pins on the Raspberry Pi. +For more details about the GPIO layout, visit the [documentation](https://www.raspberrypi.org/documentation/usage/gpio/) from the Raspberry +Pi foundation. +Since these are not normally used some extra permission will need to be added. +In general the permission that is needed is granted by adding the `homeassistant` account to the `gpio` group. + + +#### {% linkable_title Raspberry Pi Cover %} +Add your `homeassistant` account to the `gpio` group +```bash +$ sudo adduser homeassistant gpio +``` +After this follow the [Raspberry Pi Cover component](/components/cover.rpi_gpio/) page. + +#### {% linkable_title DHT Sensor %} +Add your `homeassistant` account to the `gpio` group +```bash +$ sudo adduser homeassistant gpio +``` +After this follow the [DHT Sensor component](/components/sensor.dht/) page. + + +#### {% linkable_title Raspberry PI GPIO Binary Sensor %} +Add your `homeassistant` account to the `gpio` group +```bash +$ sudo adduser homeassistant gpio +``` +After this follow the [Raspberry PI GPIO Binary Sensor component](/components/binary_sensor.rpi_gpio/) page. + +#### {% linkable_title Raspberry PI GPIO Switch %} +Add your `homeassistant` account to the `gpio` group. +```bash +$ sudo adduser homeassistant gpio +``` +After this follow the [Raspberry PI GPIO Switch component](/components/switch.rpi_gpio/) page. + +#### {% linkable_title Raspberry Pi RF Switch %} +Add your `homeassistant` account to the `gpio` group +```bash +$ sudo adduser homeassistant gpio +``` +After this follow the [Raspberry Pi RF Switch component](/components/switch.rpi_rf/) page. + +#### {% linkable_title One wire Sensor %} +The One wire sensor requires that support for it is enabled on the Raspberry Pi and that the One Wire device is connected to GPIO pin 4. +To enable One Wire support add the following line to the end of `/boot/config.txt` +```yaml +dtoverlay=w1-gpio +``` +After this follow the [One Wire Sensor component](/components/sensor.onewire/) page. ### {% linkable_title Troubleshooting %} From 8beaf8ba7e3615a3fcd909389b4313a08c55f6da Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 8 Sep 2016 12:13:09 +0200 Subject: [PATCH 45/76] Update configuration variables --- .../_components/cover.command_line.markdown | 21 ++++++------ .../_components/switch.command_line.markdown | 32 ++++++++++--------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/source/_components/cover.command_line.markdown b/source/_components/cover.command_line.markdown index 5c5826abe12..dce993418b9 100644 --- a/source/_components/cover.command_line.markdown +++ b/source/_components/cover.command_line.markdown @@ -22,11 +22,11 @@ To enable a command line cover in your installation, add the following to your ` cover: - platform: command_line covers: - Garage door: - opencmd: move_command up kitchen - closecmd: move_command down kitchen - stopcmd: move_command stop kitchen - statecmd: state_command kitchen + garage_door: + command_open: move_command up garage + command_close: move_command down garage + command_stop: move_command stop garage + command_state: state_command garage value_template: {% raw %}> {% if value == 'open' %} 100 @@ -40,8 +40,9 @@ Configuration variables: - **covers** (*Required*): The array that contains all command line covers. - **entry** (*Required*): Name of the command line cover. Multiple entries are possible. - - **opencmd** (*Required*): The command to open the cover. - - **closecmd** (*Required*): The action to close the cover. - - **stopcmd** (*Required*): The action to stop the cover. - - **statecmd** (*Optional*): If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open. - - **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw%}'*): if specified, `statecmd` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `statecmd` returns a string "open", using `value_template` as in the example config above will allow you to translate that into the valid state `100`. + - **command_open** (*Required*): The command to open the cover. + - **command_close** (*Required*): The action to close the cover. + - **command_stop** (*Required*): The action to stop the cover. + - **command_state** (*Optional*): If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open. + - **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw%}'*): if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example config above will allow you to translate that into the valid state `100`. + - **friendly_name** (*Optional*): The name used to display the cover in the frontend. diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index 44994d84f14..d2e9476bfce 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -24,20 +24,22 @@ switch: platform: command_line switches: kitchen_light: - oncmd: switch_command on kitchen - offcmd: switch_command off kitchen - statecmd: query_command kitchen + command_on: switch_command on kitchen + command_off: switch_command off kitchen + command_state: query_command kitchen value_template: '{% raw %}{{ value == "online" }}{% endraw %}' + friendly_name: Kitchen switch ``` Configuration variables: - **switches** (*Required*): The array that contains all command switches. - **entry** (*Required*): Name of the command switch. Multiple entries are possible. - - **oncmd** (*Required*): The action to take for on. - - **offcmd** (*Required*): The action to take for off. - - **statecmd** (*Optional*): If given, this command will be run. Returning a result code `0` will indicate that the switch is on. - - **value_template** (*Optional*): If specified, statecmd will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on. + - **command_on** (*Required*): The action to take for on. + - **command_off** (*Required*): The action to take for off. + - **command_state** (*Optional*): If given, this command will be run. Returning a result code `0` will indicate that the switch is on. + - **value_template** (*Optional*): If specified, `command_state` will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on. + - **friendly_name** (*Optional*): The name used to display the switch in the frontend. ## {% linkable_title Examples %} @@ -53,8 +55,8 @@ switch: platform: command_line switches: arest_pin4: - oncmd: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" - offcmd: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" + command_on: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" + command_off: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" ``` ### {% linkable_title Shutdown your local host %} @@ -72,7 +74,7 @@ switch: platform: command_line switches: Home Assistant system shutdown: - offcmd: "/usr/sbin/poweroff" + command_off: "/usr/sbin/poweroff" ``` ### {% linkable_title Control your VLC player %} @@ -86,8 +88,8 @@ switch: platform: command_line switches: VLC: - oncmd: "cvlc 1.mp3 vlc://quit &" - offcmd: "pkill vlc" + command_on: "cvlc 1.mp3 vlc://quit &" + command_off: "pkill vlc" ``` ### {% linkable_title Control Foscam Motion Sensor %} @@ -100,9 +102,9 @@ switch: platform: command_line switches: foscam_motion: - oncmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' - offcmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' - statecmd: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' + command_on: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' + command_off: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' + command_state: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' value_template: {% raw %}'{{ value == "1" }}'{% endraw %} ``` From da7c9e05bf8736fb78c0ad8173e67855e4ff405d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 8 Sep 2016 12:17:31 +0200 Subject: [PATCH 46/76] Add command_line platforms --- source/_posts/2016-09-01-0-28.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index 8140a4e2808..e359056175e 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -25,7 +25,8 @@ categories: Release-Notes - [OctoPrint] component - mFi platform ([switch][mfi-switch] and [sensor][mfi-sensor]) - NX584 Alarm Control Panel - - Fire-TV + - [Fire-TV] + - [switch][command-line-switch] and the [cover][command-line-cover] `command_line` platforms [@arsaboo]: https://github.com/arsaboo @@ -65,3 +66,5 @@ categories: Release-Notes [mfi-switch]: /components/switch.mfi/ [mfi-sensor]: /components/sensor.mfi/ [FireTV]: /components/media_player.firetv/ +[command-line-switch]: /components/switch.command_line/ +[command-line-cover]: /components/cover.command_line/ From 39f5aa694eebcf3ca14952e7c55d1a1700db4949 Mon Sep 17 00:00:00 2001 From: Graeme Smith Date: Fri, 9 Sep 2016 07:28:05 +0100 Subject: [PATCH 47/76] Create configuration_yaml_by_instagraeme.markdown (#913) --- .../configuration_yaml_by_instagraeme.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_instagraeme.markdown diff --git a/source/_cookbook/configuration_yaml_by_instagraeme.markdown b/source/_cookbook/configuration_yaml_by_instagraeme.markdown new file mode 100644 index 00000000000..d6ddee0fa44 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_instagraeme.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by InstaGraeme" +description: "" +date: 2016-09-08 21:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Instagraeme/Home-Assistant-Configuration +--- From 7c7d43ea8f3d32b673b5341ad1e45caabef69063 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 9 Sep 2016 17:41:58 +0200 Subject: [PATCH 48/76] Add Pi-Hole docs (#892) --- source/_components/sensor.pi_hole.markdown | 31 +++++++++++++++++++++ source/images/supported_brands/pi_hole.png | Bin 0 -> 7207 bytes 2 files changed, 31 insertions(+) create mode 100644 source/_components/sensor.pi_hole.markdown create mode 100644 source/images/supported_brands/pi_hole.png diff --git a/source/_components/sensor.pi_hole.markdown b/source/_components/sensor.pi_hole.markdown new file mode 100644 index 00000000000..a0b475fd04e --- /dev/null +++ b/source/_components/sensor.pi_hole.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Pi-Hole Sensor" +description: "Instructions how to integrate REST sensors into Home Assistant." +date: 2016-09-03 16:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: System Monitor +ha_iot_class: "Local Polling" +logo: pi_hole.png +ha_release: 0.28 +--- + + +The `pi_hole` sensor platform is displaying the statistical summary of a [Pi-Hole](https://pi-hole.net/) system. + +To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: pi_hole + host: 192.168.1.2 +``` + +Configuration variables: + +- **host** (*Optional*): The IP address of the Pi-Hole system. Defaults to `localhost`. + diff --git a/source/images/supported_brands/pi_hole.png b/source/images/supported_brands/pi_hole.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2c70b3c1b954ceab1caae485de7a0ffd243e70 GIT binary patch literal 7207 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 Date: Sat, 10 Sep 2016 13:21:53 +0200 Subject: [PATCH 49/76] Added Xbox Live component docs (#851) * Added Xbox Live component docs * Bumped version number --- source/_components/sensor.xbox_live.markdown | 39 +++++++++++++++++++ source/images/supported_brands/xbox-live.png | Bin 0 -> 6332 bytes 2 files changed, 39 insertions(+) create mode 100644 source/_components/sensor.xbox_live.markdown create mode 100644 source/images/supported_brands/xbox-live.png diff --git a/source/_components/sensor.xbox_live.markdown b/source/_components/sensor.xbox_live.markdown new file mode 100644 index 00000000000..8884e4e41be --- /dev/null +++ b/source/_components/sensor.xbox_live.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "Xbox Live" +description: "Instructions on how to set up Xbox Live sensors in Home Assistant." +date: 2016-08-28 02:45 +sidebar: true +comments: false +sharing: true +footer: true +logo: xbox-live.png +ha_category: Social +ha_iot_class: "Cloud Polling" +ha_release: 0.28 +--- + +The Xbox Live component is able to track [Xbox](http://xbox.com/) profiles. + +To use this sensor you need a free API key from [XboxAPI.com](http://xboxapi.com). +Please also make sure to connect your Xbox account on that site. + +The configuration requires you to specify XUIDs which are the unique identifiers for profiles. +These can be determined on [XboxAPI.com](http://xboxapi.com) by either looking at your own profile page or using their interactive documentation to search for gamertags. + +To use the Xbox Live sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: xbox_live + api_key: YOUR_API_KEY + xuid: + - account1 + - account2 +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key from [XboxAPI.com](http://xboxapi.com). +- **xuid** (*Required*): Array of profile XUIDs to be tracked. diff --git a/source/images/supported_brands/xbox-live.png b/source/images/supported_brands/xbox-live.png new file mode 100644 index 0000000000000000000000000000000000000000..f606acd98244815b84e10181953704bbd788eb8d GIT binary patch literal 6332 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 y7O+PP0h&2l2++*YLV#wD76LSLv=E?~ Date: Sat, 10 Sep 2016 13:13:48 +0100 Subject: [PATCH 50/76] Documentation for timestamp_custom (#911) --- source/_topics/templating.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_topics/templating.markdown b/source/_topics/templating.markdown index 10f4ff6615a..ff637a5b8af 100644 --- a/source/_topics/templating.markdown +++ b/source/_topics/templating.markdown @@ -80,6 +80,7 @@ Home Assistant adds extensions to allow templates to access all of the current s - Filter `round(x)` will convert the input to a number and round it to `x` decimals. - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. +- Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). ## {% linkable_title Examples %} @@ -199,4 +200,5 @@ It depends per component or platform but it is common to be able to define a tem # Timestamps {% raw %}{{ value_json.tst | timestamp_local }}{% endraw %} {% raw %}{{ value_json.tst | timestamp_utc }}{% endraw %} +{% raw %}{{ value_json.tst | timestamp_custom('%Y' True) }}{% endraw %} ``` From 59116bcfef0a77484354848acd3c71d630c85b8a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 8 Sep 2016 12:21:41 +0200 Subject: [PATCH 51/76] Update variables description --- source/_components/cover.command_line.markdown | 2 +- source/_components/switch.command_line.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/cover.command_line.markdown b/source/_components/cover.command_line.markdown index dce993418b9..b3bcd690d60 100644 --- a/source/_components/cover.command_line.markdown +++ b/source/_components/cover.command_line.markdown @@ -39,7 +39,7 @@ cover: Configuration variables: - **covers** (*Required*): The array that contains all command line covers. - - **entry** (*Required*): Name of the command line cover. Multiple entries are possible. + - **identifier** (*Required*): Name of the command line cover as slug. Multiple entries are possible. - **command_open** (*Required*): The command to open the cover. - **command_close** (*Required*): The action to close the cover. - **command_stop** (*Required*): The action to stop the cover. diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index d2e9476bfce..197343e2110 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -34,7 +34,7 @@ switch: Configuration variables: - **switches** (*Required*): The array that contains all command switches. - - **entry** (*Required*): Name of the command switch. Multiple entries are possible. + - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - **command_on** (*Required*): The action to take for on. - **command_off** (*Required*): The action to take for off. - **command_state** (*Optional*): If given, this command will be run. Returning a result code `0` will indicate that the switch is on. From 878c99b690e1e0823b6114d5ab9a9cd1871e3a4a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 13:47:18 +0200 Subject: [PATCH 52/76] Add link to API docs --- source/_includes/asides/developers_navigation.html | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index c5c8089f310..240deeafee8 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -54,6 +54,7 @@
  • API
      +
    • {% active_link https://dev-docs.home-assistant.io/en/dev/ Home Assistant API %}
    • {% active_link /developers/rest_api/ RESTful API %}
    • {% active_link /developers/python_api/ Python API %}
    • {% active_link /developers/server_sent_events/ Server-sent events %}
    • From 61bcd38ab56e421bb4982e123e21e2c1adf15df0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 15:06:55 +0200 Subject: [PATCH 53/76] Add new contributors --- source/developers/credits.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index af317b0011a..8a3c79ed4d3 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -39,6 +39,7 @@ This page contains a list of people who have contributed in one way or another t - [Austin](https://github.com/trainman419) - [Azelphur](https://github.com/Azelphur) - [Bart274](https://github.com/Bart274) +- [Ben Bangert](https://github.com/bbangert) - [blackdog70](https://github.com/blackdog70) - [Brad Buran](https://github.com/bburan) - [Brad Johnson](https://github.com/bradsk88) @@ -62,6 +63,7 @@ This page contains a list of people who have contributed in one way or another t - [Dan Smith](https://github.com/kk7ds) - [Dan Sullivan](https://github.com/dansullivan86/) - [Daren Lord](https://github.com/Xorso) +- [Dave Banks](https://github.com/djbanks) - [David-Leon Pohl](https://github.com/DavidLP) - [David Straub](https://github.com/DavidMStraub) - [Dean Camera](https://github.com/abcminiuser) @@ -186,6 +188,7 @@ This page contains a list of people who have contributed in one way or another t - [Sean Dague](https://github.com/sdague) - [sfam](https://github.com/sfam) - [Stefan Jonasson](https://github.com/stefan-jonasson) +- [Steven Barnes](https://github.com/salt-lick) - [St. John Johnson](https://github.com/stjohnjohnson) - [TangoAlpha](https://github.com/TangoAlpha) - [Teagan Glenn](https://github.com/Teagan42) From 314ce892111fc94a2de4692db2e8d4989474da66 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 15:25:20 +0200 Subject: [PATCH 54/76] Add content --- source/_posts/2016-09-01-0-28.markdown | 100 +++++++++++++++++++------ 1 file changed, 78 insertions(+), 22 deletions(-) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index e359056175e..c2d7967b06f 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -1,22 +1,70 @@ --- layout: post -title: "0.28: " -description: "" -date: 2016-09-01 08:00:00 +0200 -date_formatted: "September 01, 2016" +title: "0.28: Reload automation and groups, API documentation, car tracking, Pi-Hole stats" +description: "No Home Assistant restart for reloading automations and groups, Automatic car tracking, Pi-Hole and battery details, and bugfixes for climate and cover" +date: 2016-09-09 08:00:00 +0200 +date_formatted: "September 09, 2016" author: Fabian Affolter author_twitter: fabaff comments: true categories: Release-Notes --- +It's already time for 0.28 thanks to our super short release cycles. Now, it' official...we hit 4000 stars on Github. That's amazing. Sorry, not as amazing as all the stuff that was going on for 0.27 but still pretty awesome. +### {% linkable_title Reload automation rules %} + +This release brings you a huge improvement of the [automation] and [group] handling. Both can be reloaded without a Home Assistant restart. The automations can be controlled directly from the frontend. + +

      + +

      + +### {% linkable_title Climate and cover %} +There are countless bugfixes included in this release which will make your experience with the `climate` and the `cover` platforms better. Two week ago was the biggest merger of implementations released that ever happened in the history of Home Assistant. Thanks to [@turbokongen], [@pvizeli], [@djbanks], [@danielperna84], and others the improvements on the code and the frontend side is continuing... + +### {% linkable_title API documentation %} +The [Home Assistant API Documentation](https://dev-docs.home-assistant.io/en/dev/) is a great addition to the already exisiting user documentation. The focus is not end-users but developers who whant to get details about the code without actually browsing the code on Github. + +### {% linkable_title Configuration validation %} +The validation of the configuration is still on-going. Approximatly 80 % is done. This means that we will propably talk about this topic in the next release notes again. To align the configuration of components and platforms we needed to break some. Please refer to the Breaking changes section to check if you need to update your configuration or simple check your log for configuration validation errors. Thanks to [@kellerza], [@fabaff], [@Teagan42], and [@pvizeli] for your effort! ### {% linkable_title All changes %} - + -- +- Light: Added bitfield to Flux LED since we are supporting effects ([@tchellomello]) +- Device tracker: [Owntracks] waypoint import ([@pavoni]) +- Climate: A lot of bugfix ([@turbokongen], [@pvizeli], [@djbanks]) +- Notify: Improvement of the title handling ([@lwis]) +- RFXtrx: Sensor cleanup ([@turbokongen]) +- Device tracker: Fix for BLE device tracker ([@open-homeautomation]) +- Device tracker: Allow 'None' MAC addresses to be loaded from `known_devices` file ([@kellerza]) +- Cover: Bugfixes ([@turbokongen], [@danielperna84]) +- Sensor: Support for displaying details about [crypto currencies][Coinmarketcap] ([@fabaff]) +- Device tracker: Support for [automatic] to track your vehicles ([@Teagan42]) +- Devie tracker: Add exclude option to [Nmap] device tracker ([danieljkemp]) +- Device tracker: Improved login errors for Asus device tracker ([@kellerza]) +- Sensor: Support for displaying the status of [Xbox] Live accounts ([@mKerix]) +- Notify: Adding `link_names` for sending Slack message ([@salt-lick]) +- Binary sensor: Add the occupancy sensor class ([@robbiet480]) +- Fan: Add supoort for [MQTT fans][mqtt-fan] ([@robbiet480]) +- Docs: Add Sphinx API doc generation ([@bbangert]) +- Core: Allow reloading automation without restart ([@balloob]) +- Sensor: Added scale and offset to the [Temper] sensor ([@mKerix]) +- Sensor: New support for [Trend] sensor ([@pavoni]) +- Device tracker: Keep looking for new BLE devices ([@Bart274]) +- Switch: Added device state attributes and support for legacy firmware for D-Link switches ([@LinuxChristian]) +- Sensor: Improve 1-Wire device family detection ([@Ardetus]) +- Modbus: Update to be thread safe ([@persandstrom]) +- Camera: FFMpeg is abale to get the images ([@pvizeli]) +- Core: Reload groups without restart ([@balloob]) +- Core: Fix remove listener ([@balloob]) +- Sensor: Support for monitoring your [battery] on a Linux host ([@fabaff]) +- Core: Add support for complex template structures to `data_template` ([@pvizeli]) +- `check_config`: Improve yaml fault tolerance and handle border cases ([@kellerza]) +- Core: Add additional [template] for custom date formats ([@lwis]) +- Sensor: Support for getting stats from Pi-Hole systems ([@fabaff]) ### {% linkable_title Breaking changes %} @@ -25,42 +73,50 @@ categories: Release-Notes - [OctoPrint] component - mFi platform ([switch][mfi-switch] and [sensor][mfi-sensor]) - NX584 Alarm Control Panel - - [Fire-TV] - - [switch][command-line-switch] and the [cover][command-line-cover] `command_line` platforms - + - Mediaplayer platforms [FireTV] and [MPD] + - [switch][command-line-switch] and the [cover][command-line-cover] `command_line` platforms +[@Ardetus]: https://github.com/Ardetus [@arsaboo]: https://github.com/arsaboo [@auchter]: https://github.com/auchter [@balloob]: https://github.com/balloob -[@blocke]: https://github.com/blocke -[@BluGeni]: https://github.com/BluGeni +[@Bart274]: https://github.com/Bart274 +[@bbangert]: https://github.com/bbangert +[@danieljkemp]: https://github.com/danieljkemp [@danielperna84]: https://github.com/danielperna84 -[@DavidMStraub]: https://github.com/DavidMStraub -[@dpford]: https://github.com/dpford +[@djbanks]: https://github.com/djbanks [@fabaff]: https://github.com/fabaff [@infamy]: https://github.com/infamy [@jnewland]: https://github.com/jnewland -[@Juggels]: https://github.com/Juggels [@kellerza]: https://github.com/kellerza -[@mcdeck]: https://github.com/mcdeck -[@meatz]: https://github.com/meatz -[@mgbowen]: https://github.com/mgbowen +[@LinuxChristian]: https://github.com/LinuxChristian +[@lwis]: https://github.com/lwis [@mKerix]: https://github.com/mKerix [@nkgilley]: https://github.com/nkgilley -[@nunofgs]: https://github.com/nunofgs [@open-homeautomation]: https://github.com/open-homeautomation [@pavoni]: https://github.com/pavoni +[@persandstrom]: https://github.com/persandstrom [@pvizeli]: https://github.com/pvizeli [@robbiet480]: https://github.com/robbiet480 -[@roidayan]: https://github.com/roidayan -[@roidayan]: ttps://github.com/roidayan -[@shmuelzon]: https://github.com/shmuelzon +[@salt-lick]: https://github.com/salt-lick +[@tchellomello]: https://github.com/tchellomello [@Teagan42]: https://github.com/Teagan42 [@technicalpickles]: https://github.com/technicalpickles -[@tobiebooth]: https://github.com/tobiebooth [@turbokongen]: https://github.com/turbokongen [@w1ll1am23]: https://github.com/w1ll1am23 +[MPD]: /components/media_player.mpd/ +[Coinmarketcap]: /components/sensor.coinmarketcap +[template]: /topics/templating/ +[battery]: /components/sensor.linux_battery +[group]: /components/group/ +[automation]: /components/automation/ +[Temper]: /components/sensor.temper/ +[mqtt-fan]: /components/fan.mqtt/ +[Xbox]: /components/sensor.xbox_live/ +[Nmap]: /components/device_tracker.nmap_scanner/ +[automatic]: /components/device_tracker.automatic/ +[Owntracks]: /components/device_tracker.owntracks/ [OpenweatherMap]: /components/sensor.openweathermap/ [OctoPrint]: /components/octoprint/ [mfi-switch]: /components/switch.mfi/ From ffeede620f2071166f5485266c4057e042ae27d6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 16:05:11 +0200 Subject: [PATCH 55/76] Add rpi docs --- source/_posts/2016-09-01-0-28.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index c2d7967b06f..0444ee58b2d 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -20,6 +20,9 @@ This release brings you a huge improvement of the [automation] and [group] handl

      +### {% linkable_title Raspberry Pi installation guide %} +Singleboard computers are very popular to run Home Assistant. To support this fact, the [installation documentation][rpi] for the Raspberry Pi devices was re-written. [@Landrash] took the lead with on this tasks with help from [@kellerza] and [@MartinHjelmare]. + ### {% linkable_title Climate and cover %} There are countless bugfixes included in this release which will make your experience with the `climate` and the `cover` platforms better. Two week ago was the biggest merger of implementations released that ever happened in the history of Home Assistant. Thanks to [@turbokongen], [@pvizeli], [@djbanks], [@danielperna84], and others the improvements on the code and the frontend side is continuing... @@ -89,8 +92,10 @@ The validation of the configuration is still on-going. Approximatly 80 % is done [@infamy]: https://github.com/infamy [@jnewland]: https://github.com/jnewland [@kellerza]: https://github.com/kellerza +[@Landrash]: https://github.com/Landrash [@LinuxChristian]: https://github.com/LinuxChristian [@lwis]: https://github.com/lwis +[@MartinHjelmare]: https://github.com/MartinHjelmare [@mKerix]: https://github.com/mKerix [@nkgilley]: https://github.com/nkgilley [@open-homeautomation]: https://github.com/open-homeautomation @@ -105,6 +110,7 @@ The validation of the configuration is still on-going. Approximatly 80 % is done [@turbokongen]: https://github.com/turbokongen [@w1ll1am23]: https://github.com/w1ll1am23 +[rpi]: /getting-started/installation-raspberry-pi/ [MPD]: /components/media_player.mpd/ [Coinmarketcap]: /components/sensor.coinmarketcap [template]: /topics/templating/ From 791672ca7dc9f7b3d298977dc0ef4ad0a7c8b7fe Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 16:57:22 +0200 Subject: [PATCH 56/76] Add `BaseNotificationService` change --- source/_posts/2016-09-01-0-28.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index 0444ee58b2d..78af7a164a4 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -21,7 +21,7 @@ This release brings you a huge improvement of the [automation] and [group] handl

      ### {% linkable_title Raspberry Pi installation guide %} -Singleboard computers are very popular to run Home Assistant. To support this fact, the [installation documentation][rpi] for the Raspberry Pi devices was re-written. [@Landrash] took the lead with on this tasks with help from [@kellerza] and [@MartinHjelmare]. +Singleboard computers are very popular to run Home Assistant. To support this fact, the [installation documentation][rpi] for the Raspberry Pi devices was re-written to get users started as quickly as possible. [@Landrash] took the lead with on this tasks with help from [@kellerza] and [@MartinHjelmare]. ### {% linkable_title Climate and cover %} There are countless bugfixes included in this release which will make your experience with the `climate` and the `cover` platforms better. Two week ago was the biggest merger of implementations released that ever happened in the history of Home Assistant. Thanks to [@turbokongen], [@pvizeli], [@djbanks], [@danielperna84], and others the improvements on the code and the frontend side is continuing... @@ -78,6 +78,7 @@ The validation of the configuration is still on-going. Approximatly 80 % is done - NX584 Alarm Control Panel - Mediaplayer platforms [FireTV] and [MPD] - [switch][command-line-switch] and the [cover][command-line-cover] `command_line` platforms +- Custom components extending `BaseNotificationService` need to be aware that `kwargs.get(ATTR_TITLE)` will now return `None` if a title has not been set, and will need to specify `kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)` if they always require a title. [@Ardetus]: https://github.com/Ardetus [@arsaboo]: https://github.com/arsaboo From ced0fbc7179c77bddd8d03542a379d8bef30b0dc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 22:00:20 +0200 Subject: [PATCH 57/76] Add data_template --- source/_posts/2016-09-01-0-28.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-01-0-28.markdown index 78af7a164a4..2cdd303ffd2 100644 --- a/source/_posts/2016-09-01-0-28.markdown +++ b/source/_posts/2016-09-01-0-28.markdown @@ -32,6 +32,22 @@ The [Home Assistant API Documentation](https://dev-docs.home-assistant.io/en/dev ### {% linkable_title Configuration validation %} The validation of the configuration is still on-going. Approximatly 80 % is done. This means that we will propably talk about this topic in the next release notes again. To align the configuration of components and platforms we needed to break some. Please refer to the Breaking changes section to check if you need to update your configuration or simple check your log for configuration validation errors. Thanks to [@kellerza], [@fabaff], [@Teagan42], and [@pvizeli] for your effort! +### {% linkable_title Templating %} +`data_template` needs to be present in all notify templates for the future. + +```yaml +action: + service: notify.telegram + data_template: + message: "Test from your Home" + data: + location: + latitude: "{{ state.device_tracker.phone.attributes.latitude }}" + longitude: "{{ state.device_tracker.phone.attributes.longitude }}" +``` + +Stay tuned for more details. + ### {% linkable_title All changes %} From 7a959979a670b1169478abb89f0858a4595c3a8d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 22:02:00 +0200 Subject: [PATCH 58/76] Rename release blog post --- ...arkdown => 2016-09-10-notify-group-reload-api-pihole.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_posts/{2016-09-01-0-28.markdown => 2016-09-10-notify-group-reload-api-pihole.markdown} (100%) diff --git a/source/_posts/2016-09-01-0-28.markdown b/source/_posts/2016-09-10-notify-group-reload-api-pihole.markdown similarity index 100% rename from source/_posts/2016-09-01-0-28.markdown rename to source/_posts/2016-09-10-notify-group-reload-api-pihole.markdown From 3d0214f55e4b57e0febac73f93ffa01bb4e2a72e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 22:03:24 +0200 Subject: [PATCH 59/76] Adjust date --- .../_posts/2016-09-10-notify-group-reload-api-pihole.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2016-09-10-notify-group-reload-api-pihole.markdown b/source/_posts/2016-09-10-notify-group-reload-api-pihole.markdown index 2cdd303ffd2..3754a9900f3 100644 --- a/source/_posts/2016-09-10-notify-group-reload-api-pihole.markdown +++ b/source/_posts/2016-09-10-notify-group-reload-api-pihole.markdown @@ -2,8 +2,8 @@ layout: post title: "0.28: Reload automation and groups, API documentation, car tracking, Pi-Hole stats" description: "No Home Assistant restart for reloading automations and groups, Automatic car tracking, Pi-Hole and battery details, and bugfixes for climate and cover" -date: 2016-09-09 08:00:00 +0200 -date_formatted: "September 09, 2016" +date: 2016-09-10 08:00:00 +0200 +date_formatted: "September 10, 2016" author: Fabian Affolter author_twitter: fabaff comments: true From 365ac5034d2d9a8ea844be43c0457e6e5ea6bf83 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 10 Sep 2016 22:05:43 +0200 Subject: [PATCH 60/76] Add screenshot --- .../images/screenshots/automation-switches.png | Bin 0 -> 54289 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/screenshots/automation-switches.png diff --git a/source/images/screenshots/automation-switches.png b/source/images/screenshots/automation-switches.png new file mode 100644 index 0000000000000000000000000000000000000000..7f43b85660e7c69ed62c9d75139a1f3ab1a8df1a GIT binary patch literal 54289 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 Date: Sat, 10 Sep 2016 22:16:00 +0200 Subject: [PATCH 61/76] Update automatic logo --- source/images/supported_brands/automatic.png | Bin 13733 -> 15442 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/supported_brands/automatic.png b/source/images/supported_brands/automatic.png index 26d71a1768e9c6a87cc84b185903bc1a60d8f2bc..6f7382bc6e4096646834ef3188a05d1f86cfa2d5 100644 GIT binary patch literal 15442 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 Date: Sat, 10 Sep 2016 22:16:25 +0200 Subject: [PATCH 62/76] Update front page --- source/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/index.html b/source/index.html index 79d75e71d21..782e1f602d9 100644 --- a/source/index.html +++ b/source/index.html @@ -15,11 +15,11 @@ hide_github_edit: true