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
Date: Thu, 6 Sep 2018 13:53:53 +0100
Subject: [PATCH 031/176] Update sensor.twitch.markdown (#6201)
* Update sensor.twitch.markdown
* Add setup instructions
---
source/_components/sensor.twitch.markdown | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/source/_components/sensor.twitch.markdown b/source/_components/sensor.twitch.markdown
index d1265c1b1d5..660488a7675 100644
--- a/source/_components/sensor.twitch.markdown
+++ b/source/_components/sensor.twitch.markdown
@@ -16,6 +16,10 @@ ha_iot_class: "Cloud Polling"
The `twitch` platform will allow you to monitor [Twitch](http://www.twitch.tv/) channel status from within Home Assistant and setup automation based on the information.
+## {% linkable_title Setup %}
+
+Create a new app at "Register Your Application" in the [Twitch developer portal](https://glass.twitch.tv/console/apps). Then get the **Client ID** for the new app.
+
## {% linkable_title Configuration %}
To use Twitch with your installation, add the following to your `configuration.yaml` file:
@@ -24,12 +28,17 @@ To use Twitch with your installation, add the following to your `configuration.y
# Example configuration.yaml entry
sensor:
platform: twitch
+ client_id: YOUR_TWITCH_CLIENT_ID
channels:
- channel1
- channel2
```
{% configuration %}
+clientid:
+ description: Your Twitch client ID.
+ required: true
+ type: string
channels:
description: List of channels.
required: true
From 97fef7f0e918d8aff80ce7f048576507ba431a0f Mon Sep 17 00:00:00 2001
From: Jason Hu
Date: Thu, 6 Sep 2018 13:59:36 -0700
Subject: [PATCH 032/176] Update multi-factor-auth.markdown
---
source/_docs/authentication/multi-factor-auth.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown
index d1528a8197b..19fc53d8d98 100644
--- a/source/_docs/authentication/multi-factor-auth.markdown
+++ b/source/_docs/authentication/multi-factor-auth.markdown
@@ -66,9 +66,9 @@ homeassistant:
Notify MFA module using [notify component](https://www.home-assistant.io/components/notify/) to delivery a [HMAC-based One-Time Password](https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm) to user configured target.
-User need first set up the MFA module by select one of the aviliable notify service. A six digit one-time password will be sent by this notify service, user need to input it to verify the setup.
+User need first set up the MFA module by select one of the aviliable notify service. A 8 digit one-time password will be sent by this notify service, user need to input it to verify the setup.
-During the login process, a six digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again.
+During the login process, an 8 digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again.
Notify MFA module would not verify the one-time password deliveried success, so that if user cannot received the message due any reason, he/she may not be login again. Edit or remove `[your_config_dir]/.storage/auth_module.notify` can disable nofiy MFA module to resolve the issue.
From 3e278811c54b8311bb29e7aa05e19c11f83bdbd6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?=
Date: Fri, 7 Sep 2018 09:35:09 +0200
Subject: [PATCH 033/176] Minor fix in switchbot doc (#6212)
---
source/_components/switch.switchbot.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/switch.switchbot.markdown b/source/_components/switch.switchbot.markdown
index 3eca50f1113..ff7e8911b50 100644
--- a/source/_components/switch.switchbot.markdown
+++ b/source/_components/switch.switchbot.markdown
@@ -1,7 +1,7 @@
---
layout: page
title: "Switchbot"
-description: "Instructions on how to set up Switchmate switches."
+description: "Instructions on how to set up Switchbot switches."
date: 2018-09-03 22:41
sidebar: true
comments: false
From 995aeb83731df169d71584d71b5458aa16300b8b Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Fri, 7 Sep 2018 09:07:05 +0100
Subject: [PATCH 034/176] Word fix (#6208)
The main page calls them services, here we call them features, causing confusion.
---
source/_components/vacuum.neato.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/vacuum.neato.markdown b/source/_components/vacuum.neato.markdown
index 51cf2cc1d81..544d60f62c3 100644
--- a/source/_components/vacuum.neato.markdown
+++ b/source/_components/vacuum.neato.markdown
@@ -19,7 +19,7 @@ The status will contain attributes on the robots last clean session.
To add `neato` vacuum to your installation, please follow instructions in [Neato component](/components/neato/).
-Currently supported features are:
+Currently supported services are:
- `start`
- `pause`
From 5b5c16f2f4b37bd3a810621fd72af59cbde6c495 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Fri, 7 Sep 2018 09:07:25 +0100
Subject: [PATCH 035/176] Word fix (#6209)
The main page calls them services, here we call them features, causing confusion.
---
source/_components/vacuum.xiaomi_miio.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown
index 5864b32bffb..cc93a36c8ab 100644
--- a/source/_components/vacuum.xiaomi_miio.markdown
+++ b/source/_components/vacuum.xiaomi_miio.markdown
@@ -15,7 +15,7 @@ ha_iot_class: "Local Polling"
The `xiaomi miio` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/).
-Currently supported features are:
+Currently supported services are:
- `start`
- `pause`
From 2bd35c0c12cbe6e09e73ea4975ec224aa4063931 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Fri, 7 Sep 2018 09:07:47 +0100
Subject: [PATCH 036/176] Clarity updates (#6210)
Given that turn_on and off don't work on some, would be handy to mention that ;)
---
source/_components/vacuum.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown
index 3df2abbca45..041edb7d661 100644
--- a/source/_components/vacuum.markdown
+++ b/source/_components/vacuum.markdown
@@ -29,7 +29,7 @@ Before calling one of these services, make sure your vacuum platform supports it
#### {% linkable_title Service `vacuum.turn_on` %}
-Start a new cleaning task.
+Start a new cleaning task. For the Xiaomi Vacuum and neato use `vacuum.start` instead.
| Service data attribute | Optional | Description |
|---------------------------|----------|-------------------------------------------------------|
@@ -37,7 +37,7 @@ Start a new cleaning task.
#### {% linkable_title Service `vacuum.turn_off` %}
-Stop the current cleaning task and return to the dock.
+Stop the current cleaning task and return to the dock. For the Xiaomi Vacuum and neato use `vacuum.stop` instead.
| Service data attribute | Optional | Description |
|---------------------------|----------|-------------------------------------------------------|
From 65e6d11a32610524be76428eb059749cc527a455 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isabella=20Gross=20Alstr=C3=B6m?=
Date: Fri, 7 Sep 2018 10:08:49 +0200
Subject: [PATCH 037/176] Update deconz.markdown (#6213)
* Update deconz.markdown
Added a helper app in appdaemon for deconz events
* Update deconz.markdown
changes in variables
---
source/_components/deconz.markdown | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown
index 211e683fe15..500efaa947c 100644
--- a/source/_components/deconz.markdown
+++ b/source/_components/deconz.markdown
@@ -173,6 +173,36 @@ automation:
### {% linkable_title Appdaemon %}
+#### {% linkable_title Appdaemon event helper %}
+Helper app that creates a sensor `sensor.deconz_event` with a state that represents the id from the last event and an attribute to show the event data.
+
+{% raw %}
+```yaml
+deconz_helper:
+ module: deconz_helper
+ class: DeconzHelper
+```
+
+```python
+import appdaemon.plugins.hass.hassapi as hass
+import datetime
+from datetime import datetime
+
+class DeconzHelper(hass.Hass):
+ def initialize(self) -> None:
+ self.listen_event(self.event_received, "deconz_event")
+
+ def event_received(self, event_name, data, kwargs):
+ event_data = data["event"]
+ event_id = data["id"]
+ event_received = datetime.now()
+
+ self.log("Deconz event received from {}. Event was: {}".format(event_id, event_data))
+ self.set_state("sensor.deconz_event", state = event_id, attributes = {"event_data": event_data, "event_received": str(event_received)})
+```
+{% endraw %}
+
+
#### {% linkable_title Appdaemon remote template %}
{% raw %}
From 37aced25852ab5d490b4522adf38b6e0c93bd69b Mon Sep 17 00:00:00 2001
From: Dom
Date: Fri, 7 Sep 2018 11:23:08 +0100
Subject: [PATCH 038/176] Yale Smart Alarm component docs (#6176)
* Add New Yale Smart Alarm Component Documentation
* Update Yale Alarm Documentation
---
...rm_control_panel.yale_smart_alarm.markdown | 60 +++++++++++++++++++
1 file changed, 60 insertions(+)
create mode 100644 source/_components/alarm_control_panel.yale_smart_alarm.markdown
diff --git a/source/_components/alarm_control_panel.yale_smart_alarm.markdown b/source/_components/alarm_control_panel.yale_smart_alarm.markdown
new file mode 100644
index 00000000000..f2dc607b157
--- /dev/null
+++ b/source/_components/alarm_control_panel.yale_smart_alarm.markdown
@@ -0,0 +1,60 @@
+---
+layout: page
+title: "Yale Smart Alarm Control"
+description: "Instructions on how to integrate Yale Smart Alarms into Home Assistant."
+date: 2018-09-01 11:11
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Alarm
+ha_release: 0.78
+---
+
+The `yale_smart_alarm` platform provides connectivity with the Yale Smart Alarm systems and Smart Hub through Yale's API.
+
+This platform supports the following services: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night` (duplicate of home) and `alarm_disarm`.
+Currently only one alarm is supported.
+
+
+To enable, add the following lines to your `configuration.yaml`:
+
+```yaml
+# Example configuration.yaml entry
+alarm_control_panel:
+ - platform: yale_smart_alarm
+ username: YOUR_USERNAME
+ password: YOUR_PASSWORD
+```
+
+Configuration variables:
+
+- **name** (*Optional*): Name of device in Home Assistant.
+- **username** (*Required*): Username used to sign into the Yale app/web client.
+- **password** (*Required*): Password used to sign into the Yale app/web client.
+- **area_id** (*Optional*): Area ID of the device when talking to Yale's API if required ('1' by default).
+
+Automation example:
+
+```yaml
+automation:
+ - alias: "Alarm: Disarmed Daytime"
+ trigger:
+ platform: state
+ entity_id: alarm_control_panel.yale_smart_alarm
+ to: 'disarmed'
+ condition:
+ condition: sun
+ before: sunset
+ action:
+ service: scene.turn_on
+ entity_id: scene.OnDisarmedDaytime
+ - alias: "Alarm: Armed Away"
+ trigger:
+ platform: state
+ entity_id: alarm_control_panel.yale_smart_alarm
+ to: 'armed_away'
+ action:
+ service: scene.turn_on
+ entity_id: scene.OnArmedAway
+```
From baba8e85ec4c1fb731b8500173498deb8b9886fd Mon Sep 17 00:00:00 2001
From: Andreas Oberritter
Date: Fri, 7 Sep 2018 13:29:55 +0200
Subject: [PATCH 039/176] Update switch.snmp.markdown (#5483)
* Update switch.snmp.markdown
Depends on https://github.com/home-assistant/home-assistant/pull/14754
* :pencil2: Removed old configuration variables header
---
source/_components/switch.snmp.markdown | 123 +++++++++++++++++++++---
1 file changed, 108 insertions(+), 15 deletions(-)
diff --git a/source/_components/switch.snmp.markdown b/source/_components/switch.snmp.markdown
index 59d9b239044..0d2cb6fd0fa 100644
--- a/source/_components/switch.snmp.markdown
+++ b/source/_components/switch.snmp.markdown
@@ -15,7 +15,7 @@ ha_release: 0.57
The `snmp` switch platform allows you to control SNMP-enabled equipment.
-Currently, only SNMP OIDs that accept integer values are supported. SNMP v1 and v2c are supported. SNMP v3 is **not** supported.
+Currently, only SNMP OIDs that accept integer values are supported. SNMP v1, v2c and v3 are supported.
To use an SNMP switch in your installation:
@@ -27,30 +27,123 @@ switch:
baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0
```
-Configuration variables:
-
-- **baseoid** (*Required*): The SNMP BaseOID which to poll for the state of the switch.
-- **command_oid** (*Optional*): The SNMP OID which to set in order to turn the switch on and off, if different from `baseoid`.
-- **host** (*Optional*): The IP/host which to control. Defaults to `localhost`.
-- **port** (*Optional*): The port on which to communicate. Defaults to `161`.
-- **community** (*Optional*): community string to use for authentication. Defaults to `private`.
-- **version** (*Optional*): SNMP version to use - either `1` or `2c`. Defaults to `1`.
-- **payload_on** (*Optional*): What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch if `command_payload_on` is not set. Defaults to `1`.
-- **payload_off** (*Optional*): What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch if `command_payload_off` is not set. Defaults to `0`.
-- **command_payload_on** (*Optional*): The value to write to turn on the switch, if different from `payload_on`.
-- **command_payload_off** (*Optional*): The value to write to turn off the switch, if different from `payload_off`.
+{% configuration %}
+baseoid:
+ description: The SNMP BaseOID which to poll for the state of the switch.
+ required: true
+ type: string
+command_oid:
+ description: The SNMP OID which to set in order to turn the switch on and off, if different from `baseoid`.
+ required: false
+ type: string
+host:
+ description: The IP/host which to control.
+ required: false
+ type: string
+ default: 'localhost'
+port:
+ description: The port on which to communicate.
+ required: false
+ type: string
+ default: '161'
+community:
+ description: community string to use for authentication (SNMP v1 and v2c).
+ required: false
+ type: string
+ default: 'private'
+username:
+ description: Username to use for authentication.
+ required: false
+ type: string
+ default: ''
+auth_key:
+ description: Authentication key to use for SNMP v3.
+ required: false
+ type: string
+ default: no key
+auth_protocol:
+ description: Authentication protocol to use for SNMP v3.
+ required: false
+ type: string
+ default: 'none'
+priv_key:
+ description: Privacy key to use for SNMP v3.
+ required: false
+ type: string
+ default: no key
+priv_protocol:
+ description: Privacy protocol to use for SNMP v3.
+ required: false
+ type: string
+ default: 'none'
+version:
+ description: SNMP version to use - either `1`, `2c` or `3`.
+ required: false
+ type: string
+ default: '1'
+payload_on:
+ description: What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch if `command_payload_on` is not set.
+ required: false
+ type: string
+ default: '1'
+payload_off:
+ description: What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch if `command_payload_off` is not set.
+ required: false
+ type: string
+ default: '0'
+command_payload_on:
+ description: The value to write to turn on the switch, if different from `payload_on`.
+ required: false
+ type: string
+command_payload_off:
+ description: The value to write to turn off the switch, if different from `payload_off`.
+ required: false
+ type: string
+{% endconfiguration %}
You should check with your device's vendor to find out the correct BaseOID and what values turn the switch on and off.
-A complete example:
+Valid values for auth_protocol:
+
+- **none**
+- **hmac-md5**
+- **hmac-sha**
+- **hmac128-sha224**
+- **hmac192-sha256**
+- **hmac256-sha384**
+- **hmac384-sha512**
+
+Valid values for priv_protocol:
+
+- **none**
+- **des**
+- **3des-ede**
+- **aes-cfb-128**
+- **aes-cfb-192**
+- **aes-cfb-256**
+
+Complete examples:
```yaml
switch:
- platform: snmp
- name: SNMP switch
+ name: SNMP v1 switch
host: 192.168.0.2
community: private
baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0
payload_on: 1
payload_off: 0
+
+ - platform: snmp
+ name: SNMP v3 switch
+ host: 192.168.0.3
+ version: '3'
+ username: 'myusername'
+ auth_key: 'myauthkey'
+ auth_protocol: 'hmac-sha'
+ priv_key: 'myprivkey'
+ priv_protocol: 'aes-cfb-128'
+ baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0
+ payload_on: 1
+ payload_off: 0
```
From c8f7e3f9bbb8f87048aa1dd067793e87e4372cca Mon Sep 17 00:00:00 2001
From: Andreas Oberritter
Date: Fri, 7 Sep 2018 14:03:22 +0200
Subject: [PATCH 040/176] Update sensor.snmp.markdown (#5484)
* Update sensor.snmp.markdown
Depends on https://github.com/home-assistant/home-assistant/pull/14753
* :pencil2: Minor tweaks
* Minor changes
---
source/_components/sensor.snmp.markdown | 112 ++++++++++++++++++++----
1 file changed, 96 insertions(+), 16 deletions(-)
diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown
index f492d5ef3a7..9c78766582b 100644
--- a/source/_components/sensor.snmp.markdown
+++ b/source/_components/sensor.snmp.markdown
@@ -13,7 +13,6 @@ ha_iot_class: "Local Polling"
ha_release: "0.22"
---
-
The `snmp` sensor platform displays information available through the [Simple Network Management Protocol (SNMP)](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol). SNMP uses a tree-like hierarchy where each node is an object, and is mainly supported by network-oriented devices such as routers, modems, and printers.
To enable this sensor in your installation, add the following to your `configuration.yaml` file:
@@ -26,28 +25,107 @@ sensor:
baseoid: 1.3.6.1.4.1.2021.10.1.3.1
```
-Configuration variables:
+{% configuration %}
+host:
+ description: The IP address of your host, eg. `192.168.1.32`.
+ required: true
+ type: string
+ default: 'localhost'
+baseoid:
+ description: The OID where the information is located. It's advised to use the numerical notation.
+ required: true
+ type: string
+port:
+ description: The SNMP port of your host.
+ required: Option
+ type: string
+ default: '161'
+community:
+ description: "The SNMP community which is set for the device for SNMP v1 and v2c. Most devices have a default community set to `public` with read-only permission (which is sufficient)."
+ required: false
+ type: string
+ default: 'public'
+username:
+ description: Username to use for authentication.
+ required: false
+ type: string
+ default: ''
+auth_key:
+ description: Authentication key to use for SNMP v3.
+ required: false
+ type: string
+ default: no key
+auth_protocol:
+ description: Authentication protocol to use for SNMP v3.
+ required: false
+ type: string
+ default: 'none'
+priv_key:
+ description: Privacy key to use for SNMP v3.
+ required: false
+ type: string
+ default: no key
+priv_protocol:
+ description: Privacy protocol to use for SNMP v3.
+ required: false
+ type: string
+ default: 'none'
+version:
+ description: "Version of SNMP protocol, `1`, `2c` or `3`. Version `2c` or higher is needed to read data from 64-bit counters."
+ required: false
+ type: string
+ default: '1'
+name:
+ description: Name of the SNMP sensor.
+ required: false
+ type: string
+unit_of_measurement:
+ description: Defines the unit of measurement of the sensor, if any.
+ required: false
+ type: string
+value_template:
+ description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to parse the value."
+ required: false
+ type: template
+accept_errors:
+ description: "Determines whether the sensor should start and keep working even if the SNMP host is unreachable or not responding. This allows the sensor to be initialized properly even if, for example, your printer is not on when you start Home Assistant."
+ required: false
+ type: string
+ default: false
+default_value:
+ description: "Determines what value the sensor should take if `accept_errors` is set and the host is unreachable or not responding. If not set, the sensor will have value `unknown` in case of errors."
+ required: false
+ type: string
+{% endconfiguration %}
-- **host** (*Required*): The IP address of your host, eg. `192.168.1.32`.
-- **baseoid** (*Required*): The OID where the information is located. It's advised to use the numerical notation.
-- **port** (*Option*): The SNMP port of your host. Defaults to `161`.
-- **community** (*Optional*): The SNMP community which is set for the device. Most devices have a default community set to `public` with read-only permission (which is sufficient).
-- **version** (*Optional*) version of SNMP protocol, `1` or `2c`. Defaults to `1`. Version `2c` is needed to read data from 64-bit counters.
-- **name** (*Optional*): Name of the SNMP sensor.
-- **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any.
-- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to parse the value.
-- **accept_errors** (*Optional*): Determines whether the sensor should start and keep working even if the SNMP host is unreachable or not responding. This allows the sensor to be initialized properly even if, for example, your printer is not on when you start Home Assistant. Defaults to `false`.
-- **default_value** (*Optional*): Determines what value the sensor should take if `accept_errors` is set and the host is unreachable or not responding. If not set, the sensor will have value `unknown` in case of errors.
+Valid values for auth_protocol:
+
+- **none**
+- **hmac-md5**
+- **hmac-sha**
+- **hmac128-sha224**
+- **hmac192-sha256**
+- **hmac256-sha384**
+- **hmac384-sha512**
+
+Valid values for priv_protocol:
+
+- **none**
+- **des**
+- **3des-ede**
+- **aes-cfb-128**
+- **aes-cfb-192**
+- **aes-cfb-256**
## {% linkable_title Finding OIDs %}
-OIDs may vary on different systems because they are vendor-specific. Beside the device's manual, the [OID Repository](http://www.oid-info.com/) is a good place to start if you are looking for OIDs. As an example, the following OIDs are for the load of a Linux systems.
+OIDs may vary on different systems because they are vendor-specific. Besides the device's manual, the [OID Repository](http://www.oid-info.com/) is a good place to start if you are looking for OIDs. As an example, the following OIDs are for the load of a Linux system.
- 1 minute Load: `1.3.6.1.4.1.2021.10.1.3.1`
- 5 minute Load: `1.3.6.1.4.1.2021.10.1.3.2`
- 15 minute Load: `1.3.6.1.4.1.2021.10.1.3.3`
-There is a large amount of tools available to work with SNMP. `snmpwalk` let you easily retrieve the value of a OID.
+There is a large amount of tools available to work with SNMP. `snmpwalk` let you easily retrieve the value of an OID.
```bash
$ snmpwalk -Os -c public -v 2c 192.168.1.32 1.3.6.1.4.1.2021.10.1.3.1
@@ -58,10 +136,11 @@ laLoad.1 = STRING: 0.19
### {% linkable_title Printer uptime minutes %}
-According to the most common SNMP standard, the uptime of a device is accessible under OID `1.3.6.1.2.1.1.3.0`. The value represented using a format called `TimeTicks`, in units of hundredth of a second.
+According to the most common SNMP standard, the uptime of a device is accessible under OID `1.3.6.1.2.1.1.3.0`. The value represented using a format called `TimeTicks`, in units of hundredths of a second.
To create a sensor that displays the uptime for your printer in minutes, you can use this configuration:
+{% raw %}
```yaml
# Example configuration.yaml entry
sensor:
@@ -71,8 +150,9 @@ sensor:
baseoid: 1.3.6.1.2.1.1.3.0
accept_errors: true
unit_of_measurement: 'minutes'
- value_template: {% raw %}'{{((value | int) / 6000) | int}}'{% endraw %}
+ value_template: '{{((value | int) / 6000) | int}}'
```
+{% endraw %}
The `accept_errors` option will allow the sensor to work even if the printer is not on when Home Assistant is first started: the sensor will just display a `-` instead of a minute count.
From 60b694bf0f00b98261ca32552cc7eed284e7dcf8 Mon Sep 17 00:00:00 2001
From: mvn23
Date: Sat, 8 Sep 2018 00:04:09 +0200
Subject: [PATCH 041/176] Documentation for OpenTherm Gateway climate platform
(#6118)
* Add documentation for component climate.opentherm_gw
* Update to adhere to standards
* Changed wording from "component" to "device" as it is not a component
* Minor changes
* Add quotes
* Fix location of space
---
.../_components/climate.opentherm_gw.markdown | 61 ++++++++++++++++++
source/images/supported_brands/opentherm.png | Bin 0 -> 20615 bytes
2 files changed, 61 insertions(+)
create mode 100644 source/_components/climate.opentherm_gw.markdown
create mode 100644 source/images/supported_brands/opentherm.png
diff --git a/source/_components/climate.opentherm_gw.markdown b/source/_components/climate.opentherm_gw.markdown
new file mode 100644
index 00000000000..bbed48193d3
--- /dev/null
+++ b/source/_components/climate.opentherm_gw.markdown
@@ -0,0 +1,61 @@
+---
+layout: page
+title: "OpenTherm Gateway"
+description: "Control your OpenTherm Gateway from Home Assistant."
+date: 2018-08-29 16:23
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: opentherm.png
+ha_category: Climate
+ha_release: 0.78
+ha_iot_class: "Local Push"
+---
+
+
+The `opentherm_gw` climate platform is used to control the [OpenTherm Gateway](http://otgw.tclcode.com/) from Home Assistant.
+
+# {% linkable_title Configuration %}
+
+```yaml
+# Example configuration.yaml entry
+climate:
+ - platform: opentherm_gw
+ device: /dev/ttyUSB0
+```
+
+{% configuration %}
+device:
+ description: "Path to OpenTherm Gateway device as supported by [PySerial](https://pythonhosted.org/pyserial/url_handlers.html)."
+ required: true
+ type: string
+name:
+ description: The name for the device within Home Assistant.
+ required: false
+ type: string
+ default: OpenTherm Gateway
+precision:
+ description: "The desired precision for this device. Can be used to match your actual thermostat's precision. Supported values are `0.1`, `0.5` and `1.0`."
+ required: false
+ type: float
+ default: "`0.5` for Celsius and `1.0` for Fahrenheit."
+floor_temperature:
+ description: Some thermostats round all temperatures down to the lower value according to their precision. Default behaviour for Home Assistant is to round temperatures to the nearest value. Set this to `True` to override Home Assistant and round to the lower value according to the configured `precision`.
+ required: false
+ type: boolean
+{% endconfiguration %}
+
+# {% linkable_title Example %}
+
+A full configuration example with the OpenTherm Gateway connected to a remote host running `ser2net` looks like the one below.
+
+```yaml
+# Full example configuration.yaml entry
+climate:
+ - platform: opentherm_gw
+ device: socket://otgw.example.org:2345
+ name: Thermostat
+ precision: 0.5
+ floor_temperature: True
+```
diff --git a/source/images/supported_brands/opentherm.png b/source/images/supported_brands/opentherm.png
new file mode 100644
index 0000000000000000000000000000000000000000..459f60e67369392ffee6022c3fad0b619b8ed5a4
GIT binary patch
literal 20615
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