From 9a4ddbed953c296cf053db52b016da089aec868a Mon Sep 17 00:00:00 2001
From: Christian Lahme
Date: Tue, 13 Feb 2018 19:15:24 +0100
Subject: [PATCH 01/35] Update homematic.markdown
Added some lines for KeyMatic usage
---
source/_components/homematic.markdown | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown
index 73287f74209..025b75a6425 100644
--- a/source/_components/homematic.markdown
+++ b/source/_components/homematic.markdown
@@ -2,7 +2,7 @@
layout: page
title: "Homematic"
description: "Instructions for integrating Homematic into Home Assistant."
-date: 2016-11-27 21:38
+date: 2018-02-13 19:10
sidebar: true
comments: false
sharing: true
@@ -230,3 +230,19 @@ action:
param: SET_TEMPERATURE
value: 23.0
```
+
+Manually set lock on KeyMatic devices
+```yaml
+...
+action:
+ service: lock.lock
+ entity_id: lock.leq1234567
+```
+
+Manually set unlock on KeyMatic devices
+```yaml
+...
+action:
+ service: lock.unlock
+ entity_id: lock.leq1234567
+```
From cc11eff47ac7b3b354236bf200b2af7010adc358 Mon Sep 17 00:00:00 2001
From: cdce8p <30130371+cdce8p@users.noreply.github.com>
Date: Mon, 26 Feb 2018 04:27:51 +0100
Subject: [PATCH 02/35] =?UTF-8?q?Homekit:=20TempSensor=20-=20Added=20suppo?=
=?UTF-8?q?rt=20for=20=C2=B0F=20(#4763)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* `TemperatureSensor` allows `°F` as `unit`
* Fix pin code
---
source/_components/homekit.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown
index 98d75d971c0..e67fcd744c9 100644
--- a/source/_components/homekit.markdown
+++ b/source/_components/homekit.markdown
@@ -21,7 +21,7 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap
type: map
keys:
pincode:
- description: Pin code required during setup of HomeKit Home Assistant accessory. The format needs to be 'XXX-XX-XXX' where X is a number between 1 and 9.
+ description: Pin code required during setup of HomeKit Home Assistant accessory. The format needs to be 'XXX-XX-XXX' where X is a number between 0 and 9.
required: false
type: string
default: '"123-45-678"'
@@ -58,6 +58,6 @@ The following components are currently supported:
| Component | Type Name | Description |
| --------- | --------- | ----------- |
| cover | Window | All covers that support `set_cover_position`. |
-| sensor | TemperatureSensor | All sensors that have `Celsius` as their `unit_of_measurement`. |
+| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. |
Currently only devices that are setup when Home Assistant is starting can be exposed to `HomeKit`. This means that especially `Z-Wave` components are currently not supported, since they will be setup afterwards. We are working on a solution for this problem.
From e1ff8be4314a6daae0feda0a1421702c7c6546b2 Mon Sep 17 00:00:00 2001
From: blackmesataiwan <20988581+blackmesataiwan@users.noreply.github.com>
Date: Mon, 26 Feb 2018 15:42:47 +0800
Subject: [PATCH 03/35] Update docker.markdown
Add docker tutorial on QNAP NAS
---
source/_docs/installation/docker.markdown | 70 +++++++++++++++++++++++
1 file changed, 70 insertions(+)
diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown
index 63212564d60..310be8c0282 100644
--- a/source/_docs/installation/docker.markdown
+++ b/source/_docs/installation/docker.markdown
@@ -76,6 +76,76 @@ Remark: to restart your Home Assistant within Synology NAS, you just have to do
If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Synology Docker these instructions do not correctly configure the container to access the USB devices. To configure these devices on your Synology Docker Home Assistant you can follow the instructions provided [here](https://philhawthorne.com/installing-home-assistant-io-on-a-synology-diskstation-nas/) by Phil Hawthorne.
+### {% linkable_title QNAP NAS %}
+
+As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatability-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php
+
+The steps would be:
+
+ - Install “Container Station” package on your Qnap NAS
+ - Launch Container Station and move to “Create Container”-section
+ - Search image “homeassistant/home-assistant” with
+ docker hub and click on “Install”
+ - Choose "latest" version and click next
+ - Choose a container-name you want (e.g.
+ “homeassistant”)
+ - Click on “Advanced Settings”
+ - Within “Shared Folders” click on "Volume from host" > "Add" and
+ choose either an existing folder or add a new folder. The “mount
+ point” has to be “/config”, so that Home Assistant will use it for
+ the configs and logs.
+ - Within “Network” and select Network Mode to “Host”
+ - To ensure that Home Assistant displays the correct
+ timezone go to the “Environment” tab and click the plus sign then add
+ `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
+ - Click on “Create”
+ - Wait for some time until your NAS has created the container
+ - Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Qnap NAS IP address - for example `http://192.xxx.xxx.xxx:8123`)
+
+Remark: to update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don't remove "config" folder)
+
+If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Qnap Docker, Fallow this step:
+
+**Z-wave:**
+
+ - Connect to your NAS over SSH
+ - Load cdc-acm kernel module(when nas restart need to run this command)
+ `insmod /usr/local/modules/cdc-acm.ko`
+ - Find USB devices attached. Type command:
+ `ls /dev/tty*`
+ The above command should show you any USB devices plugged into your NAS. If you have more than one, you may get multiple items returned. Like : `ttyACM0`
+
+ - Run Docker command:
+ `docker run --name home-assistant --net=host --privileged -itd -v /share/CACHEDEV1_DATA/Public/homeassistant/config:/config -e variable=TZ -e value=Europe/London --device /dev/ttyACM0 homeassistant/home-assistant`
+
+ `-v` is your config path
+ `-e` is set timezone
+
+ - Edit configuration.yaml
+
+```
+zwave:
+ usb_path: /dev/ttyACM0
+```
+
+That will tell Home Assistant where to look for our Z-wave radio.
+
+**Bluetooth:**
+
+ - Connect to your NAS over SSH
+ - Run Docker command:
+ `docker run --name home-assistant --net=host --privileged -itd -v /share/CACHEDEV1_DATA/Public/homeassistant/config:/config -e variable=TZ -e value=Europe/London -v /dev/bus/usb:/dev/bus/usb -v /var/run/dbus:/var/run/dbus homeassistant/home-assistant`
+
+ First `-v` is your config path
+ `-e` is set timezone
+
+ - Edit configuration.yaml
+
+```
+device_tracker:
+ - platform: bluetooth_tracker
+```
+
### {% linkable_title Restart %}
If you change the configuration you have to restart the server. To do that you have 2 options.
From d0830ba60047bed68c4397880eb3f85d1a844c16 Mon Sep 17 00:00:00 2001
From: Tom Harris
Date: Mon, 26 Feb 2018 14:14:43 -0500
Subject: [PATCH 04/35] Insteon_plm updated to 0.8.2 (#4695)
* Updated for recent Insteon version update
* Fix linkable_title
* Correct formating issues
* Clean up yaml content
* Exclude VS items
* Remove tabs from line
* Simplify description of config options
* Clarify device_override
* Remove newnames configuration option
* Fix spelling and clearify autodiscovery
* Remove tabs from yaml
* Update for documentation review
* Revert version back to original release version.
---
.gitignore | 8 +-
.../binary_sensor.insteon_plm.markdown | 2 +-
source/_components/fan.insteon_plm.markdown | 24 ++++++
source/_components/insteon_plm.markdown | 84 +++++++++++++++----
source/_components/light.insteon_plm.markdown | 2 +-
.../_components/sensor.insteon_plm.markdown | 22 +++++
.../_components/switch.insteon_plm.markdown | 2 +-
7 files changed, 122 insertions(+), 22 deletions(-)
create mode 100644 source/_components/fan.insteon_plm.markdown
create mode 100644 source/_components/sensor.insteon_plm.markdown
diff --git a/.gitignore b/.gitignore
index ec8690ad29c..6713e9e11c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,4 +12,10 @@ vendor
node_modules
source/.jekyll-metadata
*.iml
-.idea/
\ No newline at end of file
+.idea/
+/.vs/home-assistant.github.io/v15/.suo
+/.vs/ProjectSettings.json
+/.vs/slnx.sqlite
+/.vs/config/applicationhost.config
+/.vs/slnx.sqlite-journal
+/.vs/VSWorkspaceState.json
diff --git a/source/_components/binary_sensor.insteon_plm.markdown b/source/_components/binary_sensor.insteon_plm.markdown
index bd685df7c29..e2930b02dc6 100644
--- a/source/_components/binary_sensor.insteon_plm.markdown
+++ b/source/_components/binary_sensor.insteon_plm.markdown
@@ -1,7 +1,7 @@
---
layout: page
title: "Insteon PLM Binary Sensor"
-description: "Instructions how to setup the Insteon PLM switches locally within Home Assistant."
+description: "Instructions how to setup the Insteon PLM binary sensors locally within Home Assistant."
date: 2017-02-19 17:00
sidebar: true
comments: false
diff --git a/source/_components/fan.insteon_plm.markdown b/source/_components/fan.insteon_plm.markdown
new file mode 100644
index 00000000000..23c0cbac84b
--- /dev/null
+++ b/source/_components/fan.insteon_plm.markdown
@@ -0,0 +1,24 @@
+---
+layout: page
+title: "Insteon PLM Fan"
+description: "Instructions how to setup the Insteon PLM fan locally within Home Assistant."
+date: 2017-02-19 17:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: insteon.png
+ha_category: Fan
+ha_iot_class: "Local Push"
+ha_version: 0.65
+---
+
+The `insteon_plm` fan platform lets you control your [FanLinc] through
+an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a
+USB or serial port. To add support, set up the primary [insteon_plm]
+component.
+
+[insteon_plm]: /components/insteon_plm/
+[FanLinc]: https://www.smarthome.com/fanlinc-insteon-2475f-ceiling-fan-and-light-controller-fixture-module-dual-band.html
+
+
diff --git a/source/_components/insteon_plm.markdown b/source/_components/insteon_plm.markdown
index f28db9b74cd..e3fb65bcc97 100644
--- a/source/_components/insteon_plm.markdown
+++ b/source/_components/insteon_plm.markdown
@@ -16,13 +16,15 @@ ha_version: 0.39
This component adds "local push" support for INSTEON PowerLinc Modems allowing
linked INSTEON devices to be used within Home Assistant as lights, switches,
and binary sensors. Device support is provided by the underlying [insteonplm]
-package. It is known to work with both the [2413U] USB and [2412S]
-RS242 flavors of PLM. This component does not work with the IP-based hub
-products. For that, you'll want the "Insteon (Local)" component instead.
+package. It is known to work with the [2413U] USB and [2412S] RS242 flavors
+of PLM and the [2448A7] USB stick. This component does not work with the
+IP-based hub products. For that, you'll want the "Insteon (Local)" component
+instead.
[insteonplm]: https://github.com/nugget/python-insteonplm
[2413U]: https://www.insteon.com/powerlinc-modem-usb
[2412S]: https://www.insteon.com/powerlinc-modem-serial
+[2448A7]: https://www.smarthome.com/insteon-2448a7-portable-usb-adapter.html
```yaml
@@ -30,14 +32,48 @@ products. For that, you'll want the "Insteon (Local)" component instead.
insteon_plm:
port: SERIAL_PORT
device_override:
- - address: INSTEON_ADDRESS
- platform: DEVICE_PLATFORM
+ - address: ADDRESS
+ cat: CATEGORY
+ subcat: SUBCATEGORY
+ firmware: FIRMWARE
+ product_key: PRODUCT_KEY
```
-
Configuration variables:
- **port** (*Required*): The port for your device, e.g. `/dev/ttyUSB0`
-- **device_override** (*Optional*): Override the default device platform
-
+- **device_override** (*Optional*): Override the default device definition
+ - *ADDRESS* is found on the device itself in the form 1A.2B.3C or 1a2b3c
+ - *CATEGORY* is found in the back of the device's User Guide in the form of
+ 0x00 - 0xff
+ - *SUBCATEGORY* is found in the back of the device's User Guide in the form
+ of 0x00 - 0xff
+ - *FIRMWARE* and *PRODUCT_KEY* are more advanced options and will typically
+ not be used.
+
+### {% linkable_title Autodiscovery %}
+
+The first time autodiscovery runs, the duration may require up to 20 seconds
+per device. Subsequent startups will occur much quicker using cached device
+information. If a device is not recognized during autodiscovery, you can add
+the device to the **device_override** configuration.
+
+In order for a device to be discovered it must be linked to the PLM as either
+a responder or a controller.
+
+### {% linkable_title Linking Devices to the PLM %}
+
+In order for any two Insteon devices to talk with one another, they must be
+linked. For an overview of device linking please read the Insteon page on
+[understanding linking]. Currently Insteon PLM does not support software
+linking of devices. If you need software that can link your devices (if you
+are using a USB Stick PLM for example), you can download [HouseLinc] which runs
+on any Windows PC, or you can use [Insteon Terminal] which is open source and
+runs on most platforms. HouseLinc is no longer supported by SmartHome but it
+still works. Insteon Terminal is a very useful tool but please read the
+disclaimers carefully, they are important.
+
+[understanding linking]: http://www.insteon.com/support-knowledgebase/2015/1/28/understanding-linking
+[HouseLinc]: https://www.smarthome.com/houselinc.html
+[Insteon Terminal]: https://github.com/pfrommerd/insteon-terminal
### {% linkable_title Customization %}
@@ -58,14 +94,14 @@ devices.
### {% linkable_title Device Overrides %}
INSTEON devices are added to Home Assistant using the platform(s) that make the
-most sense given the model and features of the hardware. In most cases this is
-unambiguous, but sometimes the component will not be able to guess the actual
-usage of the device. For example, there might be a table lamp plugged into an
-INSTEON appliance relay module. By default, this will show as a 'switch'
-device in Home Assistant, but it really should be a 'light' device. For
-exceptions like this, the component supports a device platform override. You
-can set any device (by address) to explicitly use a specific platform if the
-default is not correct.
+most sense given the model and features of the hardware. The features of the
+INSTEON device are built into the Home Assistant platform. Changing the
+platform is not recommended. There are two primary uses for the
+**device_override** feature.
+- Devices that do not respond during autodiscovery. This is common for battery
+ operated devices.
+- Devices that have not been fully developed. This allows an unknown device to
+ be mapped to a device that operates similarly to another device.
### {% linkable_title Example Configuration with Options%}
@@ -83,7 +119,19 @@ homeassistant:
insteon_plm:
port: /dev/ttyUSB0
device_override:
- - address: a1b2c3 # Icon Appliance Module for bedside lamp
- platform: light # make it a light instead of a switch
+ - address: a1b2c3 # Hidden Door Sensor [2845-222]
+ cat: 0x10
+ subcat: 0x11
+```
+### {% linkable_title What NOT to do %}
+Insteon PLM is a top level component and device discovery will identify
+the Home Assistant platform the device belongs in. As such, do not
+declare Insteon devices in other platforms. For example, this configuration
+will NOT work:
+
+```yaml
+light:
+ - platform: insteon_plm
+ address: 1a2b3c
```
diff --git a/source/_components/light.insteon_plm.markdown b/source/_components/light.insteon_plm.markdown
index 7c95d8dfe4f..04ab92bdee6 100644
--- a/source/_components/light.insteon_plm.markdown
+++ b/source/_components/light.insteon_plm.markdown
@@ -13,5 +13,5 @@ ha_iot_class: "Local Push"
ha_version: 0.39
---
-The `insteon_plm` light platform lets you control your sensors through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on an USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component.
+The `insteon_plm` light platform lets you control your dimmable light switches through an INSTEON PowerLinc Modem (PLM) device connected directly to your system on an USB or serial port. To add support, set up the primary [insteon_plm](/components/insteon_plm/) component.
diff --git a/source/_components/sensor.insteon_plm.markdown b/source/_components/sensor.insteon_plm.markdown
new file mode 100644
index 00000000000..db9125f33ab
--- /dev/null
+++ b/source/_components/sensor.insteon_plm.markdown
@@ -0,0 +1,22 @@
+---
+layout: page
+title: "Insteon PLM Sensor"
+description: "Instructions how to setup the Insteon PLM sensors locally within Home Assistant."
+date: 2017-02-19 17:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: insteon.png
+ha_category: Sensor
+ha_iot_class: "Local Push"
+ha_version: 0.65
+---
+
+The `insteon_plm` sensor platform lets you control your sensors through
+an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a
+USB or serial port. To add support, set up the primary [insteon_plm]
+component.
+
+[insteon_plm]: /components/insteon_plm/
+
diff --git a/source/_components/switch.insteon_plm.markdown b/source/_components/switch.insteon_plm.markdown
index 2e32a561603..0db0d143ccb 100644
--- a/source/_components/switch.insteon_plm.markdown
+++ b/source/_components/switch.insteon_plm.markdown
@@ -13,7 +13,7 @@ ha_iot_class: "Local Push"
ha_version: 0.39
---
-The `insteon_plm` switch platform lets you control your switches through
+The `insteon_plm` switch platform lets you control your on/off switches through
an INSTEON PowerLinc Modem (PLM) device connected directly to your system on a
USB or serial port. To add support, set up the primary [insteon_plm]
component.
From 12b6447a5fe54421540b790c45262fa4195a1f07 Mon Sep 17 00:00:00 2001
From: Robin
Date: Mon, 26 Feb 2018 20:26:09 +0000
Subject: [PATCH 05/35] Adds simulated sensor (#4712)
* Create sensor.simulated.markdown
* Fix seed ref
* Update sensor.simulated.markdown
* Update sensor.simulated.markdown
* Update sensor.simulated.markdown
---
source/_components/sensor.simulated.markdown | 94 ++++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 source/_components/sensor.simulated.markdown
diff --git a/source/_components/sensor.simulated.markdown b/source/_components/sensor.simulated.markdown
new file mode 100644
index 00000000000..4667b9ff396
--- /dev/null
+++ b/source/_components/sensor.simulated.markdown
@@ -0,0 +1,94 @@
+---
+layout: page
+title: "Simulated sensor"
+description: "Component for simulating a numerical sensor."
+date: 2018-02-20 08:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: home-assistant.png
+ha_category: Sensor
+ha_iot_class: "Local Polling"
+ha_release: 0.65
+---
+
+This component provides a simulated sensor that generates a time-varying signal ```V(t)``` given by the [function](https://en.wikipedia.org/wiki/Sine_wave):
+
+ ```
+ V(t) = M + A sin((2 pi (t - t_0) / w) + P) + N(s)
+ ```
+
+where:
+
+- **M** = the [mean](https://en.wikipedia.org/wiki/Mean) value of the sensor
+- **A** = the [amplitude](https://en.wikipedia.org/wiki/Amplitude) of the periodic contribution
+- **t** = the time when a value is generated
+- **t_0** = the time when the sensor is started
+- **w** = the time [period](https://en.wikipedia.org/wiki/Periodic_function) in seconds for a single complete cycle of the periodic contribution
+- **P** = the [phase](https://en.wikipedia.org/wiki/Phase_(waves)) offset to add to the periodic contribution, in units of degrees
+- **N(s)** = the random [Gaussian noise](https://en.wikipedia.org/wiki/Gaussian_noise) with spread **s**
+
+A simulated sensor with default values can be added to home-assistant using the following config:
+
+```yaml
+sensor:
+ - platform: simulated
+```
+
+To give an example of simulating real world data, a simulated relative humidity sensor (in %) can be added using the following config:
+
+```yaml
+sensor:
+ - platform: simulated
+ name: 'simulated relative humidity'
+ unit: '%'
+ amplitude: 0 # Turns off the periodic contribution
+ mean: 50
+ spread: 10
+ seed: 999
+```
+
+Configuration variables:
+{% configuration %}
+name:
+ description: The name of the sensor
+ required: false
+ default: Defaults to 'simulated'
+ type: string
+unit:
+ description: The unit to apply
+ required: false
+ default: Defaults to 'value'
+ type: string
+amplitude:
+ description: The amplitude of periodic contribution
+ required: false
+ default: 1
+ type: float
+mean:
+ description: The mean level of the sensor
+ required: false
+ default: 0
+ type: float
+period:
+ description: The time in seconds for one complete oscillation of the periodic contribution
+ required: false
+ default: 0
+ type: seconds
+phase:
+ description: The phase offset (in degrees) to apply to the periodic component
+ required: false
+ default: 0
+ type: float
+seed:
+ description: The [seed](https://docs.python.org/3.6/library/random.html#random.seed) value for the random noise component
+ required: false
+ default: 999
+ type: int
+spread:
+ description: The spread is the range of the randomly distributed values about their mean. This is sometimes referred to as the Full Width at Half Maximum ([FWHM](https://en.wikipedia.org/wiki/Full_width_at_half_maximum)) of the random distribution
+ required: false
+ default: None
+ type: float
+{% endconfiguration %}
From 52387b95c66433e4e07f424ebfa42c793811c110 Mon Sep 17 00:00:00 2001
From: Sean Wilson
Date: Wed, 28 Feb 2018 16:25:58 -0500
Subject: [PATCH 06/35] Add 'lock' device class (#4417)
* Add monitored_conditions documentation.
* Remove monitored_conditions from example
* Add missing 'week' monitored_condition
* Add 'lock' device class
* Invert lock settings
As per https://github.com/home-assistant/home-assistant/pull/11640
* Tweak formatting
---
source/_components/binary_sensor.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown
index 781f4f45576..9781df8e23f 100644
--- a/source/_components/binary_sensor.markdown
+++ b/source/_components/binary_sensor.markdown
@@ -22,6 +22,7 @@ The way these sensors are displayed in the frontend can be modified in the [cust
- **gas**: `On` means gas detected, `Off` means no gas (clear)
- **heat**: `On` means hot, `Off` means normal
- **light**: `On` means light detected, `Off` means no light
+- **lock**: `On` means open (unlocked), `Off` means closed (locked)
- **moisture**: `On` means moisture detected (wet), `Off` means no moisture (dry)
- **motion**: `On` means motion detected, `Off` means no motion (clear)
- **moving**: `On` means moving, `Off` means not moving (stopped)
From 0d324e218155fcda4042aaa737bcdba4025950f6 Mon Sep 17 00:00:00 2001
From: Mike Megally
Date: Thu, 1 Mar 2018 16:34:46 -0800
Subject: [PATCH 07/35] documentation for synology chat as a notification
platform (#4730)
* documentation for synology chat as a notification platform
* Add ha_release and logo
---
.../_components/notify.synology_chat.markdown | 34 +++++++++++++++++++
1 file changed, 34 insertions(+)
create mode 100644 source/_components/notify.synology_chat.markdown
diff --git a/source/_components/notify.synology_chat.markdown b/source/_components/notify.synology_chat.markdown
new file mode 100644
index 00000000000..2ea2dd577d5
--- /dev/null
+++ b/source/_components/notify.synology_chat.markdown
@@ -0,0 +1,34 @@
+---
+layout: page
+title: "Synology Chat"
+description: "Instructions how to add a Synology Chat Bot notifications to Home Assistant."
+date: 2018-02-15 07:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_release: 0.65
+logo: synology.png
+ha_category: Notifications
+---
+
+The `synology_chat` notification platform allows you to deliver notifications to your [Synology Chat](https://www.synology.com/en-us/dsm/feature/chat) install as a Synology Chat bot.
+
+To configure a Synology Chat bot, first you must create a [Synology Chat Integration Incoming Webhook](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Collaboration/How_to_configure_webhooks_and_slash_commands_in_Chat_Integration#t2.1). After this is complete, you will have a Webhook URL. This is what will be required in the Home Assistant configuration.
+
+To enable the Synology Chat notification in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+notify:
+ - platform: synology_chat
+ name: hass_synchat
+ resource: https://example.your.synology.com/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=1&token=ABCDEFG
+```
+
+Configuration variables:
+
+- **name** (*Required*): Setting the parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
+- **resource** (*Required*): The incoming webhook URL.
+
+To use notifications, please see the [getting started with automation page](/getting-started/automation/).
From e99a85a20dd157af02c9007e7819f87455c22055 Mon Sep 17 00:00:00 2001
From: Diogo Gomes
Date: Fri, 2 Mar 2018 00:54:41 +0000
Subject: [PATCH 08/35] Filter Sensor (#4725)
* Filter component
* changes as requested
* Changed the component name
* updated according to new version
* Chaining explained
* Added extra sensor and screenshot
* Update sensor.filter.markdown
---
source/_components/sensor.filter.markdown | 122 ++++++++++++++++++++
source/images/screenshots/filter-sensor.png | Bin 0 -> 47072 bytes
2 files changed, 122 insertions(+)
create mode 100644 source/_components/sensor.filter.markdown
create mode 100644 source/images/screenshots/filter-sensor.png
diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown
new file mode 100644
index 00000000000..07f5b33e3a5
--- /dev/null
+++ b/source/_components/sensor.filter.markdown
@@ -0,0 +1,122 @@
+---
+layout: page
+title: "Filter Sensor"
+description: "Instructions how to integrate Data Filter Sensors into Home Assistant."
+date: 2018-02-20
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Sensor
+ha_release: 0.65
+ha_iot_class: "Local Push"
+logo: home-assistant.png
+---
+
+The `filter` platform enables sensors that process the states of other entities.
+
+`filter` applies a signal processing algorithm to a sensor, previous and current states, and generates a `new state` given the chosen algorithm.
+
+
+
+
+
+To enable Filter Sensors in your installation, add the following to your `configuration.yaml` file:
+
+
+```yaml
+# Example configuration.yaml entry
+sensor:
+ - platform: filter
+ name: "filtered realistic humidity"
+ entity_id: sensor.realistic_humidity
+ filters:
+ - filter: outlier
+ window_size: 4
+ radius: 4.0
+ - filter: lowpass
+ time_constant: 10
+ precision: 2
+```
+
+Filters can be chained and are applied according to the order present in the configuration file.
+
+{% configuration %}
+entity_id:
+ description: The entity ID of the sensor to be filtered.
+ required: true
+ type: string
+name:
+ description: Name to use in the frontend.
+ required: false
+ type: string
+filters:
+ description: Filters to be used.
+ required: true
+ type: map
+ keys:
+ filter:
+ description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier` and `throttle`.
+ required: true
+ type: string
+ window_size:
+ description: Size of the window of previous states.
+ required: false
+ type: int
+ default: 5
+ precision:
+ description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round().
+ required: false
+ type: int
+ default: None
+ time_constant:
+ description: See [_lowpass_](#low-pass) filter. Loosely relates to the amount of time it takes for a state to influence the output.
+ required: false
+ type: int
+ default: 10
+ radius:
+ description: See [_outlier_](#outlier) filter. Band radius from median of previous states.
+ required: false
+ type: float
+ default: 2.0
+{% endconfiguration %}
+
+## {% linkable_title Filters %}
+
+### {% linkable_title Low-pass %}
+
+The Low-pass filter (`lowpass`) is one of signal processing most common filters, as it smooths data by shortcuting peaks and valleys.
+
+The included Low-pass filter is very basic and is based on a moving average, in which the previous data point is weighted with the new data point.
+
+```python
+B = 1.0 / time_constant
+A = 1.0 - B
+LowPass(state) = A * previous_state + B * state
+```
+
+The returned value is rounded to the number of decimals defined in (`precision`).
+
+### {% linkable_title Outlier %}
+
+The Outlier filter (`outlier`) is a basic Band-stop filter, as it cuts out any value outside a specific range.
+
+The included Outlier filter will discard any value beyond a band centered on the median of the previous values, replacing it with the median value of the previous values. If inside the band, the
+
+```python
+distance = abs(state - median(previous_states))
+
+if distance > radius:
+ median(previous_states)
+else:
+ state
+```
+
+### {% linkable_title Throttle %}
+
+The Throttle filter (`throttle`) will only update the state of the sensor for the first state in the window. This means the filter will skip all other values.
+
+To adjust the rate you need to set the window_size. To throttle a sensor down to 10%, the `window_size` should be set to 10, for 50% should be set to 2.
+
+This filter is relevant when you have a sensor which produces states at a very high-rate, which you might want to throttle down for storing or visualization purposes.
+
diff --git a/source/images/screenshots/filter-sensor.png b/source/images/screenshots/filter-sensor.png
new file mode 100644
index 0000000000000000000000000000000000000000..679d2fdfe06f729c4e62078f87aebff1e23e0328
GIT binary patch
literal 47072
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%0A-M<45c_gK3adQcUp9+Hjb*p!V9Xx8
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
Date: Fri, 2 Mar 2018 03:05:14 +0200
Subject: [PATCH 09/35] Add UpCloud platform (#4543)
* Add UpCloud platform
* Add scan_interval for UpCloud.
* Update upcloud.markdown
* Update switch.upcloud.markdown
* Update binary_sensor.upcloud.markdown
---
.../binary_sensor.upcloud.markdown | 34 ++++++++++++++
source/_components/switch.upcloud.markdown | 34 ++++++++++++++
source/_components/upcloud.markdown | 44 ++++++++++++++++++
source/images/supported_brands/upcloud.png | Bin 0 -> 9424 bytes
4 files changed, 112 insertions(+)
create mode 100644 source/_components/binary_sensor.upcloud.markdown
create mode 100644 source/_components/switch.upcloud.markdown
create mode 100644 source/_components/upcloud.markdown
create mode 100644 source/images/supported_brands/upcloud.png
diff --git a/source/_components/binary_sensor.upcloud.markdown b/source/_components/binary_sensor.upcloud.markdown
new file mode 100644
index 00000000000..6cae22e876c
--- /dev/null
+++ b/source/_components/binary_sensor.upcloud.markdown
@@ -0,0 +1,34 @@
+---
+layout: page
+title: UpCloud Binary Sensor
+description: Instructions on how to set up UpCloud binary sensors within Home Assistant.
+date: 2018-01-28 20:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: System Monitor
+logo: upcloud.png
+ha_release: 0.65
+ha_iot_class: Cloud Polling
+---
+
+The `upcloud` binary sensor platform allows you to monitor your UpCloud servers.
+
+To use your UpCloud servers, you first have to set up your [UpCloud hub](/components/upcloud/) and then add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+binary_sensor:
+ - platform: upcloud
+ servers:
+ - 002167b7-4cb1-44b7-869f-e0900ddeeae1
+ - 00886296-6137-4074-afe3-068e16d89d00
+```
+
+{% configuration %}
+servers:
+ description: List of servers you want to monitor.
+ required: true
+ type: list
+{% endconfiguration %}
diff --git a/source/_components/switch.upcloud.markdown b/source/_components/switch.upcloud.markdown
new file mode 100644
index 00000000000..98f45d0e68d
--- /dev/null
+++ b/source/_components/switch.upcloud.markdown
@@ -0,0 +1,34 @@
+---
+layout: page
+title: UpCloud Switch
+description: Instructions on how to set up UpCloud switches within Home Assistant.
+date: 2018-01-28 20:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: upcloud.png
+ha_category: Switch
+ha_release: 0.65
+ha_iot_class: Cloud Polling
+---
+
+The `upcloud` switch platform allows you to control (start/stop) your UpCloud servers.
+
+To use your UpCloud servers, you first have to set up your [UpCloud hub](/components/upcloud/) and then add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+switch:
+ - platform: upcloud
+ servers:
+ - 002167b7-4cb1-44b7-869f-e0900ddeeae1
+ - 00886296-6137-4074-afe3-068e16d89d00
+```
+
+{% configuration %}
+servers:
+ description: List of servers you want to control.
+ required: true
+ type: list
+{% endconfiguration %}
diff --git a/source/_components/upcloud.markdown b/source/_components/upcloud.markdown
new file mode 100644
index 00000000000..726c776fa2f
--- /dev/null
+++ b/source/_components/upcloud.markdown
@@ -0,0 +1,44 @@
+---
+layout: page
+title: UpCloud
+description: Instructions how to integrate UpCloud within Home Assistant.
+date: 2018-01-28 20:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Hub
+ha_release: 0.65
+logo: upcloud.png
+ha_iot_class: Cloud Polling
+---
+
+
+The `upcloud` component allows you to access the information about your [UpCloud](https://www.upcloud.com/) servers from Home Assistant.
+
+Set up your API user credentials in your [UpCloud control panel](https://my.upcloud.com/).
+
+To integrate your UpCloud servers with Home Assistant, add the following section to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+upcloud:
+ username: YOUR_API_USERNAME
+ password: YOUR_API_PASSWORD
+```
+
+{% configuration %}
+username:
+ description: Your UpCloud API username.
+ required: true
+ type: string
+password:
+ description: Your UpCloud API user password.
+ required: true
+ type: string
+scan_interval:
+ description: Update interval in seconds.
+ required: false
+ type: int
+ default: 60
+{% endconfiguration %}
diff --git a/source/images/supported_brands/upcloud.png b/source/images/supported_brands/upcloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..c97dd91a2c4e8e3f2daaafdea043f15aa07ffe64
GIT binary patch
literal 9424
zcmb7qbyU>P7xrhD1$N1$8oBuQ!QnD9BLc@0Ps~+kU9VWO8O^zL$Us~^^|&g
z0Kk%=ij>m}03CFO{p$m|3vP57?56%F{{I%#`%of?va~;vmAA&Go>RUF$+8VC
zCut(Z6|OSHf09{L|5fLWb2_&(G_Qda=*tp`v7JA5Xv3?n=1G`$r?=my;yV2JBfI7&
zEhPJ)&!h^QX6uc7Z*WfCAIYdVf${0Y&yzYMu=B%5yUG5yR&uTXQ@6E)gt8}Iynywm
zC7QWnt?U&54iEwnu;@nohON-!*85BO9CjaI*=rco692^m(`9iuD^fwFNv>S
z9{&oyxscL(`yaUJ_dyQVZ$;eU9YiLIK!Kl}m7{pHUjz)bi|Z&jv$dj=U8@8Js6?zf
zQ0C9DP?Oek0>^Pz!91YiNMX|d5EYT%;2adc#U#BLlZFCL&%@t}d(sb^2@@C&e^Pa3
zyaBODL#z(Mx8>MkgutZ7I2EB{Wrgw7!h3v*|MBxY@}jyK!+(K&XijAXD>4|X34~O0
z39SzVe;`5itpR8kfM8`cWtC_!3Kc$@b~OrT_5Kff@fIy7hdKpLVOpPBfRdw8+`8q_C?^F;zcbS3>z8dC3N7@|Wh}-6{
zJ0W9OjlLQ;u=C>Dhjoh-GogF-uY9JKn9{&if~R<)p9HYw8&$%UY=TC-$_*fIpD@#s
z`DFDYn=a<+Rl6xZHB)tstsH(Y~cc{-bOi+B`
z?hCEL2m_64%7^RIspM>RJsuAkR1r==jfLnCiTF&fU)+MG#d$;6QgcJ(aXv6M%Y^!%
z8vk$zL7f|1*eBN}?&W%VBpAGcX30@#g5mxjI}Sf@8BJXFH7TqxI{e~L)QN-JDLs8B
zYH27U%EsH_u=+?bSs2E7R~Hm(BOK)@tsLAIP2SR^Tgc14b>}Q>uBUA$89*neqRmVc
z$O1{+Np%Pnw{aXjq!9Ru1IWW22?Czp82zkq7_G=+iy~wQ!Rw0u(&PC~6dQl%7}3Z(
z?4gzo>k}ip-1Va^hxSoNuQaTmA)oWI-((uoxjwdJXdZlkuyH@noSn4E4SHQ&L)#L+
z!gz28=NR=`6qoGOO?4?{ZE0`HlYN52Yz~|#HQo;1{%lg_{6};F$bjbB>=Wy}nXoOH
z>NNAKXMd=UWp3#|u*U3u?4J?wU!6}Fxg>ZYEvvt^wiSvc*g@xf;0ZM;e#=w;bADm}
zO!DtVFe%u-Ja+nR+4Y_XYaFtJQpj=4ja?f3QYwiNB=C9fax23!gs<}V#H{U!M7qBB
z_sWCk$j{*gg)bGp*yL9929RzS2fiWE!_*x^&M@}`3D#~j;obHJ?zL(?NPv*w81u8l
zXDr5XyP`c9Wd`iSaeo=Fs;=Z)=jX`!HJh{d@GZ*Hl|o1_G(CQQ%Zu9!S*kMg3sK$NNnTjM#y&4C06iu8mzYqb91P((a3uq7+S_v_joGaR~q-x?yS0YyA2jKi=UDBQ-mt#t8
zM?y{mPTiwY5`AD-1i-
zFl`JFLUq#xR&i>{=>l!wnfw|puuUyiyDA0c4JF(N2#z?DqQyoCKmNbeq7K|vpwgrQ79Ck?
z=|fUXx3#(QBKn#UCRhQWD;Ut*#HdKkXQE?)N^Nk3Shj)<5oE}^!Tn|Cb?aIa
z!RK$U1U7ye==@pnOSJ5^+oiaFf`cd46LY1JnH
z`@SaI_!qqEK}fxyi-Tj9VWD-r-0;f=E6ONNoI-G&^UC+VAMk#?6E|>UP-g@>I?mb5
zl(=b*!`L^;+6*6g75U#W{6so1nPxE7ma$)PSZoW&d|Owq5pNfoWmE6^1BNzzBNa;E
zt-ia1x2ZaGtaw!NXe!RIpx_l*i&+U)kd|9QudZac*=JYpnh}nDa$LT)pJRnv8iW9-ry8k2`yV4w|ztj_@g32t+HGX$y{YvHdCl~
zkQy*Im@Plo+F8EliWku!%wiTRQhR8nm=4(|T4jyBrI+8h!n_ql8`6B(>|5kN%6H|>
zUK%vek@~T%NJV~>yKl|F016$EL5c{V^C0kaGL*WAra&Pn=V
z8A;WnVpl2CFt%=`HdICN8ijoXmj_5?+4YinTMC3`mpMQGZ)l?c5H~RL@#8h#Dpe1
z4<|h0VTiwyC&!5eu*Z+w;B09cM=30Ld8*&pe~@?W^G
zl;;@h*_VIYFi4yoU99in{x%u*z?)RI#wbE7eVs%~0FNgCcbFk<1&sA>N9m@+gJ7YKJX8U>UnF;0hNf*R`(+0OhuJHQt
z3M-}iIL;)K4L2Tvu#MKd4Hw8Z7i`rfs6RZz?6hWP=KK1`Po5MCFNQaPKbW!~42pE%
zIy~9IZ9kAB1Gwv#%7O^F;CdZ{bUmHw7qo+9nEBl-ZV}>6VISQome1&8`o&RGJB=5E
zEGVNSui8DW03+VBUKS6^-XDTpiUWM(klwFMR?No*R`ZZTAHq9IHNlt~YP_DcfLIKI
z7Q6S;26cNlc)D=R$$6m2|7bbFrcN3JDdr#D#;YL2^-y8;dFlIA^BbRFXy;JSR6!P6
z+IqOI6;qa$b!rLGzY`lv^{|kNRvy>j`AQcaigkyCMf$7_#o?*93IQ`FeVJu`su=xO
z#&>TvBR)#hOJ?nKafoeS#265&`m>Ok{F(^7OrwkR_eqDqap7Gwqn%bJBgUwK4sw9F
zt(BE-$0n+oU{PI_OYE{P$}0M)PQH@M3Tps1|?y5@z`*njxBG{@bI*gOKU@MkK8FvEp^&+q4l;&Wr=uLcmynoQg2zk<=szGSI8lM%0!PcdMOP5B?HZGPuH~t*5uL0nYub(t)7NEENu==p(voQ1
zYQnC-hY-=~MJr*b#-a;=Jk#D0W7pr*xe5tz$NM4&RvG+5Z2yq3IoTgYOqB2lSFA(k
zsQ?o10iE>eCy69eZbN&r;#V@m%i@T{h%7CIq1q4Se?+r?3X1$Dv~EJ~2?qXf}EX
zvDrX+QzL_K35le3W|yD0h3eFt0XDq3dGE;CDU-;)WCkM(DRxFy`JjpFP&Ybs_yd4(
z4x7jTjW*lo
z0_v`{Y(Ok-);+ZA!HyM1j39>WUsv1n`RO@{M#Am`VGSXNfsW_Ww(C`
zgcbf+hL@G|W05S9JjDGQ&RLLASR@fFy=O!1yb~MwYHMpsDwvIjI>kAZkTV3Us1qx|
zu9Mjku09gdnI)HF-f$tdHIGA^vL9OTK>g28y7Zt;iAnimHdO8Lf8m$vq8<^1^&$X~
z{DW<7dG>qNQ^{j;I@x)YEnTVYdgegJiewV=d1e|2y)Eoo^YiKMtM1MG$@SMo-?Zj&
z90Ze{Ka3BVqucJm!@X|$z%TUs%*@(*M~+)5#`^{Wl-Qz~-_)W?(%M}H@DrSBD%#9U
zKTTLQoL%;o_Le|9Kt4faf0j~iK1_@xAWVwtG*t342123(BaNJ;u7Ad2GY)w)tYp92
zz(zuz9*jG@!NTf0A6SwoV1E
zNEjwU6VqPR3at-<*nbOUeOWncujX}R+sg+KX$}(0e$|Yb_xJ}SkB^ylPmd=c`cT&X
z>pS+A5s|~Y+H}BL8XGdTXe8HtWahV>pY$iT
zHXd~M`BfO3Sra96Kv;c@y{@j@29BA76EF@=!CR^R`+zw;-`6tESnU0%Qk3e5tqv|Y
z>{_M>LVNYu`e-AGx3Ctjj8zSJ3Pzz`ud{CcK~sG9-QbSG?W#eke>l1`N#SF511A>p
z4ca;&lV`D{=&jXzXN<5@g`iB1$V3~EbK+l1%H5SGixO)zUYOVo#Q1h3qU}_%g$}C^
zzT#}vvK0*I-~rD>3I#qEjyy+WfM^E3DNLE)zWtz0!lZGbOnfBC>_Il@Lbg*G%mYQ-
ztcnUNQA0B@tiX>9P>83>0ZVfbxN%7j@=ej}c(vxkB8!Tj{a~;T^_h$oaX6>Q=?+EJ
zus|Dg#>1~&ZZ#pcGW+_ME&x0zZ+2)g&v*6ec$L@YrV3B7^37}H2$DLcEYhup6Xg?9
z#*}dnWj2*r;nzP~nntc{`3Me2)pdI13W=HG%4X8O-Ute-3fMpZ!LICD7;i+=l(7M}~?
z9W^GEH8QSeSm95h|GhvJJcX25ELH;R0@LJw)he(M6<00??M@t-j%QfB$$*VHF(H3r
z7U6hDh8DP2?4!i<9G<;Q?_i(z?f?4lGep!>X_IpBS)Aof%b7Ko6^(lh!hF49gj$@I%?GB
zOJ;Tq77;2CG`&W3N#>vRn@Jlf_y#L~7yEa+?tnm6W)+8-pL`WL2RU;~{8m>F(+>}9
z!|}shH-JjOu0N0pNE-D8SaR`!&IgBmC&VitX1kqT?kkndO!ajNE2v25+}+p49_Ue8
zdx3>m^yj~9r2xk~392jxA)OIZ4IUTv1qSZq7+-p!^5?YBR672yVuB&>ucX!;?Q$gQ
zL#+!R)Ae#QM}Bn6S6v$XR5`#-3=S#BKrmL0hGVVIzz8h}A5=mZXLW~3EX%ENQN5KCScCrq
zJ7`2DmK+OCCck}|$x*@MO8Q(1fWc*{hw~09_d!K>8lQz;3sK&
z>jV(B?(Fm(8s_#({3_J5WZ?f70sgX^lfyu@MxLZ1v<<6P^?4Ohu8rP()Im6G5s~@o^
zOp3jh8ny-OBjM5VO=1KlBa*NrIlO3+KrPM(;%50ABfWB3Hs$
zSa8}Mp;n}Py6+QcMhFu619FWBd-M<7#Y`XN^?)Q{PyW}79*A5^DKOn+pSAlir|a_R
zmIiW3(CPx;+Su0_034tKTPmCY)5`-&B@_S`e(-m=$g2TmxOF^=WNmLHi=MHvxm@9)#io75idHckG9^W5I}x;
zNaNgIa;6-wWAMYP{JI~Ne!QCW)@L^P#dW4HSlbxYykWAM!-a7Z{sG>g%^@dT!j4nS
zC~DHkkL2(dmMNwGbF1R--1xYjhdVbk>?&JEi9`(lEoa$s*L~+s_vS_UuV~e#)YvCx
z)}&^L4nMm6bJi8-LT8o)cJ(Z~aX&%{JI6$tk+6{i%i@lv_Mcr4>*?rlA*BvUmq$EW
z<-Z6)@R>Nq+Z^$cQW0H=0Da|-KDLj1K0k(W!8oh2a(CeGGPcf}<;BNssL6oxL%D``UeJvIWL
zsN?C}vI*(w$81veig@|jl7aGsUjDo0o&=9DpwrC(+C#V+(~?P(tsI}4&^+PK`FpvE
z88|Icw}Se`-%^%qA&rS~0Tokm0~k|R&&df-!=l$yA)>Eag4Y