From 352c6cb15a691a14223ce64d50123ff12d00c0ba Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Sep 2016 10:55:31 +0200 Subject: [PATCH 01/60] Add initial docs for weather component --- source/_components/demo.markdown | 1 + source/_components/weather.markdown | 15 ++++++++ .../weather.openweathermap.markdown | 38 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 source/_components/weather.markdown create mode 100644 source/_components/weather.openweathermap.markdown diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index 3ed516f9147..8d2698f4442 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -27,6 +27,7 @@ Available demo platforms: - [Notification](/components/notify/) (`notify`) - [Sensor](/components/sensor/) (`sensor`) - [Switch](/components/switch/) (`switch`) +- [Weather](/components/weather/) (`weather`) To integrate a demo platform in Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown new file mode 100644 index 00000000000..784c917048f --- /dev/null +++ b/source/_components/weather.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Weather" +description: "Instructions how to setup your Weather platforms with Home Assistant." +date: 2016-09-28 14:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Weather platforms are gathering meteorological information from web services and displays the conditions and other details about the weather at the given location. + +Home Assistant currently supports a free web services and such which requires a registration. Please check the sidebar for a full list of supported sensor platforms. + diff --git a/source/_components/weather.openweathermap.markdown b/source/_components/weather.openweathermap.markdown new file mode 100644 index 00000000000..9a870b61341 --- /dev/null +++ b/source/_components/weather.openweathermap.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "OpenWeatherMap" +description: "Instructions how to integrate OpenWeatherMap within Home Assistant." +date: 2016-09-29 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: openweathermap.png +ha_category: Weather +ha_release: "0.30" +--- + + +The `openweathermap` weather platform uses [OpenWeatherMap](http://openweathermap.org/) as an source for current meteorological data for your location. + +You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). + +To add OpenWeatherMap to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +weather: + - platform: openweathermap + api_key: YOUR_API_KEY + latitude: 46.1234 + longitude: 7.1234 +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key for http://openweathermap.org/. +- **latitude** (*Optional*): Latitude of the location to display the weather. Defaults to the latitude in your your `configuration.yaml` file. +- **longitude** (*Optional*): Longitude of the location to display the weather. Defaults to the longitude in your `configuration.yaml` file. + +Details about the API are available in the [OpenWeatherMap documentation](http://openweathermap.org/api). + From 1b4c2b61ebdb389fda281229038ae94582a0588a Mon Sep 17 00:00:00 2001 From: Scott O'Neil Date: Tue, 26 Jul 2016 18:31:24 -0500 Subject: [PATCH 02/60] Adding sonos timer documentation --- source/_components/media_player.sonos.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index 1eeb796772a..0c70076465a 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -86,3 +86,12 @@ Remove one or more speakers from a group of speakers. If no `entity_id` is provi | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of `entity_id`s that will be separated from their coordinator speaker. +### {% linkable_title Service `sonos_set_sleep_timer` %} + +Sets a timer that will turn off a speaker by tapering the volume down to 0 after a certain amount of time. Protip: If you set the sleep_time value to 0, then the speaker will immediately start tapering the volume down. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their timers set. Must be a coordinator speaker. +| `sleep_time` | no | Integer number of seconds that the speaker should wait until it starts tapering. Cannot exceed 86399 (one day). + From 3ba8c66224ee45a731823486144cd1767b34ff5b Mon Sep 17 00:00:00 2001 From: Scott O'Neil Date: Wed, 19 Oct 2016 21:34:41 -0500 Subject: [PATCH 03/60] Adding sonos_set_sleep_timer service --- source/_components/media_player.sonos.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index 0c70076465a..62319a09947 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -95,3 +95,11 @@ Sets a timer that will turn off a speaker by tapering the volume down to 0 after | `entity_id` | no | String or list of `entity_id`s that will have their timers set. Must be a coordinator speaker. | `sleep_time` | no | Integer number of seconds that the speaker should wait until it starts tapering. Cannot exceed 86399 (one day). +### {% linkable_title Service `sonos_clear_sleep_timer` %} + +Clear the sleep timer on a speaker, if one is set. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. Must be a coordinator speaker. + From 41c1825448c3b3d2d145af2e3d71c61253d891b1 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Thu, 20 Oct 2016 21:26:11 -0400 Subject: [PATCH 04/60] Add documentation for the new mochad platform This commit adds documentation around the mochad and mochad switch platforms which are added in home-assistant/home-assistant#3970 --- source/_components/mochad.markdown | 32 +++++++++++++++++++++++ source/_components/switch.mochad.markdown | 32 +++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 source/_components/mochad.markdown create mode 100644 source/_components/switch.mochad.markdown diff --git a/source/_components/mochad.markdown b/source/_components/mochad.markdown new file mode 100644 index 00000000000..ab139fd9d08 --- /dev/null +++ b/source/_components/mochad.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Mochad" +description: "Instructions how to integrate Mochad into Home Assistant." +date: 2016-10-20 17:09 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +--- + +The Mochad component is the main component to integrate all X10 platforms being +controlled by [mochad](https://sourceforge.net/projects/mochad/). Besides this component you will have to setup your X10 devices separately. + +```yaml +# Example configuration.yaml entry +mochad: + host: localhost + port: 1099 + +switch: + platform: mochad + devices: + - name: Light Switch + address: a1 +``` + +Configuration variables: + +- **host** (*Optional*): The host that mochad is running on, defaults to *localhost* +- **port** (*Optional*): The port that mochad is running on, defaults to *1099* diff --git a/source/_components/switch.mochad.markdown b/source/_components/switch.mochad.markdown new file mode 100644 index 00000000000..9bea444762b --- /dev/null +++ b/source/_components/switch.mochad.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Mochad Switch" +description: "Instructions how to integrate X10 Mochad switches into Home Assistant." +date: 2016-10-20 21:13 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Switch +ha_iot_class: depends +--- + +The `mochad` switch platform lets you control an X10 enabled switch device. + +To enable this switch in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +switch: + - platform: mochad + devices: + - name: Switch A + address: a1 + - name: Living Room Lamp + address: a5 +``` + +Configuration variables: + +- **name** (*Optional*): The name of the switch. Default is: x10_switch_dev_*address* +- **address** (*Required*): The X10 address of the switch From bfc0ba0e4181108422dea4f596b85e9e1d837bf6 Mon Sep 17 00:00:00 2001 From: Jason Carter Date: Fri, 21 Oct 2016 11:33:16 -0400 Subject: [PATCH 05/60] Documenting ICON addition to known_device.yaml config file --- source/_components/device_tracker.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 7844c76506c..103908ecdc4 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -59,6 +59,7 @@ Here's an example configuration for a single device: devicename: name: Friendly Name mac: EA:AA:55:E7:C6:94 + icon: mdi:face-profile picture: https://home-assistant.io/images/favicon-192x192.png gravatar: test@example.com track: yes @@ -69,7 +70,8 @@ devicename: |----------------|-------------------------------|---------------------------------------------------------------------------------------------------------| | `name` | Host name or "Unnamed Device" | The friendly name of the device | | `mac` | None | The MAC address of the device. Add this if you are using a network device tracker like Nmap or SNMP | -| `picture` | None | A picture that you can use to easily identify the person or device | +| `icon` | None | A name of an MDI Icon. | +| `picture` | None | A picture that you can use to easily identify the person or device, if provided, will override 'icon' | | `gravatar` | None | An email address for the device's owner. If provided, it will override `picture` | | `track` | False | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update | | `hide_if_away` | False | If `yes`/`on`/`true` then the device will be hidden if it is not at home | From b31d47c6fe994e8ec79917c49d5442c6b37f8316 Mon Sep 17 00:00:00 2001 From: Simon Szustkowski Date: Mon, 24 Oct 2016 15:56:00 +0200 Subject: [PATCH 06/60] Added documentation for the ThingSpeak component --- source/_components/thingspeak.markdown | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 source/_components/thingspeak.markdown diff --git a/source/_components/thingspeak.markdown b/source/_components/thingspeak.markdown new file mode 100644 index 00000000000..386b0931404 --- /dev/null +++ b/source/_components/thingspeak.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "Thingspeak" +description: "Record one entity in Thingspeak" +date: 2016-10-24 15:45 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: "History" +ha_release: 0.32 +--- + +The `thingspeak` components makes Home Assistant communicate with the [ThingSpeak API](https://thingspeak.com/). +For now, it records exactly one entity at once, which is great for testing purposes. For long-time storage you should rely +on the [InfluxDB component](https://home-assistant.io/components/influxdb/). + +```yaml +# Example configuration.yaml entry +thingspeak: +``` + +You will have to create a [new channel](https://thingspeak.com/channels/new) on ThingSpeak and grab your API key from your [account page](https://thingspeak.com/account). + +Configuration variables: +- **api_key**: Yout ThingSpeak API key +- **id**: The ID of your desired ThingSpeak channel +- **whitelist**: The name of the entity whose states should be sent to the channel. + +## {% linkable_title Examples %} + +### {% linkable_title Full configuration %} + +```yaml +thingspeak: + api_key: MY_API_KEY + id: 1337 + whitelist: sensor.yr_temperature +``` \ No newline at end of file From 4b3b3c8c5a6c677443344c5b6fdce2e162a05568 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Tue, 25 Oct 2016 06:59:22 +0200 Subject: [PATCH 07/60] Documentation for the Notifications for Android TV platform. (#1296) * Documentation for the Notifications for Android TV platform. * Changes as requested by reviewer @Landrash * Bump to 0.32 since PR has not been merged yet * Changed option 'ip' to 'host' like most other platforms do --- .../_components/notify.nfandroidtv.markdown | 55 ++++++++++++++++++ .../images/supported_brands/nfandroidtv.png | Bin 0 -> 7978 bytes 2 files changed, 55 insertions(+) create mode 100644 source/_components/notify.nfandroidtv.markdown create mode 100644 source/images/supported_brands/nfandroidtv.png diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown new file mode 100644 index 00000000000..4832dc8554b --- /dev/null +++ b/source/_components/notify.nfandroidtv.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Notifications for Android TV / FireTV" +description: "Notifications for Android TV / FireTV" +date: 2016-10-21 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nfandroidtv.png +ha_category: Notifications +ha_release: 0.32 +--- + + +Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google&hl=de) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). +The notifications are in the global scope of your Android TV device. They will be displayed regardless of which application is running. +The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from HASS. + +To enable the notification platform, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: +- platform: nfandroidtv + name: Kitchen + host: 192.168.1.12 +``` + +Configuration variables: + +- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. +- **host** (*Required*): IP address of the Android TV / FireTV device. +- **duration** (*Optional*): The duration in seconds for which the notification will be displayed. Default is 5 seconds. +- **position** (*Optional*): Has to be one of: bottom-right (default), bottom-left, top-right, top-left, center +- **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink +- **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% +- **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. + +The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service. +This is a fully customized JSON you can use to test how the final notification will look like: + +```json +{ +"message": "Messagetext", +"title": "My Notification", +"data":{ + "position":"center", + "duration":2, + "transparency":"0%", + "color": "red", + "interrupt": 1 + } +} +``` diff --git a/source/images/supported_brands/nfandroidtv.png b/source/images/supported_brands/nfandroidtv.png new file mode 100644 index 0000000000000000000000000000000000000000..043aa2d5e56b68640e48e352862a50220a85c441 GIT binary patch literal 7978 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 d9=-f;6lDKPVceXD3S Date: Mon, 24 Oct 2016 22:05:09 -0700 Subject: [PATCH 08/60] Remove garage_door, hvac, rollershutter and thermostat components/platforms --- source/_components/garage_door.markdown | 16 ----- source/_components/garage_door.mqtt.markdown | 65 ----------------- .../_components/garage_door.rpi_gpio.markdown | 53 -------------- source/_components/garage_door.wink.markdown | 30 -------- source/_components/garage_door.zwave.markdown | 19 ----- source/_components/hvac.markdown | 26 ------- source/_components/hvac.zwave.markdown | 19 ----- .../rollershutter.command_line.markdown | 44 ------------ .../rollershutter.homematic.markdown | 22 ------ source/_components/rollershutter.markdown | 16 ----- .../_components/rollershutter.mqtt.markdown | 50 ------------- .../_components/rollershutter.rfxtrx.markdown | 72 ------------------- .../rollershutter.scsgate.markdown | 36 ---------- .../_components/rollershutter.wink.markdown | 24 ------- .../_components/rollershutter.zwave.markdown | 19 ----- source/_components/thermostat.ecobee.markdown | 19 ----- .../thermostat.eq3btsmart.markdown | 67 ----------------- .../thermostat.heat_control.markdown | 48 ------------- .../_components/thermostat.heatmiser.markdown | 44 ------------ .../_components/thermostat.honeywell.markdown | 35 --------- source/_components/thermostat.knx.markdown | 38 ---------- source/_components/thermostat.markdown | 20 ------ source/_components/thermostat.nest.markdown | 31 -------- .../_components/thermostat.proliphix.markdown | 43 ----------- .../thermostat.radiotherm.markdown | 43 ----------- source/_components/thermostat.zwave.markdown | 25 ------- 26 files changed, 924 deletions(-) delete mode 100644 source/_components/garage_door.markdown delete mode 100644 source/_components/garage_door.mqtt.markdown delete mode 100644 source/_components/garage_door.rpi_gpio.markdown delete mode 100644 source/_components/garage_door.wink.markdown delete mode 100644 source/_components/garage_door.zwave.markdown delete mode 100644 source/_components/hvac.markdown delete mode 100644 source/_components/hvac.zwave.markdown delete mode 100644 source/_components/rollershutter.command_line.markdown delete mode 100644 source/_components/rollershutter.homematic.markdown delete mode 100644 source/_components/rollershutter.markdown delete mode 100644 source/_components/rollershutter.mqtt.markdown delete mode 100644 source/_components/rollershutter.rfxtrx.markdown delete mode 100644 source/_components/rollershutter.scsgate.markdown delete mode 100644 source/_components/rollershutter.wink.markdown delete mode 100644 source/_components/rollershutter.zwave.markdown delete mode 100644 source/_components/thermostat.ecobee.markdown delete mode 100644 source/_components/thermostat.eq3btsmart.markdown delete mode 100644 source/_components/thermostat.heat_control.markdown delete mode 100644 source/_components/thermostat.heatmiser.markdown delete mode 100644 source/_components/thermostat.honeywell.markdown delete mode 100644 source/_components/thermostat.knx.markdown delete mode 100644 source/_components/thermostat.markdown delete mode 100644 source/_components/thermostat.nest.markdown delete mode 100644 source/_components/thermostat.proliphix.markdown delete mode 100644 source/_components/thermostat.radiotherm.markdown delete mode 100644 source/_components/thermostat.zwave.markdown diff --git a/source/_components/garage_door.markdown b/source/_components/garage_door.markdown deleted file mode 100644 index 10cb067fc8e..00000000000 --- a/source/_components/garage_door.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Garage door" -description: "Instructions how to integrate Garage doors into Home Assistant." -date: 2016-02-12 07:00 -sidebar: true -comments: false -sharing: true -footer: true ---- - -

-**This component has been deprecated in favor of the "[cover](/component/cover/)" component and will be removed in the future. Please use cover.** -

- -Home Assistant can give you an interface to control any garage door. diff --git a/source/_components/garage_door.mqtt.markdown b/source/_components/garage_door.mqtt.markdown deleted file mode 100644 index c99033a2671..00000000000 --- a/source/_components/garage_door.mqtt.markdown +++ /dev/null @@ -1,65 +0,0 @@ ---- -layout: page -title: "MQTT Garage door" -description: "Instructions how to setup the MQTT controllable garage doors within Home Assistant." -date: 2016-04-10 07:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: mqtt.png -ha_category: Deprecated -ha_release: 0.18 -ha_iot_class: depends ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.mqtt/)" platform and will be removed in the future. Please use the cover platform.** -

- -The `mqtt` garage door platform let you control your MQTT enabled garage door. - -In an ideal scenario, the MQTT device will have a state topic to publish state changes. If these messages are published with RETAIN flag, the MQTT switch will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state of the switch will be false/off. - -When a state topic is not available, the switch will work in optimistic mode. In this mode, the switch will immediately change state after every command. Otherwise, the switch will wait for state confirmation from device (message from `state_topic`). - -Optimistic mode can be forced, even if state topic is available. Try to enable it, if experiencing incorrect switch operation. - -To use your MQTT binary sensor in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yml entry -garage_door: - platform: mqtt - state_topic: "home-assistant/garage-door" - command_topic: "home-assistant/garage-door/set" - name: "MQTT Sensor" - optimistic: false - qos: 0 - retain: true - state_open: "STATE_OPEN" - state_closed: "STATE_CLOSED" - service_open: "SERVICE_OPEN" - service_close: "SERVICE_CLOSE" - value_template: '{% raw %}{{ value.x }}{% endraw %}' -``` - -Configuration variables: - -- **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. -- **name** (*Optional*): The name of the sensor. Default is 'MQTT Sensor'. -- **state_open** (*Optional*): The payload that represents open state. Default is"STATE_OPEN" -- **state_closed** (*Optional*): The payload that represents closed state. Default is "STATE_CLOSED" -- **service_open** (*Optional*): The payload that represents open state in service mode. Default is"SERVICE_OPEN" -- **service_close** (*Optional*): The payload that represents closed state in service mode. Default is "SERVICE_CLOSE" -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. -- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. - -For a quick check you can use the commandline tools shipped with `mosquitto` to send MQTT messages. Set the state of your sensor manually: - -```bash -$ mosquitto_pub -h 127.0.0.1 -t home-assistant/garage-door/set -m "OFF" -``` - diff --git a/source/_components/garage_door.rpi_gpio.markdown b/source/_components/garage_door.rpi_gpio.markdown deleted file mode 100644 index 24ae200c720..00000000000 --- a/source/_components/garage_door.rpi_gpio.markdown +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: page -title: "Raspberry Pi Garage door" -description: "Instructions how to setup the Raspberry Pi garage doors within Home Assistant." -date: 2016-02-12 07:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: raspberry-pi.png -ha_category: Deprecated -ha_release: 0.23 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.rpi_gpio/)" platform and will be removed in the future. Please use the cover platform.** -

- -The `rpi_gpio` garage door platform allows you to use a Raspberry Pi to control your Garage door. - -It uses two pins on the Raspberry Pi. - -- The `state_pin` will detect if the door is closed, and -- the `relay_pin` will trigger the door to open or close. - -Although you do not need Andrews Hilliday's software controller when you run Home Assistant, he has written clear instructions on how to hook your garage door & sensors up to your Raspberry Pi, which can be found [here](https://github.com/andrewshilliday/garage-door-controller#hardware-setup). - -To enable Raspberry Pi Garage doors in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -garage_door: - platform: rpi_gpio - state_pull_mode: DOWN - relay_time: 1 - doors: - - relay_pin: 10 - state_pin: 11 - name: 'Left door' - - relay_pin: 12 - state_pin: 13 - name: 'Right door' -``` - -Configuration variables: - -- **doors** array (*Required*): List of your doors. - - **name** (*Optional*): Name to use in the Frontend. - - **relay_pin** (*Required*): The pin of your Raspberry Pi where the relay is connected. - - **state_pin** (*Required*): The pin of your Raspberry Pi to retrieve the state. - - **state_pull_mode** (*Optional*): The direction the State pin is pulling. It can be UP or DOWN. Default is UP. - - **relay_time** (*Optional*): The time that the relay will be on for in seconds. Default is .2 seconds. - diff --git a/source/_components/garage_door.wink.markdown b/source/_components/garage_door.wink.markdown deleted file mode 100644 index dc178e57698..00000000000 --- a/source/_components/garage_door.wink.markdown +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: page -title: "Wink Garage door" -description: "Instructions how to setup the Wink garage doors within Home Assistant." -date: 2016-02-12 07:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: wink.png -ha_category: Deprecated -ha_release: 0.13 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.wink/)" platform and will be removed in the future. Please use the cover platform.** -

- -Wink garage door functionality is currently limited to view only. Wink garage doors will still show the current state of the door, but control has been disabled for third parties. If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. - -The following quote is from Wink. - -
-As part of our agreement with Chamberlain, third-party access to control Chamberlain garage doors has been restricted. Please contact Chamberlain directly to inquire about permissions. -
- -~~The Wink garage door platform allows you to control your [Wink](http://www.wink.com/) enabled garage door.~~ - -The requirement is that you have setup your [Wink hub](/components/wink/). - diff --git a/source/_components/garage_door.zwave.markdown b/source/_components/garage_door.zwave.markdown deleted file mode 100644 index c07a96085fe..00000000000 --- a/source/_components/garage_door.zwave.markdown +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: page -title: "Z-Wave Garage Door" -description: "Instructions how to setup the Z-Wave garage doors within Home Assistant." -date: 2015-11-15 13:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Deprecated -ha_release: 0.23 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.zwave/)" platform and will be removed in the future. Please use the cover platform.** -

- -To get your Z-Wave garage doors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/hvac.markdown b/source/_components/hvac.markdown deleted file mode 100644 index db57959bf97..00000000000 --- a/source/_components/hvac.markdown +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: page -title: "HVAC" -description: "Instructions on how to integrate HVAC devices status with Home Assistant." -date: 2016-05-07 09:00 -sidebar: true -comments: false -sharing: true -footer: true -ha_release: 0.19 ---- - -

-**This component has been deprecated in favor of the "[climate](/components/climate/)" component and will be removed in the future. Please use climate.** -

- -The `hvac` component is built for the controlling and monitoring of HVAC (heating, ventilating, and air conditioning) devices. - -To enable this component, pick one of the platforms and add it to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -hvac: - platform: demo -``` - diff --git a/source/_components/hvac.zwave.markdown b/source/_components/hvac.zwave.markdown deleted file mode 100644 index 820706cec4b..00000000000 --- a/source/_components/hvac.zwave.markdown +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: page -title: "Z-Wave HVAC" -description: "Instructions on how to integrate HVAC Z-Wave devices status with Home Assistant." -date: 2016-05-07 09:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Deprecated -ha_release: 0.19 ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.zwave/)" platform and will be removed in the future. Please use the climate platform.** -

- -To get your Z-Wave `hvac` devices working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/) and the [HVAC component](/components/hvac/). diff --git a/source/_components/rollershutter.command_line.markdown b/source/_components/rollershutter.command_line.markdown deleted file mode 100644 index 60db7404897..00000000000 --- a/source/_components/rollershutter.command_line.markdown +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: page -title: "Command line Rollershutter" -description: "Instructions how to have rollershutters call command line commands." -date: 2016-02-22 13:45 -sidebar: true -comments: false -sharing: true -footer: true -logo: command_line.png -ha_category: Deprecated -ha_release: 0.14 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.command_line/)" platform and will be removed in the future. Please use the cover platform.** -

- -A `rollershutter` platform that issues specific commands when it is moved up, down and stopped. This might very well become our most powerful platform as it allows anyone to integrate any type of rollershutter into Home Assistant that can be controlled from the command line, including calling other scripts! - -To enable command_rollershutter in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -rollershutter: -- platform: command_line - rollershutters: - Kitchen Rollershutter: - upcmd: move_command up kitchen - downcmd: move_command down kitchen - stopcmd: move_command stop kitchen - statecmd: state_command kitchen - value_template: '{% raw %}{{ value }}{% endraw %}' -``` - -Configuration variables: - -- **rollershutters** (*Required*): The array that contains all command rollershutters. - - **entry** (*Required*): Name of the command rollershutter. Multiple entries are possible. - - **upcmd** (*Required*): The action to take for move up. - - **downcmd** (*Required*): The action to take for move down. - - **stopcmd** (*Required*): The action to take for stop. - - **statecmd** (*Optional*): If given, this command will be run. Returning a result code `0` will indicate that the rollershutter is fully closed, returning a result code `100` will indicate that the rollershutter 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 rollershutter. diff --git a/source/_components/rollershutter.homematic.markdown b/source/_components/rollershutter.homematic.markdown deleted file mode 100644 index eb536f40e71..00000000000 --- a/source/_components/rollershutter.homematic.markdown +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: page -title: "Homematic Rollershutter" -description: "Instructions how to integrate Homematic rollershutters within Home Assistant." -date: 2016-06-28 08:30 -sidebar: true -comments: false -sharing: true -footer: true -logo: homematic.png -ha_category: Deprecated -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.homematic/)" platform and will be removed in the future. Please use the cover platform.** -

- -The `homematic` rollershutter platform lets you control [Homematic](http://www.homematic.com/) rollershutters 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/rollershutter.markdown b/source/_components/rollershutter.markdown deleted file mode 100644 index f6306a9ad99..00000000000 --- a/source/_components/rollershutter.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Rollershutters" -description: "Instructions how to integrate rollershutters into Home Assistant." -date: 2015-12-01 12:00 -sidebar: true -comments: false -sharing: true -footer: true ---- - -

-**This component has been deprecated in favor of the "[cover](/components/cover/)" component and will be removed in the future. Please use cover.** -

- -Home Assistant can give you an interface to control any rollershutters. diff --git a/source/_components/rollershutter.mqtt.markdown b/source/_components/rollershutter.mqtt.markdown deleted file mode 100644 index 5eab5e95996..00000000000 --- a/source/_components/rollershutter.mqtt.markdown +++ /dev/null @@ -1,50 +0,0 @@ ---- -layout: page -title: "MQTT Rollershutter" -description: "Instructions how to integrate MQTT motorized devices into Home Assistant." -date: 2015-12-01 12:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: mqtt.png -ha_category: Deprecated -ha_release: 0.9 -ha_iot_class: depends ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.mqtt/)" platform and will be removed in the future. Please use the cover platform.** -

- -The `mqtt` rollershutter platform enables the possibility to control an MQTT rollershutter. The device state will be updated only after receiving the a new state from `state_topic`. If these messages are published with RETAIN flag, the MQTT device will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state will be `unknown`. - -There is a state attribute that stores the relative position of the device, where 0% means the device is `closed` and all other intermediate positions means the device is `open`. - -To enable this platform, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -rollershutter: - platform: mqtt - name: "Bedroom Rollershutter" - state_topic: "home/bedroom/rollershutter" - command_topic: "home/bedroom/rollershutter/set" - qos: 0 - payload_up: "OPEN" - payload_down: "CLOSE" - payload_stop: "STOP" - value_template: '{% raw %}{{ value.x }}{% endraw %}' -``` - -Configuration variables: - -- **command_topic** (*Required*): The MQTT topic to publish commands to control the rollershutter. - -- **name** (*Optional*): The name of the rollershutter. Default is 'MQTT Rollershutter'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. If not defined, the rollershutter will be stateless, that is, no information about current position or open/closed. If defined, the received payload must be a integer between 0 and 100, that represents the percentage for fully closed and fully open, respectively. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0. This QoS will also be used to publishing messages. -- **payload_up** (*Optional*): The payload to open the rollershutter. Default is "OPEN". -- **payload_down** (*Optional*): The payload to close the rollershutter. Default is "CLOSE". -- **payload_stop** (*Optional*): The payload to stop the rollershutter. Default is "STOP". -- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. diff --git a/source/_components/rollershutter.rfxtrx.markdown b/source/_components/rollershutter.rfxtrx.markdown deleted file mode 100644 index 2400be8092a..00000000000 --- a/source/_components/rollershutter.rfxtrx.markdown +++ /dev/null @@ -1,72 +0,0 @@ ---- -layout: page -title: "RFXtrx Rollershutter" -description: "Instructions how to integrate RFXtrx roller shutters into Home Assistant." -date: 2016-06-12 12:40 -sidebar: true -comments: false -sharing: true -footer: true -logo: rfxtrx.png -ha_category: Deprecated -ha_release: 0.21 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.rfxtrx/)" platform and will be removed in the future. Please use the cover platform.** -

- -The `rfxtrx` platform supports Siemens/LightwaveRF and RFY roller shutters that communicate in the frequency range of 433.92 MHz. - -First you have to set up your [rfxtrx hub](/components/rfxtrx/). - -### {% linkable_title Configuration %} - -##### Siemens/LightwaveRF -The easiest way to find your roller shutters is to add this to your `configuration.yaml`: - -```yaml -rollershutter: - platform: rfxtrx - automatic_add: True -``` - -Launch your homeassistant and go the website (e.g http://localhost:8123). -Push your remote and your device should be added. - -Once added it will show an ID (e.g `0b11000102ef9f210010f70`) and you can verify that it works from the frontend. -Then you should update your configuration to: - -```yaml -rollershutter: - platform: rfxtrx - devices: - 0b11000102ef9f210010f70: - name: device_name -``` - -##### RFY -The [RFXtrx433e](http://www.rfxcom.com/RFXtrx433E-USB-43392MHz-Transceiver/en) is required for RFY support, however it does not support receive for the RFY protocol - as such devices cannot be automatically added. Instead, configure the device in the [rfxmngr](http://www.rfxcom.com/downloads.htm) tool. Make a note of the assigned ID and Unit Code and then add a device to the configuration with the following id `071a0000[id][unit_code]`. Eg, if the id was `0a` `00` `01`, and the unit code was `01` then the fully qualified id would be `071a00000a000101`. - -##### Common -Example configuration: - -```yaml -# Example configuration.yaml entry -rollershutter: - platform: rfxtrx - automatic_add: False - signal_repetitions: 2 - devices: - 0b1100ce3213c7f210010f70: # Siemens/LightwaveRF - name: Bedroom Shutter - 070a00000a000101: # RFY - name: Bathroom Shutter -``` - -Configuration variables: - -- **devices** (*Required*): A list of devices with their name to use in the frontend. -- **automatic_add** (*Optional*): To enable the automatic addition of new roller shutters (Siemens/LightwaveRF only). -- **signal_repetitions** (*Optional*): Because the rxftrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the roller shutter to try to send each signal repeatedly. -- **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. diff --git a/source/_components/rollershutter.scsgate.markdown b/source/_components/rollershutter.scsgate.markdown deleted file mode 100644 index 6abb7596336..00000000000 --- a/source/_components/rollershutter.scsgate.markdown +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: page -title: "SCSGate Rollershutter" -description: "Instructions how to integrate SCSGate motorized devices into Home Assistant." -date: 2016-01-31 22:16 -sidebar: true -comments: false -sharing: true -footer: true -logo: bus_scs.png -ha_category: Deprecated ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.scsgate/)" platform and will be removed in the future. Please use the cover platform.** -

- -The SCSGate device can control motirized roller shutters connected to the BTicino MyHome system. - -To enable SCSGate roller shutters in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -rollershutter: - platform: scsgate - devices: - living_room: - name: Living Room - scs_id: XXXXX -``` - -Configuration variables: - -- **devices** (*Required*): A list of devices with their name to use in the frontend. - -**Known limitation:** it is not possible to know the current state of the roller shutter. diff --git a/source/_components/rollershutter.wink.markdown b/source/_components/rollershutter.wink.markdown deleted file mode 100644 index 0535392f21a..00000000000 --- a/source/_components/rollershutter.wink.markdown +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: page -title: "Wink Rollershutter" -description: "Instructions how to setup the Wink rollershutter (shade) within Home Assistant." -date: 2016-02-12 07:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: wink.png -ha_category: Deprecated -ha_release: 0.22 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.wink/)" platform and will be removed in the future. Please use the cover platform.** -

- -The `wink` rollershutter platform allows you to control your [Wink](http://www.wink.com/) enabled rollershutters. It supports Wink shades/blinds/rollershutters such as the Bali Somfy or Lutron Serena blinds. - -The Wink API currently doesn't provide status for shades. - -The requirement is that you have setup your [Wink hub](/components/wink/). - diff --git a/source/_components/rollershutter.zwave.markdown b/source/_components/rollershutter.zwave.markdown deleted file mode 100644 index ebed95ed0fc..00000000000 --- a/source/_components/rollershutter.zwave.markdown +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: page -title: "Z-Wave Rollershutter" -description: "Instructions how to setup the Z-Wave rollershutters within Home Assistant." -date: 2015-11-15 13:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Deprecated -ha_release: 0.23 ---- - -

-**This platform has been deprecated in favor of a "[cover](/components/cover.zwave/)" platform and will be removed in the future. Please use the cover platform.** -

- -To get your Z-Wave rollershutters working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/thermostat.ecobee.markdown b/source/_components/thermostat.ecobee.markdown deleted file mode 100644 index 65683469473..00000000000 --- a/source/_components/thermostat.ecobee.markdown +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: page -title: "Ecobee Thermostat" -description: "Instructions how to setup the Ecobee thermostats within Home Assistant." -date: 2015-11-30 18:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: ecobee.png -ha_category: Deprecated -ha_release: 0.9 ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.ecobee/)" platform and will be removed in the future. Please use the climate platform.** -

- -To get your Ecobee thermostats working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/thermostat.eq3btsmart.markdown b/source/_components/thermostat.eq3btsmart.markdown deleted file mode 100644 index 3715452e9dc..00000000000 --- a/source/_components/thermostat.eq3btsmart.markdown +++ /dev/null @@ -1,67 +0,0 @@ ---- -layout: page -title: "EQ3 Bluetooth Smart Thermostats" -description: "Instructions how to integrate EQ3 Bluetooth Smart Thermostats into Home Assistant." -date: 2016-04-18 22:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: eq3.gif -ha_category: Deprecated -ha_iot_class: "Local Poll" ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.eq3btsmart/)" platform and will be removed in the future. Please use the climate platform.** -

- -This platform allows you to integrate EQ3 Bluetooth Smart Thermostats. - -The only functionality is to set the temperature, there doesn't seem to be any way to query the temperature sensor or battery level ([read more](https://forum.fhem.de/index.php/topic,39308.15.html)). - -Setup is a bit more cumbersome than for most other thermostats. It has to be paired first: - -```bash -bluetoothctl -scan on - -scan off - -pair -trust -disconnect -exit -``` - -Then check with gatttool if the connection works as expected: - -```bash -gatttool -b 00:11:22:33:44:55 -I -[00:11:22:33:44:55][LE]> connect -Attempting to connect to 00:11:22:33:44:55 -Connection successful -[00:11:22:33:44:55][LE]> char-write-req 0x0411 03 -Characteristic value was written successfully -Notification handle = 0x0421 value: 02 01 09 14 04 2d -[00:11:22:33:44:55][LE]> disconnect -[00:11:22:33:44:55][LE]> exit -``` - -Important: For gatttool or homeassistant to work, the thermostat needs to be disconnected from bluetoothd, so I found it best to modify the hass-daemon startscript by adding: - -```bash -/usr/bin/bt-device -d CC-RT-BLE -``` - -to the start function of /etc/init.d/hass-daemon. - - -```yaml -# Example configuration.yaml entry -thermostat: - platform: eq3btsmart - devices: - room1: - mac: '00:11:22:33:44:55' -``` diff --git a/source/_components/thermostat.heat_control.markdown b/source/_components/thermostat.heat_control.markdown deleted file mode 100644 index 4c580183d4b..00000000000 --- a/source/_components/thermostat.heat_control.markdown +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: page -title: "Generic Thermostat" -description: "Turn Home Assistant into a thermostat" -date: 2015-03-23 19:59 -sidebar: true -comments: false -sharing: true -footer: true -logo: heat-control.png -ha_category: Deprecated ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.generic_thermostat/)" platform and will be removed in the future. Please use the climate platform.** -

- -Heat Control is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater under the hood. If the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when required temperature is reached. - -```yaml -# Example configuration.yaml entry -thermostat: - platform: heat_control - name: Study - heater: switch.study_heater - target_sensor: sensor.study_temperature - min_temp: 15 - max_temp: 21 - target_temp: 15 - min_cycle_duration: - # At least one of these must be specified: - days: 2 - hours: 1 - minutes: 10 - seconds: 5 - milliseconds: 20 -``` - -Configuration variables: - -- **name** (*Required*): Name of thermostat -- **heater** (*Required*: `entity_id` for heater switch, must be a toggle device. -- **target_sensor** (*Required*): `entity_id` for a temperature sensor, target_sensor.state must be temperature. -- **min_temp** (*Optional*): Set minimum set point available (default: 7) -- **max_temp** (*Optional*): Set maximum set point available (default: 35) -- **target_temp** (*Required*): Set intital target temperature. Failure to set this variable will result in target temperature being set to null on startup. -- **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device. -- **min_cycle_duration** (*Optional*): Set a minimum amount of time that the switch specified in the *heater* option must be in it's current state prior to being switched either off or on. diff --git a/source/_components/thermostat.heatmiser.markdown b/source/_components/thermostat.heatmiser.markdown deleted file mode 100644 index 8b5fe55835e..00000000000 --- a/source/_components/thermostat.heatmiser.markdown +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: page -title: "Heatmiser Thermostat" -description: "Instructions how to integrate Heatmiser thermostats within Home Assistant." -date: 2015-12-11 12:35 -sidebar: true -comments: false -sharing: true -footer: true -logo: heatmiser.png -ha_category: Deprecated -ha_release: "0.10" ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.heatmiser/)" platform and will be removed in the future. Please use the climate platform.** -

- -The `heatmiser` thermostat platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](http://www.heatmisershop.co.uk/heatmiser-slimline-programmable-room-thermostat/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP. - -Further work would be required to get this setup to connect over Wifi, but the HeatmiserV3 python module being used is a full implementation of the V3 protocol. If you would like to contribute to making this work over wifi, please contact @andylockran on github. - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -thermostat: - platform: heatmiser - ipaddress: YOUR_IPADDRESS - port: YOUR_PORT - tstats: - - 1: - id: THERMOSTAT_ID - name: THERMOSTAT_NAME -``` - -A single interface can handle up to 32 connected devices. - -Configuration variables: - -- **ipaddress** (*Required*): The ip address of your interface. -- **port** (*Required*): The port that the interface is listening on. -- **tstats** (*Required*): A list of thermostats activated on the gateway. -- **id** (*Required*): The id of the thermostat as configured on the device itself -- **name** (*Required*): A friendly name for the themostat diff --git a/source/_components/thermostat.honeywell.markdown b/source/_components/thermostat.honeywell.markdown deleted file mode 100644 index 0966bf7c932..00000000000 --- a/source/_components/thermostat.honeywell.markdown +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: page -title: "Honeywell Thermostat" -description: "Instructions how to integrate Honeywell thermostats within Home Assistant." -date: 2016-02-07 22:01 -sidebar: true -comments: false -sharing: true -footer: true -logo: honeywell.png -ha_category: Deprecated ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.honeywell/)" platform and will be removed in the future. Please use the climate platform.** -

- -The `honeywell` thermostat 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 -thermostat: - platform: honeywell - username: YOUR_USERNAME - password: YOUR_PASSWORD - region: REGION -``` - -Configuration variables: - -- **username** (*Required*: The username of an user with access. -- **password** (*Required*): The password for your given admin account. -- **away_temperature** (*optional*): Heating setpoint when away mode is on. If omitted it defaults to 16.0 deg C. -- **region** (*optional*): Region identifier (either 'eu' or 'us'). Defaults to 'eu' if not provided. diff --git a/source/_components/thermostat.knx.markdown b/source/_components/thermostat.knx.markdown deleted file mode 100644 index 4fc19252eb8..00000000000 --- a/source/_components/thermostat.knx.markdown +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: page -title: "KNX Thermostat" -description: "Instructions on how to integrate KXN thermostats with Home Assistant." -date: 2016-06-24 12:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: knx.png -ha_category: Deprecated -ha_release: 0.25 ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.knx/)" platform and will be removed in the future. Please use the climate platform.** -

- -The `knx` thermostat platform is used as in interface with KNX thermostats. - -KNX thermostats use at least 2 group addresses: one for the current temperature and one for the target temperature (named set-point in KNX terms). - -To use your KNX thermostats in your installation, add the following to your `configuration.yaml` file: - -```yaml -thermostat: - - platform: knx - name: KNX Thermostat - temperature_address: 0/1/1 - setpoint_address: 0/1/0 -``` - -- **name** (*Optional*): A name for this devices used within Home assistant -- **address** (*Required*): The KNX group address that is used to turn on/off this actuator channel -- **temperature_address** (*Required*): The group address that is used to communicate the current temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value) (see http://www.knx.org/fileadmin/template/documents/downloads_support_menu/KNX_tutor_seminar_page/Advanced_documentation/05_Interworking_E1209.pdf) -- **setpoint_address** (*Required*): The group address that is used to set/read the target temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value). Make sure, you set the read-flag for the thermostat to allow Home Assistant to read the target temperature. - -With the current version of the module, no advanced KNX thermostat functionalities (e.g. HVAC mode) are supported. diff --git a/source/_components/thermostat.markdown b/source/_components/thermostat.markdown deleted file mode 100644 index 5a2e618b00f..00000000000 --- a/source/_components/thermostat.markdown +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: page -title: "Thermostats" -description: "Instructions how to setup thermostats tracking within Home Assistant." -date: 2015-01-20 22:36 -sidebar: true -comments: false -sharing: true -footer: true ---- - -

-**This component has been deprecated in favor of the "[climate](/components/climate/)" component and will be removed in the future. Please use climate.** -

- -Thermostats offer Home Assistant a peek into the current and target temperature in a house. Some thermostats will also offer an away mode that will lower use of heating/cooling. - -

- -

diff --git a/source/_components/thermostat.nest.markdown b/source/_components/thermostat.nest.markdown deleted file mode 100644 index 0f6092393cd..00000000000 --- a/source/_components/thermostat.nest.markdown +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: page -title: "Nest Thermostat" -description: "Instructions how to integrate Nest thermostats within Home Assistant." -date: 2015-03-23 19:59 -sidebar: true -comments: false -sharing: true -footer: true -logo: nest_thermostat.png -ha_category: Deprecated ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.nest/)" platform and will be removed in the future. Please use the climate platform.** -

- -The `nest` thermostat platform let you control a thermostat from [Nest](https://nest.com). - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -thermostat: - platform: nest -``` - -

- -

- -

You must have the [Nest component](https://home-assistant.io/components/nest/) configured to use this sensor.

diff --git a/source/_components/thermostat.proliphix.markdown b/source/_components/thermostat.proliphix.markdown deleted file mode 100644 index bd37e067a34..00000000000 --- a/source/_components/thermostat.proliphix.markdown +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: page -title: "Proliphix Thermostat" -description: "Instructions how to integrate Proliphix thermostats within Home Assistant." -date: 2016-01-15 08:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: proliphix.png -ha_category: Deprecated -ha_release: 0.11 ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.proliphix/)" platform and will be removed in the future. Please use the climate platform.** -

- -The `proliphix` thermostat platform let you control [Proliphix](http://www.proliphix.com) thermostat from Home Assistant. - -Currently supported and tested thermostats: - -- NT10e - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -thermostat: - platform: proliphix - host: IP_ADDRESS - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration variables: - -- **host** (*Required*): Adress of your thermostat, eg. 192.168.1.32 -- **username** (*Required*): Username for the thermostat. -- **password** (*Required*): Password for the thermostat. - -The Proliphix NT Thermostat series are ethernet connected thermostats. They have a local HTTP interface that is based on get/set -of OID values. A complete collection of the API is available in this [API documentation](https://github.com/sdague/thermostat.rb/blob/master/docs/PDP_API_R1_11.pdf). - diff --git a/source/_components/thermostat.radiotherm.markdown b/source/_components/thermostat.radiotherm.markdown deleted file mode 100644 index 5919915ed03..00000000000 --- a/source/_components/thermostat.radiotherm.markdown +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: page -title: "Radiotherm Thermostat" -description: "Instructions how to integrate Radiotherm thermostats within Home Assistant." -date: 2015-10-18 17:15 -sidebar: true -comments: false -sharing: true -footer: true -logo: radiotherm.png -ha_category: Deprecated ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.radiotherm/)" platform and will be removed in the future. Please use the climate platform.** -

- -The `radiotherm` thermostat platform let you control a thermostat from [Radio Thermostat](http://www.radiothermostat.com/). - -The underlaying library supports: -- CT50 V1.09 -- CT50 V1.88 -- CT50 V1.94 (also known as Filtrete 3M50) -- CT80 Rev B2 V1.03 - -To set it up, add the following information to your `configuration.yaml` file: - -```yaml -thermostat: - platform: radiotherm - host: - - 192.168.99.137 - - 192.168.99.202 - hold_temp: True -``` - -Configuration variables: - -- **host** (*Required*): List of your Radiotherm thermostats -- **hold_temp** (*Required*): Boolean to control if Home Assistant temperature adjustments hold (`True`) or are temporary (`False`). - -Temperature settings from Home Assistant will be sent to thermostat and then hold at that temperature. Set to `False` if you set a thermostat schedule on the thermostat itself and just want Home Assistant to send temporary temperature changes. - diff --git a/source/_components/thermostat.zwave.markdown b/source/_components/thermostat.zwave.markdown deleted file mode 100644 index 8be1479fedd..00000000000 --- a/source/_components/thermostat.zwave.markdown +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: page -title: "Z-Wave Thermostat" -description: "Instructions how to setup the Z-Wave thermostat within Home Assistant." -date: 2016-04-03 9:52 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Deprecated -ha_release: 0.17 ---- - -

-**This platform has been deprecated in favor of a "[climate](/components/climate.zwave/)" platform and will be removed in the future. Please use the climate platform.** -

- -To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). - -

-If your thermostat support fan modes or different operating modes, it should be considered a [HVAC component](/components/hvac.zwave/), and will also be detected as one. Thermostat component does not support setting fan or operation mode. This is controlled via the HVAC component. - -If the thermostat support different operationg modes, you will get one thermostat entity for each mode. These can be hidden with settings using the customize setting in the `configuration.yaml` file. -

From 50afae10bf94c4dfd25d60a2d9223e2dd010fb7c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 25 Oct 2016 08:55:14 +0200 Subject: [PATCH 09/60] Fix typo --- source/_components/weather.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index 784c917048f..cb6b290d278 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -9,7 +9,8 @@ sharing: true footer: true --- -Weather platforms are gathering meteorological information from web services and displays the conditions and other details about the weather at the given location. +The `weather` platforms are gathering meteorological information from web services and displays the conditions and other details about the weather at the given location. + +Home Assistant currently supports free web services and such which requires a registration. Please check the sidebar for a full list of supported `weather` platforms. -Home Assistant currently supports a free web services and such which requires a registration. Please check the sidebar for a full list of supported sensor platforms. From b735a81a35248380b2f4a8e53a56a13a1da84ddd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 25 Oct 2016 08:55:28 +0200 Subject: [PATCH 10/60] Add note --- source/_components/weather.openweathermap.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/weather.openweathermap.markdown b/source/_components/weather.openweathermap.markdown index 9a870b61341..0fe9383d56a 100644 --- a/source/_components/weather.openweathermap.markdown +++ b/source/_components/weather.openweathermap.markdown @@ -9,10 +9,9 @@ sharing: true footer: true logo: openweathermap.png ha_category: Weather -ha_release: "0.30" +ha_release: 0.32 --- - The `openweathermap` weather platform uses [OpenWeatherMap](http://openweathermap.org/) as an source for current meteorological data for your location. You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). @@ -34,5 +33,6 @@ Configuration variables: - **latitude** (*Optional*): Latitude of the location to display the weather. Defaults to the latitude in your your `configuration.yaml` file. - **longitude** (*Optional*): Longitude of the location to display the weather. Defaults to the longitude in your `configuration.yaml` file. -Details about the API are available in the [OpenWeatherMap documentation](http://openweathermap.org/api). - +

+This platform is an alternative to the [`openweathermap`](/components/sensor.openweathermap/) sensor. +

From 9813fe71c29217c3cfcf06aad7f4e880c475f10f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 25 Oct 2016 14:24:01 +0200 Subject: [PATCH 11/60] Add ha_release and other minor changes --- source/_components/mochad.markdown | 29 +++++++++++++---------- source/_components/switch.mochad.markdown | 14 +++++------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/source/_components/mochad.markdown b/source/_components/mochad.markdown index ab139fd9d08..f27367f0da1 100644 --- a/source/_components/mochad.markdown +++ b/source/_components/mochad.markdown @@ -8,25 +8,28 @@ comments: false sharing: true footer: true ha_category: Hub +ha_release: 0.32 --- -The Mochad component is the main component to integrate all X10 platforms being -controlled by [mochad](https://sourceforge.net/projects/mochad/). Besides this component you will have to setup your X10 devices separately. +The `mochad` component is the main component to integrate all X10 platforms being controlled by [mochad](https://sourceforge.net/projects/mochad/). Besides this component you will have to setup your X10 devices separately. + +To integrate your Mochad units with Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +mochad: +``` + +Configuration variables: + +- **host** (*Optional*): The host that mochad is running on. Defaults to `localhost`. +- **port** (*Optional*): The port that mochad is running on. Defaults to `1099`. + +A full configuration sample could look like the one below: ```yaml # Example configuration.yaml entry mochad: host: localhost port: 1099 - -switch: - platform: mochad - devices: - - name: Light Switch - address: a1 ``` - -Configuration variables: - -- **host** (*Optional*): The host that mochad is running on, defaults to *localhost* -- **port** (*Optional*): The port that mochad is running on, defaults to *1099* diff --git a/source/_components/switch.mochad.markdown b/source/_components/switch.mochad.markdown index 9bea444762b..af7d831d061 100644 --- a/source/_components/switch.mochad.markdown +++ b/source/_components/switch.mochad.markdown @@ -9,24 +9,24 @@ sharing: true footer: true ha_category: Switch ha_iot_class: depends +ha_release: 0.32 --- The `mochad` switch platform lets you control an X10 enabled switch device. -To enable this switch in your installation, add the following to your `configuration.yaml` file: +To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yml entry switch: - platform: mochad devices: - - name: Switch A - address: a1 - - name: Living Room Lamp - address: a5 + - address: a1 + - address: a5 ``` Configuration variables: -- **name** (*Optional*): The name of the switch. Default is: x10_switch_dev_*address* -- **address** (*Required*): The X10 address of the switch +- **address** (*Required*): The X10 address of the switch. +- **name** (*Optional*): The name of the switch. Default is: x10_switch_dev_*address*. + From 49c8603859e13b1dbb89ab75442043a7d4a998e3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 25 Oct 2016 14:33:56 +0200 Subject: [PATCH 12/60] Update ha_release --- source/_components/notify.matrix.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index 9cee32ce4b7..1b86eea729a 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -9,12 +9,14 @@ sharing: true footer: true logo: matrix.png ha_category: Notifications -ha_release: 0.31 +ha_release: 0.32 --- The `matrix` platform allows you to deliver notifications from Home Assistant to a Matrix room. Rooms can be both direct as well as group chats. +To enable Matrix notifications in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry notify: From 20d3bb014d4a78f3b1f3e8f04eaf6a26dc8057eb Mon Sep 17 00:00:00 2001 From: PollieKrismis Date: Wed, 26 Oct 2016 22:17:09 +0200 Subject: [PATCH 13/60] Adding links to help newbies --- source/developers/development.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/developers/development.markdown b/source/developers/development.markdown index a926ff185bb..e763b8a54f8 100644 --- a/source/developers/development.markdown +++ b/source/developers/development.markdown @@ -11,9 +11,22 @@ footer: true Home Assistant is built from the ground up to be easily extensible using components. Home Assistant uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. -Home Assistant is open-source and MIT-licensed. Here are links to the source:: +Home Assistant is open-source and MIT-licensed. Here are links to the source: - [home-assistant](https://github.com/home-assistant/home-assistant): Python server backend. - [home-assistant-js](https://github.com/home-assistant/home-assistant-js): JavaScript backend that powers the client. - [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer): Polymer UI. +For those new to contributing to open source software, make sure you are familiar with all of the tools and concepts used in Home Assistant before you start. + +When contributing Home Assistant code: + - [Github](https://guides.github.com/activities/hello-world/) + - [Pip and Virtual Environments](https://www.dabapps.com/blog/introduction-to-pip-and-virtualenv-python/) + - [Python 3](https://www.python.org/) + - [Pylint](https://www.pylint.org) + - [Flake8](http://flake8.pycqa.org/en/latest/) + - [Tox](http://tox.readthedocs.org/en/latest/) + - [TravisCl](https://travis-ci.org/) + +When contributing 3rd Party code to be used by Home Assistant: + - [Publishing your own PiPl package](https://jeffknupp.com/blog/2013/08/16/open-sourcing-a-python-project-the-right-way/) \ No newline at end of file From 1ec56b21c8bf7469b59763e0640bb2b66eb8a024 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Wed, 26 Oct 2016 21:08:44 -0400 Subject: [PATCH 14/60] Uploaded currencylayer logo --- source/images/supported_brands/currencylayer.png | Bin 0 -> 5848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/currencylayer.png diff --git a/source/images/supported_brands/currencylayer.png b/source/images/supported_brands/currencylayer.png new file mode 100644 index 0000000000000000000000000000000000000000..93fe98e6a376184bb8a1543943e252d876d0a34c GIT binary patch literal 5848 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 JLe@0!e*j)DBKH6Q literal 0 HcmV?d00001 From 512dd8d9771c70e20d0cb655a59c27190fa486c6 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Wed, 26 Oct 2016 21:22:48 -0400 Subject: [PATCH 15/60] Added Currencylayer markdown --- .../_components/sensor.currencylayer.markdown | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 source/_components/sensor.currencylayer.markdown diff --git a/source/_components/sensor.currencylayer.markdown b/source/_components/sensor.currencylayer.markdown new file mode 100644 index 00000000000..1f8ee13c4ef --- /dev/null +++ b/source/_components/sensor.currencylayer.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Currencylayer" +description: "Instructions on integrating exchange rates from https://currencylayer.com/ within Home Assistant." +date: 2016-10-26 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Finance +logo: currencylayer.png +ha_iot_class: "Cloud Polling" +ha_release: 0.32 +--- + + +The `currencylayer` sensor will show you the current exchange rate from [Currencylayer](https://currencylayer.com/) that provides realtime exchange rates for [170 currencies](https://currencylayer.com/currencies). The free account is limited to only USD as a base currency, allows 1000 requests per month, and updates every hour. + +Obtain your API key [here](https://currencylayer.com/product) + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: currencylayer + api_key: YOUR_API_KEY + base: USD + quote: + - EUR + - INR +``` + +Configuration variables: + +- **api_key** (*Required*): API Key from [Currencylayer](https://currencylayer.com/). +- **base** (*Optional*): The symbol of the base currency. Defaults to USD. +- **quote** (*Required*): The symbol(s) of the quote or target currencies. From 16b91fa0e5d37304829a5d7e3e45984ef816d2fe Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Thu, 27 Oct 2016 01:20:18 -0400 Subject: [PATCH 16/60] Updated Weather Underground documentation regarding the @Throttle difference between different monitored_conditions. --- source/_components/sensor.wunderground.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 7e2e9aef286..dc672a92cec 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -92,5 +92,7 @@ Configuration variables: - **solarradiation**: Current levels of solar radiation - **alerts**: Current severe weather advisories +All the conditions listed above will be updated each 5 minutes with exception of `alerts` that will be updated each 15 minutes by default. + Additional details about the API are available [here](https://www.wunderground.com/weather/api/d/docs). From 5023521223a727ac58b366843fb63154bea5d83b Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 27 Oct 2016 00:34:38 -0700 Subject: [PATCH 17/60] SSL Option to zoneminder component --- source/_components/zoneminder.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/zoneminder.markdown b/source/_components/zoneminder.markdown index 32aa596c8d4..288a34610b5 100644 --- a/source/_components/zoneminder.markdown +++ b/source/_components/zoneminder.markdown @@ -19,6 +19,7 @@ The ZoneMinder component is the main component to integrate all the sensors and zoneminder: host: ZM_HOST path: ZM_PATH + ssl: False username: USERNAME password: PASSWORD ``` @@ -26,6 +27,7 @@ zoneminder: Configuration variables: - **host** (*Required*): Your ZoneMinder server. - **path** (*Optional*): Path to your ZoneMinder install (default: /zm/) +- **ssl** (*Optional*): Set to True if your ZoneMinder install is using SSL (default: False) - **username** (*Optional*): Your ZoneMinder username. - **password** (*Optional*): Your ZoneMinder password. From fb1d72a4a4a921bf07ee6d0d082827a38d133fba Mon Sep 17 00:00:00 2001 From: Baptiste Poirriez Date: Thu, 27 Oct 2016 10:57:53 +0200 Subject: [PATCH 18/60] Adding documentation for influxdb sensor --- source/_components/sensor.influxdb.markdown | 71 +++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 source/_components/sensor.influxdb.markdown diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown new file mode 100644 index 00000000000..2e5e849a90b --- /dev/null +++ b/source/_components/sensor.influxdb.markdown @@ -0,0 +1,71 @@ +--- +layout: page +title: "InfluxDB Sensor" +description: "Instructions how to integrate InfluxDB sensors within Home Assistant." +date: 2016-10-26 23:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: influxdb.png +ha_category: Sensor +ha_release: 0.32 +--- + +The `InfluxDB` sensor allows you to use values from an InfluxDB database to populate a sensor state. + +To configure this sensor, you need to define the sensor connection variables and a list of queries. A sensor will be created for each query. + +Configuration variables for the server: + +- **host** (*Optional*): IP address of your database host, eg. http://192.168.1.10. Defaults to `localhost`. +- **port** (*Optional*): Port to use. Defaults to 8086. +- **username** (*Optional*): The username of the database user. +- **password** (*Optional*): The password for the database user account. +- **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. +- **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. +- **queries** (*Required*): List of queries + +Configuration variables for the queries: +- **name** (*Required*): The name of the sensor, +- **unit_of_measurement** (*Required*): Defines the units of measurement of the sensor, +- **measurement** (*Required*): Defines the measurement name in InfluxDB (the from clause of the query), +- **where** (*Required*): Defines the data selection clause (the where clause of the query), +- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. +- **database** (*Optional*): Name of the database to use. Defaults to `home_assistant`, +- **group_function** (*Optional*): The group function to be used, default to `mean` +- **field** (*Optional*): The field name to select, default to value. + +## {% linkable_title Examples %} + + +### {% linkable_title Full configuration %} +The example configuration entry bellow create two request to influx db, one to the database db1, the other to db2 : + +- `select last(value) as value from "°C" where "name" = "foo"` +- `select min(tmp) as value from "%" where "entity_id" = ''salon'' and time > now() - 1h` + +```yaml +sensor: + platform: influxdb + host: localhost + username: home-assistant + password: password + queries: + - name: last value of foo + unit_of_measurement: °C + value_template: '{{ value | round(1) }}' + group_function: last + where: '"name" = ''foo''' + measurement: '"°C"' + field: value + database: db1 + - name: Min for last hour + unit_of_measurement: '%' + value_template: '{{ value | round(1) }}' + group_function: min + where: '"entity_id" = ''salon'' and time > now() - 1h' + measurement: '"%"' + field: tmp + database: db2 +``` \ No newline at end of file From ad4bd1362731050b2304013b1ed80a6ec1c9fe3c Mon Sep 17 00:00:00 2001 From: Baptiste Poirriez Date: Thu, 27 Oct 2016 11:28:08 +0200 Subject: [PATCH 19/60] Minimal configuration exemple and fix for host variable (ip address without http) --- source/_components/influxdb.markdown | 2 +- source/_components/sensor.influxdb.markdown | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index d8e28d95833..889afd56a70 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -25,7 +25,7 @@ You will still need to create a database named `home_assistant` via InfluxDB's w Configuration variables: -- **host** (*Optional*): IP address of your database host, eg. http://192.168.1.10. Defaults to `localhost`. +- **host** (*Optional*): IP address of your database host, eg. 192.168.1.10. Defaults to `localhost`. - **port** (*Optional*): Port to use. Defaults to 8086. - **username** (*Optional*): The username of the database user. - **password** (*Optional*): The password for the database user account. diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index 2e5e849a90b..ec6e47ff37b 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -18,7 +18,7 @@ To configure this sensor, you need to define the sensor connection variables and Configuration variables for the server: -- **host** (*Optional*): IP address of your database host, eg. http://192.168.1.10. Defaults to `localhost`. +- **host** (*Optional*): IP address of your database host, eg. 192.168.1.10. Defaults to `localhost`. - **port** (*Optional*): Port to use. Defaults to 8086. - **username** (*Optional*): The username of the database user. - **password** (*Optional*): The password for the database user account. @@ -37,7 +37,18 @@ Configuration variables for the queries: - **field** (*Optional*): The field name to select, default to value. ## {% linkable_title Examples %} - +### {% linkable_title Minimal configuration %} +The example configuration below will create a request to influx db to the default database (`home_assistant`) to get the mean value of `foo` in measurement `°C` + +```yaml +sensor: + - platform: influxdb + queries: + - name: mean value of foo + unit_of_measurement: °C + where: '"name" = ''foo''' + measurement: '"°C"' +``` ### {% linkable_title Full configuration %} The example configuration entry bellow create two request to influx db, one to the database db1, the other to db2 : From d039052e6b6ba8fa6306feba3ef0911e1da5e5f7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 27 Oct 2016 15:42:24 +0200 Subject: [PATCH 20/60] Minor format changes --- source/_components/sensor.influxdb.markdown | 55 ++++++++++----------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index ec6e47ff37b..4431528ab41 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -12,35 +12,12 @@ ha_category: Sensor ha_release: 0.32 --- -The `InfluxDB` sensor allows you to use values from an InfluxDB database to populate a sensor state. +The `InfluxDB` sensor allows you to use values from an [InfluxDB](https://influxdb.com/) database to populate a sensor state. -To configure this sensor, you need to define the sensor connection variables and a list of queries. A sensor will be created for each query. +To configure this sensor, you need to define the sensor connection variables and a list of queries to your `configuration.yaml` file. A sensor will be created for each query: -Configuration variables for the server: - -- **host** (*Optional*): IP address of your database host, eg. 192.168.1.10. Defaults to `localhost`. -- **port** (*Optional*): Port to use. Defaults to 8086. -- **username** (*Optional*): The username of the database user. -- **password** (*Optional*): The password for the database user account. -- **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. -- **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. -- **queries** (*Required*): List of queries - -Configuration variables for the queries: -- **name** (*Required*): The name of the sensor, -- **unit_of_measurement** (*Required*): Defines the units of measurement of the sensor, -- **measurement** (*Required*): Defines the measurement name in InfluxDB (the from clause of the query), -- **where** (*Required*): Defines the data selection clause (the where clause of the query), -- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. -- **database** (*Optional*): Name of the database to use. Defaults to `home_assistant`, -- **group_function** (*Optional*): The group function to be used, default to `mean` -- **field** (*Optional*): The field name to select, default to value. - -## {% linkable_title Examples %} -### {% linkable_title Minimal configuration %} -The example configuration below will create a request to influx db to the default database (`home_assistant`) to get the mean value of `foo` in measurement `°C` - ```yaml +# Example configuration.yaml entry sensor: - platform: influxdb queries: @@ -50,8 +27,30 @@ sensor: measurement: '"°C"' ``` + +Configuration variables for the server: + +- **host** (*Optional*): IP address of your database host, eg. 192.168.1.10. Defaults to `localhost`. +- **port** (*Optional*): Port to use. Defaults to 8086. +- **username** (*Optional*): The username of the database user. +- **password** (*Optional*): The password for the database user account. +- **ssl** (*Optional*): Use `https` instead of `http` to connect. Defaults to `false`. +- **verify_ssl** (*Optional*): Verify SSL certificate for `https` request. Defaults to `false`. +- **queries** array (*Required*): List of queries + - **name** (*Required*): The name of the sensor. + - **unit_of_measurement** (*Required*): Defines the units of measurement of the sensor. + - **measurement** (*Required*): Defines the measurement name in InfluxDB (the from clause of the query). + - **where** (*Required*): Defines the data selection clause (the where clause of the query). + - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. + - **database** (*Optional*): Name of the database to use. Defaults to `home_assistant`. + - **group_function** (*Optional*): The group function to be used. Defaults to `mean`. + - **field** (*Optional*): The field name to select. Defaults to value. + +## {% linkable_title Examples %} + ### {% linkable_title Full configuration %} -The example configuration entry bellow create two request to influx db, one to the database db1, the other to db2 : + +The example configuration entry bellow create two request to your local InfluxDB instance, one to the database `db1`, the other to `db2`: - `select last(value) as value from "°C" where "name" = "foo"` - `select min(tmp) as value from "%" where "entity_id" = ''salon'' and time > now() - 1h` @@ -79,4 +78,4 @@ sensor: measurement: '"%"' field: tmp database: db2 -``` \ No newline at end of file +``` From 5ed60cbc3533e20c8061115cffd85950e4a40301 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 27 Oct 2016 15:43:59 +0200 Subject: [PATCH 21/60] Change line endings --- source/_components/sensor.currencylayer.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.currencylayer.markdown b/source/_components/sensor.currencylayer.markdown index 1f8ee13c4ef..29aad210caf 100644 --- a/source/_components/sensor.currencylayer.markdown +++ b/source/_components/sensor.currencylayer.markdown @@ -22,12 +22,12 @@ To enable this sensor, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry -sensor: - - platform: currencylayer - api_key: YOUR_API_KEY - base: USD - quote: - - EUR +sensor: + - platform: currencylayer + api_key: YOUR_API_KEY + base: USD + quote: + - EUR - INR ``` From e13b87735fa1ca7dfdce97881b3400a0320fb357 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 27 Oct 2016 15:59:51 +0200 Subject: [PATCH 22/60] Minimize sample and add ha_release --- source/_components/sensor.zoneminder.markdown | 7 +++--- source/_components/switch.zoneminder.markdown | 1 + source/_components/zoneminder.markdown | 24 ++++++++++++------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/source/_components/sensor.zoneminder.markdown b/source/_components/sensor.zoneminder.markdown index 8be4611b477..fd71c742a44 100644 --- a/source/_components/sensor.zoneminder.markdown +++ b/source/_components/sensor.zoneminder.markdown @@ -9,10 +9,11 @@ sharing: true footer: true logo: zoneminder.png ha_category: Sensor +ha_release: 0.31 --- -The `ZoneMinder` sensor platform let you monitor the current state of your zoneminder install including the number of events and the current state of the cameras. +The `zoneminder` sensor platform let you monitor the current state of your zoneminder install including the number of events and the current state of the cameras.

You must have the [ZoneMinder component](/components/zoneminder/) configured to use those sensors. @@ -23,5 +24,5 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: zoneminder -``` \ No newline at end of file + - platform: zoneminder +``` diff --git a/source/_components/switch.zoneminder.markdown b/source/_components/switch.zoneminder.markdown index fa757bf2d9f..eee9948d2fd 100644 --- a/source/_components/switch.zoneminder.markdown +++ b/source/_components/switch.zoneminder.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: zoneminder.png ha_category: Switch +ha_release: 0.31 --- diff --git a/source/_components/zoneminder.markdown b/source/_components/zoneminder.markdown index 288a34610b5..7b38caaddee 100644 --- a/source/_components/zoneminder.markdown +++ b/source/_components/zoneminder.markdown @@ -10,10 +10,26 @@ footer: true logo: zoneminder.png ha_category: Camera featured: false +ha_release: 0.31 --- The ZoneMinder component is the main component to integrate all the sensors and switches for controlling your ZoneMinder instance. +```yaml +# Example configuration.yaml entry +zoneminder: + host: ZM_HOST +``` + +Configuration variables: +- **host** (*Required*): Your ZoneMinder server. +- **path** (*Optional*): Path to your ZoneMinder install. Defaults to `/zm/`. +- **ssl** (*Optional*): Set to `True` if your ZoneMinder installation is using SSL. Default to `False`. +- **username** (*Optional*): Your ZoneMinder username. +- **password** (*Optional*): Your ZoneMinder password. + +### {% linkable_title Full configuration %} + ```yaml # Example configuration.yaml entry zoneminder: @@ -23,11 +39,3 @@ zoneminder: username: USERNAME password: PASSWORD ``` - -Configuration variables: -- **host** (*Required*): Your ZoneMinder server. -- **path** (*Optional*): Path to your ZoneMinder install (default: /zm/) -- **ssl** (*Optional*): Set to True if your ZoneMinder install is using SSL (default: False) -- **username** (*Optional*): Your ZoneMinder username. -- **password** (*Optional*): Your ZoneMinder password. - From a1e568261367eccf759b7d68f8369dea5c25ee65 Mon Sep 17 00:00:00 2001 From: bestlibre Date: Thu, 27 Oct 2016 17:53:32 +0200 Subject: [PATCH 23/60] Converting unit_of_measurement variable to optional, to be consistent with other sensors (#1344) --- source/_components/sensor.influxdb.markdown | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index 4431528ab41..43ed715a97c 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -12,7 +12,7 @@ ha_category: Sensor ha_release: 0.32 --- -The `InfluxDB` sensor allows you to use values from an [InfluxDB](https://influxdb.com/) database to populate a sensor state. +The `InfluxDB` sensor allows you to use values from an [InfluxDB](https://influxdb.com/) database to populate a sensor state. This can be use to present statistic about home_assistant sensors if used with the `influxdb` history component. It can also be used with an external data source. To configure this sensor, you need to define the sensor connection variables and a list of queries to your `configuration.yaml` file. A sensor will be created for each query: @@ -22,7 +22,6 @@ sensor: - platform: influxdb queries: - name: mean value of foo - unit_of_measurement: °C where: '"name" = ''foo''' measurement: '"°C"' ``` @@ -38,7 +37,7 @@ Configuration variables for the server: - **verify_ssl** (*Optional*): Verify SSL certificate for `https` request. Defaults to `false`. - **queries** array (*Required*): List of queries - **name** (*Required*): The name of the sensor. - - **unit_of_measurement** (*Required*): Defines the units of measurement of the sensor. + - **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. - **measurement** (*Required*): Defines the measurement name in InfluxDB (the from clause of the query). - **where** (*Required*): Defines the data selection clause (the where clause of the query). - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. From 79352842901aafde1277836ecde0b40d6cb839af Mon Sep 17 00:00:00 2001 From: Abhishek Anand Date: Fri, 28 Oct 2016 06:09:25 -0400 Subject: [PATCH 24/60] switch.rest updates (#1030) * updates corresponding to PR#3329 * more explanation * de-jargoned iff --- source/_components/switch.rest.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index 43e30200b6e..51c43af6497 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -28,8 +28,10 @@ Configuration variables: - **resource** (*Required*): The resource or endpoint that contains the value. - **name** (*Optional*): Name of the REST switch. -- **body_on** (*Optional*): The body that represents enabled state. Default is "ON". -- **body_off** (*Optional*):The body that represents disabled state. Default is "OFF". +- **body_on** (*Optional*): The body of the POST request that commands the switch to become enabled. Default is "ON". This value can be a [template](/topics/templating/), which is useful if the POST request needs to depend on the state of the system. For example, to enable remote-temperature-sensor tracking on a radio thermostat, one has to send the current value of the remote temperature sensor. On can achieve this using the template `'{"rem_temp":{{states.sensor.bedroom_temp.state}}}'`. +- **body_off** (*Optional*): The body of the POST request that commands the switch to become disabled. Default is "OFF". This value can also be a template. +- **is_on_template** (*Optional*): A [template](/topics/templating/) that determines the state of the switch from the value returned by the GET request on the resource url. This template should compute to a boolean (True or False). Default is equivalent to `'{{ value.json == body_on }}'`. This means that by default, the state of the switch is on if and only if the response to the GET request matches `body_on`. +

Make sure that the URL matches exactly your endpoint or resource. From 926473325ba3cda49698328025b3e4fef1261429 Mon Sep 17 00:00:00 2001 From: smaggard Date: Sat, 29 Oct 2016 03:18:31 -0500 Subject: [PATCH 25/60] Adding support for HS200 (#1356) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding support for HS200 via GadgetReactor committed on GitHub Merge pull request #5 from smaggard/add-hs200 … Adding in support for the HS200 Wall switch referencing issues (#4) --- source/_components/switch.tplink.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index cf2cab03b8c..9194054217d 100644 --- a/source/_components/switch.tplink.markdown +++ b/source/_components/switch.tplink.markdown @@ -20,6 +20,7 @@ Supported units: - HS100 - HS110 +- HS200 To use your TPLink switch in your installation, add the following to your `configuration.yaml` file: From 45fc648d56c451777f18d7187461736fc2b8ed9c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 29 Oct 2016 12:18:56 +0200 Subject: [PATCH 26/60] Keys are required --- source/_components/thingspeak.markdown | 28 +++++++++++--------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/source/_components/thingspeak.markdown b/source/_components/thingspeak.markdown index 386b0931404..e0409dc36d3 100644 --- a/source/_components/thingspeak.markdown +++ b/source/_components/thingspeak.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Thingspeak" -description: "Record one entity in Thingspeak" +title: "ThingSpeak" +description: "Record one entity in ThingSpeak" date: 2016-10-24 15:45 sidebar: true comments: false @@ -15,25 +15,21 @@ The `thingspeak` components makes Home Assistant communicate with the [ThingSpea For now, it records exactly one entity at once, which is great for testing purposes. For long-time storage you should rely on the [InfluxDB component](https://home-assistant.io/components/influxdb/). -```yaml -# Example configuration.yaml entry -thingspeak: -``` - You will have to create a [new channel](https://thingspeak.com/channels/new) on ThingSpeak and grab your API key from your [account page](https://thingspeak.com/account). -Configuration variables: -- **api_key**: Yout ThingSpeak API key -- **id**: The ID of your desired ThingSpeak channel -- **whitelist**: The name of the entity whose states should be sent to the channel. - -## {% linkable_title Examples %} - -### {% linkable_title Full configuration %} +To setup the ThinkSpeak component in your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry thingspeak: api_key: MY_API_KEY id: 1337 whitelist: sensor.yr_temperature -``` \ No newline at end of file +``` + +Configuration variables: + +- **api_key** (*Required*): Yout ThingSpeak API key. +- **id** (*Required*): The ID of your desired ThingSpeak channel. +- **whitelist** (*Required*): The name of the entity whose states should be sent to the channel. + From c769046d159dbffd9cc68289e546f71860091748 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 29 Oct 2016 17:31:02 +0200 Subject: [PATCH 27/60] Update command --- source/developers/development_testing.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development_testing.markdown b/source/developers/development_testing.markdown index 71a636977b0..60d927dd725 100644 --- a/source/developers/development_testing.markdown +++ b/source/developers/development_testing.markdown @@ -44,7 +44,7 @@ $ py.test tests/test_core.py You can also run linting tests against all changed files, as reported by `git diff upstream/dev --name-only`, using the `lint` script: ```bash -home-assistant$ script/lint --changed +$ script/lint --changed ``` ### {% linkable_title Preventing Linter Errors %} From 607365539d6ba73d494f609feafacce53a8ee440 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 29 Oct 2016 23:09:31 +0200 Subject: [PATCH 28/60] Add HDDTemp docs (#1358) --- source/_components/sensor.hddtemp.markdown | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 source/_components/sensor.hddtemp.markdown diff --git a/source/_components/sensor.hddtemp.markdown b/source/_components/sensor.hddtemp.markdown new file mode 100644 index 00000000000..d3669c7d76b --- /dev/null +++ b/source/_components/sensor.hddtemp.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "HDDTemp" +description: "Instructions how to integrate harddrive temperature information into Home Assistant." +date: 2016-10-28 07:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: System Monitor +ha_release: 0.32 +ha_iot_class: "Local Polling" +--- + +The `hddtemp` sensor platform is using the data provided by [HDDTemp](http://savannah.nongnu.org/projects/hddtemp). + +It required that `hddtemp` is started or running in daemon mode on a local or remote system. + +```bash +$ hddtemp -dF +``` + +To setup a HDDTemp to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: hddtemp +``` + +Configuration variables: + +- **name** (*Optional*): Friendly name to use for the frontend. Default to "HD Temperature". +- **host** (*Optional*): Host where `hddtemp` is running. Default to `localhost`. +- **port** (*Optional*): Port that is used by `hddtemp` . Default to `7634`. + From 23270a4925b1d7afc899f1178ee065525ae03cca Mon Sep 17 00:00:00 2001 From: Emily Cassandra Meeker Date: Sun, 30 Oct 2016 06:33:02 -0500 Subject: [PATCH 29/60] Grammar and native English corrections to Getting Started pages (#1366) * Grammar change on Getting Started page * Wording on Devices to more natural native English * Native English corrections on presence-detection --- source/getting-started/devices.markdown | 4 ++-- source/getting-started/index.markdown | 2 +- source/getting-started/presence-detection.markdown | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/source/getting-started/devices.markdown b/source/getting-started/devices.markdown index e955391bfc5..a7eb3e82eff 100644 --- a/source/getting-started/devices.markdown +++ b/source/getting-started/devices.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Home Assistant will be able to automatically discover a bunch of devices and services available on your network if you have [the discovery component]({{site_root}}/components/discovery/) enabled (which is by default). +Home Assistant will be able to automatically discover many devices and services available on your network if you have [the discovery component]({{site_root}}/components/discovery/) enabled (the default setting). See the [components overview page](/components/) to find installation instructions for your devices and services. If you can't find support for your favorite device or service, [consider adding support](/developers/add_new_platform/). @@ -53,7 +53,7 @@ camera 2: ### {% linkable_title Grouping devices %} -Once you have a bunch of devices set up, it is time to organize them into groups. +Once you have several devices set up, it is time to organize them into groups. Each group consists of a name and a list of entity IDs. Entity IDs can be retrieved from the web interface by using the Set State page in the Developer Tools (![<>](https://cdn.rawgit.com/Templarian/MaterialDesign/master/icons/svg/code-tags.svg)). ```yaml diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 454ec2f8152..a3d0d220257 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Below you can find the standard instructions. See the sidebar for installation instructions for specific platforms. If you're running a Linux-based platform, we suggest you to follow the [VirtualEnv Linux instructions] to avoid using root. +Below you can find the standard instructions. See the sidebar for installation instructions for specific platforms. If you're running a Linux-based platform, we suggest you follow the [VirtualEnv Linux instructions] to avoid using root. [Virtualenv Linux instructions]: /getting-started/installation-virtualenv/ diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 192168d45d1..38cd1e5f143 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -13,7 +13,7 @@ footer: true We care about privacy. Collected data is only stored in your instance of Home Assistant.

-Presence detection detects if people are home, an important input for automation. The most important piece of information is to know if anyone is home. But knowing who is home or where they are will open a whole range of other automation options: +Presence detection detects if people are home, which is the most important input for automation. Knowing who is home or where they are will open a whole range of other automation options: - Send me a notification when my child arrives at school - Turn on the AC when I leave work @@ -27,12 +27,12 @@ Screenshot of Home Assistant showing a school, work and home zone and two people The device tracker component offers presence detection for Home Assistant. It supports two different methods for presence detection: scan for connected devices on the local network and connect to third party service. -Scanning for connected devices is easy to setup. See the instructions for our [supported routers][routers] or [scan the network using nmap][nmap]. This approach does have its limitations however, it will only be able to detect if a device is home. It also struggles with iPhones because they disconnect from WiFi if idle, marking them as not home when they actually are. +Scanning for connected devices is easy to setup. See the instructions for our [supported routers][routers] or [scan the network using nmap][nmap]. This approach does have its limitations, however: it will only be able to detect if a device is home, and iPhones may show as not home inaccurately (as iPhones disconnect from WiFi if idle). -Home Assistant currently supports two third party services for presence detection: [OwnTracks][ha-owntracks] and [Locative][ha-locative]. OwnTracks is an app that you install on your iPhone or Android phone that allows you to push the location of your device to Home Assistant using an MQTT broker. An MQTT broker is an Internet of Things communication platform that you can [freely host yourself][mqtt-self] or get [a private instance for free in the cloud](/components/mqtt/#run-your-own). +Home Assistant currently supports two third-party services for presence detection: [OwnTracks][ha-owntracks] and [Locative][ha-locative]. OwnTracks is an app that you install on your iPhone or Android phone that allows you to push the location of your device to Home Assistant using an MQTT broker. An MQTT broker is an Internet of Things communication platform that you can [freely host yourself][mqtt-self] or get [a private instance for free in the cloud](/components/mqtt/#run-your-own).

-OwnTracks communicates directly with your MQTT broker, no data will pass through their servers. +OwnTracks communicates directly with your MQTT broker; no data will pass through their servers.

### {% linkable_title Zones %} From e7acd0a5fd749001b62be958f06aab124fe31644 Mon Sep 17 00:00:00 2001 From: MichaelSprague Date: Sun, 30 Oct 2016 07:35:01 -0400 Subject: [PATCH 30/60] Fix typos (#1364) --- source/_components/zone.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/zone.markdown b/source/_components/zone.markdown index 066f45b4f8a..353f2691d92 100644 --- a/source/_components/zone.markdown +++ b/source/_components/zone.markdown @@ -57,8 +57,8 @@ Devices that are in the zone **'Home'** will not appear on the map in the Home A #### {% linkable_title Icons %} -It is preferred to pick an icon to use for your zone. Pick any zone that you can find on [materialdesignicons.com](https://materialdesignicons.com/) and prefix the name with `mdi:`. For example `mdi:school`, `mdi:worker`, `mdi:home`, `mdi:cart`, or `mdi:castle`. +It is preferred to pick an icon to use for your zone. Pick any icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) and prefix the name with `mdi:`. For example `mdi:school`, `mdi:worker`, `mdi:home`, `mdi:cart`, or `mdi:castle`. #### State -`zoning` is the state a `zone` has when it is configured. A `zone` doesn't have another state, all configured zones are `zoning` all the time +`zoning` is the state a `zone` has when it is configured. A `zone` doesn't have another state, all configured zones are `zoning` all the time. From 032a4fdc78370f82b3c254a4c94f72d33e1bc40f Mon Sep 17 00:00:00 2001 From: Hydreliox Date: Sun, 30 Oct 2016 12:37:49 +0100 Subject: [PATCH 31/60] Add Documentation for Yeelight platform (#1359) --- source/_components/light.yeelight.markdown | 42 ++++++++++++++++++++ source/images/supported_brands/yeelight.png | Bin 0 -> 80267 bytes 2 files changed, 42 insertions(+) create mode 100644 source/_components/light.yeelight.markdown create mode 100644 source/images/supported_brands/yeelight.png diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown new file mode 100644 index 00000000000..5a1d061be4d --- /dev/null +++ b/source/_components/light.yeelight.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "Yeelight Wifi Bulb" +description: "Instructions how to setup Yeelight Wifi devices within Home Assistant." +date: 2016-10-29 +sidebar: true +comments: false +sharing: true +footer: true +logo: yeelight.png +ha_category: Light +ha_release: 0.32 +--- + +The `yeelight` light platform allows you to control your Yeelight Wifi bulbs with Home Assistant. + +To enable those lights, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry + - platform: yeelight + devices: + 192.168.1.25: + name: palier +``` + +Configuration variables: + +- **ip** (*Required*): IP(s) of your wifi bulbs +- **name** (*Optional*): A friendly name for the device. + +

+Before trying to control your light through Home Assistant, you have to setup your bulb using Yeelight app. ( [Android](https://play.google.com/store/apps/details?id=com.yeelight.cherry&hl=fr), [IOS](https://itunes.apple.com/us/app/yeelight/id977125608?mt=8) ). +In the bulb property, you have to enable "Developer Mode" +Determine your bulb ip (using router, software, ping ...) +

+ +

+Tests are only made with a YLDP03YL model. Because it's the only hardware developer owns. If you have bugs with another kind of model, you could open an issue on [Home Assitant Github](https://github.com/home-assistant/home-assistant) +

+ + diff --git a/source/images/supported_brands/yeelight.png b/source/images/supported_brands/yeelight.png new file mode 100644 index 0000000000000000000000000000000000000000..27c7c9a86a5673ddc3e1ac864d5dcaa62641b22d GIT binary patch literal 80267 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

uug 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 Date: Mon, 31 Oct 2016 05:53:09 +0100 Subject: [PATCH 32/60] Add documentation about group.set_visibility --- source/_topics/group_visibility.markdown | 179 +++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 source/_topics/group_visibility.markdown diff --git a/source/_topics/group_visibility.markdown b/source/_topics/group_visibility.markdown new file mode 100644 index 00000000000..64b01be9e78 --- /dev/null +++ b/source/_topics/group_visibility.markdown @@ -0,0 +1,179 @@ +--- +layout: page +title: "Group Visibility" +description: "Instructions how to change group visibility using automations." +date: 2016-10-29 13:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +After filling Home Assistant with all your precious home automation devices, you usually end up with a cluttered interface and lots of groups that are not interesting in your current context. What if you just want to show groups that are interesting _now_ and hide the rest? That's when group visibility comes to play. + +## {% linkable_title Changing visibility of a group %} + +To change visibility of a group, use the service `group.set_visibility`, pass the group name as `entity_id` and use `visible` to decide wheter the group should be shown or hidden. + +```yaml +service: group.set_visibility +entity_id: group.basement +data: + visible: False +``` + +

+If a sensor belongs to only one group and that group is hidden, the sensor will "jump" to the top of the web interface. Add the sensor to an additional (visible) group if you do not want this to happen. +

+ +## {% linkable_title Automations %} + +First you should decide under which circumstances a group should be visible or not. Depending on the complexity, you might have to write two automations: one that hides the group and another that shows it. + +In this example, the group `group.basement` is hidden when the sun sets and shown again when it rises: + +```yaml +automation: + trigger: + platform: sun + event: sunset + action: + service: group.set_visibility + entity_id: group.basement + data: + visible: False + +automation 2: + trigger: + platform: sun + event: sunrise + action: + service: group.set_visibility + entity_id: group.basement + data: + visible: True +``` + +## {% linkable_title Easier automations %} + +One of the most common uses cases are to show groups during certain times of day, maybe commuting information durig a work day morning or light switches when it is getting dark. The complexity of automations needed to make this happen will quickly get out of hands. So, one way to make the automations easier is to create a sensor that alters its state depending on time of day. One way of doing that is using a `command_line` sensor and a script: + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from datetime import time, datetime + +def mk_occasion(name, start, end, days=None): + s = start.split(':') + e = end.split(':') + return {'name' : name, + 'start': time(int(s[0]), int(s[1]), int(s[2])), + 'end' : time(int(e[0]), int(e[1]), int(e[2])), + 'days' : days} + +# Matching is done from top to bottom +OCCASIONS = [ + # More specific occasions + mk_occasion('work_morning', '06:00:00', '07:10:00', range(5)), + + # General matching + mk_occasion('weekday', '00:00:00', '23:59:59', range(5)), + mk_occasion('weekend', '00:00:00', '23:59:59', [5, 6]) +] + +def get_current_occasion(occasion_list, default_occasion='normal'): + now = datetime.now() + for occasion in OCCASIONS: + if occasion['start'] <= now.time() <= occasion['end'] and \ + (occasion['days'] is None or now.weekday() in occasion['days']): + return occasion['name'] + return default_occasion + +if __name__ == '__main__': + print(get_current_occasion(OCCASIONS)) +``` + +This script will output "work_morning" from 06:00-07:10 during weekdays (monday-friday), "weekday" during all other time from monday-friday and "weekend" on saturdays and sundays. Adjust according to your needs. To create the sensor, just add it like this: + +```yaml +sensor: + - platform: command_line + name: Occasion + command: "python3 occasion.py" +``` + +To simplify things, we create a Home Assistant script that change visibility of a group but also verifies that an entity is in a specific state: + +```yaml +script: + group_visibility: + sequence: + - service: group.set_visibility + data_template: + entity_id: '{% raw %}{{ entity_id }}{% endraw %}' + visible: '{% raw %}{{ is_state(cond, visible_state) }}{% endraw %}' +``` + +The last part is writing an automation that hides or shows the group: + +```yaml +automation: + - alias: Work morning + trigger: + - platform: state + entity_id: sensor.occasion + - platform: event + event_type: homeassistant_start + action: + service: script.group_visibility + data: + entity_id: group.work_sensors + cond: sensor.occasion + visible_state: 'work_morning' +``` + +Our previously defined script will be called if `sensor.occasion` changes state OR when Home Assistant has started. The group `group.work_sensors` will be shown when `sensor.occasion` changes state to "work_morning" and hidden otherwise. + +### {% linkable_title The complete example %} + +```yaml +group: + default_view: + entities: + - group.work_sensors + + # Only visible when it's time to go to work + work_sensors: + name: Time to go to work + entities: + - sensor.something1 + - sensor.something2 + +sensor: + - platform: command_line + name: Occasion + command: "python3 occasion.py" + +script: + group_visibility: + sequence: + - service: group.set_visibility + data_template: + entity_id: '{% raw %}{{ entity_id }}{% endraw %}' + visible: '{% raw %}{{ is_state(cond, visible_state) }}{% endraw %}' + +automation: + - alias: Work morning + trigger: + - platform: state + entity_id: sensor.occasion + - platform: event + event_type: homeassistant_start + action: + service: script.group_visibility + data: + entity_id: group.work_sensors + cond: sensor.occasion + visible_state: 'work_morning' +``` \ No newline at end of file From d6ddc8f6fb0896e194fc9e086fdbb4cd7f3fe639 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 31 Oct 2016 08:29:55 -0400 Subject: [PATCH 33/60] Add docs for Emby media_player component. (#1237) * Add docs for Emby media_player component. * Update for http or https * Hope for release in 0,32 --- source/_components/media_player.emby.markdown | 33 ++++++++++++++++++ source/images/supported_brands/emby.png | Bin 0 -> 9967 bytes 2 files changed, 33 insertions(+) create mode 100644 source/_components/media_player.emby.markdown create mode 100644 source/images/supported_brands/emby.png diff --git a/source/_components/media_player.emby.markdown b/source/_components/media_player.emby.markdown new file mode 100644 index 00000000000..472a2b8f9a1 --- /dev/null +++ b/source/_components/media_player.emby.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Emby" +description: "Instructions how to integrate Emby into Home Assistant." +date: 2016-10-13 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: emby.png +ha_category: Media Player +ha_release: "0.32" +ha_iot_class: "Local Polling" +--- + + +The `emby` platform allows you to control a [Emby](http://emby.media/) multimedia system from Home Assistant. + +To add Emby to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: emby + host: http://192.168.11.5 + api_key: "emby_api_key" +``` + +Configuration variables: + +- **host** (*Required*): The host name or address of the device that is running Emby, either http or https. +- **api_key** (*Requred*): The api-key you would like home-assistant to use to authenticate. +- **port** (*Optional*): The port number. Defaults to 8096. diff --git a/source/images/supported_brands/emby.png b/source/images/supported_brands/emby.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c51ff23d3ec46000d649775db2ab13ac74cf94 GIT binary patch literal 9967 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 literal 0 HcmV?d00001 From ed1ccb938b52df6bbf676ac72706d56b790f8d10 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 31 Oct 2016 13:31:34 +0100 Subject: [PATCH 34/60] Update configuration sample (#1362) --- .../_components/sensor.yahoo_finance.markdown | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index 022be8804cd..f6f8fdb8568 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -27,27 +27,19 @@ sensor: Configuration variables: - **name** (*Optional*): The name of the sensor. If not specified, it defaults to *Yahoo Stock*. -- **symbol** (*Optional*): The stock market symbol for a given company. If not specified, it defaults to *Yahoo (YHOO)*. +- **symbols** array (*Optional*): List of stock market symbols for given companies. If not specified, it defaults to *Yahoo (YHOO)*. ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. -### {% linkable_title Red Hat %} +### {% linkable_title Red Hat and Google %} ```yaml sensor: - platform: yahoo_finance - name: Red Hat Inc. - symbol: RHT -``` - -### {% linkable_title Google %} - -```yaml -sensor: - - platform: yahoo_finance - name: Google - symbol: GOOGL + symbols: + - RHT + - GOOGL ``` From b3b33476ac760fa9a47626bffe1e3bdc14eedcd1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 31 Oct 2016 13:32:11 +0100 Subject: [PATCH 35/60] Add random sensor docs (#1376) --- source/_components/sensor.random.markdown | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 source/_components/sensor.random.markdown diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown new file mode 100644 index 00000000000..fe73e81f66d --- /dev/null +++ b/source/_components/sensor.random.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Random Sensor" +description: "Instructions how to integrate random number sensors into Home Assistant." +date: 2016-10-30 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.32 +--- + + +The `random` sensor platform is creating random sensor values (integers) out of a given range. This can be useful if you want to test automation rules. + +To enable the random sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: random +``` + +Configuration variables: + +- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Random Sensor`. +- **minimum** (*Optional*): Lower limit for the values. Defaults to `0`. +- **maximum** (*Optional*): Upper limit for the values. Defaults to `20`. + From 5627bb25d1b910ac46fa7396551233fcdd5cf805 Mon Sep 17 00:00:00 2001 From: Michael Liu Date: Mon, 31 Oct 2016 20:03:03 -0400 Subject: [PATCH 36/60] Update README.markdown --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 4fb2a2aa347..2f7a81af39c 100644 --- a/README.markdown +++ b/README.markdown @@ -27,7 +27,7 @@ $ rvm use ruby-2.2.3 --default $ ruby -v ``` -The last command will give you something like this `ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]`. Then install `bundler`. +The last command will give you something like this: `ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]`. Then install `bundler`. ```bash $ gem install bundler From 329207e90045786f7cf378aefc68ee3ed4609114 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 1 Nov 2016 11:41:38 +0100 Subject: [PATCH 37/60] Add new contributors --- source/developers/credits.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index ddc66778263..a54acd6948f 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -19,6 +19,7 @@ This page contains a list of people who have contributed in one way or another t (in alphabetical order) +- [Abhishek Anand](https://github.com/aa755) - [Adam Mills](https://github.com/armills) - [Adrien Brault](https://github.com/adrienbrault) - [Alexander Fortin](https://github.com/shaftoe) @@ -40,6 +41,8 @@ This page contains a list of people who have contributed in one way or another t - [Azelphur](https://github.com/Azelphur) - [Bart274](https://github.com/Bart274) - [Ben Bangert](https://github.com/bbangert) +- [bestlibre](https://github.com/bestlibre) +- [Bjarni Ivarsson](https://github.com/bjarniivarsson) - [blackdog70](https://github.com/blackdog70) - [Brad Buran](https://github.com/bburan) - [Brad Johnson](https://github.com/bradsk88) @@ -112,6 +115,7 @@ This page contains a list of people who have contributed in one way or another t - [James Cole](https://github.com/jamespcole) - [Jan Harkes](https://github.com/jaharkes) - [Jan-Preben Mossin](https://github.com/jpmossin) +- [Jared Beckham](https://github.com/tbeckha) - [Jaret Stezelberger](https://github.com/DesignFirst) - [Jason Carter](https://github.com/JasonCarter80) - [Jean-Philippe Bouillot](https://github.com/Jypy) @@ -124,6 +128,7 @@ This page contains a list of people who have contributed in one way or another t - [Joel Asher Friedman](https://github.com/joelash) - [Joe McMonagle](https://github.com/joemcmonagle) - [John Arild Berentsen](https://github.com/turbokongen) +- [John](https://github.com/mezz64) - [John Lindley](https://github.com/jwl17330536) - [John McLaughlin](https://github.com/loghound) - [John Williams](https://github.com/Jaidan) @@ -187,6 +192,7 @@ This page contains a list of people who have contributed in one way or another t - [Pascal Vizeli](https://github.com/pvizeli) - [Per Sandström](https://github.com/persandstrom) - [Philip Lundrigan](https://github.com/philipbl) +- [Pierre Ståhl](https://github.com/postlund) - [Piratonym](https://github.com/Piratonym) - [Rev Michael Greb](https://github.com/mikegrb) - [rhooper](https://github.com/rhooper) From 3e47ffb1e12a9a35d2ca8ca79a6e2cfa0abbf3f1 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 2 Nov 2016 03:00:41 -0400 Subject: [PATCH 38/60] Include Emby ssl parameter and fix host info. (#1386) --- source/_components/media_player.emby.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.emby.markdown b/source/_components/media_player.emby.markdown index 472a2b8f9a1..f4149dc4681 100644 --- a/source/_components/media_player.emby.markdown +++ b/source/_components/media_player.emby.markdown @@ -22,12 +22,13 @@ To add Emby to your installation, add the following to your `configuration.yaml` # Example configuration.yaml entry media_player: - platform: emby - host: http://192.168.11.5 + host: 192.168.11.5 api_key: "emby_api_key" ``` Configuration variables: -- **host** (*Required*): The host name or address of the device that is running Emby, either http or https. +- **host** (*Required*): The host name or address of the device that is running Emby. - **api_key** (*Requred*): The api-key you would like home-assistant to use to authenticate. +- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **port** (*Optional*): The port number. Defaults to 8096. From 0cdf2c3c8c6c66fea0a4970dd4f9454160086fc8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 3 Nov 2016 09:33:02 +0100 Subject: [PATCH 39/60] Add CUPS sensor docs (#1377) * Add CUPS sensor docs * Add note --- source/_components/sensor.cups.markdown | 43 ++++++++++++++++++++++ source/images/screenshots/cups-sensor.png | Bin 0 -> 148190 bytes source/images/supported_brands/cups.png | Bin 0 -> 9722 bytes 3 files changed, 43 insertions(+) create mode 100644 source/_components/sensor.cups.markdown create mode 100644 source/images/screenshots/cups-sensor.png create mode 100644 source/images/supported_brands/cups.png diff --git a/source/_components/sensor.cups.markdown b/source/_components/sensor.cups.markdown new file mode 100644 index 00000000000..e8ac8b03913 --- /dev/null +++ b/source/_components/sensor.cups.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "CUPS Sensor" +description: "Instructions how to integrate CUPS sensors into Home Assistant." +date: 2016-10-30 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: cups.png +ha_category: System Monitoring +ha_iot_class: "Local Polling" +ha_release: 0.32 +--- + + +The `cups` sensor platform is using the open source printing system [CUPS](https://www.cups.org/) to show details about your printers. + +To set up the sensor the "Queue Name" of the printer is needed. The fastest way to get it, is to visit the CUPS webinterface at "http://[IP ADDRESS PRINT SERVER]:631" and go to "Printers". + +

+ +

+ +To enable the CUPS sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: cups + printers: + - C410 + - C430 +``` + +Configuration variables: + +- **printers** array (*Required*): List of printers to add. + + +

+You will need to install the `python3-dev` or `python3-devel` and the development files for CUPS (`libcups2-dev` or`cups-devel`) package on your system manually (eg. `sudo apt-get install python3-dev libcups2-dev` or `sudo dnf -y install python3-devel cups-devel`) along with a compiler (`gcc`). +

diff --git a/source/images/screenshots/cups-sensor.png b/source/images/screenshots/cups-sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..b86af326c8ab0774d00736628b4abe7ef7ec9cc0 GIT binary patch literal 148190 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ℑJDSnVVTo6YQOv`T9f{v4<&?oz-QTN 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 z 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 EFUR%@O8@`> literal 0 HcmV?d00001 diff --git a/source/images/supported_brands/cups.png b/source/images/supported_brands/cups.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e37abc6aec46964b82c1e0a691623650d5856f GIT binary patch literal 9722 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 literal 0 HcmV?d00001 From 70ef7d86a4348028c31b73b58efae084d0e572da Mon Sep 17 00:00:00 2001 From: Jon Caruana Date: Thu, 3 Nov 2016 01:37:17 -0700 Subject: [PATCH 40/60] Add documentation for LiteJet. (#1361) --- source/_components/light.litejet.markdown | 14 +++++++ source/_components/litejet.markdown | 44 ++++++++++++++++++++++ source/_components/scene.litejet.markdown | 14 +++++++ source/_components/switch.litejet.markdown | 14 +++++++ 4 files changed, 86 insertions(+) create mode 100644 source/_components/light.litejet.markdown create mode 100644 source/_components/litejet.markdown create mode 100644 source/_components/scene.litejet.markdown create mode 100644 source/_components/switch.litejet.markdown diff --git a/source/_components/light.litejet.markdown b/source/_components/light.litejet.markdown new file mode 100644 index 00000000000..422fe77f0cc --- /dev/null +++ b/source/_components/light.litejet.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "LiteJet Light" +description: "Instructions how to setup the LiteJet lights within Home Assistant." +date: 2016-10-26 13:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Light +ha_release: 0.32 +--- + +To get your LiteJet lights working with Home Assistant, follow the instructions for the general [LiteJet component](/components/litejet/). diff --git a/source/_components/litejet.markdown b/source/_components/litejet.markdown new file mode 100644 index 00000000000..bfd94902d09 --- /dev/null +++ b/source/_components/litejet.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "LiteJet" +description: "Instructions how to setup the LiteJet hub within Home Assistant." +date: 2015-10-26 09:37 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +featured: true +--- + +LiteJet is a centralized lighting system that predates most home automation technology. All lights and wall switches are wired to a central panel. This central panel has a sierial port interface that allows a computer to control the system via LiteJet's third party protocol. + +Home Assistant integrates the LiteJet 3rd party protocol and allows you to get the status and control the connected lights. + +After connecting the LiteJet's RS232-2 port to your computer, add the following to your `configuration.yaml`: + +```yaml +litejet: + url: /dev/serial/by-id/THE-PATH-OF-YOUR-SERIAL-PORT +``` + +Your LiteJet MCP should be configured for 19.2 K baud, 8 data bits, 1 stop bit, no parity, and to transmit a 'CR' after each response. These settings can be configured using the [LiteJet programming software](https://www.centralite.com/helpdesk/knowledgebase.php?article=735). + +You can also configure the Home Assistant to ignore lights, scenes, and switches via their name. This is highly recommended since LiteJet has a fixed number of each of these and with most systems many will be unused. + +```yaml +litejet: + exclude_names: + - 'Button #' + - 'Scene #' + - 'Timed Scene #' + - 'Timed Scene#' + - 'LV Rel #' + - 'Fan #' +``` + +Configuration variables: + +- **url** (*Required*): The path to the serial port connected to the LiteJet. +- **exclude_names** (*Optional*): A list of light or switch names that should be ignored. +- **include_switches** (*Optional*): Cause entities to be created for all the LiteJet switches. Default is false. This can be useful when debugging your lighting as you can press/release switches remotely. diff --git a/source/_components/scene.litejet.markdown b/source/_components/scene.litejet.markdown new file mode 100644 index 00000000000..fca7954e1b8 --- /dev/null +++ b/source/_components/scene.litejet.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "LiteJet Scenes" +description: "Instructions how to setup LiteJet scenes within Home Assistant." +date: 2016-10-26 16:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Scene +ha_release: 0.32 +--- + +To get your LiteJet scenes working with Home Assistant, follow the instructions for the general [LiteJet component](/components/litejet/). diff --git a/source/_components/switch.litejet.markdown b/source/_components/switch.litejet.markdown new file mode 100644 index 00000000000..90bd86542dc --- /dev/null +++ b/source/_components/switch.litejet.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "LiteJet Switch" +description: "Instructions how to setup the LiteJet switches within Home Assistant." +date: 2016-10-26 13:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Switch +ha_release: 0.32 +--- + +To get your LiteJet switches working with Home Assistant, follow the instructions for the general [LiteJet component](/components/litejet/). From d1f528cc0acdef7d5e5997fbb9bf55318c2239b8 Mon Sep 17 00:00:00 2001 From: Jason Carter Date: Thu, 3 Nov 2016 05:01:46 -0400 Subject: [PATCH 41/60] Adding Garadget Cover documentation (#1311) * Adding Garadget Cover documentation * Updating formating to follow command-line style --- source/_components/cover.garadget.markdown | 45 ++++++++++++++++++ .../images/supported_brands/garadget_logo.jpg | Bin 0 -> 19563 bytes 2 files changed, 45 insertions(+) create mode 100644 source/_components/cover.garadget.markdown create mode 100644 source/images/supported_brands/garadget_logo.jpg diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown new file mode 100644 index 00000000000..9f73d313281 --- /dev/null +++ b/source/_components/cover.garadget.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "Garadget Cover" +description: "Instructions how to integrate Garadget covers within Home Assistant." +date: 2016-10-24 14:25 +sidebar: true +comments: false +sharing: true +footer: true +logo: garadget_logo.jpg +ha_category: Cover +ha_release: 0.32 +--- + + +The `garadget` cover platform lets you control [Garadget](http://www.garadget.com/) garage door futurizers through Home Assistant. + +To enable Garadget Covers in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + platform: garadget + covers: + 190028001947343412342341: + username: UseYourLogin@garadget.com + password: abc123 + name: Left Garage Door + 4c003f001151353432134214: + access_token: df4cc785ff818f2b01396c44142342fccdef +``` + +Configuration variables: + +- **covers** array (*Required*): List of your doors. + - **device** (*Required*): This is the device id from your Garadget portal. + - Either: + - **username** (*Required*): Your Garadget account username. + - **device** (*Required*): Your Garadget account password. + - Or: + - **access_token** (*Required*): A generated access_token from your garadget account + - **name** (*Optional*): Name to use in the Frontend, will use name configured in Garadget otherwise. + + +If provided, the **access_token** will be used, otherwise the **username** and **password** will be used to automatically generate an access token at start time. diff --git a/source/images/supported_brands/garadget_logo.jpg b/source/images/supported_brands/garadget_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6465496d031da46c035e0cbbe3737cdd3bf282b4 GIT binary patch literal 19563 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%0AA^$r(J=k&gQM=hI&U-r_25?QQHGyu$KUP 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 literal 0 HcmV?d00001 From ae6d7ca502da65c4820918f4a0759ece4f39d87c Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Thu, 3 Nov 2016 10:21:05 +0100 Subject: [PATCH 42/60] Added documentation for Philips TV media_player platform (#1384) --- .../media_player.philips_js.markdown | 32 ++++++++++++++++++ source/images/supported_brands/philips.png | Bin 0 -> 4993 bytes 2 files changed, 32 insertions(+) create mode 100644 source/_components/media_player.philips_js.markdown create mode 100644 source/images/supported_brands/philips.png diff --git a/source/_components/media_player.philips_js.markdown b/source/_components/media_player.philips_js.markdown new file mode 100644 index 00000000000..5c952bc0ea6 --- /dev/null +++ b/source/_components/media_player.philips_js.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Philips TV" +description: "Instructions on how to add Philips TVs to Home Assistant." +date: 2016-11-01 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: philips.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.32 +--- + + +The `philips_js` platform allows you to control Philips TVs which expose the [jointSPACE](http://jointspace.sourceforge.net/) API. Instructions on how to activate the API and if your model is supported can be found [here](http://jointspace.sourceforge.net/download.html). + +To add your TV to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: +- name: NAME + platform: philips_js + host: 192.168.1.99 +``` + +Configuration variables: + +- **name** (*Optional*): The name you would like to give to the Philips TV. +- **host** (*Required*): IP address of TV. \ No newline at end of file diff --git a/source/images/supported_brands/philips.png b/source/images/supported_brands/philips.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb29fee30cef0a830350cd33d7d0541dab25259 GIT binary patch literal 4993 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 JCE)vE{{_CV8^! Date: Thu, 3 Nov 2016 10:26:14 +0100 Subject: [PATCH 43/60] Synology DSM Sensor Documentation (#1378) * Add files via upload * Add files via upload * Updated Reference to Creator Image --- .../_components/sensor.synologydsm.markdown | 78 ++++++++++++++++++ .../images/supported_brands/synologydsm.png | Bin 0 -> 11300 bytes 2 files changed, 78 insertions(+) create mode 100644 source/_components/sensor.synologydsm.markdown create mode 100644 source/images/supported_brands/synologydsm.png diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown new file mode 100644 index 00000000000..c7e9a753f75 --- /dev/null +++ b/source/_components/sensor.synologydsm.markdown @@ -0,0 +1,78 @@ +--- +layout: page +title: "SynologyDSM Sensor" +description: "Instructions how to integrate the SynologyDSM sensor within Home Assistant." +date: 2016-10-30 23:21 +sidebar: true +comments: false +sharing: true +footer: true +logo: synologydsm.png +ha_category: Sensor +ha_release: 0.31.1 +ha_iot_class: depends +--- + + +This `SynologyDSM` sensor allows getting various statistics from your Synology NAS. Please note that using this sensor wakes up your synology if in hibernation mode. + +To use the SynologyDSM sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +sensor: + - platform: synologydsm + host: + port: + username: + password: + monitored_conditions: + - cpu_total_load + - memory_real_usage + - network_up + - network_down + - disk_smart_status + - disk_temp + - volume_status + - volume_size_used +``` + +Configuration variables: + +- **host** (*Required*): The IP address of the Synology NAS to monitor +- **port** (*Optional*): The port number on which the NAS is reachable (defaults to 5000). +- **username** (*Required*): An user to connect to the Synology NAS (a seperate account is adviced). +- **password** (*Required*): The password of the user to connect to the Synology NAS. +- **volumes** (*Optional*): Array of volumes to monitor (defaults to all volumes). +- **disks** (*Optional*): Array of disks to monitor (defaults to all disks). +- **monitored_conditions** (*Required*): Defines a [template](/topics/templating/) to extract a value from the payload. + - **cpu_other_load**: Displays unspecified load in percentage + - **cpu_user_load**: Displays user load in percentage + - **cpu_system_load**: Displays system load in percentage + - **cpu_total_load**: Displays combined load in percentage + - **cpu_1min_load**: Displays maximum load in past minute + - **cpu_5min_load**: Displays maximum load in past 5 minutes + - **cpu_15min_load**: Displays maximum load in past 15 minutes + - **memory_real_usage**: Displays percentage of memory used + - **memory_size**: Displays total size of memory in MB's + - **memory_cached**: Displays total size of cache in MB's + - **memory_available_swap**: Displays total size of available swap in MB's + - **memory_available_real**: Displays total size of memory used (based on real memory) in MB's + - **memory_total_swap**: Displays total size of actual memory in MB's + - **memory_total_real**: Displays total size of real memory in MB's + - **network_up**: Displays total up speed of network interfaces (combines all interfaces) + - **network_down**: Displays total down speed of network interfaces (combines all interfaces) + - **disk_name**: Displays the name of the harddisk (creates a new entry for each disk) + - **disk_device**: Displays the path of the harddisk (creates a new entry for each disk) + - **disk_smart_status**: Displays the S.M.A.R.T status of the harddisk (creates a new entry for each disk) + - **disk_status**: Displays the status of the harddisk (creates a new entry for each disk) + - **disk_exceed_bad_sector_thr**: Displays true / false to indicate if the harddisk exceeded the maximum bad sector threshold (creates a new entry for each disk) + - **disk_below_remain_life_thr**: Displays true / false to indicate if the harddisk dropped below the remain life threshold (creates a new entry for each disk) + - **disk_temp**: Displays the temperature of the harddisk (creates a new entry for each disk, uses the unit_system to display in C or F) + - **volume_status**: Displays the status of the volume (creates a new entry for each volume) + - **volume_device_type**: Displays the volume type (RAID, etc) (creates a new entry for each volume) + - **volume_size_total**: Displays the total size of the volume in GB's (creates a new entry for each volume) + - **volume_size_used**: Displays the used space on this volume in GB's (creates a new entry for each volume) + - **volume_percentage_used**: Displays the percentage used for this volume in GB's (creates a new entry for each volume) + - **volume_disk_temp_avg**: Displays the average temperature of all disks in the volume (creates a new entry for each volume) + - **volume_disk_temp_max**: Displays the maximum temperature of all disks in the volume (creates a new entry for each volume) diff --git a/source/images/supported_brands/synologydsm.png b/source/images/supported_brands/synologydsm.png new file mode 100644 index 0000000000000000000000000000000000000000..9c007a087668a9c64a1faa5cb2d54d7ddc20d432 GIT binary patch literal 11300 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 DCK}+K literal 0 HcmV?d00001 From 7cd8c19ee83c80913c6c07c3c5300531aa8b50a1 Mon Sep 17 00:00:00 2001 From: Lewis Juggins Date: Thu, 3 Nov 2016 09:32:34 +0000 Subject: [PATCH 44/60] Device tracker event documentation (#1389) --- source/_components/device_tracker.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index c15a174ea52..ce3f13b4eaa 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -13,6 +13,8 @@ Home Assistant can get information from your wireless router or third party serv There are also trackers available which use different technologies like [MQTT](/components/mqtt/) or [Nmap](/components/device_tracker.nmap_tracker/) to scan the network for devices. +An [event](/getting-started/automation-trigger/#event-trigger) (`device_tracker_new_device`) will be fired when a device is discovered for the first time. + # {% linkable_title Configuring a `device_tracker` platform %} To get started add the following lines to your `configuration.yaml` (example for Netgear): From ef88d64c6883a54e90a1d59c966ae7e31016fac8 Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Thu, 3 Nov 2016 05:40:54 -0400 Subject: [PATCH 45/60] Added thermostat doc (#1390) --- source/_components/climate.wink.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 source/_components/climate.wink.markdown diff --git a/source/_components/climate.wink.markdown b/source/_components/climate.wink.markdown new file mode 100644 index 00000000000..6b6a22c3b90 --- /dev/null +++ b/source/_components/climate.wink.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Wink Thermostat" +description: "Instructions how to setup the Wink binary sensors within Home Assistant." +date: 2016-11-01 22:36 +sidebar: true +comments: false +sharing: true +footer: true +logo: wink.png +ha_category: Climate +ha_release: 0.32 +ha_iot_class: "Cloud Polling" +--- + + +The Wink climate platform allows you to get data from your [Wink](http://www.wink.com/) thermostats. + +The requirement is that you have setup your [Wink hub](/components/wink/). + From bf8893e0b624774dbbe9b2e733efd5cac1715a08 Mon Sep 17 00:00:00 2001 From: amahlaka Date: Thu, 3 Nov 2016 11:42:58 +0200 Subject: [PATCH 46/60] simplified instructions (#1393) --- source/_components/notify.html5.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 6fa51e4417d..1688b580a08 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -33,8 +33,13 @@ Configuration variables: - **gcm_sender_id** (*Required if pushing to Chrome*): The sender ID provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. ### {% linkable_title Getting ready for Chrome %} +Create new project at https://console.cloud.google.com/home/dashboard +Go to https://console.cloud.google.com/apis/credentials/domainverification and verify your domain +After that, go to https://console.firebase.google.com and select import Google project, select the project you created +Then, click the clogwheel on top left and select Project settings +Select Cloud messaging tab +if under server key is button Regenerate key, click that -Google has [a handy guide](https://developers.google.com/web/fundamentals/getting-started/codelabs/push-notifications/#make_a_project_on_the_google_developer_console) that goes into great detail about how to set up for pushing to Chrome. Once you have your GCM API Key and Sender ID in hand, plug them into your configuration as described above. ### {% linkable_title Requirements %} From e9cc677be0bb15c38f8c678dca37551d1f2bfe6b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 3 Nov 2016 09:50:34 +0100 Subject: [PATCH 47/60] Minor updates --- source/_components/alarm_control_panel.nx584.markdown | 6 +++--- source/_components/binary_sensor.concord232.markdown | 2 +- source/_components/switch.acer_projector.markdown | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/alarm_control_panel.nx584.markdown b/source/_components/alarm_control_panel.nx584.markdown index 88b808dee95..23912d79a68 100644 --- a/source/_components/alarm_control_panel.nx584.markdown +++ b/source/_components/alarm_control_panel.nx584.markdown @@ -19,11 +19,11 @@ To enable this, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry alarm_control_panel: - platform: nx584 + - platform: nx584 ``` Configuration variables: -- **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. +- **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`. diff --git a/source/_components/binary_sensor.concord232.markdown b/source/_components/binary_sensor.concord232.markdown index 31ce3b004ba..b373909ee98 100644 --- a/source/_components/binary_sensor.concord232.markdown +++ b/source/_components/binary_sensor.concord232.markdown @@ -24,6 +24,6 @@ binary_sensor: Configuration variables: -- **host** (*Optional*): The host where the concord232 server process is running. Defaults to localhost. +- **host** (*Optional*): The host where the concord232 server process is running. Defaults to `localhost`. - **port** (*Optional*): The port where the Alarm panel ist listening. Defaults to 5007. diff --git a/source/_components/switch.acer_projector.markdown b/source/_components/switch.acer_projector.markdown index a918b6d9a69..d9158b31528 100644 --- a/source/_components/switch.acer_projector.markdown +++ b/source/_components/switch.acer_projector.markdown @@ -27,7 +27,7 @@ switch: Configuration variables: -- **filename** (*Required*): The pipe where the projector is connected to +- **filename** (*Required*): The pipe where the projector is connected to. - **name** (*Optional*): The name to use when displaying this switch. - **timeout** (*Optional*): Timeout for the connection in seconds. - **write_timeout** (*Optional*): Write timeout in seconds. From 8e422704410f94d4d07de49814790c4f11f3f02b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 3 Nov 2016 09:57:05 +0100 Subject: [PATCH 48/60] Update --- source/_components/litejet.markdown | 25 ++++++++++++++-------- source/_components/switch.litejet.markdown | 1 + 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/source/_components/litejet.markdown b/source/_components/litejet.markdown index bfd94902d09..f2c4db330e8 100644 --- a/source/_components/litejet.markdown +++ b/source/_components/litejet.markdown @@ -8,10 +8,11 @@ comments: false sharing: true footer: true ha_category: Hub -featured: true +ha_iot_class: "Local Polling" +ha_release: 0.32 --- -LiteJet is a centralized lighting system that predates most home automation technology. All lights and wall switches are wired to a central panel. This central panel has a sierial port interface that allows a computer to control the system via LiteJet's third party protocol. +LiteJet is a centralized lighting system that predates most home automation technology. All lights and wall switches are wired to a central panel. This central panel has a serial port interface that allows a computer to control the system via LiteJet's third party protocol. Home Assistant integrates the LiteJet 3rd party protocol and allows you to get the status and control the connected lights. @@ -19,13 +20,25 @@ After connecting the LiteJet's RS232-2 port to your computer, add the following ```yaml litejet: - url: /dev/serial/by-id/THE-PATH-OF-YOUR-SERIAL-PORT + port: /dev/serial/by-id/THE-PATH-OF-YOUR-SERIAL-PORT ``` Your LiteJet MCP should be configured for 19.2 K baud, 8 data bits, 1 stop bit, no parity, and to transmit a 'CR' after each response. These settings can be configured using the [LiteJet programming software](https://www.centralite.com/helpdesk/knowledgebase.php?article=735). You can also configure the Home Assistant to ignore lights, scenes, and switches via their name. This is highly recommended since LiteJet has a fixed number of each of these and with most systems many will be unused. +```yaml +litejet: +``` + +Configuration variables: + +- **port** (*Required*): The path to the serial port connected to the LiteJet. +- **exclude_names** (*Optional*): A list of light or switch names that should be ignored. +- **include_switches** (*Optional*): Cause entities to be created for all the LiteJet switches. Default is `false`. This can be useful when debugging your lighting as you can press/release switches remotely. + + + ```yaml litejet: exclude_names: @@ -36,9 +49,3 @@ litejet: - 'LV Rel #' - 'Fan #' ``` - -Configuration variables: - -- **url** (*Required*): The path to the serial port connected to the LiteJet. -- **exclude_names** (*Optional*): A list of light or switch names that should be ignored. -- **include_switches** (*Optional*): Cause entities to be created for all the LiteJet switches. Default is false. This can be useful when debugging your lighting as you can press/release switches remotely. diff --git a/source/_components/switch.litejet.markdown b/source/_components/switch.litejet.markdown index 90bd86542dc..22c4d9d65f5 100644 --- a/source/_components/switch.litejet.markdown +++ b/source/_components/switch.litejet.markdown @@ -9,6 +9,7 @@ sharing: true footer: true ha_category: Switch ha_release: 0.32 +ha_iot_class: "Local Polling" --- To get your LiteJet switches working with Home Assistant, follow the instructions for the general [LiteJet component](/components/litejet/). From 52ff254734bd9c220a1d33751dfc5eb2baf2e363 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 3 Nov 2016 11:03:35 +0100 Subject: [PATCH 49/60] Add new contributors --- source/developers/credits.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index a54acd6948f..7623fd22fa5 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -19,6 +19,16 @@ This page contains a list of people who have contributed in one way or another t (in alphabetical order) +- [Jon Caruana](https://github.com/joncar) +- [Jan Losinski](https://github.com/janLo) +- [Ferry van Zeelst](https://github.com/StaticCube) +- []() +- []() +- []() +- []() +- []() +- []() +- []() - [Abhishek Anand](https://github.com/aa755) - [Adam Mills](https://github.com/armills) - [Adrien Brault](https://github.com/adrienbrault) From 2ad0aa0c628dd4ede87d00d6dd5080da00f92e61 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 3 Nov 2016 11:09:13 +0100 Subject: [PATCH 50/60] Minior changes --- .../_components/sensor.synologydsm.markdown | 151 +++++++++--------- 1 file changed, 73 insertions(+), 78 deletions(-) diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index c7e9a753f75..81c41ec40e8 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -1,78 +1,73 @@ ---- -layout: page -title: "SynologyDSM Sensor" -description: "Instructions how to integrate the SynologyDSM sensor within Home Assistant." -date: 2016-10-30 23:21 -sidebar: true -comments: false -sharing: true -footer: true -logo: synologydsm.png -ha_category: Sensor -ha_release: 0.31.1 -ha_iot_class: depends ---- - - -This `SynologyDSM` sensor allows getting various statistics from your Synology NAS. Please note that using this sensor wakes up your synology if in hibernation mode. - -To use the SynologyDSM sensor in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yml entry -sensor: - - platform: synologydsm - host: - port: - username: - password: - monitored_conditions: - - cpu_total_load - - memory_real_usage - - network_up - - network_down - - disk_smart_status - - disk_temp - - volume_status - - volume_size_used -``` - -Configuration variables: - -- **host** (*Required*): The IP address of the Synology NAS to monitor -- **port** (*Optional*): The port number on which the NAS is reachable (defaults to 5000). -- **username** (*Required*): An user to connect to the Synology NAS (a seperate account is adviced). -- **password** (*Required*): The password of the user to connect to the Synology NAS. -- **volumes** (*Optional*): Array of volumes to monitor (defaults to all volumes). -- **disks** (*Optional*): Array of disks to monitor (defaults to all disks). -- **monitored_conditions** (*Required*): Defines a [template](/topics/templating/) to extract a value from the payload. - - **cpu_other_load**: Displays unspecified load in percentage - - **cpu_user_load**: Displays user load in percentage - - **cpu_system_load**: Displays system load in percentage - - **cpu_total_load**: Displays combined load in percentage - - **cpu_1min_load**: Displays maximum load in past minute - - **cpu_5min_load**: Displays maximum load in past 5 minutes - - **cpu_15min_load**: Displays maximum load in past 15 minutes - - **memory_real_usage**: Displays percentage of memory used - - **memory_size**: Displays total size of memory in MB's - - **memory_cached**: Displays total size of cache in MB's - - **memory_available_swap**: Displays total size of available swap in MB's - - **memory_available_real**: Displays total size of memory used (based on real memory) in MB's - - **memory_total_swap**: Displays total size of actual memory in MB's - - **memory_total_real**: Displays total size of real memory in MB's - - **network_up**: Displays total up speed of network interfaces (combines all interfaces) - - **network_down**: Displays total down speed of network interfaces (combines all interfaces) - - **disk_name**: Displays the name of the harddisk (creates a new entry for each disk) - - **disk_device**: Displays the path of the harddisk (creates a new entry for each disk) - - **disk_smart_status**: Displays the S.M.A.R.T status of the harddisk (creates a new entry for each disk) - - **disk_status**: Displays the status of the harddisk (creates a new entry for each disk) - - **disk_exceed_bad_sector_thr**: Displays true / false to indicate if the harddisk exceeded the maximum bad sector threshold (creates a new entry for each disk) - - **disk_below_remain_life_thr**: Displays true / false to indicate if the harddisk dropped below the remain life threshold (creates a new entry for each disk) - - **disk_temp**: Displays the temperature of the harddisk (creates a new entry for each disk, uses the unit_system to display in C or F) - - **volume_status**: Displays the status of the volume (creates a new entry for each volume) - - **volume_device_type**: Displays the volume type (RAID, etc) (creates a new entry for each volume) - - **volume_size_total**: Displays the total size of the volume in GB's (creates a new entry for each volume) - - **volume_size_used**: Displays the used space on this volume in GB's (creates a new entry for each volume) - - **volume_percentage_used**: Displays the percentage used for this volume in GB's (creates a new entry for each volume) - - **volume_disk_temp_avg**: Displays the average temperature of all disks in the volume (creates a new entry for each volume) - - **volume_disk_temp_max**: Displays the maximum temperature of all disks in the volume (creates a new entry for each volume) +--- +layout: page +title: "SynologyDSM Sensor" +description: "Instructions how to integrate the SynologyDSM sensor within Home Assistant." +date: 2016-10-30 23:21 +sidebar: true +comments: false +sharing: true +footer: true +logo: synologydsm.png +ha_category: Sensor +ha_release: 0.32 +ha_iot_class: depends +--- + + +This `synologydms` sensor allows getting various statistics from your [Synology NAS](https://www.synology.com). Please note that using this sensor wakes up your synology if in hibernation mode. + +To use the SynologyDSM sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +sensor: + - platform: synologydsm + host: IP_ADDRESS_OF_SYNOLOGY_NAS + username: USERNAME + password: PASSWORD + monitored_conditions: + - cpu_total_load + - memory_real_usage + - network_up +``` + +Configuration variables: + +- **host** (*Required*): The IP address of the Synology NAS to monitor +- **port** (*Optional*): The port number on which the NAS is reachable. Defaults to `5000`. +- **username** (*Required*): An user to connect to the Synology NAS (a seperate account is adviced). +- **password** (*Required*): The password of the user to connect to the Synology NAS. +- **volumes** (*Optional*): Array of volumes to monitor. Defaults to all volumes. +- **disks** (*Optional*): Array of disks to monitor. Defaults to all disks. +- **monitored_conditions** (*Required*): Defines a [template](/topics/templating/) to extract a value from the payload. + - **cpu_other_load**: Displays unspecified load in percentage. + - **cpu_user_load**: Displays user load in percentage. + - **cpu_system_load**: Displays system load in percentage. + - **cpu_total_load**: Displays combined load in percentage. + - **cpu_1min_load**: Displays maximum load in past minute. + - **cpu_5min_load**: Displays maximum load in past 5 minutes. + - **cpu_15min_load**: Displays maximum load in past 15 minutes. + - **memory_real_usage**: Displays percentage of memory used. + - **memory_size**: Displays total size of memory in MB. + - **memory_cached**: Displays total size of cache in MB. + - **memory_available_swap**: Displays total size of available swap in MB. + - **memory_available_real**: Displays total size of memory used (based on real memory) in MB. + - **memory_total_swap**: Displays total size of actual memory in MB. + - **memory_total_real**: Displays total size of real memory in MB. + - **network_up**: Displays total up speed of network interfaces (combines all interfaces). + - **network_down**: Displays total down speed of network interfaces (combines all interfaces). + - **disk_name**: Displays the name of the harddisk (creates a new entry for each disk). + - **disk_device**: Displays the path of the harddisk (creates a new entry for each disk). + - **disk_smart_status**: Displays the S.M.A.R.T status of the harddisk (creates a new entry for each disk). + - **disk_status**: Displays the status of the harddisk (creates a new entry for each disk). + - **disk_exceed_bad_sector_thr**: Displays true / false to indicate if the harddisk exceeded the maximum bad sector threshold (creates a new entry for each disk). + - **disk_below_remain_life_thr**: Displays true / false to indicate if the harddisk dropped below the remain life threshold (creates a new entry for each disk). + - **disk_temp**: Displays the temperature of the harddisk (creates a new entry for each disk, uses the unit_system to display in C or F). + - **volume_status**: Displays the status of the volume (creates a new entry for each volume). + - **volume_device_type**: Displays the volume type (RAID, etc) (creates a new entry for each volume). + - **volume_size_total**: Displays the total size of the volume in GB's (creates a new entry for each volume). + - **volume_size_used**: Displays the used space on this volume in GB's (creates a new entry for each volume). + - **volume_percentage_used**: Displays the percentage used for this volume in GB's (creates a new entry for each volume). + - **volume_disk_temp_avg**: Displays the average temperature of all disks in the volume (creates a new entry for each volume). + - **volume_disk_temp_max**: Displays the maximum temperature of all disks in the volume (creates a new entry for each volume). + From 66f54d2d2e2f67c53240c4804fbb2f1e403883a3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 4 Nov 2016 23:44:47 -0700 Subject: [PATCH 51/60] Bump min version for windows --- source/getting-started/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index feee3871cee..3665b8b1224 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -13,7 +13,7 @@ Below you can find the standard instructions. See the sidebar for installation i [Virtualenv Linux instructions]: /getting-started/installation-virtualenv/ -Installing and running Home Assistant on your local machine is easy. Make sure you have [Python 3.4 or higher](https://www.python.org/downloads/) installed and execute the following code in a console: +Installing and running Home Assistant on your local machine is easy. The only requirement is that you have [Python](https://www.python.org/downloads/) installed. For Windows we require at least Python 3.5 and for other operating systems at least Python 3.4.2. Once installed, execute the following code in a console: ```bash $ pip3 install homeassistant From 4dadf68aa348b3b4598dc2db0c4bc4d0c7bab8d1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 4 Nov 2016 23:44:59 -0700 Subject: [PATCH 52/60] Add insteon disabled message --- source/_components/insteon_hub.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/insteon_hub.markdown b/source/_components/insteon_hub.markdown index 9c620bf515f..7318b88ee15 100644 --- a/source/_components/insteon_hub.markdown +++ b/source/_components/insteon_hub.markdown @@ -12,6 +12,10 @@ ha_category: Hub ha_iot_class: "Cloud Polling" --- + + The `insteon` component lets you use your [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. You will need to obtain an Insteon REST API key from the [Insteon Developer program](http://www.insteon.com/become-an-insteon-developer) to use this component. From a3bda5dde17e5fde20f3694895212039d02acff6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 4 Nov 2016 23:45:19 -0700 Subject: [PATCH 53/60] Fix liquid warnings --- source/_components/sensor.influxdb.markdown | 4 ++-- source/_components/switch.rest.markdown | 2 +- source/_components/switch.rfxtrx.markdown | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.influxdb.markdown b/source/_components/sensor.influxdb.markdown index 43ed715a97c..c16839f1fa0 100644 --- a/source/_components/sensor.influxdb.markdown +++ b/source/_components/sensor.influxdb.markdown @@ -63,7 +63,7 @@ sensor: queries: - name: last value of foo unit_of_measurement: °C - value_template: '{{ value | round(1) }}' + value_template: '{% raw %}{{ value | round(1) }}{% endraw %}' group_function: last where: '"name" = ''foo''' measurement: '"°C"' @@ -71,7 +71,7 @@ sensor: database: db1 - name: Min for last hour unit_of_measurement: '%' - value_template: '{{ value | round(1) }}' + value_template: '{% raw %}{{ value | round(1) }}{% endraw %}' group_function: min where: '"entity_id" = ''salon'' and time > now() - 1h' measurement: '"%"' diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index 51c43af6497..d4f301149b2 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -30,7 +30,7 @@ Configuration variables: - **name** (*Optional*): Name of the REST switch. - **body_on** (*Optional*): The body of the POST request that commands the switch to become enabled. Default is "ON". This value can be a [template](/topics/templating/), which is useful if the POST request needs to depend on the state of the system. For example, to enable remote-temperature-sensor tracking on a radio thermostat, one has to send the current value of the remote temperature sensor. On can achieve this using the template `'{"rem_temp":{{states.sensor.bedroom_temp.state}}}'`. - **body_off** (*Optional*): The body of the POST request that commands the switch to become disabled. Default is "OFF". This value can also be a template. -- **is_on_template** (*Optional*): A [template](/topics/templating/) that determines the state of the switch from the value returned by the GET request on the resource url. This template should compute to a boolean (True or False). Default is equivalent to `'{{ value.json == body_on }}'`. This means that by default, the state of the switch is on if and only if the response to the GET request matches `body_on`. +- **is_on_template** (*Optional*): A [template](/topics/templating/) that determines the state of the switch from the value returned by the GET request on the resource url. This template should compute to a boolean (True or False). Default is equivalent to `'{% raw %}{{ value.json == body_on }}{% endraw %}'`. This means that by default, the state of the switch is on if and only if the response to the GET request matches `body_on`.

diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 7e31df8da39..07f99181e72 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -57,7 +57,7 @@ If you need to generate codes for switches you can use a template (usefull for e - Go to home-assistant-IP:8123/dev-template - Use this code to generate a code: ```yaml -0b11000{{ range(0,700) | random | int }}bc0cfe0{{ range(0,10) | random | int }}010f70 +{% raw %}0b11000{{ range(0,700) | random | int }}bc0cfe0{{ range(0,10) | random | int }}010f70{% endraw %} ``` - Use this code to add a new switch in your configuration.yaml - Launch your homeassistant and go the website. From 405e1507677349d812ce37259d2fc783feb96cb2 Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Sat, 5 Nov 2016 03:08:27 -0500 Subject: [PATCH 54/60] Add important template notes (#1397) --- .../getting-started/automation-templating.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/getting-started/automation-templating.markdown b/source/getting-started/automation-templating.markdown index b9b3ca2a627..b8dd9e8c195 100644 --- a/source/getting-started/automation-templating.markdown +++ b/source/getting-started/automation-templating.markdown @@ -37,6 +37,19 @@ automation 2: message: {% raw %}{{ trigger.payload }}{% endraw %} ``` +## {% linkable_title Important Template Rules %} + +There are a few very important rules to remember when writing automation templates: + +1. You ***must*** use `data_template` in place of `data` when using templates in the `data` section of a service call. +1. You ***must*** use `service_template` in place of `service` when using templates in the `service` section of a service call. +1. You ***must*** surround single-line templates with double quotes (`"`) or single quotes (`'`). +1. It is advised that you prepare for undefined variables by using `if ... is not none` or the [`default` filter](http://jinja.pocoo.org/docs/dev/templates/#default), or both. +1. It is advised that when comparing numbers, you convert the number(s) to a [`float`](http://jinja.pocoo.org/docs/dev/templates/#float) or an [`int`](http://jinja.pocoo.org/docs/dev/templates/#int) by using the respective [filter](http://jinja.pocoo.org/docs/dev/templates/#list-of-builtin-filters). +1. While the [`float`](http://jinja.pocoo.org/docs/dev/templates/#float) and [`int`](http://jinja.pocoo.org/docs/dev/templates/#int) filters do allow a default fallback value if the conversion is unsuccessful, they do not provide the ability to catch undefined variables. + +Remembering these simple rules will help save you from many headaches and endless hours of frustration when using automation templates. + ## {% linkable_title Available Trigger Data %} The following tables show the available trigger data per platform. From cc56ae06bb87223353b389872087b3b64b7213cc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Nov 2016 11:46:26 +0100 Subject: [PATCH 55/60] Update the MQTT fan documentation to represent the component implementation (#1400) --- source/_components/fan.mqtt.markdown | 70 +++++++++++++++++++++------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 61111b227a8..8f3532bb674 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -17,17 +17,17 @@ The `mqtt` fan platform let you control your MQTT enabled fans. In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with `RETAIN` flag, the MQTT fan will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state of the fan will be `false`. -When a `state_topic` is not available, the fan will work in optimistic mode. In this mode, the fan will immediately change state after every command. Otherwise, the fan will wait for state confirmation from device (message from `state_topic`). +When a `state_topic` is not available, the fan will work in optimistic mode. In this mode, the fan will immediately change state after every command. Otherwise, the fan will wait for state confirmation from the device (message from `state_topic`). -Optimistic mode can be forced, even if state topic is available. Try to enable it, if experiencing incorrect fan operation. +Optimistic mode can be forced even if a `state_topic` is available. Try to enable it if you are experiencing incorrect fan operation. To enable MQTT fans in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yml entry fan: - platform: mqtt - command_topic: "home/living-room/fan/set" + - platform: mqtt + command_topic: "bedroom_fan/on/set" ``` Configuration variables: @@ -35,25 +35,59 @@ Configuration variables: - **command_topic** (*Required*): The MQTT topic to publish commands to change the fan state. - **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. - **name** (*Optional*): The name of the fan. Default is 'MQTT Fan'. +- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. - **payload_on** (*Optional*): The payload that represents the running state. Default is "ON". - **payload_off** (*Optional*): The payload that represents the stop state. Default is "OFF". -- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no state topic defined, else `false`. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **retain** (*Optional*): If the published message should have the retain flag on or not. - **state_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the state. -- **speed_state_topic** (*Optional*): The MQTT topic subscribed to receive speed updates. -- **speed_command_topic** (*Optional*): The MQTT topic to publish commands to change the fan speed. -- **speed_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the speed. -- **oscillation_state_topic** (*Optional*): The MQTT topic subscribed to receive oscillation updates. -- **oscillation_command_topic** (*Optional*): The MQTT topic to publish commands to change the fan oscillation. +- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. +- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no state topic defined, else `false`. +- **retain** (*Optional*): If the published message should have the retain flag on or not. +- **oscillation_state_topic** (*Optional*): The MQTT topic subscribed to receive oscillation state updates. +- **oscillation_command_topic** (*Optional*): The MQTT topic to publish commands to change the oscillation state. +- **payload_oscillation_on** (*Optional*): The payload that represents the oscillation on state. Default is "oscillate_on". +- **payload_oscillation_off** (*Optional*): The payload that presents the oscillation off state. Default is "oscillate_off". - **oscillation_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the oscillation. -- **payload_oscillation_on** (*Optional*): The payload that represents the oscillation state. Default is "ON". -- **payload_oscillation_off** (*Optional*): The payload that represents the oscillation state. Default is "OFF". -- **payload_low_speed** (*Optional*): The payload that represents the low speed state. Default is "low". -- **payload_medium_speed** (*Optional*): The payload that represents the low speed state. Default is "med". -- **payload_high_speed** (*Optional*): The payload that represents the low speed state. Default is "high". +- **speed_state_topic** (*Optional*): The MQTT topic subscribed to receive speed state updates. +- **speed_command_topic** (*Optional*): The MQTT topic to publish commands to change speed state. +- **payload_low_speed** (*Optional*): The payload that represents the fan's low speed. +- **payload_medium_speed** (*Optional*): The payload that represents the fan's medium speed. +- **payload_high_speed** (*Optional*): The payload that represents the fan's high speed. +- **speed_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the speed payload. - **speeds** array (*Optional*): Valid entries for the list are `off`, `low`, `med`, and `high`.

-Make sure that your topic match exact. `some-topic/` and `some-topic` are different topics. +Make sure that your topic is an exact match. `some-topic/` and `some-topic` are different topics.

+ +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this fan. + +### {% linkable_title Full configuration %} + +The example below shows a full configuration for a MQTT fan. + +```yaml +# Example configuration.yml entry +fan: + - platform: mqtt + name: "Bedroom Fan" + state_topic: "bedroom_fan/on/state" + command_topic: "bedroom_fan/on/set" + oscillation_state_topic: "bedroom_fan/oscillation/state" + oscillation_command_topic: "bedroom_fan/oscillation/set" + speed_state_topic: "bedroom_fan/speed/state" + speed_command_topic: "bedroom_fan/speed/set" + qos: 0 + payload_on: "true" + payload_off: "false" + payload_oscillation_on: "true" + payload_oscillation_off: "false" + payload_low_speed: "low" + payload_medium_speed: "medium" + payload_high_speed: "high" + speeds: + - low + - medium + - high +``` From 55b16f5aa416d5b63be79ef7ff333c0139f54149 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Nov 2016 15:44:33 +0100 Subject: [PATCH 56/60] Add inital blog post for 0.32 --- ...05-hacktoberfest-influxdb-weather.markdown | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown diff --git a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown new file mode 100644 index 00000000000..187789cc19a --- /dev/null +++ b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown @@ -0,0 +1,139 @@ +Another two weeks have passed and we are pleased to present Home Assistant 0.32. This is the 74th release Home Assistant release so far and the first release after the new [updater] was implemented. + +We would like to share one number: **Installation 3.97 k** + +### {% linkable_title Hacktoberfest %} +The [Hacktoberfest] is over now. Home Assistant made the 2nd and the 3rd place out of almost 30'000 participating repositories with a total of 528 pull requests closed - that's an average of 17 pull requests a day! Thanks to all the contributors but also to the team of reviewers. This wouldn't been possible without you 👏 . + +### {% linkable_title Improved error reporting %} +This release has improved the reporting when a config validation error occurs. Thanks to [@kellerza] you will now get a persistent notification added to your UI when this happens. + +### {% linkable_title Asynchronous %} +This release contains the first asynchronous sensor and camera platforms. [@pvizeli] and [@fabaff] ported most of the "internal" sensors to async programming. We hope that you will enjoy the new speed. + +[@balloob] and [@pvizeli] worked a lot on the improvement of the core itself. + +### {% linkable_title Weather component %} + +For a long time we have had a bunch of [weather sensors][weather-sensors] but it's getting better: There is now a [Weather component][weather-component]. Sorry, not much more to tell right now. The plans are to create a weather UI element and to improve the initial implementation. + +### {% linkable_title All changes %} + + + +- Config: Exclude dirs/files prefixed with . ([@lwis]) +- Add mochad component ([@mtreinish]) +- Notify: Added support for [Android TV/FireTV](https://home-assistant.io/components/notify.nfandroidtv/) ([@danielperna84]) +- HTTP: Migrate WSGI to asyncio ([@balloob]) +- Configurator: Support for `entity_picture` ([@amills]) +- Core: Configuration validation error prints line numbers ([@persandstrom]) +- Media player: [Sonos] improvements incl. timer setting functionality ([@bjarniivarsson], [@americanwookie]) +- Zoneminder: SSL/TLS support ([@Khabi]) +- Media player: Discovery support for [Yamaha] ([@sdague]) +- Sensor: New finance platform [CurrencyLayer][currencylayer] ([@arsaboo]) +- Sensor: Support for [InfluxDB sensors][influx-sensor] ([@bestlibre]) +- Sensor: New support [HDDTemp sensors][hddtemp-sensor] ([@fabaff]) +- Camera: Improvements to [RPi camera][rpi-camera] ([@postlund]) +- ThingSpeak component ([@simonszu]) +- Core: New property `hass.data` to store internal data ([@balloob]) +- Switch: Templating and configurable timeout for [REST][rest-switch] ([@aa755]) +- Light: [Yeelight][yeelight] Wifi bulbs are now supported ([@HydrelioxGitHub]) +- Sensor: New [random number][random-sensor] sensor ([@fabaff]) +- Media player: New support for [Emby][emby-media] ([@mezz64]) +- [LiteJet][litejet] switches and lights support ([@joncar]) +- Cover: New [garadget] platform ([@JasonCarter80]) +- Pilight: `send_delay` feature ([@janLo]) +- Config: Improvements for `known_devices` ([@kellerza]) +- Device tracker: New discovered event ([@lwis]) +- Device tracker: Improvements and new features for the Volvo on Call platform ([@molobrakos]) +- Climate: Use unit of measurement from a Vera device ([@pavoni]) +- Media player: [Philips TVs][philips_player] with jointSPACE API re now supported ([@danielperna84]) +- Device tracker: [ICloud][icloud] improvements ([@Bart274]) +- Sensor: Support for [Synology DSM][synologydsm] ([@StaticCube]) +- Sensor: Monitoring support for [Dovado routers][dovado-sensor] ([@molobrakos]) +- Sensor: Support for monitoring [printers][cups-sensor] ([@fabaff]) +- Minor features and bug fixes by [@fabaff], [@kellerza], [@robbiet480], [@balloob], [@DavidLP], [@Bart274], [@sdague], [@mtreinish], [@Khabi], [@bbesset], [@bestlibre], [@pvizeli], [@turbokongen], [@devdelay], [@molobrakos], [@postlund], [@wokar], [@amills], [@arsaboo], [@hartmms], [@nsideras], [@tbeckha], and [@kirichkov]. + +### {% linkable_title Misc %} + +Our website has now an additional category called "Ecosystem". This will become the place where tools, apps, and other helper for the Home Assistant ecosystem can store their documentation or guides. + +- [iOS](https://home-assistant.io/ecosystem/ios/) +- [SceneGen](https://home-assistant.io/ecosystem/scenegen/) + +### {% linkable_title Breaking changes %} + +- The [Yahoo Finance][yahoo] platform supports now multiple stock. Please adjust your configuration. +- Deprecated components `garage_door`, `rollershutter`, `thermostat`, and `hvac` have been removed. +- The minimum Python version on Windows has been bumped to Python 3.5. +- The Insteon Hub integration has been disabled due to a [request from Insteon][req-insteon]. + +### {% linkable_title If you need help... %} + +...don't hesitate to use our [Forum](https://community.home-assistant.io/) or join us for a little [chat](https://gitter.im/home-assistant/home-assistant). The release notes have comments enabled but it's preferred if you the former communication channels. Thanks. + +[@aa755]: https://github.com/aa755 +[@americanwookie]: https://github.com/americanwookie +[@amills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@balloob]: https://github.com/balloob +[@Bart274]: https://github.com/Bart274 +[@bbesset]: https://github.com/bbesset +[@bestlibre]: https://github.com/bestlibre +[@bjarniivarsson]: https://github.com/bjarniivarsson +[@danielperna84]: https://github.com/danielperna84 +[@DavidLP]: https://github.com/DavidLP +[@devdelay]: https://github.com/devdelay +[@fabaff]: https://github.com/fabaff +[@hartmms]: https://github.com/hartmms +[@HydrelioxGitHub]: https://github.com/HydrelioxGitHub +[@janLo]: https://github.com/janLo +[@JasonCarter80]: https://github.com/JasonCarter80 +[@joncar]: https://github.com/joncar +[@kellerza]: https://github.com/kellerza +[@Khabi]: https://github.com/Khabi +[@kirichkov]: https://github.com/kirichkov +[@lwis]: https://github.com/lwis +[@mezz64]: https://github.com/mezz64 +[@molobrakos]: https://github.com/molobrakos +[@mtreinish]: https://github.com/mtreinish +[@nsideras]: https://github.com/nsideras +[@pavoni]: https://github.com/pavoni +[@persandstrom]: https://github.com/persandstrom +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@robbiet480]: https://github.com/robbiet480 +[@sdague]: https://github.com/sdague +[@simonszu]: https://github.com/simonszu +[@StaticCube]: https://github.com/StaticCube +[@tbeckha]: https://github.com/tbeckha +[@tchellomello]: https://github.com/tchellomello +[@turbokongen]: https://github.com/turbokongen +[@wokar]: https://github.com/wokar + +[currencylayer]: https://home-assistant.io/components/sensor.currencylayer/ +[yahoo]: https://home-assistant.io/components/sensor.yahoo_finance/ +[mochat]: https://home-assistant.io/components/mochat/ +[firetv]: https://home-assistant.io/components/notify.firetv/ +[Yamaha]: https://home-assistant.io/components/media_player.yamaha/ +[hddtemp-sensor]: https://home-assistant.io/components/sensor.hddtemp/ +[Sonos]: https://home-assistant.io/components/media_player.sonos/ +[weather-sensors]: https://home-assistant.io/components/#weather +[rpi-camera]: https://home-assistant.io/components/camera.rpi_camera/ +[rest-switch]: https://home-assistant.io/components/switch.rest/ +[emby-media]: https://home-assistant.io/components/media_player.emby/ +[random-sensor]: https://home-assistant.io/components/sensor.random/ +[yeelight]: https://home-assistant.io/components/light.yeelight/ +[influx-sensor]: https://home-assistant.io/components/sensor.influxdb/ +[weather-component]: https://home-assistant.io/components/weather/ +[cups-sensor]: https://home-assistant.io/components/sensor.cups/ +[litejet]: https://home-assistant.io/components/litejet/ +[garadget]: https://home-assistant.io/components/garadget/ +[philips_player]: https://home-assistant.io/components/media_player.philips_js/ +[icloud]: https://home-assistant.io/components/device_tracker.icloud/ +[synologydsm]: https://home-assistant.io/components/sensor.synologydsm/ +[dovado-sensor]: https://home-assistant.io/components/sensor.dovado/ +[ios]: https://home-assistant.io/ecosystem/ios/ +[Hacktoberfest]: https://hacktoberfest.digitalocean.com/ +[req-insteon]: https://github.com/home-assistant/home-assistant/issues/3811 +[updater]: https://home-assistant.io/blog/2016/10/25/explaining-the-updater/ From 41ee9ce7cd31f2336d068809e3690058ccfe995e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Nov 2016 16:02:08 +0100 Subject: [PATCH 57/60] Update release blog post --- .../_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown index 187789cc19a..218a27e6fc4 100644 --- a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown +++ b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown @@ -1,6 +1,4 @@ -Another two weeks have passed and we are pleased to present Home Assistant 0.32. This is the 74th release Home Assistant release so far and the first release after the new [updater] was implemented. - -We would like to share one number: **Installation 3.97 k** +Another two weeks have passed and we are pleased to present Home Assistant 0.32. ### {% linkable_title Hacktoberfest %} The [Hacktoberfest] is over now. Home Assistant made the 2nd and the 3rd place out of almost 30'000 participating repositories with a total of 528 pull requests closed - that's an average of 17 pull requests a day! Thanks to all the contributors but also to the team of reviewers. This wouldn't been possible without you 👏 . From 1be01535ecb2987a0ee5289a1a59270eaafe889a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Nov 2016 16:10:10 +0100 Subject: [PATCH 58/60] Add header --- ...16-11-05-hacktoberfest-influxdb-weather.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown index 218a27e6fc4..b8491d19f88 100644 --- a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown +++ b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown @@ -1,3 +1,16 @@ +--- +layout: post +title: "0.32: Hacktoberfest, InfluxDB sensor, Error reporting, and Weather" +description: "Hacktoberfest is over, new InfluxDB sensor, CUPS sensor, and ThingSpeak." +date: 2016-11-05 03:04:05 +0000 +date_formatted: "November 05, 2016" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +--- + + Another two weeks have passed and we are pleased to present Home Assistant 0.32. ### {% linkable_title Hacktoberfest %} From b6a5a0bf352b6f07e0bd0950dd1a977b84ea5526 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Nov 2016 16:56:28 +0100 Subject: [PATCH 59/60] Fix image and missing link --- .../2016-11-05-hacktoberfest-influxdb-weather.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown index b8491d19f88..676c348828f 100644 --- a/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown +++ b/source/_posts/2016-11-05-hacktoberfest-influxdb-weather.markdown @@ -30,7 +30,7 @@ For a long time we have had a bunch of [weather sensors][weather-sensors] but it ### {% linkable_title All changes %} - + - Config: Exclude dirs/files prefixed with . ([@lwis]) - Add mochad component ([@mtreinish]) @@ -45,7 +45,7 @@ For a long time we have had a bunch of [weather sensors][weather-sensors] but it - Sensor: Support for [InfluxDB sensors][influx-sensor] ([@bestlibre]) - Sensor: New support [HDDTemp sensors][hddtemp-sensor] ([@fabaff]) - Camera: Improvements to [RPi camera][rpi-camera] ([@postlund]) -- ThingSpeak component ([@simonszu]) +- [ThingSpeak][thingspeak] component ([@simonszu]) - Core: New property `hass.data` to store internal data ([@balloob]) - Switch: Templating and configurable timeout for [REST][rest-switch] ([@aa755]) - Light: [Yeelight][yeelight] Wifi bulbs are now supported ([@HydrelioxGitHub]) @@ -148,3 +148,4 @@ Our website has now an additional category called "Ecosystem". This will become [Hacktoberfest]: https://hacktoberfest.digitalocean.com/ [req-insteon]: https://github.com/home-assistant/home-assistant/issues/3811 [updater]: https://home-assistant.io/blog/2016/10/25/explaining-the-updater/ +[thingspeak]: https://home-assistant.io/components/thingspeak/ From 2d54a35db8ca5f6895ab80c972662f01e4c54b02 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Nov 2016 17:02:02 +0100 Subject: [PATCH 60/60] Update for 0.32 --- _config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index aaff623f774..d3f10fff778 100644 --- a/_config.yml +++ b/_config.yml @@ -129,5 +129,5 @@ social: account: home_assistant current_major_version: 0 -current_minor_version: 31 -current_patch_version: 1 +current_minor_version: 32 +current_patch_version: 0

+This component has been disabled due to a complaint by Insteon. It will be enabled again once this issue has been resolved. +