From 6a7be851a75e09b8ad059656beaed1f8772547da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Mon, 15 Feb 2016 19:50:50 +0100 Subject: [PATCH 01/41] Update light.tellstick.markdown --- source/_components/light.tellstick.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/light.tellstick.markdown b/source/_components/light.tellstick.markdown index 7326dc49345..1e5b40e34df 100644 --- a/source/_components/light.tellstick.markdown +++ b/source/_components/light.tellstick.markdown @@ -20,5 +20,10 @@ To use your TellStick device in your installation, add the following to your `co # Example configuration.yaml entry light: platform: tellstick + signal_repetitions: 3 ``` +Configuration variables: + +- **signal_repetitions** *Optional*: Because the tellstick 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 switch to try to send each signal repeatedly. + From c6795c0dae6ee537b3b8c074a7f2e248f807df85 Mon Sep 17 00:00:00 2001 From: infamy Date: Mon, 15 Feb 2016 22:45:32 -0800 Subject: [PATCH 02/41] Neurio sensor documentation --- .../_components/sensor.neurio_energy.markdown | 30 ++++++++++++++++++ source/images/supported_brands/neurio.png | Bin 0 -> 17237 bytes 2 files changed, 30 insertions(+) create mode 100644 source/_components/sensor.neurio_energy.markdown create mode 100644 source/images/supported_brands/neurio.png diff --git a/source/_components/sensor.neurio_energy.markdown b/source/_components/sensor.neurio_energy.markdown new file mode 100644 index 00000000000..dc872725f38 --- /dev/null +++ b/source/_components/sensor.neurio_energy.markdown @@ -0,0 +1,30 @@ +--- +layout: page +title: "Neurio" +description: "Instructions how to integrate Neurio within Home Assistant." +date: 2016-02-15 21:50 +sidebar: true +comments: false +sharing: true +footer: true +logo: neurio.png +ha_category: Sensor +--- + + +Integrate your [Neurio](http://neur.io/) meter information into Home Assistant. To get an API key and secret, login to your Neurio account at https://my.neur.io/#settings/applications/register and register an application. Note the Homepage URL and Callback URL are optional. + +```yaml +# Example configuration.yaml entry +sensor: + platform: neurio_energy + api_key: API_KEY + api_secret: API_SECRET + sensor_id: "SENSOR_ID" +``` + +Configuration variables: + +- **api_key** (*Required*): The API key for your account/application. +- **api_secret** (*Required*): The API secret for your account/application. +- **sensor_id** (*Optional*): Sensor ID, will be auto-detected but can be set if you have more then one sensor. diff --git a/source/images/supported_brands/neurio.png b/source/images/supported_brands/neurio.png new file mode 100644 index 0000000000000000000000000000000000000000..5531c7eee42dacc3dcc1b38a6c71e5cc1ed56d3b GIT binary patch literal 17237 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 EAN2Ej*#H0l literal 0 HcmV?d00001 From 43b4d50206390285f902dfaf2b259c272acbcc19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 17 Feb 2016 14:36:18 +0100 Subject: [PATCH 03/41] Update light.rfxtrx.markdown --- source/_components/light.rfxtrx.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index 374df8887b8..302d67098e4 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -18,6 +18,7 @@ To enable RFXtrx lights in your installation, add the following to your `configu # Example configuration.yaml entry light: platform: rfxtrx + signal_repetitions: 3 devices: living_room: name: Living Room @@ -29,3 +30,4 @@ 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 lights. +- **signal_repetitions** *Optional*: Because the tellstick 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 switch to try to send each signal repeatedly. From e9dc4be4e1d67ab99d8671a5b8297a4daad3fe12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 17 Feb 2016 14:36:59 +0100 Subject: [PATCH 04/41] Update switch.rfxtrx.markdown --- source/_components/switch.rfxtrx.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 215eb43af36..5a5f7b9c855 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -18,6 +18,7 @@ To enable RFXtrx switches in your installation, add the following to your `confi # Example configuration.yaml entry switch: platform: rfxtrx + signal_repetitions: 3 devices: living_room: name: Living Room @@ -29,4 +30,4 @@ 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 switches. - +- **signal_repetitions** *Optional*: Because the tellstick 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 switch to try to send each signal repeatedly. From 012fe1336bb4bafc9b6a5db234e175969a6d40fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 17 Feb 2016 14:38:50 +0100 Subject: [PATCH 05/41] Update light.rfxtrx.markdown --- source/_components/light.rfxtrx.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index 302d67098e4..076f8efb495 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -30,4 +30,4 @@ 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 lights. -- **signal_repetitions** *Optional*: Because the tellstick 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 switch to try to send each signal repeatedly. +- **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 switch to try to send each signal repeatedly. From caca5867e8b63d4f36032c583ae1a3ea61adacce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 17 Feb 2016 14:39:07 +0100 Subject: [PATCH 06/41] Update switch.rfxtrx.markdown --- source/_components/switch.rfxtrx.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 5a5f7b9c855..a0f7fbdd52d 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -30,4 +30,4 @@ 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 switches. -- **signal_repetitions** *Optional*: Because the tellstick 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 switch to try to send each signal repeatedly. +- **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 switch to try to send each signal repeatedly. From 60e4f024decf177ec57e248bf794467910a77c7e Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Thu, 18 Feb 2016 20:23:51 -0800 Subject: [PATCH 07/41] Add nx584 sensor platform documentation --- .../_components/binary_sensor.nx584.markdown | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 source/_components/binary_sensor.nx584.markdown diff --git a/source/_components/binary_sensor.nx584.markdown b/source/_components/binary_sensor.nx584.markdown new file mode 100644 index 00000000000..65f8ace47b7 --- /dev/null +++ b/source/_components/binary_sensor.nx584.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: NX584 zones +description: "Instructions on how to set up nx584 zones as sensors" +date: 2016-02-18 20:47 +sidebar: true +comments: false +sharing: true +footer: true +logo: networx.png +ha_category: Binary Sensor +ha_iot_class: "Local Push" +--- + +The `nx584` platform provides integration with GE, Caddx, Interlogix (and other brands) alarm panels that support the NX584 interface module (or have it built in). Supported panels include NX4/6/8/8E. Actual integration is done through [pynx584](http://github.com/kk7ds/pynx584) which is required for this to work. + +Enabling this sensor platform exposes all of your zones as binary sensors, which provides visibility through the UI as well as the ability to trigger automation actions instantly when something happens like a door opening, or a motion sensor trigger. + +To enable this, add the following lines to your `configuration.yaml`: + +```yaml +binary_sensor: + platform: nx584 + host: ADDRESS + exclude_zones: + - ZONE ... + zone_types: + ZONE: TYPE +``` + +Configuration variables: + +- **host** (*Optional*): This is the host connection string (host:port) for the nx584 server process. If unset, it is assumed to be `localhost:5007`, which will work if the server process is running on the same system as home-assistant. +- **exclude_zones** (*Optional*): This is a list of zone numbers that should be excluded. Use this to avoid exposing a zone that is of no interest, unconnected, etc. +- **zone_types** (*Optional*): This is a list of zone numbers mapped to zone types. Use this to designate zones as doors, motion sensors, smoke detectors, etc. The list of available zone types relevant to alarm zones are: `opening`, `motion`, `gas`, `smoke`, `moisture`, `safety`. + +Example configuration: + +```yaml +binary_sensor: + platform: nx584 + host: 192.168.1.10:5007 + exclude_zones: + - 3 + - 5 + zone_types: + 1: opening + 2: opening + 4: motion + 6: moisture +``` \ No newline at end of file From 412bdd570ebbdef6015511dcd1ae89a4bcd2afe0 Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 19 Feb 2016 13:46:49 -0500 Subject: [PATCH 08/41] Updated google voice doc with automation notification example --- source/_components/notify.google_voice.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/notify.google_voice.markdown b/source/_components/notify.google_voice.markdown index 61044ffc40a..4d5e19f304f 100644 --- a/source/_components/notify.google_voice.markdown +++ b/source/_components/notify.google_voice.markdown @@ -34,3 +34,18 @@ Configuration variables: ### Usage Google Voice is a notify platform and thus can be controlled by calling the notify service [as described here](/components/notify/). It will send a notification to all devices listed in the notification **target**. + +```yaml +# Example automation notification entry + - alias: Send a notification + trigger: + platform: event + event_type: 'some event' + action: + service: notify.googlevoice + data: + message: 'Google Voice SMS test' + target: + - 5555555555 + - 5555555556 +``` From f95e3b3c2748dc388efae68e15d031175df01fc9 Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 19 Feb 2016 13:55:27 -0500 Subject: [PATCH 09/41] Added doc for Nest weather sensors --- .../_components/sensor.nest_weather.markdown | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 source/_components/sensor.nest_weather.markdown diff --git a/source/_components/sensor.nest_weather.markdown b/source/_components/sensor.nest_weather.markdown new file mode 100644 index 00000000000..ea8a24ce6c9 --- /dev/null +++ b/source/_components/sensor.nest_weather.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "Nest Weather Sensor" +description: "Instructions how to integrate Nest sensors within Home Assistant." +date: 2016-01-13 19:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: nest_thermostat.png +ha_category: Weather +--- + + +The `nest` weather sensor platform let you monitor current weather conditions based on the location of your [Nest](https://nest.com) thermostat. + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +sensor: + platform: nest + monitored_conditions: + - 'weather_temperature' + - 'weather_humidity' + - 'weather_condition' + - 'wind_speed' + - 'wind_direction' +``` + +Configuration variables: + +- **monitored_conditions** array (*Required*): States to monitor. + - 'weather_temperature' + - 'weather_humidity' + - 'weather_condition' + - 'wind_speed' + - 'wind_direction' + +

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

From 9326d55eba4d1c5c48658b318bc6109f651965eb Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 19 Feb 2016 16:17:48 -0500 Subject: [PATCH 10/41] Added ha_iot_class --- source/_components/sensor.nest_weather.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.nest_weather.markdown b/source/_components/sensor.nest_weather.markdown index ea8a24ce6c9..35617f8f0d4 100644 --- a/source/_components/sensor.nest_weather.markdown +++ b/source/_components/sensor.nest_weather.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: nest_thermostat.png ha_category: Weather +ha_iot_class: "Cloud Poll" --- From 89b3c382c8d64cec290b8b552583d1c52438a9e3 Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 19 Feb 2016 16:23:00 -0500 Subject: [PATCH 11/41] Fixed automation --- source/_components/notify.google_voice.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_components/notify.google_voice.markdown b/source/_components/notify.google_voice.markdown index 4d5e19f304f..83676fd3923 100644 --- a/source/_components/notify.google_voice.markdown +++ b/source/_components/notify.google_voice.markdown @@ -37,14 +37,15 @@ Google Voice is a notify platform and thus can be controlled by calling the noti ```yaml # Example automation notification entry - - alias: Send a notification +automation: + - alias: The sun has set trigger: - platform: event - event_type: 'some event' + platform: sun + event: sunset action: service: notify.googlevoice data: - message: 'Google Voice SMS test' + message: 'The sun has set' target: - 5555555555 - 5555555556 From 458a193889fe03d18dd8990f9970be4eec36cd37 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 13 Feb 2016 10:15:50 +0100 Subject: [PATCH 12/41] Fix image --- source/_components/lock.verisure.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/lock.verisure.markdown b/source/_components/lock.verisure.markdown index 185e066f3b3..ab4b04de8de 100644 --- a/source/_components/lock.verisure.markdown +++ b/source/_components/lock.verisure.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: wink.png +logo: verisure.png ha_category: Lock --- From b388d8718168245e79b9921182f66a2152e2537f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 20 Feb 2016 00:11:07 +0100 Subject: [PATCH 13/41] Add command line notify docs --- .../_components/notify.command_line.markdown | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 source/_components/notify.command_line.markdown diff --git a/source/_components/notify.command_line.markdown b/source/_components/notify.command_line.markdown new file mode 100644 index 00000000000..c31be1081ed --- /dev/null +++ b/source/_components/notify.command_line.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Command line" +description: "Instructions how to add command line notifications to Home Assistant." +date: 2016-02-22 20:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Notifications +--- + + +The `command_line` platform allows you to use external tools for notifications from Home Assistant. + +To enable those notifications in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + name: NOTIFIER_NAME + platform: command_line + command: "espeak -vmb/mb-us1" +``` + +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`. +- **command** (*Required*): The action to take. + +To use notifications, please see the [getting started with automation page]({{site_root}}/components/automation/). + From 970e6aa96d58ebda22197e89a28d48b5bafaeeec Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Fri, 19 Feb 2016 20:53:14 -0800 Subject: [PATCH 14/41] Allow preview with a different bind address This makes the Rakefile preview task honor a listen address instead of always defaulting to 127.0.0.1. This makes it easier to run the preview on a machine other than where you have a web browser running. To use: rake preview[0.0.0.0] --- Rakefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index d98244db570..a2555af077d 100644 --- a/Rakefile +++ b/Rakefile @@ -77,13 +77,14 @@ task :watch do end desc "preview the site in a web browser" -task :preview do +task :preview, :listen do |t, args| + listen_addr = args[:listen] || '127.0.0.1' raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir) puts "Starting to watch source with Jekyll and Compass. Starting Rack on port #{server_port}" system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css") jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build --watch --incremental") compassPid = Process.spawn("compass watch") - rackupPid = Process.spawn("rackup --port #{server_port}") + rackupPid = Process.spawn("rackup --port #{server_port} --host #{listen_addr}") trap("INT") { [jekyllPid, compassPid, rackupPid].each { |pid| Process.kill(9, pid) rescue Errno::ESRCH } From b8a81d672b05fad7b9f6cb50182d7890bd062512 Mon Sep 17 00:00:00 2001 From: Jan Harkes Date: Sat, 20 Feb 2016 00:48:52 -0500 Subject: [PATCH 15/41] Update WeMo documentation. --- source/_components/light.wemo.markdown | 20 +++++++++++++++ source/_components/switch.wemo.markdown | 23 +++-------------- source/_components/wemo.markdown | 34 +++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 source/_components/light.wemo.markdown create mode 100644 source/_components/wemo.markdown diff --git a/source/_components/light.wemo.markdown b/source/_components/light.wemo.markdown new file mode 100644 index 00000000000..4973c1580ba --- /dev/null +++ b/source/_components/light.wemo.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Belkin WeMo Lights" +description: "Instructions how to integrate Belkin WeMo LED lights into Home Assistant." +date: 2016-02-20 00:45 +sidebar: true +comments: false +sharing: true +footer: true +logo: belkin_wemo.png +ha_category: Light +ha_iot_class: "Local Polling" +--- + + +The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.com/us/p/P-F5Z0489/) LED lights from within Home Assistant. + +They will be automatically discovered if the discovery component is enabled. + +For more configuration information see the [WeMo component](/components/wemo/) documentation. diff --git a/source/_components/switch.wemo.markdown b/source/_components/switch.wemo.markdown index 9541f7e73b1..a650562ca1b 100644 --- a/source/_components/switch.wemo.markdown +++ b/source/_components/switch.wemo.markdown @@ -2,13 +2,14 @@ layout: page title: "Belkin WeMo Switch" description: "Instructions how to integrate Belkin WeMo switches into Home Assistant." -date: 2015-03-23 19:59 +date: 2016-02-20 00:47 sidebar: true comments: false sharing: true footer: true logo: belkin_wemo.png ha_category: Switch +ha_iot_class: "Local Push" --- @@ -16,22 +17,4 @@ The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.c They will be automatically discovered if the discovery component is enabled. -```yaml -# Example configuration.yaml entry -switch: - platform: wemo -``` - -Alternately, wemos that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, and/or devices in a remote location reachable over a VPN, you will need to manually configure them. This is also useful if you wish to disable discovery for some wemos, even if they are local. Example static configuration: - -```yaml -switch: - platform: wemo - static: - - 192.168.1.23 - - 192.168.52.172 -``` - -Any WeMo devices that are not statically configured but reachable via discovery will still be added automatically. - -Note that if you use this, you may want to configure your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability. \ No newline at end of file +For more configuration information see the [WeMo component](/components/wemo/) documentation. diff --git a/source/_components/wemo.markdown b/source/_components/wemo.markdown new file mode 100644 index 00000000000..e2bf5c9236a --- /dev/null +++ b/source/_components/wemo.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Belkin WeMo devices" +description: "Instructions how to integrate Belkin WeMo devices into Home Assistant." +date: 2016-02-20 00:41 +sidebar: true +comments: false +sharing: true +footer: true +logo: belkin_wemo.png +ha_category: Hub +--- + +The `wemo` component is the main component to integrate various [Belkin WeMo](http://www.belkin.com/us/Products/home-automation/c/wemo-home-automation/) devices with Home Assistant. + +Supported devices will be automatically discovered if the discovery component is enabled. If you are not using the discovery component, loading the `wemo` component will scan for WeMo devices on the local network. + +```yaml +# Example configuration.yaml entry +wemo: +``` + +Alternately, WeMo devices that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, and/or devices in a remote location reachable over a VPN, you will need to manually configure them. This is also useful if you wish to disable discovery for some wemos, even if they are local. Example static configuration: + +```yaml +wemo: + static: + - 192.168.1.23 + - 192.168.52.172 +``` + +Any WeMo devices that are not statically configured but reachable via discovery will still be added automatically. + +Note that if you use this, you may want to configure your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability. From 68788aaff7662a5f1966f6b0f4b704ab31f66c6b Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Fri, 19 Feb 2016 21:11:06 -0800 Subject: [PATCH 16/41] Add unifi device tracker documentation --- .../device_tracker.netgear.markdown | 1 + .../_components/device_tracker.unifi.markdown | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 source/_components/device_tracker.unifi.markdown diff --git a/source/_components/device_tracker.netgear.markdown b/source/_components/device_tracker.netgear.markdown index 67a37008ece..8c4febce592 100644 --- a/source/_components/device_tracker.netgear.markdown +++ b/source/_components/device_tracker.netgear.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: netgear.png ha_category: Presence Detection +ha_iot_class: "Local Polling" --- diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown new file mode 100644 index 00000000000..bd9bfa05409 --- /dev/null +++ b/source/_components/device_tracker.unifi.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Ubiquiti Unifi WAP" +description: "Instructions how to use a Unifi WAP controller as a device tracker module." +date: 2016-02-19 20:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: ubiquiti.png +ha_category: Presence Detection +--- + + +This platform allows you to detect presence by looking at connected devices to a [Ubiquiti](http://ubnt.com/) [Unifi](https://www.ubnt.com/enterprise/#unifi) controller. + +To use this device tracker in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: unifi + host: CONTROLLER + port: PORT + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD +``` + +Configuration variables: + +- **host** (*Optional*): The hostname or IP address of your controller. Defaults to localhost. +- **port** (*Optional*): The port of your controller's web interface. Defaults to 8443. +- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. +- **password** (*Required*): The password for your given admin account. + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 1666ba753534258eaa9651ca13d35c6645dbbbdd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Feb 2016 11:22:11 +0100 Subject: [PATCH 17/41] Add curl sample for template endpoint --- source/developers/rest_api.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index 3cce09cf727..cb70087e3de 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -389,6 +389,14 @@ Returns the rendered template in plain text. Paulus is at work! ``` +Sample `curl` command: + +```bash +$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ + -d '{"template": "It is {{ now }}!"}' \ + http://localhost:8123/api/template +``` + #### {% linkable_title POST /api/event_forwarding %} Setup event forwarding to another Home Assistant instance. From 20a7123a779233902b5b194d1f263a82b67fa03b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Feb 2016 11:23:32 +0100 Subject: [PATCH 18/41] Add now and utcnow --- source/getting-started/templating.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/getting-started/templating.markdown b/source/getting-started/templating.markdown index 5594d13e16d..e9c9eb04580 100644 --- a/source/getting-started/templating.markdown +++ b/source/getting-started/templating.markdown @@ -64,6 +64,8 @@ Home Assistant adds extensions to allow templates to access all of the current s - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. - Filter `multiply(x)` will convert the input to a number and multiply it with `x` - Filter `round(x)` will convert the input to a number and round it to `x` decimals. + - `now` will be rendered as current time in your time zone. + - `utcnow` will be rendered as UTC time. #### {% linkable_title Examples %} From ab0773f83c29245384f35a4173a0cec27d447e97 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 21 Feb 2016 12:35:08 +0100 Subject: [PATCH 19/41] Add docs for d-link plugs --- source/_components/switch.dlink.markdown | 40 +++++++++++++++++++++++ source/images/supported_brands/dlink.png | Bin 0 -> 5066 bytes 2 files changed, 40 insertions(+) create mode 100644 source/_components/switch.dlink.markdown create mode 100644 source/images/supported_brands/dlink.png diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown new file mode 100644 index 00000000000..21a19a374ef --- /dev/null +++ b/source/_components/switch.dlink.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "D-LINK Switch" +description: "Instructions how to integrate myStrom switches into Home Assistant." +date: 2016-02-21 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: dlink.png +ha_category: Switch +ha_iot_class: "Local Polling" +--- + + +The `dlink` switch platform allows you to control the state of your [D-Link Wi-Fi Smart Plugs](http://us.dlink.com/product-category/home-solutions/connected-home/smart-plugs/). + +Supported devices (tested): + +- DSP-W215 + +To use your D-Link smart plugs in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + platform: dlink + host: IP_ADRRESS + name: D-Link plug + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your myStrom switch, eg. http://192.168.1.32 +- **name** (*Optional*): The name to use when displaying this switch. +- **username** (*Required*): The username for your plug. Defaults to `admin`. +- **password** (*Required*): The password for your plug. + diff --git a/source/images/supported_brands/dlink.png b/source/images/supported_brands/dlink.png new file mode 100644 index 0000000000000000000000000000000000000000..ea5120da699d696005477f3be1f4b509e364fbcc GIT binary patch literal 5066 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 Date: Sun, 21 Feb 2016 13:33:45 +0100 Subject: [PATCH 20/41] Fix naming --- source/_components/switch.dlink.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown index 21a19a374ef..fb9ea061f54 100644 --- a/source/_components/switch.dlink.markdown +++ b/source/_components/switch.dlink.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "D-LINK Switch" -description: "Instructions how to integrate myStrom switches into Home Assistant." +title: "D-Link Switch" +description: "Instructions how to integrate D-Link switches into Home Assistant." date: 2016-02-21 09:00 sidebar: true comments: false @@ -33,7 +33,7 @@ switch: Configuration variables: -- **host** (*Required*): The IP address of your myStrom switch, eg. http://192.168.1.32 +- **host** (*Required*): The IP address of your D-Link plug, eg. http://192.168.1.32 - **name** (*Optional*): The name to use when displaying this switch. - **username** (*Required*): The username for your plug. Defaults to `admin`. - **password** (*Required*): The password for your plug. From 24680a2b0800ab94709837476cd6169a5e77f2a6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:21:03 +0100 Subject: [PATCH 21/41] Add wemo light docs --- source/_components/light.wemo.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 source/_components/light.wemo.markdown diff --git a/source/_components/light.wemo.markdown b/source/_components/light.wemo.markdown new file mode 100644 index 00000000000..6233796744c --- /dev/null +++ b/source/_components/light.wemo.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Belkin WeMo Light" +description: "Instructions how to integrate Belkin WeMo lights into Home Assistant." +date: 2016-02-22 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: belkin_wemo.png +ha_category: Light +--- + + +The `wemo` light platform allows you to control your [Belkin WeMo](http://www.belkin.com) lights from within Home Assistant. + +They will be automatically discovered if the discovery component is enabled. + +```yaml +# Example configuration.yaml entry +light: + platform: wemo +``` + From c216644e197f61c7c8037df1ef227882a4f48233 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:23:43 +0100 Subject: [PATCH 22/41] Add class --- source/_components/sensor.neurio_energy.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.neurio_energy.markdown b/source/_components/sensor.neurio_energy.markdown index dc872725f38..742fdca9749 100644 --- a/source/_components/sensor.neurio_energy.markdown +++ b/source/_components/sensor.neurio_energy.markdown @@ -9,11 +9,14 @@ sharing: true footer: true logo: neurio.png ha_category: Sensor +ha_iot_class: "Cloud Polling" --- Integrate your [Neurio](http://neur.io/) meter information into Home Assistant. To get an API key and secret, login to your Neurio account at https://my.neur.io/#settings/applications/register and register an application. Note the Homepage URL and Callback URL are optional. +To enable this sensor in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry sensor: @@ -27,4 +30,5 @@ Configuration variables: - **api_key** (*Required*): The API key for your account/application. - **api_secret** (*Required*): The API secret for your account/application. -- **sensor_id** (*Optional*): Sensor ID, will be auto-detected but can be set if you have more then one sensor. +- **sensor_id** (*Optional*): The sensor ID will be auto-detected but can be set if you have more then one sensor. + From 620258940445f7b93760eac9de9670b52ac342db Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:25:09 +0100 Subject: [PATCH 23/41] Add class --- source/_components/sensor.time_date.markdown | 1 + source/_components/sensor.worldclock.markdown | 1 + 2 files changed, 2 insertions(+) diff --git a/source/_components/sensor.time_date.markdown b/source/_components/sensor.time_date.markdown index 2a945fb8b59..50b4ccbd1c8 100644 --- a/source/_components/sensor.time_date.markdown +++ b/source/_components/sensor.time_date.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +ha_iot_class: "Local Push" --- diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index a438ea034bd..f99c0db0ba1 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +ha_iot_class: "Local Push" --- From 6cb4a57d36f11f0a511434109271561880959fa6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:29:43 +0100 Subject: [PATCH 24/41] Add class --- source/_components/binary_sensor.arest.markdown | 1 + source/_components/sensor.arest.markdown | 1 + source/_components/sensor.cpuspeed.markdown | 1 + source/_components/sensor.glances.markdown | 1 + source/_components/sensor.swiss_public_transport.markdown | 1 + source/_components/switch.arest.markdown | 1 + 6 files changed, 6 insertions(+) diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index 92ff60e49d3..da0684b5088 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: arest.png ha_category: Binary Sensor +ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.arest.markdown b/source/_components/sensor.arest.markdown index ea63c52baea..08282b75107 100644 --- a/source/_components/sensor.arest.markdown +++ b/source/_components/sensor.arest.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: arest.png ha_category: Sensor +ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.cpuspeed.markdown b/source/_components/sensor.cpuspeed.markdown index ec2c229d7b3..ba02555414a 100644 --- a/source/_components/sensor.cpuspeed.markdown +++ b/source/_components/sensor.cpuspeed.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +ha_iot_class: "Local Push" --- diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index 485c94a3032..ff7554804fd 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: glances.png ha_category: Sensor +ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index 47239742921..3128c527582 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +ha_iot_class: "Local Polling" --- diff --git a/source/_components/switch.arest.markdown b/source/_components/switch.arest.markdown index a68fa5e5cc8..f3e3223176a 100644 --- a/source/_components/switch.arest.markdown +++ b/source/_components/switch.arest.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: arest.png ha_category: Switch +ha_iot_class: "Local Polling" --- The `arest` switch platform allows you to toggle pins of your devices (like Arduino boards with a ethernet/wifi connection, ESP8266 based devices, and the Raspberry Pi) running the [aREST](http://arest.io/) RESTful framework. From 10e0ee18708fb8fdd9b168c1c96959b21d193968 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:36:04 +0100 Subject: [PATCH 25/41] Add zwave binary sensor docs --- source/_components/binary_sensor.zwave.markdown | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 source/_components/binary_sensor.zwave.markdown diff --git a/source/_components/binary_sensor.zwave.markdown b/source/_components/binary_sensor.zwave.markdown new file mode 100644 index 00000000000..0b74dea66cd --- /dev/null +++ b/source/_components/binary_sensor.zwave.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "Z-Wave Binary Sensor" +description: "Instructions how to setup the Z-Wave binary sensors within Home Assistant." +date: 2016-02-22 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: z-wave.png +ha_category: Sensor +--- + +To get your Z-Wave binary sensors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From fa9da7bf9be072be5c130016224ae45353a05221 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:48:38 +0100 Subject: [PATCH 26/41] Add docs for bloomsky binary sensor --- .../binary_sensor.bloomsky.markdown | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 source/_components/binary_sensor.bloomsky.markdown diff --git a/source/_components/binary_sensor.bloomsky.markdown b/source/_components/binary_sensor.bloomsky.markdown new file mode 100644 index 00000000000..dbe39559e8e --- /dev/null +++ b/source/_components/binary_sensor.bloomsky.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "BloomSky Binary Sensor" +description: "Instructions on how to set up BloomSky binary sensors within Home Assistant." +date: 2016-02-22 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bloomsky.png +ha_category: Binary Sensor +--- + +The `bloomsky` binary sensor platform allows you to get data from your BoomSky device. + +To get your BloomSky binary sensors working with Home Assistant, follow the instructions for the [BloomSky component](/components/bloomsky/) first. + +To use your BloomSky binary sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: bloomsky +``` + From 9cea4330a40d5172b5eef07c12cc835f40edd7b8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 09:49:41 +0100 Subject: [PATCH 27/41] Rearange the content --- .../_components/binary_sensor.zigbee.markdown | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/source/_components/binary_sensor.zigbee.markdown b/source/_components/binary_sensor.zigbee.markdown index d8731ac102b..e6fb6a1ddb2 100644 --- a/source/_components/binary_sensor.zigbee.markdown +++ b/source/_components/binary_sensor.zigbee.markdown @@ -11,9 +11,21 @@ logo: zigbee.png ha_category: Binary Sensor --- -A ZigBee binary sensor in this context is a device connected to one of the digital input pins on a ZigBee module. The states reported by such a device are limited to 'on' or 'off'. By default, a binary sensor is considered 'on' when the ZigBee device's digital input pin is held 'high' and considered 'off' when it is held 'low'. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A `zigbee` binary sensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to 'on' or 'off'. By default, a binary sensor is considered 'on' when the ZigBee device's digital input pin is held 'high' and considered 'off' when it is held 'low'. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. -To configure a digital input as a binary sensor, use the following variables: +To enable the ZigBee binary sensors in your installation, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: zigbee + name: Hallway PIR Sensor + pin: 0 + address: 0013A20040892FA2 + on_state: low +``` + +Configuration variables: - **name** (*Required*): The name you'd like to give the binary sensor in Home Assistant. - **platform** (*Required*): Set to `zigbee`. @@ -21,13 +33,3 @@ To configure a digital input as a binary sensor, use the following variables: - **address**: The long 64bit address of the remote ZigBee device whose digital input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. - **on_state**: Either `high` (default) or `low`, depicting whether the binary sensor is considered 'on' when the pin is 'high' or 'low'. -#### Example - -```yaml -binary_sensor: - - name: Hallway PIR Sensor - platform: zigbee - pin: 0 - address: 0013A20040892FA2 - on_state: low -``` From 95a7fb53b621e90aeef28fbb9573e08f0be28852 Mon Sep 17 00:00:00 2001 From: Flyte Date: Mon, 22 Feb 2016 11:11:03 +0000 Subject: [PATCH 28/41] Add documentation for TCP component --- source/_components/binary_sensor.tcp.markdown | 14 ++++++ source/_components/sensor.tcp.markdown | 50 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 source/_components/binary_sensor.tcp.markdown create mode 100644 source/_components/sensor.tcp.markdown diff --git a/source/_components/binary_sensor.tcp.markdown b/source/_components/binary_sensor.tcp.markdown new file mode 100644 index 00000000000..e0a081c8829 --- /dev/null +++ b/source/_components/binary_sensor.tcp.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: TCP Binary Sensor +description: "Instructions on how to set up TCP binary sensors within Home Assistant." +date: 2016-02-22 11:05 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Binary Sensor +--- +The TCP Binary Sensor is a type of [TCP Sensor](/components/sensor.tcp/) which is either `OFF` or `ON`. In order the use this sensor type, in addition to the configuration for the TCP Sensor, you must supply a `value_on` value to represent what is returned when the device is turned `ON`. + +- **value_on** (*Required*): The value returned when the device is `ON`. diff --git a/source/_components/sensor.tcp.markdown b/source/_components/sensor.tcp.markdown new file mode 100644 index 00000000000..414a092ad11 --- /dev/null +++ b/source/_components/sensor.tcp.markdown @@ -0,0 +1,50 @@ +--- +layout: page +title: TCP Sensor +description: "Instructions on how to set up TCP sensors within Home Assistant." +date: 2016-02-22 10:03 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +--- +The TCP component allows the integration of some services for which a specific Home Assistant component does not exist. If the service communicates over a TCP socket with a simple request/reply mechanism then the chances are that this component will allow integration with it. + +The configuration options for the a TCP Sensor: + +- **name** (*Required*): The name you'd like to give the sensor in Home Assistant. +- **platform** (*Required*): Set to `tcp`. +- **host** (*Required*): The hostname/IP address to connect to. +- **port** (*Required*): The port to connect to the host on. +- **payload** (*Required*): What to send to the host in order to get the response we're interested in. +- **timeout**: How long in seconds to wait for a response from the service before giving up and disconnecting. Default: `10` +- **value_template**: A Jinja2 template to extract the desired value from the response returned by the server. By default we assume that the entire response is the value. +- **unit**: The unit of measurement to use for the value. +- **buffer_size**: The size of the receive buffer in bytes. Set this to a larger value if you expect to receive a response larger than the default. Default: `1024`. + +#### Example + +The usage of the TCP component is best explained with an example. The [EBUSd](https://github.com/john30/ebusd/wiki) service enables connection to an EBUS serial bus on some home heating/cooling systems. Using this service it is possible to extract various metrics which may be useful to have within Home Assistant. In order to use EBUSd, you connect to it using a TCP socket and send it a command. The service will respond with the value it has received from EBUS. On the command line, this would look something like: + +```bash +$ echo "r WaterPressure" | nc 10.0.0.127 8888 +0.903;ok + +``` + +You will notice that the output from the service is not just a single value (it contains ";ok" as well). To grab the value we're interested in, we can use a Jinja2 template. The response received is injected into the template as the `value` variable. To use this value within Home Assistant, use the following configuration: + +```yaml +sensor: + - name: Central Heating Pressure + platform: tcp + host: 10.0.0.127 + port: 8888 + timeout: 5 + payload: "r WaterPressure\n" + value_template: "{{ value.split(';')[0] }}" + unit: Bar +``` + + From dcdee76d6eaead6ebf585e1c50ad2cb53df0c605 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 12:17:42 +0100 Subject: [PATCH 29/41] Add new elements from #1359 --- source/getting-started/templating.markdown | 84 ++++++++++++++++++---- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/source/getting-started/templating.markdown b/source/getting-started/templating.markdown index e9c9eb04580..a212e11030f 100644 --- a/source/getting-started/templating.markdown +++ b/source/getting-started/templating.markdown @@ -52,38 +52,54 @@ script: {% endif %}{% endraw %} ``` -### {% linkable_title Home Assistant template extensions %} +## {% linkable_title Home Assistant template extensions %} Home Assistant adds extensions to allow templates to access all of the current states: - - Iterating `states` will yield each state sorted alphabetically by entity ID - - Iterating `states.domain` will yield each state of that domain sorted alphabetically by entity ID - - `states.sensor.temperature` returns the state object for `sensor.temperature` + - Iterating `states` will yield each state sorted alphabetically by entity ID. + - Iterating `states.domain` will yield each state of that domain sorted alphabetically by entity ID. + - `states.sensor.temperature` returns the state object for `sensor.temperature`. - `states('device_tracker.paulus')` will return the state string (not the object) of the given entity or `unknown` if it doesn't exist. - `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state. - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. - - Filter `multiply(x)` will convert the input to a number and multiply it with `x` + - Filter `multiply(x)` will convert the input to a number and multiply it with `x`. - Filter `round(x)` will convert the input to a number and round it to `x` decimals. - `now` will be rendered as current time in your time zone. - `utcnow` will be rendered as UTC time. + - `distance()` will measure the distance in meters between home, entity, coordinates. + - `closest()` will find the closest entity. -#### {% linkable_title Examples %} + +## {% linkable_title Examples %} + +### {% linkable_title States %} +Next two statements result in same value if state exists. Second one will result in an error if state does not exist. ```jinja2 {% raw %} -# Next two statements result in same value if state exists -# Second one will result in an error if state does not exist {{ states('device_tracker.paulus') }} -{{ states.device_tracker.paulus.state }} +{{ states.device_tracker.paulus.state }}{% endraw %} +``` -# Print an attribute if state is defined +### {% linkable_title Attributes %} + +Print an attribute if state is defined + +```jinja2 +{% raw %} {% if states.device_tracker.paulus %} {{ states.device_tracker.paulus.attributes.battery }} {% else %} ?? -{% endif %} +{% endif %}{% endraw %} +``` -# Print out a list of all the sensor states +### {% linkable_title Sensor states %} + +Print out a list of all the sensor states. + +```jinja2 +{% raw %} {% for state in states.sensor %} {{ state.entity_id }}={{ state.state }}, {% endfor %} @@ -101,6 +117,50 @@ Home Assistant adds extensions to allow templates to access all of the current s {%endif %}{% endraw %} ``` +### {% linkable_title Distance examples %} + +If only 1 location is passed in will measure the distance from home. + +```jinja2 +{% raw %} +Using Lat Lng coordinates: {{ distance(123.45, 123.45) }} + +Using State: {{ distance(device_tracker.paulus) }} + +These can also be combined in any combination: +{{ distance(123.45, 123.45, device_tracker.paulus) }} +{{ distance(device_tracker.anne_therese, device_tracker.paulus) }}{% endraw %} +``` + +### {% linkable_title Closest examples %} + +Find entities closest to the Home Assistant location: + +```jinja2 +{% raw %} +Query all entities: {{ closest(states) }} +Query all entities of a specific domain: {{ closest(states.device_tracker) }} +Query all entities in group.children: {{ closest('group.children') }} +Query all entities in group.children: {{ closest(states.group.children) }}{% endraw %} +``` + +Find entities closest to a coordinate or another entity. All previous arguments still apply for 2nd argument. + +```jinja2 +{% raw %} +Closest to a coordinate: {{ closest(23.456, 23.456, 'group.children') }} +Closest to an entity: {{ closest('zone.school', 'group.children') }} +Closest to an entity: {{ closest(states.zone.school, 'group.children') }}{% endraw %} +``` + +### {% linkable_title Combined %} +Since closest returns a state, we can combine it with distance too + +```jinja2 +{% raw %} +{{ closest(states).name }} is {{ distance(closest(states)) }} meters away.{% endraw %} +``` + ## {% linkable_title Processing incoming data %} The other part of templating is processing incoming data. It will allow you to modify incoming data and extract only the data you care about. This will work only for platforms and components that mentioned support for this in their documentation. From 87c9da19bc51861d069b882c42d0838ede17dd71 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 22 Feb 2016 15:32:41 +0100 Subject: [PATCH 30/41] Equalize the layout to match existing pages --- source/_components/apcupsd.markdown | 24 ++++------- .../binary_sensor.apcupsd.markdown | 14 +++++-- source/_components/binary_sensor.tcp.markdown | 33 ++++++++++++++- source/_components/sensor.tcp.markdown | 42 +++++++++++++------ 4 files changed, 80 insertions(+), 33 deletions(-) diff --git a/source/_components/apcupsd.markdown b/source/_components/apcupsd.markdown index 16deab840ef..9ecd802fa24 100644 --- a/source/_components/apcupsd.markdown +++ b/source/_components/apcupsd.markdown @@ -11,25 +11,19 @@ logo: apcupsd.png ha_category: Hub --- -[APCUPSd](http://www.apcupsd.org/) status information can be integrated into Home Assistant when the Network Information Server (NIS) [is configured](http://www.apcupsd.org/manual/manual.html#nis-server-client-configuration-using-the-net-driver). +[APCUPSd](http://www.apcupsd.org/) status information can be integrated into Home Assistant when the Network Information Server (NIS) [is configured](http://www.apcupsd.org/manual/manual.html#nis-server-client-configuration-using-the-net-driver) is enabled on the APC device. -Create an `apcupsd` section in your configuration, optionally containing the following parameters: - -- **host**: The hostname/IP address on which the APCUPSd NIS is being served. Default: `localhost` -- **port**: The port on which the APCUPSd NIS is listening. Default: `3551` - -#### Example - -Use defaults: +To enable this sensor, add the following lines to your `configuration.yaml`: ```yaml +# Example configuration.yaml entry apcupsd: + host: IP_ADDRESS + port: PORT ``` -Set parameters: +Configuration variables: + +- **host** (*Optional*): The hostname/IP address on which the APCUPSd NIS is being served. Defaults to `localhost`. +- **port** (*Optional*): The port on which the APCUPSd NIS is listening. Defaults to `3551`. -```yaml -apcupsd: - host: 192.168.1.10 - port: 1234 -``` diff --git a/source/_components/binary_sensor.apcupsd.markdown b/source/_components/binary_sensor.apcupsd.markdown index 7e346559ae0..4d8be1efbd1 100644 --- a/source/_components/binary_sensor.apcupsd.markdown +++ b/source/_components/binary_sensor.apcupsd.markdown @@ -11,12 +11,18 @@ logo: apcupsd.png ha_category: Binary Sensor --- -In addition to the [APCUPSd Sensor](/components/sensor.apcupsd/) devices, you may also create a device which is simply `on` when the UPS status is `ONLINE` and `off` at all other times. +In addition to the [APCUPSd Sensor](/components/sensor.apcupsd/) devices, you may also create a device which is simply "on" when the UPS status is online and "off" at all other times. -#### Example +To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request: ```yaml +# Example configuration.yaml entry binary_sensor: - - name: UPS Online - platform: apcupsd + - platform: apcupsd + name: UPS Online ``` + +Configuration variables: + +- **resource** (*Required*): The resource or endpoint that contains the value. +- **method** (*Optional*): The method of the request. Default is GET. diff --git a/source/_components/binary_sensor.tcp.markdown b/source/_components/binary_sensor.tcp.markdown index e0a081c8829..d7551c044ac 100644 --- a/source/_components/binary_sensor.tcp.markdown +++ b/source/_components/binary_sensor.tcp.markdown @@ -9,6 +9,35 @@ sharing: true footer: true ha_category: Binary Sensor --- -The TCP Binary Sensor is a type of [TCP Sensor](/components/sensor.tcp/) which is either `OFF` or `ON`. In order the use this sensor type, in addition to the configuration for the TCP Sensor, you must supply a `value_on` value to represent what is returned when the device is turned `ON`. -- **value_on** (*Required*): The value returned when the device is `ON`. + +The TCP Binary Sensor is a type of [TCP Sensor](/components/sensor.tcp/) which is either "off" or "on". In order to use this sensor type, in addition to the configuration for the TCP Sensor, you must supply a `value_on` value to represent what is returned when the device is turned on. + +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +sensor: +# Example configuration.yaml entry + - platform: tcp + name: TCP Binary Sensor + host: IP_ADDRESS + port: PORT + payload: "r State\n" + value_on: 1 + timeout: 5 + value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}" + unit: UNIT_OF_MEASUREMENT +``` + +Configuration options for the a TCP Sensor: + +- **name** (*Required*): The name you'd like to give the sensor in Home Assistant. +- **host** (*Required*): The hostname/IP address to connect to. +- **port** (*Required*): The port to connect to the host on. +- **payload** (*Required*): What to send to the host in order to get the response we're interested in. +- **value_on** (*Required*): The value returned when the device is "on". +- **timeout** (*Optional*): How long in seconds to wait for a response from the service before giving up and disconnecting. Defaults to 10. +- **value_template** (*Optional*): Defines a [template](/getting-started/templating/) to extract the value. By default it's assumed that the entire response is the value. +- **unit** (*Optional*): The unit of measurement to use for the value. +- **buffer_size** (*Optional*): The size of the receive buffer in bytes. Set this to a larger value if you expect to receive a response larger than the default. Defaults to 1024. + diff --git a/source/_components/sensor.tcp.markdown b/source/_components/sensor.tcp.markdown index 414a092ad11..f702902703c 100644 --- a/source/_components/sensor.tcp.markdown +++ b/source/_components/sensor.tcp.markdown @@ -9,36 +9,55 @@ sharing: true footer: true ha_category: Sensor --- + The TCP component allows the integration of some services for which a specific Home Assistant component does not exist. If the service communicates over a TCP socket with a simple request/reply mechanism then the chances are that this component will allow integration with it. -The configuration options for the a TCP Sensor: +To enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +sensor: +# Example configuration.yaml entry + - platform: tcp + name: Central Heating Pressure + host: IP_ADDRESS + port: PORT + timeout: 5 + payload: PAYLOAD + value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}" + unit: UNIT_OF_MEASUREMENT +``` + +Configuration options for the a TCP Sensor: - **name** (*Required*): The name you'd like to give the sensor in Home Assistant. -- **platform** (*Required*): Set to `tcp`. - **host** (*Required*): The hostname/IP address to connect to. - **port** (*Required*): The port to connect to the host on. - **payload** (*Required*): What to send to the host in order to get the response we're interested in. -- **timeout**: How long in seconds to wait for a response from the service before giving up and disconnecting. Default: `10` -- **value_template**: A Jinja2 template to extract the desired value from the response returned by the server. By default we assume that the entire response is the value. -- **unit**: The unit of measurement to use for the value. -- **buffer_size**: The size of the receive buffer in bytes. Set this to a larger value if you expect to receive a response larger than the default. Default: `1024`. +- **timeout** (*Optional*): How long in seconds to wait for a response from the service before giving up and disconnecting. Defaults to `10` +- **value_template** (*Optional*): Defines a [template](/getting-started/templating/) to extract the value. By default it's assumed that the entire response is the value. +- **unit** (*Optional*): The unit of measurement to use for the value. +- **buffer_size** (*Optional*): The size of the receive buffer in bytes. Set this to a larger value if you expect to receive a response larger than the default. Defaults to `1024`. -#### Example +## {% linkable_title Examples %} -The usage of the TCP component is best explained with an example. The [EBUSd](https://github.com/john30/ebusd/wiki) service enables connection to an EBUS serial bus on some home heating/cooling systems. Using this service it is possible to extract various metrics which may be useful to have within Home Assistant. In order to use EBUSd, you connect to it using a TCP socket and send it a command. The service will respond with the value it has received from EBUS. On the command line, this would look something like: +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title EBUSd %} + +The [EBUSd](https://github.com/john30/ebusd/wiki) service enables connection to an EBUS serial bus on some home heating/cooling systems. Using this service it is possible to extract various metrics which may be useful to have within Home Assistant. In order to use EBUSd, you connect to it using a TCP socket and send it a command. The service will respond with the value it has received from EBUS. On the command line, this would look something like: ```bash $ echo "r WaterPressure" | nc 10.0.0.127 8888 0.903;ok - ``` You will notice that the output from the service is not just a single value (it contains ";ok" as well). To grab the value we're interested in, we can use a Jinja2 template. The response received is injected into the template as the `value` variable. To use this value within Home Assistant, use the following configuration: ```yaml sensor: - - name: Central Heating Pressure - platform: tcp +# Example configuration.yaml entry + - platform: tcp + name: Central Heating Pressure host: 10.0.0.127 port: 8888 timeout: 5 @@ -47,4 +66,3 @@ sensor: unit: Bar ``` - From 5ca49fa7e4263efd610ffaf166af47e7dda36fc4 Mon Sep 17 00:00:00 2001 From: t30 Date: Mon, 22 Feb 2016 15:32:46 +0100 Subject: [PATCH 31/41] Added command_rollershutter component --- .../rollershutter.command.markdown | 38 ++++++++++++++++++ .../images/supported_brands/command_line.png | Bin 0 -> 16381 bytes 2 files changed, 38 insertions(+) create mode 100644 source/_components/rollershutter.command.markdown create mode 100644 source/images/supported_brands/command_line.png diff --git a/source/_components/rollershutter.command.markdown b/source/_components/rollershutter.command.markdown new file mode 100644 index 00000000000..a338b901a02 --- /dev/null +++ b/source/_components/rollershutter.command.markdown @@ -0,0 +1,38 @@ +--- +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: Rollershutter +--- +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_rollershutter + 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/images/supported_brands/command_line.png b/source/images/supported_brands/command_line.png new file mode 100644 index 0000000000000000000000000000000000000000..a911f194a3f667005e6996e2a2f2fd8f74c8f5d4 GIT binary patch literal 16381 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 literal 0 HcmV?d00001 From 5d6ae7c7555abe14d577c183d3b937d7557593ee Mon Sep 17 00:00:00 2001 From: t30 Date: Mon, 22 Feb 2016 16:29:01 +0100 Subject: [PATCH 32/41] modified apcupsd.png --- apcupsd.png | Bin 0 -> 7658 bytes source/images/supported_brands/apcupsd.png | Bin 7774 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apcupsd.png delete mode 100644 source/images/supported_brands/apcupsd.png diff --git a/apcupsd.png b/apcupsd.png new file mode 100644 index 0000000000000000000000000000000000000000..67a763c77e225f649faebea72b4a72c617df2c1e GIT binary patch literal 7658 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 From 6ddcd9f9cf5c1fb036345c67557b17a59b60ea03 Mon Sep 17 00:00:00 2001 From: t30 Date: Mon, 22 Feb 2016 17:20:29 +0100 Subject: [PATCH 33/41] Added SCSbus logo --- source/_components/light.scsgate.markdown | 1 + source/_components/rollershutter.scsgate.markdown | 1 + source/_components/scsgate.markdown | 1 + source/_components/switch.scsgate.markdown | 1 + 4 files changed, 4 insertions(+) diff --git a/source/_components/light.scsgate.markdown b/source/_components/light.scsgate.markdown index 11b3a3fca9d..baec226359f 100644 --- a/source/_components/light.scsgate.markdown +++ b/source/_components/light.scsgate.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: bus_scs.png ha_category: Light --- diff --git a/source/_components/rollershutter.scsgate.markdown b/source/_components/rollershutter.scsgate.markdown index 7028bbd4d06..a1843b77a80 100644 --- a/source/_components/rollershutter.scsgate.markdown +++ b/source/_components/rollershutter.scsgate.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: bus_scs.png ha_category: Rollershutter --- The SCSGate device can control motirized roller shutters connected to the BTicino MyHome system. diff --git a/source/_components/scsgate.markdown b/source/_components/scsgate.markdown index 545833b8476..62930c52f4b 100644 --- a/source/_components/scsgate.markdown +++ b/source/_components/scsgate.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: bus_scs.png ha_category: Hub --- diff --git a/source/_components/switch.scsgate.markdown b/source/_components/switch.scsgate.markdown index 1dac1db633e..2c257b7ce4d 100644 --- a/source/_components/switch.scsgate.markdown +++ b/source/_components/switch.scsgate.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: bus_scs.png ha_category: Switch --- From 0b32a3570867a46d7f5015f9643880c4f1a4b087 Mon Sep 17 00:00:00 2001 From: t30 Date: Mon, 22 Feb 2016 18:10:04 +0100 Subject: [PATCH 34/41] added bus_scs.png --- source/images/supported_brands/bus_scs.png | Bin 0 -> 20715 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/bus_scs.png diff --git a/source/images/supported_brands/bus_scs.png b/source/images/supported_brands/bus_scs.png new file mode 100644 index 0000000000000000000000000000000000000000..10adec16a762462fecd8c3b98fb7a8bbe4e2b9b7 GIT binary patch literal 20715 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 b_ Date: Tue, 23 Feb 2016 10:54:02 +0000 Subject: [PATCH 35/41] Added command line icon --- source/_components/notify.command_line.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/notify.command_line.markdown b/source/_components/notify.command_line.markdown index c31be1081ed..182d2ebeb53 100644 --- a/source/_components/notify.command_line.markdown +++ b/source/_components/notify.command_line.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: command_line.png ha_category: Notifications --- From 77f167bfaef7c954bdbbb426304c8781a5c9d1dc Mon Sep 17 00:00:00 2001 From: t30 Date: Tue, 23 Feb 2016 15:47:54 +0100 Subject: [PATCH 36/41] modify png image --- .../images/supported_brands/command_line.png | Bin 16381 -> 753 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/supported_brands/command_line.png b/source/images/supported_brands/command_line.png index a911f194a3f667005e6996e2a2f2fd8f74c8f5d4..9e7cd7173b90ab4ee2651e7a8f9a61f5e36e83ed 100644 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXjsm9aAF{I+w+qrx5gdIiP_*s@JpLghVabZF-}2FKv?j^CbG*&T}vH8kX0v&Ui3$a}BG+!%Wtn zTmm}rjQ7!-^47rJ$-f8S> zJz2_<`^ebtj@iebqPfXmf3MiqI~9>iPMj5eoNz9f(ff}WFhMeSy85}Sb4q9e05F|F AS^xk5 literal 16381 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 From 77a4532ab1abac2b7451bae8a94d81a7bb7d6589 Mon Sep 17 00:00:00 2001 From: GreenTurtwig Date: Wed, 24 Feb 2016 09:05:56 +0000 Subject: [PATCH 37/41] Added documentation for my Steam sensor --- .../_components/sensor.steam_online.markdown | 50 ++++++++++++++++++ source/images/supported_brands/steam.png | Bin 0 -> 11017 bytes 2 files changed, 50 insertions(+) create mode 100644 source/_components/sensor.steam_online.markdown create mode 100644 source/images/supported_brands/steam.png diff --git a/source/_components/sensor.steam_online.markdown b/source/_components/sensor.steam_online.markdown new file mode 100644 index 00000000000..c3a7a9d71d6 --- /dev/null +++ b/source/_components/sensor.steam_online.markdown @@ -0,0 +1,50 @@ +--- +layout: page +title: "Steam" +description: "Instructions on how to set up Steam sensors in Home Assistant." +date: 2015-12-19 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: steam.png +ha_category: Sensor +--- + + +The Steam component will allow you to track the online status of public [Steam](https://steamcommunity.com) accounts. + +You need an API key which is [free](https://steamcommunity.com/dev/apikey) to use the component + +To find an account's 64-bit SteamID you can check the URL of the profile page, if it ends with a long string on numbers then that's the 64-bit SteamID. However, if the profile has a custom URL you will have to copy the it and enter it into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. + +To use Steam in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: steam_online + api_key: YOUR_API_KEY + accounts: + - account1 + - account2 +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key from [https://steamcommunity.com/dev/apikey](https://steamcommunity.com/dev/apikey). +- **accounts** array (*Required*): Array of accounts. + - **account_id** (*Required*): 64-bit SteamID. + + +If you want to add the accounts to a group for example you will have to use: + +```yaml +# Example configuration.yaml entry +group: + steam: + name: Steam + entities: + - sensor.steam_account1 + - sensor.steam_account2 +``` \ No newline at end of file diff --git a/source/images/supported_brands/steam.png b/source/images/supported_brands/steam.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3750b85b19328e9825136f47082949429e38f7 GIT binary patch literal 11017 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 literal 0 HcmV?d00001 From 6eb45727608d0c17190075e45dad8e0a6ad70f7a Mon Sep 17 00:00:00 2001 From: t30 Date: Wed, 24 Feb 2016 10:59:40 +0100 Subject: [PATCH 38/41] fix path of apcupsd.png --- .../images/supported_brands/apcupsd.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename apcupsd.png => source/images/supported_brands/apcupsd.png (100%) diff --git a/apcupsd.png b/source/images/supported_brands/apcupsd.png similarity index 100% rename from apcupsd.png rename to source/images/supported_brands/apcupsd.png From 48051e601bca373dcb478793a1a00a8c16ccac5e Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Thu, 25 Feb 2016 15:12:19 -0800 Subject: [PATCH 39/41] Add template binary_sensor docs --- .../binary_sensor.template.markdown | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 source/_components/binary_sensor.template.markdown diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown new file mode 100644 index 00000000000..15477408f00 --- /dev/null +++ b/source/_components/binary_sensor.template.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Template Binary Sensor" +description: "Instructions how to integrate Template binary sensors into Home Assistant." +date: 2016-02-25 15:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Binary Sensor +--- + +The `template` platform supports sensors which breaks out the state and `state_attributes` from other entities. + +To enable Template sensors in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + platform: template + sensors: + sun_up: + value_template: {% raw %}'{{ states.sun.sun.attributes.elevation > 0}}'{% endraw %} + friendly_name: 'Sun is up' +``` + +Configuration variables: + +- **sensors** array (*Required*): List of your sensors. + - **friendly_name** (*Optional*): Name to use in the Frontend. + - **sensor_class** (*Optional*): Defines the class of the sensor (motion, heat, moisture, etc) + - **value_template** (*Optional*): Defines a [template](/getting-started/templating/) to extract a value from the payload. + + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Sensor threshold %} + +This example indicates true if a sensor is above a given threshold. Assuming a sensor of `furnace` that provides a current reading for the fan motor, we can determine if the furnace is running by checking that it is over some threshold: + +```yaml +sensor: + platform: template + sensors: + furnace_on: + value_template: {{ states.sensor.furnace.state > 2.5 }} + friendly_name: 'Furnace Running + sensor_class: heat +``` From ffa1f8b2982acecce60dfc4ca6ce771ecbd5f2b2 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Thu, 25 Feb 2016 15:24:04 -0800 Subject: [PATCH 40/41] Add an automation example for sending a notification based on a sensor --- .../notify_if_over_threshold.markdown | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 source/_cookbook/notify_if_over_threshold.markdown diff --git a/source/_cookbook/notify_if_over_threshold.markdown b/source/_cookbook/notify_if_over_threshold.markdown new file mode 100644 index 00000000000..a7651eb534f --- /dev/null +++ b/source/_cookbook/notify_if_over_threshold.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Send notification based on sensor" +description: "Basic example of how to send a templated notification if a sensor is over a given threshold" +date: 2016-02-25 15:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Automation Examples +--- + +The following example sends a notification via pushbullet if a sensor is over a critical value: + +```yaml + +notify me: + platform: pushbullet + api_key: "API_KEY_HERE" + name: mypushbullet + +automation: + - alias: FanOn + trigger: + platform: numeric_state + entity_id: sensor.furnace + above: 2 + action: + service: notify.mypushbullet + data: + title: "Furnace fan is running" + message: "Fan running because current is {% raw %}{{ states.sensor.furnace.state }}{% endraw %} amps" +``` + +If you also want a notification when it drops back down below that limit, you could add this as well: + +```yaml + - alias: FanOff + trigger: + platform: numeric_state + entity_id: sensor.furnace + below: 2 + action: + service: notify.mypushbullet + data: + title: "Furnace fan is stopped" + message: "Fan stopped because current is {% raw %}{{ states.sensor.furnace.state }}{% endraw %} amps" +``` From fec9142db4cf686a2852228d28e86b21eaa35590 Mon Sep 17 00:00:00 2001 From: Justin Moy Date: Sat, 27 Feb 2016 15:43:35 -0700 Subject: [PATCH 41/41] Add SendGrid notify platform --- source/_components/notify.sendgrid.markdown | 35 ++++++++++++++++++++ source/images/supported_brands/sendgrid.png | Bin 0 -> 25795 bytes 2 files changed, 35 insertions(+) create mode 100644 source/_components/notify.sendgrid.markdown create mode 100644 source/images/supported_brands/sendgrid.png diff --git a/source/_components/notify.sendgrid.markdown b/source/_components/notify.sendgrid.markdown new file mode 100644 index 00000000000..966943d9b1b --- /dev/null +++ b/source/_components/notify.sendgrid.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "SendGrid" +description: "Instructions how to add email notifications via SendGrid to Home Assistant." +date: 2016-02-27 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: sendgrid.png +ha_category: Notifications +--- + +The `sendgrid` notification platform sends email notifications via [SendGrid](https://sendgrid.com/), a proven cloud-based email platform. + +To enable notification emails via SendGrid in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + name: NOTIFIER_NAME + platform: sendgrid + api_key: API_KEY + sender: SENDER_EMAIL_ADDRESS + recipient: YOUR_RECIPIENT +``` + +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`. +- **api_key** (*Required*): SendGrid API key - https://app.sendgrid.com/settings/api_keys +- **sender** (*Required*): E-mail address of the sender. +- **recipient** (*Required*): Recipient of the notification. + +To use notifications, please see the [getting started with automation page]({{site_root}}/components/automation/). diff --git a/source/images/supported_brands/sendgrid.png b/source/images/supported_brands/sendgrid.png new file mode 100644 index 0000000000000000000000000000000000000000..49a379ae5b83ba0cb68b8357180748f6cf880556 GIT binary patch literal 25795 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
  • {;r<&^G#=21N#nVx-49->-$pGL$v|lA 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 Z_t3DsyZE7SWa%FjmF3kz<+4Wp{{tKuXr2H7 literal 0 HcmV?d00001