From 9b8c289ff3c39722c216051e870787f37fc1f592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20B=C3=A9trisey?= Date: Sun, 30 Oct 2016 00:09:57 +0200 Subject: [PATCH 01/27] Add Swisscom Internet-Box device tracker --- .../device_tracker.swisscom.markdown | 33 ++++++++++++++++++ source/images/supported_brands/swisscom.png | Bin 0 -> 53260 bytes 2 files changed, 33 insertions(+) create mode 100644 source/_components/device_tracker.swisscom.markdown create mode 100644 source/images/supported_brands/swisscom.png diff --git a/source/_components/device_tracker.swisscom.markdown b/source/_components/device_tracker.swisscom.markdown new file mode 100644 index 00000000000..eb3d2bd10d3 --- /dev/null +++ b/source/_components/device_tracker.swisscom.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Swisscom Internet-Box" +description: "Instructions how to integrate Swisscom Internet-Box into Home Assistant." +date: 2016-10-29 23:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: swisscom.png +ha_category: Presence Detection +ha_release: 0.32 +--- + + +The `swisscom` platform offers presence detection by looking at connected devices to an [Internet-Box](https://www.swisscom.ch/en/residential/help/device/internet-router.html) router from [Swisscom](https://www.swisscom.ch), which is the main Internet provider in Switzerland. + +

+There are three models of Internet-Box (light, standard and plus). The platform has only been tested on the Internet-Box plus but the others should work as well because they have the same web interface. +

+ +To use an Internet-Box router in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: swisscom + host: "192.168.1.1" + username: admin + password: +``` + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/images/supported_brands/swisscom.png b/source/images/supported_brands/swisscom.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6fea1b78327b5d8586273e58a9d377e1c8e982 GIT binary patch literal 53260 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 Date: Wed, 2 Nov 2016 23:16:21 +0100 Subject: [PATCH 02/27] Removed unnecessary parameters --- source/_components/device_tracker.swisscom.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_components/device_tracker.swisscom.markdown b/source/_components/device_tracker.swisscom.markdown index eb3d2bd10d3..e7931976677 100644 --- a/source/_components/device_tracker.swisscom.markdown +++ b/source/_components/device_tracker.swisscom.markdown @@ -25,9 +25,7 @@ To use an Internet-Box router in your installation, add the following to your `c # Example configuration.yaml entry device_tracker: platform: swisscom - host: "192.168.1.1" - username: admin - password: + host: "192.168.1.1" # only required if not 192.168.1.1 ``` See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 786ae7529817d6ac1dbe27bc0d1dc3be5a70a588 Mon Sep 17 00:00:00 2001 From: Hugo Dupras Date: Tue, 8 Nov 2016 00:10:40 +0100 Subject: [PATCH 03/27] Update Netatmo binary sensor documentation (#1412) * Update Netatmo binary sensor documentation New limit parameter is introduced to reflect the events from the last X minutes Signed-off-by: Hugo D. (jabesq) * Change limit to timeout Signed-off-by: Hugo D. (jabesq) --- source/_components/binary_sensor.netatmo.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/binary_sensor.netatmo.markdown b/source/_components/binary_sensor.netatmo.markdown index 30a0d4dc6bc..06632d59a29 100644 --- a/source/_components/binary_sensor.netatmo.markdown +++ b/source/_components/binary_sensor.netatmo.markdown @@ -27,6 +27,7 @@ If you want to select a specific sensor, set discovery to False for [netatmo](/c binary_sensor: platform: netatmo home: home_name + timeout: 15 cameras: - camera_name1 monitored_conditions: @@ -38,6 +39,7 @@ binary_sensor: Configuration variables: - **home** (*Optional*): Will use the cameras of this home only. +- **timeout** (*Optional*): The binary sensors will reflect the events from the last X minutes (default: 15) - **cameras** array (*Optional*): Cameras to use. Multiple enties allowed. - 'camera_name': Name of the camera to display. - **monitored_conditions** array (*Optional*): List of monitored conditions. @@ -49,4 +51,4 @@ If **home** and **cameras** is not provided, all cameras will be used. If multip

[Welcome tags](https://www.netatmo.com/product/security/welcome/tags) are not yet supported, but will be in a next update. -

\ No newline at end of file +

From b7ecb155f344ec8a30db7d1ccd73ea91bcf236d2 Mon Sep 17 00:00:00 2001 From: Finbarr Brady Date: Thu, 10 Nov 2016 14:38:15 +0000 Subject: [PATCH 04/27] Documentation for Cisco IOS device tracker (#1419) * New cisco_ios device_tracker component docs * Update layout * Adding Cisco PNG * Made smaller --- .../device_tracker.cisco_ios.markdown | 68 ++++++++++++++++++ source/images/supported_brands/cisco.png | Bin 0 -> 22153 bytes 2 files changed, 68 insertions(+) create mode 100644 source/_components/device_tracker.cisco_ios.markdown create mode 100644 source/images/supported_brands/cisco.png diff --git a/source/_components/device_tracker.cisco_ios.markdown b/source/_components/device_tracker.cisco_ios.markdown new file mode 100644 index 00000000000..231847a22f8 --- /dev/null +++ b/source/_components/device_tracker.cisco_ios.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "Cisco IOS" +description: "Instructions how to integrate Cisco IOS routers into Home Assistant." +date: 2016-11-07 19:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: cisco.png +ha_category: Presence Detection +--- + +This is a presence detection scanner for [Cisco](http://www.cisco.com) IOS devices. + +

+This device tracker needs SSH to be enabled on the router. +

+ +Before using this scanner it is recommended that you lower the arp cache timeout on your router, as Cisco IOS normally comes with a 4 hour default arp cache timeout. + +For example, the following commands will lower the timeout to 2 minutes on Vlan1: + +```bash +# 1. use this command to see what Vlan your devices are on +show ip arp + +# 2. Go into configure mode +conf t + +# 3. Use the Vlan name as you see it from step 1 above +interface Vlan1 + +# 4. Set a new arp cache timeout +arp timeout 120 + +# 5. Exit +# Press to exit configure mode + +# 6. Don't forget to save the new config, so that it will survive a reboot +copy running-config startup-config +``` + +

+If you have a very large number of devices on your VLan (+1000), then you may want to adjust the arp cache timeout to suit your needs. See [this discussion](https://supportforums.cisco.com/discussion/10169296/arp-timeout) to learn more. +

+ +To use this device tracker in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: cisco_ios + host: ROUTER_IP_ADDRESS + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **username** (*Required*): The username of an user with administrative privileges. +- **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. + + diff --git a/source/images/supported_brands/cisco.png b/source/images/supported_brands/cisco.png new file mode 100644 index 0000000000000000000000000000000000000000..7aff7da2e0bc3b46ef7d77cb1fb40e21d8f08f57 GIT binary patch literal 22153 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 W(N^)No?gSUuvmlbEwE;ON&f|FN4X9F literal 0 HcmV?d00001 From e67faef2a0aa345454893b49ecd03682000bda89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Thu, 10 Nov 2016 15:39:39 +0100 Subject: [PATCH 05/27] Update light.flux_led.markdown (#1424) --- source/_components/light.flux_led.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index 44300a716f1..41c0d7d379a 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -73,3 +73,19 @@ automation: entity_id: light.flux_living_room_lamp effect: random ``` + +Will add a light with out the white mode: + +```yaml + 192.168.1.10: + name: NAME + mode: "rgb" +``` + +Will add a light wit white mode (default). Changing the brightness will set the bulb in white mode: + +```yaml + 192.168.1.10: + name: NAME + mode: "rgbw" +``` From 7f27b38aa91f6dbe2cb02adf488cf82e2d0ac602 Mon Sep 17 00:00:00 2001 From: Christopher Viel Date: Thu, 10 Nov 2016 09:40:35 -0500 Subject: [PATCH 06/27] Add turn_off to the wol switch. (#1422) Updates the documentation to add changes from home-assistant/7a946af40f487b9f3152748875eae77d2ba849df --- source/_components/switch.wake_on_lan.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index 87ac2410ba7..833102d5466 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -15,7 +15,7 @@ ha_release: 0.16 The `wake_on_lan` (WOL) switch platform allows you to turn on a [WOL](https://en.wikipedia.org/wiki/Wake-on-LAN) enabled computer.

-The WOL switch can only turn on your computer and monitor the state. There is no universal way to turn off a computer remotely. +The WOL switch can only turn on your computer and monitor the state. There is no universal way to turn off a computer remotely. The `turn_off` variable is there to help you call a script when you have figured out how to remotely turn off your computer.

To enable this switch in your installation, add the following to your `configuration.yaml` file: @@ -32,4 +32,4 @@ Configuration variables: - **mac_address** (*Required*): MAC address to send the wake up command to. - **name** (*Optional*): The name of the switch. Default is 'Wake on LAN'. - **host** (*Optional*): The IP address or hostname to check the state of the device (on/off). - +- **turn_off** (*Optional*): Defines an [action](/getting-started/automation/) to run when the switch is turned off. From c157127661e5879c366a455999079af3863358ca Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Thu, 10 Nov 2016 17:42:50 -0500 Subject: [PATCH 07/27] Fixed typo on light.flux_led.markdown (#1425) --- source/_components/light.flux_led.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index 41c0d7d379a..e5701d9c0c5 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -82,7 +82,7 @@ Will add a light with out the white mode: mode: "rgb" ``` -Will add a light wit white mode (default). Changing the brightness will set the bulb in white mode: +Will add a light with white mode (default). Changing the brightness will set the bulb in white mode: ```yaml 192.168.1.10: From 6c676dbefe010cfcb1f06309ce66a83544ee9e7f Mon Sep 17 00:00:00 2001 From: Antoine Bertin Date: Fri, 11 Nov 2016 08:39:38 +0100 Subject: [PATCH 08/27] Add mqtt_template light documentation (#1410) * Add mqtt_template light documentation * Use raw and endraw --- .../_components/light.mqtt_template.markdown | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 source/_components/light.mqtt_template.markdown diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown new file mode 100644 index 00000000000..ddc0752f4bd --- /dev/null +++ b/source/_components/light.mqtt_template.markdown @@ -0,0 +1,109 @@ +--- +layout: page +title: "MQTT Template Light" +description: "Instructions for how to setup MQTT Template lights within Home Assistant." +date: 2016-11-06 21:16 +sidebar: true +comments: false +sharing: true +footer: true +logo: mqtt.png +ha_category: Light +ha_iot_class: "Local Push" +ha_release: 0.33 +--- + + +The `mqtt_template` light platform lets you control a MQTT-enabled light that receive commands on a command topic and optionaly sends status update on a state topic. +It is format-agnostic so you can use any data format you want (i.e. string, JSON), just configure it with templating. + +This platform supports on/off, brightness, RGB colors, transitions, and short/long flashing. + +In an ideal scenario, the MQTT device will have a state topic to publish state changes. If these messages are published with the RETAIN flag, the MQTT light will receive an instant state update after subscription and will start with the correct state. Otherwise, the initial state of the light will be off. + +When a state topic is not available, the light will work in optimistic mode. In this mode, the light will immediately change state after every command. Otherwise, the light will wait for state confirmation from the device (message from `state_topic`). + +Optimistic mode can be forced, even if state topic is available. Try enabling it if the light is operating incorrectly. + +```yaml +# Example configuration.yaml entry +light: + - platform: mqtt_template + command_topic: "home/rgb1/set" + command_on_template: "on" + command_off_template: "off" +``` + +Configuration variables: + +- **name** (*Optional*): The name of the light. Default is "MQTT Template Light." +- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. +- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. +- **command_on_template** (*Required*): The template for *on* state changes. Available variables: `state`, `brightness`, `red`, `green`, `blue`, `flash` and `transition`. +- **command_off_template** (*Required*): The template for *off* state changes. Available variables: `state` and `transition`. +- **state_template** (*Optional*): Template to extract state from the state payload value. +- **brightness_template** (*Optional*): Template to extract brightness from the state payload value. +- **red_template** (*Optional*): Template to extract red color from the state payload value. +- **green_template** (*Optional*): Template to extract green color from the state payload value. +- **blue_template** (*Optional*): Template to extract blue color from the state payload value. +- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic or state template is defined, else false. +- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. + +

+ Make sure that your topics match exact. `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 light. + +### {% linkable_title Simple string payload %} + +For a simple string payload with the format `state,brightness,r-g-b` (e.g. `on,255,255-255-255`), add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: mqtt_template + command_topic: "home/rgb1/set" + state_topic: "home/rgb1/status" + command_on_template: "{% raw %}on,{{ brightness|d }},{{ red|d }}-{{ green|d }}-{{ blue|d }}{% endraw %}" + command_off_template: "off" + state_template: "{% raw %}{{ value.split(',')[0] }}{% endraw %}" # must return `on` or `off` + brightness_template: "{% raw %}{{ value.split(',')[1] }}{% endraw %}" + red_template: "{% raw %}{{ value.split(',')[2].split('-')[0] }}{% endraw %}" + green_template: "{% raw %}{{ value.split(',')[2].split('-')[1] }}{% endraw %}" + blue_template: "{% raw %}{{ value.split(',')[2].split('-')[2] }}{% endraw %}" +``` + +### {% linkable_title JSON payload %} + +For a JSON payload with the format `{"state": "on", "brightness": 255, "color": [255, 255, 255]}`, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: mqtt_template + command_topic: "home/rgb1/set" + state_topic: "home/rgb1/status" + command_on_template: >{% raw %} + {"state": "on" + {%- if brightness is defined -%} + , "brightness": {{ brightness }} + {%- endif -%} + {%- if red is defined and green is defined and blue is defined -%} + , "color": [{{ red }}, {{ green }}, {{ blue }}] + {%- endif -%} + }{% endraw %} + command_off_template: '{"state": "off"}' + state_template: '{% raw %}{{ value_json.state }}{% endraw %}' + brightness_template: '{% raw %}{{ value_json.brightness }}{% endraw %}' + red_template: '{% raw %}{{ value_json.color[0] }}{% endraw %}' + green_template: '{% raw %}{{ value_json.color[1] }}{% endraw %}' + blue_template: '{% raw %}{{ value_json.color[2] }}{% endraw %}' +``` + +### {% linkable_title No brightness or color support %} + +If you don't want brightness or color support, just omit the corresponding configuration sections. + From 5905663f1c9cf017f95f2a48adc4e92478dd39e1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 11 Nov 2016 15:43:28 +0100 Subject: [PATCH 09/27] Add ha_release --- .../_components/device_tracker.cisco_ios.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/device_tracker.cisco_ios.markdown b/source/_components/device_tracker.cisco_ios.markdown index 231847a22f8..1402e840649 100644 --- a/source/_components/device_tracker.cisco_ios.markdown +++ b/source/_components/device_tracker.cisco_ios.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: cisco.png ha_category: Presence Detection +ha_release: 0.33 --- This is a presence detection scanner for [Cisco](http://www.cisco.com) IOS devices. @@ -17,7 +18,7 @@ This is a presence detection scanner for [Cisco](http://www.cisco.com) IOS devic This device tracker needs SSH to be enabled on the router.

-Before using this scanner it is recommended that you lower the arp cache timeout on your router, as Cisco IOS normally comes with a 4 hour default arp cache timeout. +Before using this scanner it is recommended that you lower the ARP cache timeout on your router, as Cisco IOS normally comes with a 4 hour default ARP cache timeout. For example, the following commands will lower the timeout to 2 minutes on Vlan1: @@ -42,7 +43,7 @@ copy running-config startup-config ```

-If you have a very large number of devices on your VLan (+1000), then you may want to adjust the arp cache timeout to suit your needs. See [this discussion](https://supportforums.cisco.com/discussion/10169296/arp-timeout) to learn more. +If you have a very large number of devices on your VLan (+1000), then you may want to adjust the ARP cache timeout to suit your needs. See [this discussion](https://supportforums.cisco.com/discussion/10169296/arp-timeout) to learn more.

To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -50,10 +51,10 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: cisco_ios - host: ROUTER_IP_ADDRESS - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: cisco_ios + host: ROUTER_IP_ADDRESS + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: @@ -65,4 +66,3 @@ Configuration variables: See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. - From 03976bdb71e7ca968f09348c56b841e3e14bdd6a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 11 Nov 2016 15:43:51 +0100 Subject: [PATCH 10/27] Put note in a note box --- source/_components/sensor.synologydsm.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index 81c41ec40e8..cc24ff836e3 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -14,7 +14,11 @@ 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. +This `synologydms` sensor allows getting various statistics from your [Synology NAS](https://www.synology.com). + +

+This sensor will wake up your Synology NAS if it's in hibernation mode. +

To use the SynologyDSM sensor in your installation, add the following to your `configuration.yaml` file: From 9e7ee634f131fa446f39a2182bfea3261a2aa845 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 13 Nov 2016 16:18:38 -0500 Subject: [PATCH 11/27] Added some extra options to Weather Underground component and organized option list in alphabetical order (#1418) * Added some extra options to Weather Underground component and organized option in alphabetical order * Added location and elevation options --- .../_components/sensor.wunderground.markdown | 91 +++++++++++-------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index dc672a92cec..ba28a947d7d 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -28,34 +28,45 @@ sensor: - platform: wunderground api_key: your_api_key monitored_conditions: - - weather - - temp_f - - temp_c - - station_id + - alerts + - dewpoint_c + - dewpoint_f + - dewpoint_string - feelslike_c - feelslike_f - feelslike_string - heat_index_c - heat_index_f - heat_index_string - - dewpoint_c - - dewpoint_f - - dewpoint_string - - wind_kph - - wind_mph - - UV - - pressure_in - - pressure_mb - - wind_dir - - wind_string - - relative_humidity - - visibility_mi - - visibility_km + - elevation + - location + - observation_time + - precip_1hr_in + - precip_1hr_metric + - precip_1hr_string - precip_today_in - precip_today_metric - precip_today_string + - pressure_in + - pressure_mb + - pressure_trend + - relative_humidity + - station_id - solarradiation - - alerts + - temperature_string + - temp_c + - temp_f + - UV + - visibility_km + - visibility_mi + - weather + - wind_degrees + - wind_dir + - wind_gust_kph + - wind_gust_mph + - wind_kph + - wind_mph + - wind_string ``` @@ -63,34 +74,42 @@ Configuration variables: - **api_key** (Required): See above. - **pws_id** (Optional): You can enter a Personal Weather Station ID. The current list of Wunderground PWS stations is available [here](https://www.wunderground.com/weatherstation/ListStations.asp). If you do not enter a PWS ID, the current location information (latitude and longitude) from your `configuration.yaml` will be used to display weather conditions. - **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. - - **weather**: A human-readable text summary with picture from Wunderground. - - **temp_f**: Current temperature in Fahrenheit - - **temp_c**: Current temperature in Celsius - - **station_id**: Your personal weather station (PWS) ID + - **alerts**: Current severe weather advisories + - **dewpoint_c**: Temperature in Celsius below which water droplets begin to condense and dew can form + - **dewpoint_f**: Temperature in Fahrenheit below which water droplets begin to condense and dew can form + - **dewpoint_string**: Text summary of dew point - **feelslike_c**: Feels like (or apparent) temperature in Celsius - **feelslike_f**: Feels like (or apparent) temperature in Fahrenheit - **feelslike_string**: Text summary of how the current temperature feels like - **heat_index_c**: Heat index (combined effects of the temperature and humidity of the air) in Celsius - **heat_index_f**: Heat index (combined effects of the temperature and humidity of the air) in Fahrenheit - **heat_index_string**: Text summary of current heat index - - **dewpoint_c**: Temperature in Celsius below which water droplets begin to condense and dew can form - - **dewpoint_f**: Temperature in Fahrenheit below which water droplets begin to condense and dew can form - - **dewpoint_string**: Text summary of dew point - - **wind_kph**: Current wind speed in kph - - **wind_mph**: Current wind speed in mph - - **UV**: Current levels of UV radiation. See [here](https://www.wunderground.com/resources/health/uvindex.asp) for explanation. - - **pressure_in**: Atmospheric air pressure in inches - - **pressure_mb**: Atmospheric air pressure in millibars - - **wind_dir**: Wind direction - - **wind_string**: Text summary of current wind conditions - - **relative_humidity**: Relative humidity - - **visibility_mi**: Average visibility in miles - - **visibility_km**: Average visibility in km + - **elevation**: Elevation in feet + - **location**: City and State + - **observation_time**: Text summary of observation time - **precip_today_in**: Total precipitation in inches - **precip_today_metric**: Total precipitation in metric units - **precip_today_string**: Text summary of precipitation today + - **pressure_in**: Atmospheric air pressure in inches + - **pressure_mb**: Atmospheric air pressure in millibars + - **pressure_trend**: Atmospheric air presure trend signal (+/-) + - **relative_humidity**: Relative humidity + - **station_id**: Your personal weather station (PWS) ID - **solarradiation**: Current levels of solar radiation - - **alerts**: Current severe weather advisories + - **temperature_string**: Temperature text combinding Fahrenheit and Celsius + - **temp_c**: Current temperature in Celsius + - **temp_f**: Current temperature in Fahrenheit + - **UV**: Current levels of UV radiation. See [here](https://www.wunderground.com/resources/health/uvindex.asp) for explanation. + - **visibility_km**: Average visibility in km + - **visibility_mi**: Average visibility in miles + - **weather**: A human-readable text summary with picture from Wunderground. + - **wind_degrees**: Wind degrees + - **wind_dir**: Wind direction + - **wind_gust_kph**: Wind gusts speed in kph + - **wind_gust_mph**: Wind gusts speed in mph + - **wind_kph**: Current wind speed in kph + - **wind_mph**: Current wind speed in mph + - **wind_string**: Text summary of current wind conditions All the conditions listed above will be updated each 5 minutes with exception of `alerts` that will be updated each 15 minutes by default. From a03edbc1236979f59cd751e38ac4fd207c59f575 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 15 Nov 2016 08:30:57 +0100 Subject: [PATCH 12/27] Add birth and will message --- source/_components/mqtt.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 288a9145bab..98906a9c8d8 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -29,6 +29,16 @@ mqtt: password: PASSWORD certificate: /home/paulus/dev/addtrustexternalcaroot.crt protocol: 3.1 + birth_message: + topic: 'hass/status' + payload: 'online' + qos: 1 + retain: true + will_message: + topic: 'hass/status' + payload: 'offline' + qos: 1 + retain: true ``` Configuration variables: @@ -43,6 +53,16 @@ Configuration variables: - **client_key** (*Optional*): Client key (example: `/home/user/owntracks/cookie.key`) - **client_cert** (*Optional*): Client certificate (example: `/home/user/owntracks/cookie.crt`) - **protocol** (*Optional*): Protocol to use: 3.1 or 3.1.1. By default it connects with 3.1.1 and falls back to 3.1 if server does not support 3.1. +- **birth_message** (*Optional*): + - **topic** (*Required*): The MQTT topic to publish the message. + - **payload** (*Required*): The message content. + - **qos** (*Optional*): The maximum QoS level of the topic. Default is 0. + - **retain** (*Optional*): If the published message should have the retain flag on or not. Defaults to `True`. +- **will_message** (*Optional*): + - **topic** (*Required*): The MQTT topic to publish the message. + - **payload** (*Required*): The message content. + - **qos** (*Optional*): The maximum QoS level of the topic. Default is 0. + - **retain** (*Optional*): If the published message should have the retain flag on or not. Defaults to `True`. ## {% linkable_title Picking a broker %} From 7192484bf18b2775e77ab4792710f7cb6457a536 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 18 Nov 2016 01:14:08 -0500 Subject: [PATCH 13/27] add reference to light.hue_activate_scene (#1453) Related to #4425 --- source/_components/light.markdown | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/source/_components/light.markdown b/source/_components/light.markdown index abbdb8edee2..d6575483ae5 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -54,7 +54,7 @@ Turns one or multiple lights off. ### {% linkable_title Service `light.toggle` %} -Toggles the state of one or multiple lights using [groups]({{site_root}}/components/group/). +Toggles the state of one or multiple lights using [groups]({{site_root}}/components/group/). *Note*: If `light.toggle` is used for a group of lights, it will toggle the individual state of each light. @@ -62,3 +62,17 @@ Toggles the state of one or multiple lights using [groups]({{site_root}}/compone | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all. | `transition` | yes | Integer that represents the time the light should take to transition to the new state in seconds. + +### {% linkable_title Service `light.hue_activate_scene` %} + +If you have hue lights, there is a service call to directly activate +scenes that are stored in your hue hub. This will have all the bulbs +transitioned at once, instead of one at a time using standard scenes +in Home Assistant. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `group_name` | no | The group/room name of the lights. Find this in the Hue official app. +| `scene_name` | no | The name of the Scene. Find this in the Hue official app. + +*Note*: `group_name` is not linked to Home Assistant group name. From 77e1d8c2802824e11abddc9162698564a1b83d3e Mon Sep 17 00:00:00 2001 From: hexa- Date: Fri, 18 Nov 2016 18:09:32 +0100 Subject: [PATCH 14/27] Add http.use_x_forwarded_for option (#1430) Signed-off-by: Martin Weinelt --- source/_components/http.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 15cc189cae2..136303cf51f 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -32,6 +32,7 @@ Configuration variables: - **ssl_certificate** (*Optional*): Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. - **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection. - **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://home-assistant.io` will allow requests from `https://home-assistant.io` but __not__ `http://home-assistant.io`. +- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You should only enable this in a trustworthy network environment, as clients passing that header could easily spoof their source IP address. - **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. The sample below shows a configuration entry with possible values: From 1fef830fbba638c87cfcad4b61f2310b09c95164 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 19 Nov 2016 10:05:42 +0100 Subject: [PATCH 15/27] Add PVOutput docs (#1406) --- source/_components/sensor.pvoutput.markdown | 37 ++++++++++++++++++++ source/images/supported_brands/pvoutput.png | Bin 0 -> 8035 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_components/sensor.pvoutput.markdown create mode 100644 source/images/supported_brands/pvoutput.png diff --git a/source/_components/sensor.pvoutput.markdown b/source/_components/sensor.pvoutput.markdown new file mode 100644 index 00000000000..624e6791c31 --- /dev/null +++ b/source/_components/sensor.pvoutput.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "PVOutput Sensor" +description: "Instructions how to use PVOutput within Home Assistant." +date: 2016-11-06 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: pvoutput.png +ha_category: Energy +ha_release: 0.33 +--- + + +The `pvoutput` sensor platform consumes informations from [PVOutput](http://pvoutput.org/) which were uploaded by your solar photovoltaic (PV) system. + +To add PVOutput details to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: pvoutput + system_id: YOUR_SYSTEM_ID + api_key: YOUR_API_KEY + scan_interval: 120 +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key. A read-only key is fine. +- **system_id** (*Required*): The ID of your station. + +

+It's recommended to set `scan_interval:` according to a value greater than 60 seconds. The service only allows 60 requests per hour but the sensor's default is 30 seconds. +

+ diff --git a/source/images/supported_brands/pvoutput.png b/source/images/supported_brands/pvoutput.png new file mode 100644 index 0000000000000000000000000000000000000000..32e063a7d70b6e88ffb05e484ed19a76de98dc4b GIT binary patch literal 8035 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 z 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 Date: Sat, 19 Nov 2016 11:48:42 +0100 Subject: [PATCH 16/27] Update z-wave.markdown (#1452) * Update z-wave.markdown * Update z-wave.markdown --- source/getting-started/z-wave.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index 5a4ba4f1cd3..abb77fc1322 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -79,6 +79,8 @@ Configuration variables: - **customize** (*Optional*): This attribute contains node-specific override values: - **polling_intensity** (*Optional*): Enables polling of a value and sets the frequency of polling (0=none, 1=every time through the list, 2=every other time, etc). If not specified then your device will not be polled. - **ignored** (*Optional*): Ignore this entitiy completely. It won't be shown in the Web Interface and no events are generated for it. + - **refresh_value** (*Optional*): Enable refreshing of the node value. Only light component uses this. Defaults to 2 second delay. + - **delay** (*Optional*): Specify the delay to wait for refresh of node value if you want other than 2 seconds. To find the path of your Z-Wave USB stick or module, run: From 71c4245fe58c04265f5868028eb3bc79a9a23e8f Mon Sep 17 00:00:00 2001 From: skyval Date: Sat, 19 Nov 2016 12:49:39 +0200 Subject: [PATCH 17/27] Add broadlink sensor support (#1457) * Add broadlink sensor suport * Add ha_release --- source/_components/sensor.broadlink.markdown | 58 +++++++++++++++++++ source/images/supported_brands/broadlink.png | Bin 0 -> 19070 bytes 2 files changed, 58 insertions(+) create mode 100644 source/_components/sensor.broadlink.markdown create mode 100644 source/images/supported_brands/broadlink.png diff --git a/source/_components/sensor.broadlink.markdown b/source/_components/sensor.broadlink.markdown new file mode 100644 index 00000000000..408df42789b --- /dev/null +++ b/source/_components/sensor.broadlink.markdown @@ -0,0 +1,58 @@ +--- +layout: page +title: "Broadlink RM2 and A1 sensor" +description: "Instructions how to integrate Broadlink RM2 and/or A1 E-air sensors within Home Assistant." +date: 2016-11-08 21:59 +sidebar: true +comments: false +sharing: true +footer: true +logo: broadlink.png +ha_category: Sensor +ha_release: 0.34 +--- + + +The `broadlink` sensor platform let you monitor data from an RM2 and A1 E-air. +There is currently no support for the cloud API. + +To set it up, add the following information to your `configuration.yaml` file: + +Obtain sensor data from an A1: +```yaml +sensor: + platform: broadlink + update_interval: 60 + host: IP_ADDRESS + mac: 'MAC_ADDRESS' + monitored_conditions: + - temperature + - humidity + - air_quality + - light + - noise +``` + +Obtain temperature data from an RM2: +```yaml +sensor: + platform: broadlink + update_interval: 60 + host: IP_ADDRESS + mac: 'MAC_ADDRESS' + monitored_conditions: + - temperature +``` + +Configuration options: +- **name** (*Optional*): Default BL. Sensor name +- **update_interval** (*Optional*): Default 300. Time in seconds to fetch data from sensors +- **host** (*Required*): The hostname/IP address to connect to. +- **mac** (*Required*): Device mac address. +- **monitored_conditions** array (*Required*): States to monitor. + - 'temperature' + - 'humidity' + - 'air_quality' + - 'light' + - 'noise' + diff --git a/source/images/supported_brands/broadlink.png b/source/images/supported_brands/broadlink.png new file mode 100644 index 0000000000000000000000000000000000000000..03e131982f9b5ad9e5025fc7095dc2dbd67171d4 GIT binary patch literal 19070 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 r>cTr1+^k Date: Sat, 19 Nov 2016 12:27:08 +0100 Subject: [PATCH 18/27] Add new contributors --- source/developers/credits.markdown | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 7623fd22fa5..a0877d45adc 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -19,16 +19,6 @@ 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) @@ -41,6 +31,7 @@ This page contains a list of people who have contributed in one way or another t - [Andrew LeCody](https://github.com/aceat64) - [Andy Loughran](https://github.com/andylockran) - [andythigpen](https://github.com/andythigpen) +- [Antoine Bertin](https://github.com/Diaoul) - [Antonio Párraga Navarro](https://github.com/aparraga) - [Ardetus](https://github.com/Ardetus) - [Ardi Mehist](https://github.com/omgapuppy) @@ -63,6 +54,7 @@ This page contains a list of people who have contributed in one way or another t - [Charles Spirakis](https://github.com/srcLurker) - [Chris Mulder](https://github.com/chrisvis) - [Christian Braedstrup](https://github.com/LinuxChristian) +- [Christopher Viel](https://github.com/Chris-V) - [chrom3](https://github.com/chrom3) - [Corban Mailloux](https://github.com/corbanmailloux) - [coteyr](https://github.com/coteyr/) @@ -74,6 +66,7 @@ This page contains a list of people who have contributed in one way or another t - [Daniel Matuschek](https://github.com/usul27) - [Daniel Perna](https://github.com/danielperna84) - [Daniel Zozin](https://github.com/zeroDenial) +- [Danijel Stojnic](https://github.com/danijelst) - [Dan Smith](https://github.com/kk7ds) - [Dan Sullivan](https://github.com/dansullivan86/) - [Daren Lord](https://github.com/Xorso) @@ -92,6 +85,7 @@ This page contains a list of people who have contributed in one way or another t - [Fabian Affolter](https://github.com/fabaff) - [Fabian Heredia Montiel](https://github.com/fabianhjr) - [Felix](https://github.com/xifle) +- [Ferry van Zeelst](https://github.com/StaticCube) - [Finbarr Brady](https://github.com/fbradyirl) - [Flavio Castelli](https://github.com/flavio) - [Florian Holzapfel](https://github.com/florianholzapfel) @@ -124,6 +118,7 @@ This page contains a list of people who have contributed in one way or another t - [Jacob Tomlinson](https://github.com/jacobtomlinson) - [James Cole](https://github.com/jamespcole) - [Jan Harkes](https://github.com/jaharkes) +- [Jan Losinski](https://github.com/janLo) - [Jan-Preben Mossin](https://github.com/jpmossin) - [Jared Beckham](https://github.com/tbeckha) - [Jaret Stezelberger](https://github.com/DesignFirst) @@ -135,6 +130,7 @@ This page contains a list of people who have contributed in one way or another t - [Jeff Schroeder](https://github.com/SEJeff) - [Jesse Newland](https://github.com/jnewland) - [jgriff2](https://github.com/jgriff2) +- [jnimmo](https://github.com/jnimmo) - [Joel Asher Friedman](https://github.com/joelash) - [Joe McMonagle](https://github.com/joemcmonagle) - [John Arild Berentsen](https://github.com/turbokongen) @@ -142,6 +138,7 @@ This page contains a list of people who have contributed in one way or another t - [John Lindley](https://github.com/jwl17330536) - [John McLaughlin](https://github.com/loghound) - [John Williams](https://github.com/Jaidan) +- [Jon Caruana](https://github.com/joncar) - [Jon Maddox](https://github.com/maddox) - [joopert](https://github.com/joopert) - [Joseph Hughes](https://github.com/joshughes) @@ -166,6 +163,7 @@ This page contains a list of people who have contributed in one way or another t - [Lewis Juggins](https://github.com/lwis/) - [Luca Soldi](https://github.com/LucaSoldi) - [Lukas Hetzenecker](https://github.com/lukas-hetzenecker) +- [Magnus Ihse Bursie](https://github.com/magicus) - [Magnus Knutas](https://github.com/MagnusKnutas) - [Mal Curtis](https://github.com/snikch) - [Malte Deiseroth](https://github.com/deisi) @@ -220,6 +218,7 @@ This page contains a list of people who have contributed in one way or another t - [Ryan Kraus](https://github.com/rmkraus) - [Ryan Turner](https://github.com/ryanturner) - [sam-io](https://github.com/sam-io) +- [Samuel Bétrisey](https://github.com/betrisey) - [sander76](https://github.com/sander76) - [schneefux](https://github.com/schneefux) - [Scott O'Neil](https://github.com/americanwookie) From 793ee3f25768696eef381135d441fd5b5019e3fb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 19 Nov 2016 12:50:04 +0100 Subject: [PATCH 19/27] Add API stream sensor docs (#1462) --- source/_components/sensor.api_stream.markdown | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 source/_components/sensor.api_stream.markdown diff --git a/source/_components/sensor.api_stream.markdown b/source/_components/sensor.api_stream.markdown new file mode 100644 index 00000000000..fbc31064f9f --- /dev/null +++ b/source/_components/sensor.api_stream.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "API Stream Sensor" +description: "Instructions how to count clients using the API stream within Home Assistant." +date: 2016-11-19 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Sensor +ha_release: 0.33 +--- + +The `api_stream` sensor platform shows how many clients are connected to the stream API + +To add the connected clients to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: api_streams +``` + From cb0421c64faeba7d9416dee18f79d0b88154bcbf Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 19 Nov 2016 13:03:25 +0100 Subject: [PATCH 20/27] Inital blog post --- source/_posts/2016-11-19-xxxx.markdown | 78 ++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 source/_posts/2016-11-19-xxxx.markdown diff --git a/source/_posts/2016-11-19-xxxx.markdown b/source/_posts/2016-11-19-xxxx.markdown new file mode 100644 index 00000000000..15a7193bd94 --- /dev/null +++ b/source/_posts/2016-11-19-xxxx.markdown @@ -0,0 +1,78 @@ +-- +layout: post +title: "0.33: " +description: "" +date: 2016-11-14 03:04:05 +0000 +date_formatted: "November 14, 2016" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +--- + + +## Changes + +- New [calendar component][google] including Google support ([@mnestor]) +- Final core upgrade for async ([@pvizeli]) +- Neato refactor + sensor support ([@turbokongen]) +- Device Tracker: [Swisscom Internet-Box][swisscom] now supported ([@betrisey]) +- Device Tracker - Locative: [Map support][locative] added ([@danijelst]) +- Emulated Hue: Option to sent request info as variables to scripts that get called ([@bah2830]) +- Wink: [Thermostats][wink-climate] are now supported ([@w1ll1am23]) +- Light: New [MQTT template][mqtt-template] platform for custom communication ([@Diaoul]) +- Wake on Lan switch can now configure a custom OFF script ([@Chris-V]) +- Device Tracker: [Cisco IOS][cisco] now supported ([@fbradyirl]) +- Sensor: Support for [PVOutput][pvoutput] snesor ([@fabaff]) +- Sensor: Show count of connected clients to the [API stream][api-stream] ([@balloob]) +- Fix platforms from doing I/O in the event loop ([@balloob], [@pvizeli], [@lwis], [@kellerza]) +- Switch - TP Link: Add daily consumption [TP Link switches][tp-link] ([@gonzalezcalleja]) +- Templates: Add new `strptime` function for parsing times ([@lwis]) +- HTTP: Fix X-Forwarded-For parsing (@[mweinelt]) +- Switch - Command Line: Use [configured object_id][command-line] for entity IDs ([@n8henrie]) +- MQTT: Support added for [birth and last will][mqtt-will] messages ([@bestlibre]) +- Better handling of accented characters in slugify ([@magicus]) +- Alarm Control Panel - Envisalink: Add new [keypress service][envisalink] ([@jnimmo]) +- Light - Hue: Add service to [activate scenes][hue] defined in Hue app ([@sdague]) + +## Breaking changes + + - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. + - Command line switches will now use the specified object ID for their entity ID instead of basing it off the name. + +[@bah2830]: https://github.com/bah2830 +[@balloob]: https://github.com/balloob +[@bestlibre]: https://github.com/bestlibre +[@betrisey]: https://github.com/betrisey +[@Chris-V]: https://github.com/Chris-V +[@danijelst]: https://github.com/danijelst +[@Diaoul]: https://github.com/Diaoul +[@fabaff]: https://github.com/fabaff +[@fbradyirl]: https://github.com/fbradyirl +[@gonzalezcalleja]: https://github.com/ +[@jnimmo]: https://github.com/jnimmo +[@kellerza]: https://github.com/kellerza +[@lwis]: https://github.com/lwis +[@magicus]: https://github.com/magicus +[@mnestor]: https://github.com/mnestor +[@mweinelt]: https://github.com/mweinelt +[@n8henrie]: https://github.com/n8henrie +[@pvizeli]: https://github.com/pvizeli +[@sdague]: https://github.com/sdague +[@turbokongen]: https://github.com/turbokongen +[@w1ll1am23]: https://github.com/w1ll1am23 + +[api-stream]: https://home-assistant.io/components/sensor.api_stream/ +[cisco]: https://home-assistant.io/components/device_tracker.cisco_ios/ +[command-line]: https://home-assistant.io/components/switch.command_line/ +[envisalink]: https://home-assistant.io/components/envisalink/ +[google]: https://home-assistant.io/components/sensor.google_calendar/ +[hue]: https://home-assistant.io/components/light.hue/ +[locative]: https://home-assistant.io/components/device_tracker.locative/ +[mqtt-template]: https://home-assistant.io/components/light.mqtt_template/ +[mqtt-will]: https://home-assistant.io/components/mqtt/ +[pvoutput]: https://home-assistant.io/components/sensor.pvoutput/ +[swisscom]: https://home-assistant.io/components/device_tracker.swisscom/ +[tp-link]: https://home-assistant.io/components/switch.tplink/ +[wink-climate]: https://home-assistant.io/components/climate.wink/ + From 04c19e8b8f64bae9ee912887cf127fa1f01b1538 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 19 Nov 2016 13:13:07 +0100 Subject: [PATCH 21/27] Fix merge --- .../_components/sensor.synologydsm.markdown | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index 7f66d9a35f7..97b8229fc01 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -20,7 +20,7 @@ This `synologydms` sensor allows getting various statistics from your [Synology This sensor will wake up your Synology NAS if it's in hibernation mode.

-To use the SynologyDSM sensor in your installation, add the following to your `configuration.yaml` file: +To use the `synologydsm` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yml entry @@ -34,13 +34,13 @@ sensor: - memory_real_usage - network_up ``` -Note: After booting HASS it can take up to 15 minutes for the sensors to show up. This is due to the fact that sensors are created after HASS has fully been initialised. +Note: After booting Home Assistant it can take up to 15 minutes for the sensors to show up. This is due to the fact that sensors are created after Home Assistant has fully been initialized. 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, see the Seperate User Configuration section below for details). +- **port** (*Optional*): The port number on which the Synology NAS is reachable. Defaults to `5000`. +- **username** (*Required*): An user to connect to the Synology NAS (a separate account is advised, see the Separate User Configuration section below for details). - **password** (*Required*): The password of the user to connect to the Synology NAS. - **volumes** (*Optional*): Array of volumes to monitor. Defaults to all volumes. - **disks** (*Optional*): Array of disks to monitor. Defaults to all disks. @@ -61,13 +61,13 @@ Configuration variables: - **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). + - **disk_name**: Displays the name of the hard disk (creates a new entry for each disk). + - **disk_device**: Displays the path of the hard disk (creates a new entry for each disk). + - **disk_smart_status**: Displays the S.M.A.R.T status of the hard disk (creates a new entry for each disk). + - **disk_status**: Displays the status of the hard disk (creates a new entry for each disk). + - **disk_exceed_bad_sector_thr**: Displays true / false to indicate if the hard disk 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 hard disk dropped below the remain life threshold (creates a new entry for each disk). + - **disk_temp**: Displays the temperature of the hard disk (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). @@ -76,8 +76,8 @@ Configuration variables: - **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). -Seperate User Configuration: +Separate User Configuration: -Due to the nature of the Synology DSM Api it is required to grant de user admin rights. This is related to the fact that utilisation information is stored in the core module. +Due to the nature of the Synology DSM API it is required to grant the user admin rights. This is related to the fact that utilization information is stored in the core module. -When creating the user it is possible to deny access to all locations and applications. By doing this the user will not be able to login to the web interface or view any of the files on the NAS. It is still able to read the utilisation and storage information using the API. +When creating the user it is possible to deny access to all locations and applications. By doing this the user will not be able to login to the web interface or view any of the files on the Synology NAS. It is still able to read the utilization and storage information using the API. From 09808b15015bf99a168a8b767dd116f95eb04216 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 19 Nov 2016 13:14:30 +0100 Subject: [PATCH 22/27] Update for 0.33 --- _config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 8abec3ecb11..99f97297931 100644 --- a/_config.yml +++ b/_config.yml @@ -129,6 +129,6 @@ social: account: home_assistant current_major_version: 0 -current_minor_version: 32 -current_patch_version: 4 -date_released: 2016-11-15 +current_minor_version: 33 +current_patch_version: 0 +date_released: 2016-11-19 From 4d288c529a120f1446065f790f5288afeec2d03e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 19 Nov 2016 10:05:27 -0800 Subject: [PATCH 23/27] Update release post --- ...-calendar--wink-thermostats--cisco-ios.markdown} | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) rename source/_posts/{2016-11-19-xxxx.markdown => 2016-11-19-calendar--wink-thermostats--cisco-ios.markdown} (85%) diff --git a/source/_posts/2016-11-19-xxxx.markdown b/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown similarity index 85% rename from source/_posts/2016-11-19-xxxx.markdown rename to source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown index 15a7193bd94..b15309f2f9c 100644 --- a/source/_posts/2016-11-19-xxxx.markdown +++ b/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown @@ -1,15 +1,18 @@ --- +--- layout: post -title: "0.33: " -description: "" -date: 2016-11-14 03:04:05 +0000 -date_formatted: "November 14, 2016" +title: "0.33: New Calendar component, Wink thermostats and Cisco IOS" +description: "Continued our upgrade to Async, fixed tons of bugs and added a few new things." +date: 2016-11-19 03:04:05 +0000 +date_formatted: "November 19, 2016" author: Fabian Affolter author_twitter: fabaff comments: true categories: Release-Notes --- +For this release we put a lot of focus on finishing our async upgrade and fix a bunch of bugs in the process. + +But a new release wouldn't be awesome if it didn't had some new goodies and this release is no different. This release includes a new calendar component by [@mnestor]. It comes now with Google Calendar support, which should allow you to automate things based on your calendar events! ## Changes From 459ea2012b97ad517391a8f965920749e43d96f0 Mon Sep 17 00:00:00 2001 From: mnestor Date: Sat, 19 Nov 2016 18:25:55 -0500 Subject: [PATCH 24/27] Documentation for Google Calendar component (#1403) * Documentation for Google Calendar component * Fixes from @Landrash --- .../binary_sensor.google_calendar.markdown | 115 ++++++++++++++++++ .../supported_brands/google_calendar.png | Bin 0 -> 19639 bytes 2 files changed, 115 insertions(+) create mode 100644 source/_components/binary_sensor.google_calendar.markdown create mode 100644 source/images/supported_brands/google_calendar.png diff --git a/source/_components/binary_sensor.google_calendar.markdown b/source/_components/binary_sensor.google_calendar.markdown new file mode 100644 index 00000000000..e57f182091e --- /dev/null +++ b/source/_components/binary_sensor.google_calendar.markdown @@ -0,0 +1,115 @@ +--- +layout: page +title: "Google Calendar Event" +description: "Instructions how to use Google Calendars in Home Assistant." +date: 2015-05-08 17:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: google_calendar.png +ha_category: Calendar +ha_iot_class: "Cloud Polling" +ha_release: 0.33 +--- + + +This platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file *google_calendars.yaml* that will contain information about all of the calendars you can see. + +### {% linkable_title Prerequisites %} + +Generate a Client ID and Client Secret on [Google Developers Console](https://console.developers.google.com/start/api?id=calendar). + +1. Follow the wizard using the following information. +1. When it gets to the point of asking _Which API are you using?_ just click cancel. +1. Click on the tab 'OAuth consent screen'. +1. Set 'Product name shown to users' to anything you want. We suggest Home-Assistant. +1. Save this page. You don't have to fill out anything else there. +1. Click 'Create credentials' -> OAuth client ID. +1. Set the Application type to 'Other' and give this credential set a name then click Create. +1. Save the client ID and secret as you will need to put these in your configuration.yaml file. + +### {% linkable_title Basic Setup %} + +To integrate Google Calendar in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +google: + client_id: *Value_created_from_steps_above* + client_secret: *Value_created_from_steps_above* +``` + +Configuration variables: + +- **client_id** (*Required*): Use the value you generated in the Prerequisites stage. +- **client_secret** (*Required*): Use the value you generated in the Prerequisites stage. +- **track_new_calendar** (*Optional*): Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars on startup. By default this is set to `True`. + +The next steps will require you to have Home Assistant running. + +After you have it running complete the Google authentication that pops up. It will give you a URL and a code to enter. This will grant your Home Assistant service access to all the Google Calendars that the account you authenticate with can read. This is a Read-Only view of these calendars. + + +### {% linkable_title Calendar Configuration %} +Editing `google_calendars.yaml` + +A basic entry for a single calendar looks like: + +```yaml +- cal_id: "***************************@group.calendar.google.com" + entities: + - device_id: test_everything + name: Give me everything + track: true +- cal_id: "***************************@group.calendar.google.com" + entities: + - device_id: test_important + name: Important Stuff + track: true + search: "#Important" + offset: "!!" + - device_id: test_unimportant + name: UnImportant Stuff + track: true + search: "#UnImportant" +``` + +Variables: + +- **cal_id**: The Google generated unique id for this calendar. **DO NOT CHANGE** + +- **entities**: Yes, you can have multiple sensors for a calendar! + + - **device_id**: (*Required*): The name that all your automations/scripts will use to reference this device. + + - **name**: (*Required*): What is the name of your sensor that you'll see in the frontend. + + - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? + + - **search**: (*Optional*): If set will only trigger for matched events. + + - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) + +From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. + +But what if you only wanted it to toggle based on all events? Just leave out the *search* parameter. + +**Note**: If you use a `#` sign for search then wrap it up. It's better to be safe! + + +### {% linkable_title Sensor attributes %} + + - **offset_reached**: If set in the event title and parsed out will be `on`/`off` once the offset in the title in minutes is reached. So the title `Very important meeting #Important !!-10` would trigger this attribute to be `on` 10 minutes before the event starts. + + - **all_day**: `True`/`False` if this is an all day event. Will be `False` if there is no event found. + + - **message**: The event title with the `search` and `offset` values extracted. So in the above example for **offset_reached** the **message** would be set to `Very important meeting` + + - **description**: The event description. + + - **location**: The event Location. + + - **start_time**: Start time of event. + + - **end_time**: End time of event. diff --git a/source/images/supported_brands/google_calendar.png b/source/images/supported_brands/google_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..82b4e230ad8c9386729cc35a867b5fe2be7ebf74 GIT binary patch literal 19639 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 XasM0e<#+G{9sqzwI@mN?`4avG+{7`Y literal 0 HcmV?d00001 From 1f73e8cedee47cc59182776f00cb4697e3165cb7 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Sun, 20 Nov 2016 00:37:25 +0100 Subject: [PATCH 25/27] Update Neato component (#1421) * Update switch.neato.markdown * Create sensor.neato.markdown * Create neato.markdown * Update neato.markdown * Update neato.markdown --- source/_components/neato.markdown | 34 ++++++++++++++++++++++++ source/_components/sensor.neato.markdown | 17 ++++++++++++ source/_components/switch.neato.markdown | 21 +-------------- 3 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 source/_components/neato.markdown create mode 100644 source/_components/sensor.neato.markdown diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown new file mode 100644 index 00000000000..24fc98b3c60 --- /dev/null +++ b/source/_components/neato.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Neato Robotics" +description: "Instructions how to integrate your Neato within Home Assistant." +date: 2016-10-09 20:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: neato.png +ha_category: Hub +ha_release: 0.33 +featured: true +--- + +The `neato` component allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). + +To enable `neato` in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +neato: + username: USERNAME + password: PASSWORD +``` + +Configuration variables: + +- **username** (*Required*): Username for the Neato account. +- **password** (*Required*): Password for the Neato account. + +

+The Home Assistant Neato platform has only be tested with a Botvac Connected. There is no support for the Botvac D3 Connected and Botvac D5 Connected robots at this time. +

diff --git a/source/_components/sensor.neato.markdown b/source/_components/sensor.neato.markdown new file mode 100644 index 00000000000..c2f5e4a7a43 --- /dev/null +++ b/source/_components/sensor.neato.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Neato Robotics Sensor" +description: "Instructions how to integrate a Neato Botvac Connected sensors within Home Assistant." +date: 2016-11-09 20:11 +sidebar: true +comments: false +sharing: true +footer: true +logo: neato.png +ha_category: Sensor +ha_release: 0.33 +--- + +The `neato` sensor platform allows you to watch status and battery of your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). + +To add `neato` sensors to your installation, follow instructions in [Neato component](/components/neato/). diff --git a/source/_components/switch.neato.markdown b/source/_components/switch.neato.markdown index bfba1029e39..cc11c8da023 100644 --- a/source/_components/switch.neato.markdown +++ b/source/_components/switch.neato.markdown @@ -14,23 +14,4 @@ ha_release: 0.31 The `neato` switch platform allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). -This will automatically add a switch for each Botvac Connected that you have. The switch will start a full home cleaning when turned ON and return the robot to base when turned OFF. - -To enable this switch in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -switch: - - platform: neato - username: USERNAME - password: PASSWORD -``` - -Configuration variables: - -- **username** (*Required*): Username for the Neato account. -- **password** (*Required*): Password for the Neato account. - -

-The Home Assistant Neato platform has only be tested with a Botvac Connected. There is no support for the Botvac D3 Connected and Botvac D5 Connected robots at this time. -

+To add `neato` switch to your installation, follow instructions in [Neato component](/components/neato/). From 470cc8d728b3b8e82ffda534f5204f1e97fd13d1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 19 Nov 2016 15:55:39 -0800 Subject: [PATCH 26/27] Wrap up blog post --- ...ndar.markdown => calendar.google.markdown} | 0 source/_components/calendar.markdown | 12 ++++ ...ndar--wink-thermostats--cisco-ios.markdown | 57 ++++++++++--------- source/_topics/templating.markdown | 3 + 4 files changed, 46 insertions(+), 26 deletions(-) rename source/_components/{binary_sensor.google_calendar.markdown => calendar.google.markdown} (100%) create mode 100644 source/_components/calendar.markdown diff --git a/source/_components/binary_sensor.google_calendar.markdown b/source/_components/calendar.google.markdown similarity index 100% rename from source/_components/binary_sensor.google_calendar.markdown rename to source/_components/calendar.google.markdown diff --git a/source/_components/calendar.markdown b/source/_components/calendar.markdown new file mode 100644 index 00000000000..f18e94902c3 --- /dev/null +++ b/source/_components/calendar.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Calendar" +description: "Instructions how to integrate calendars within Home Assistant." +date: 2016-11-19 08:36 +sidebar: true +comments: false +sharing: true +footer: true +--- + +The calendar component allows you to integrate your calendars into Home Assistant. diff --git a/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown index b15309f2f9c..6753e6b564b 100644 --- a/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown @@ -14,31 +14,31 @@ For this release we put a lot of focus on finishing our async upgrade and fix a But a new release wouldn't be awesome if it didn't had some new goodies and this release is no different. This release includes a new calendar component by [@mnestor]. It comes now with Google Calendar support, which should allow you to automate things based on your calendar events! -## Changes +### {% linkable_title Changes %} - New [calendar component][google] including Google support ([@mnestor]) - Final core upgrade for async ([@pvizeli]) -- Neato refactor + sensor support ([@turbokongen]) +- [Neato] refactor + sensor support ([@turbokongen]) - Device Tracker: [Swisscom Internet-Box][swisscom] now supported ([@betrisey]) - Device Tracker - Locative: [Map support][locative] added ([@danijelst]) -- Emulated Hue: Option to sent request info as variables to scripts that get called ([@bah2830]) +- [Emulated Hue] will now sent request info as variables to scripts that get called ([@bah2830]) - Wink: [Thermostats][wink-climate] are now supported ([@w1ll1am23]) - Light: New [MQTT template][mqtt-template] platform for custom communication ([@Diaoul]) -- Wake on Lan switch can now configure a custom OFF script ([@Chris-V]) +- [Wake on Lan switch] can now configure a custom OFF script ([@Chris-V]) - Device Tracker: [Cisco IOS][cisco] now supported ([@fbradyirl]) - Sensor: Support for [PVOutput][pvoutput] snesor ([@fabaff]) - Sensor: Show count of connected clients to the [API stream][api-stream] ([@balloob]) - Fix platforms from doing I/O in the event loop ([@balloob], [@pvizeli], [@lwis], [@kellerza]) -- Switch - TP Link: Add daily consumption [TP Link switches][tp-link] ([@gonzalezcalleja]) -- Templates: Add new `strptime` function for parsing times ([@lwis]) -- HTTP: Fix X-Forwarded-For parsing (@[mweinelt]) -- Switch - Command Line: Use [configured object_id][command-line] for entity IDs ([@n8henrie]) -- MQTT: Support added for [birth and last will][mqtt-will] messages ([@bestlibre]) +- Switch - [TP Link]: Add daily consumption ([@gonzalezcalleja]) +- Templates: Add new `strptime` [template function] for parsing times ([@lwis]) +- [HTTP] component: Fix X-Forwarded-For parsing ([@mweinelt]) +- Switch - [Command Line]: Use configured object_id for entity IDs ([@n8henrie]) +- [MQTT] now supports birth and last will messages ([@bestlibre]) - Better handling of accented characters in slugify ([@magicus]) -- Alarm Control Panel - Envisalink: Add new [keypress service][envisalink] ([@jnimmo]) -- Light - Hue: Add service to [activate scenes][hue] defined in Hue app ([@sdague]) +- Alarm Control Panel - [Envisalink]: Add new keypress service ([@jnimmo]) +- Light - [Hue]: Add service to activate scenes defined in Hue app ([@sdague]) -## Breaking changes +### {% linkable_title Breaking changes %} - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. - Command line switches will now use the specified object ID for their entity ID instead of basing it off the name. @@ -65,17 +65,22 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this [@turbokongen]: https://github.com/turbokongen [@w1ll1am23]: https://github.com/w1ll1am23 -[api-stream]: https://home-assistant.io/components/sensor.api_stream/ -[cisco]: https://home-assistant.io/components/device_tracker.cisco_ios/ -[command-line]: https://home-assistant.io/components/switch.command_line/ -[envisalink]: https://home-assistant.io/components/envisalink/ -[google]: https://home-assistant.io/components/sensor.google_calendar/ -[hue]: https://home-assistant.io/components/light.hue/ -[locative]: https://home-assistant.io/components/device_tracker.locative/ -[mqtt-template]: https://home-assistant.io/components/light.mqtt_template/ -[mqtt-will]: https://home-assistant.io/components/mqtt/ -[pvoutput]: https://home-assistant.io/components/sensor.pvoutput/ -[swisscom]: https://home-assistant.io/components/device_tracker.swisscom/ -[tp-link]: https://home-assistant.io/components/switch.tplink/ -[wink-climate]: https://home-assistant.io/components/climate.wink/ - +[api-stream]: /components/sensor.api_stream/ +[cisco]: /components/device_tracker.cisco_ios/ +[Command Line]: /components/switch.command_line/ +[Envisalink]: /components/envisalink/ +[google]: /components/calendar.google/ +[Hue]: /components/light.hue/ +[locative]: /components/device_tracker.locative/ +[mqtt-template]: /components/light.mqtt_template/ +[mqtt-will]: /components/mqtt/ +[pvoutput]: /components/sensor.pvoutput/ +[swisscom]: /components/device_tracker.swisscom/ +[TP Link]: /components/switch.tplink/ +[wink-climate]: /components/climate.wink/ +[neato]: /components/neato/ +[Emulated Hue]: /components/emulated_hue/ +[Wake on Lan switch]: /components/switch.wake_on_lan/ +[template function]: /topics/templating/#home-assistant-template-extensions +[HTTP]: /components/http/ +[MQTT]: /components/mqtt/ diff --git a/source/_topics/templating.markdown b/source/_topics/templating.markdown index 6aca8ed1ad0..55fa5c3fddb 100644 --- a/source/_topics/templating.markdown +++ b/source/_topics/templating.markdown @@ -77,11 +77,14 @@ Home Assistant adds extensions to allow templates to access all of the current s - `closest()` will find the closest entity. - `relative_time(timestamp)` will format the date time as relative time vs now (ie 7 seconds) - `float` will format the output as float. +- `strptime(string, format)` will parse a string to a datetime based on a [format][strp-format]. - Filter `round(x)` will convert the input to a number and round it to `x` decimals. - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. - Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). +[strp-format]: https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior + ## {% linkable_title Examples %} ### {% linkable_title States %} From f0a5098b9fbc6cff27ea5f962e75873b9c2ff8c1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 19 Nov 2016 15:57:23 -0800 Subject: [PATCH 27/27] move to Nov 20 release --- _config.yml | 2 +- ...> 2016-11-20-calendar--wink-thermostats--cisco-ios.markdown} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename source/_posts/{2016-11-19-calendar--wink-thermostats--cisco-ios.markdown => 2016-11-20-calendar--wink-thermostats--cisco-ios.markdown} (99%) diff --git a/_config.yml b/_config.yml index 99f97297931..ba073fff5d0 100644 --- a/_config.yml +++ b/_config.yml @@ -131,4 +131,4 @@ social: current_major_version: 0 current_minor_version: 33 current_patch_version: 0 -date_released: 2016-11-19 +date_released: 2016-11-20 diff --git a/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown similarity index 99% rename from source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown rename to source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index 6753e6b564b..5a223205467 100644 --- a/source/_posts/2016-11-19-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -3,7 +3,7 @@ layout: post title: "0.33: New Calendar component, Wink thermostats and Cisco IOS" description: "Continued our upgrade to Async, fixed tons of bugs and added a few new things." date: 2016-11-19 03:04:05 +0000 -date_formatted: "November 19, 2016" +date_formatted: "November 20, 2016" author: Fabian Affolter author_twitter: fabaff comments: true