From 943b2e311923ead807e5f1d12a9229c94d37b011 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Mon, 1 Jan 2018 18:35:59 +0100 Subject: [PATCH] Add deCONZ component documentation (#3967) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Deconz hub documentation * Add binary sensor documentation * Add sensor documentation * Add light documentation * Improve description * Add information about HASS events from ZHASwitch buttonpresses * Added description about how entity id naming works * Added links to dresden elektronik, deconz and deconz rest api Added automation examples for a IKEA Trådfri dimmer and input number Added list of supported device types Added lists of verified to work devices Removed references to Axis component * Changed description of how to generate API key * Added information about configuration variables username and password * Updated lists of verified devices * Links from list of supported device to sub modules * Remove documentation for api_key_generation since functionality has been removed * Add documentation for configure service * Documentation for scenes * Bumped HASS release version to 0.59 * Added Xiaomi Aqara Smart Wireless Switch to list of verified to work devices * Added improved automation example by simonporter007 * Added information about deCONZ configurator * Fix raw code * Added more lights to supported list * Make description about entity id same in all types * Updated installation instructions * Added Dresden Elektroniks logo * Added Tseels verified to work devices * Bump ha_release string * Added information about groups Added additional verified lights * Link to information about switch not being an entity on main hub page * Improved information about switches not being normal entities * It should be api_key not api-key * Removed specifying deconz version * Bump version to 0.61 * Fix typos * Use configuration tags to describe configuration parameters * Fix martinhjelamares comments * Rename parameter service data attribute --- .../_components/binary_sensor.deconz.markdown | 33 ++++ source/_components/deconz.markdown | 148 ++++++++++++++++++ source/_components/light.deconz.markdown | 29 ++++ source/_components/scene.deconz.markdown | 18 +++ source/_components/sensor.deconz.markdown | 45 ++++++ source/images/supported_brands/deconz.jpeg | Bin 0 -> 12197 bytes 6 files changed, 273 insertions(+) create mode 100644 source/_components/binary_sensor.deconz.markdown create mode 100644 source/_components/deconz.markdown create mode 100644 source/_components/light.deconz.markdown create mode 100644 source/_components/scene.deconz.markdown create mode 100644 source/_components/sensor.deconz.markdown create mode 100644 source/images/supported_brands/deconz.jpeg diff --git a/source/_components/binary_sensor.deconz.markdown b/source/_components/binary_sensor.deconz.markdown new file mode 100644 index 00000000000..f06c89241bd --- /dev/null +++ b/source/_components/binary_sensor.deconz.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "deCONZ Binary Sensor" +description: "Instructions on how to integrate Zigbee binary sensors from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Binary Sensor +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The following sensor types are supported: + + * Open/Close detection + * Presence detection + +Entity ids will be binary_sensor.device_name, where device_name is defined in deCONZ. + +#### {% linkable_title Verified to be supported binary sensors %} + +- Open/Close Detection + - Xiaomi Smart Home Security Door & Window Contact Sensor +- Presence Detection + - IKEA Trådfri Motion Sensor + - Philips Hue Motion Sensor + - Xiaomi Motion Sensor + - Xiaomi Smart Home Aqara Human Body Sensor diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown new file mode 100644 index 00000000000..8d050e7d43d --- /dev/null +++ b/source/_components/deconz.markdown @@ -0,0 +1,148 @@ +--- +layout: page +title: "deCONZ" +description: "Instructions on how to setup Conbee/Raspbee devices with deCONZ from Dresden Elektronik within Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Hub +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +[deCONZ](https://www.dresden-elektronik.de/funktechnik/products/software/pc/deconz/) by [Dresden Elektronik](https://www.dresden-elektronik.de) is a software that communicates with Conbee/Raspbee Zigbee gateways and exposes Zigbee devices that are connected to the gateway. + +[deCONZ REST API](http://dresden-elektronik.github.io/deconz-rest-doc/). + +Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. + +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to Menu->Settings->Unlock Gateway in deCONZ and then use the deCONZ configurator in Home Assistant GUI to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in deconz.conf inside the home-assistant folder. + +You can add the following to your configuration.yaml file if you are not using the `discovery:` component: + +```yaml +# Example configuration.yaml entry +deconz: + host: IP ADDRESS +``` + +#### {% linkable_title Supported Device types %} + +- [Zigbee Lights](/components/light/deconz/) +- [Humidity Sensors](/components/sensor/deconz/) +- [Light Level Sensors](/components/sensor/deconz/) +- [OpenClose Detectors](/components/binary_sensor/deconz/) +- [Presence Detectors](/components/binary_sensor/deconz/) +- [Pressure Sensors](/components/sensor/deconz/) +- [Switches (Remote Controls)](/components/sensor/deconz/) +- [Temperature Sensors](/components/sensor/deconz/) + +{% configuration %} +host: + description: The IP address of your deCONZ web server. + required: false + type: string +api_key: + description: The API key to access your deCONZ web server. + required: false + type: string +port: + description: Configure port deCONZ web server is accessible from. + required: false + default: 80 + type: int +{% endconfiguration %} + +A full configuration could look like this: + +```yaml +# Example configuration.yaml entry +deconz: + host: 127.0.0.1 + api_key: 0123456789 + port: 80 +``` + +## {% linkable_title Device services %} +Available services: `configure`. + +#### {% linkable_title Service `deconz/configure` %} +Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). + +| Service data attribute | Optional | Description | +|-----------|----------|-------------| +| `field` | No | String representing a specific device in deCONZ. | +| `data` | No | Data is a JSON object with what data you want to alter. | + +{ "field": "/lights/1", "data": {"name": "light2"} } + +{ "field": "/config", "data": {"permitjoin": 60} } + +## {% linkable_title Remote control devices%} + +Remote controls (ZHASwitch category) will be not be exposed as a regular entity, but as events named 'deconz_event' with a payload of 'id' and 'event'. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. + +Typical values for switches, the event codes are 4 numbers where the first and last number are of interest here. + +| Switch code | Description | +|-------------|-------------| +| 1XXX | Button #1 up to #8 | +| XXX1 | Button hold | +| XXX2 | Button short release | +| XXX3 | Button long release | + +Where for example on a Philips Hue Dimmer, 2001 would be holding the dim up button. + +## {% linkable_title Examples %} + +### {% linkable_title Step up and step down input number with wireless dimmer %} + +```yaml +automation: + - alias: 'Toggle lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 1002 + action: + service: light.toggle + entity_id: light.lamp + + - alias: 'Increase brightness of lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 2002 + action: + - service: light.turn_on + data_template: + entity_id: light.lamp + brightness: {% raw %}> + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri+30, 249] | min }}{% endraw %} + + - alias: 'Decrease brightness of lamp from dimmer' + initial_state: 'on' + trigger: + platform: event + event_type: deconz_event + event_data: + id: remote_control_1 + event: 3002 + action: + - service: light.turn_on + data_template: + entity_id: light.lamp + brightness: {% raw %}> + {% set bri = states.light.lamp.attributes.brightness | int %} + {{ [bri-30, 0] | max }}{% endraw %} +``` diff --git a/source/_components/light.deconz.markdown b/source/_components/light.deconz.markdown new file mode 100644 index 00000000000..7ee2d591950 --- /dev/null +++ b/source/_components/light.deconz.markdown @@ -0,0 +1,29 @@ +--- +layout: page +title: "deCONZ lights" +description: "Instructions on how to integrate Zigbee lights from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Light +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +Entity Ids names will be light.device_name, where device_name is defined in deCONZ. Light groups created in deCONZ will be created in Home Assistant as lights named light.group_name_in_deconz, allowing the user to control groups of lights with only a single API call to deCONZ. + +#### {% linkable_title Verified to be supported sensors %} + +- IKEA Trådfri bulb E14 WS opal 400lm +- IKEA Trådfri Bulb E27 WS Opal 980lm +- IKEA Trådfri Bulb E27 WS Opal 1000lm +- IKEA Trådfri Bulb GU10 W 400lm +- OSRAM Flex RGBW +- OSRAM Gardenpole RGBW +- Philips Hue White A19 +- Philips Hue White Ambiance A19 diff --git a/source/_components/scene.deconz.markdown b/source/_components/scene.deconz.markdown new file mode 100644 index 00000000000..b5fdf7fa7fe --- /dev/null +++ b/source/_components/scene.deconz.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "deCONZ scenes" +description: "Instructions on how to integrate deCONZ scenes into Home Assistant." +date: 2017-11-19 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Scene +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +Entity Ids will be scene.group_scene_name, where group is which group the scene belongs to and the name of the scene, both group and name are defined in deCONZ. \ No newline at end of file diff --git a/source/_components/sensor.deconz.markdown b/source/_components/sensor.deconz.markdown new file mode 100644 index 00000000000..6844c88d833 --- /dev/null +++ b/source/_components/sensor.deconz.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: deCONZ Sensor +description: "Instructions on how to integrate Zigbee sensors from deCONZ into Home Assistant." +date: 2017-11-12 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Sensor +ha_release: "0.61" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +The following sensor types are supported: + + * Humidity sensor + * Light level sensor + * Pressure sensor + * Switches + * Temperature sensor + +Entity ids will be sensor.device_name, where device_name is defined in deCONZ. Switches aren't exposed as ordinary entities, see the [deCONZ main component](/components/deconz/) for more details. + +#### {% linkable_title Verified to be supported sensors %} + +- Humidity Sensor + - Xiaomi Aqara Humidity/Temperature Sensor + - Xiaomi MiJia Smart Temperature & Humidity Sensor +- Light Level Sensor +- Pressure Sensor +- Switches + - IKEA Trådfri Wireless Dimmer + - Philips Hue Motion Sensor + - IKEA Trådfri Remote + - Philips Hue Dimmer Switch + - Xiaomi Cube + - Xiaomi Aqara Smart Light Switch + - Xiaomi Aqara Smart Wireless Switch + - Xiaomi Smart Home Wireless Switch +- Temperature Sensor + - Xiaomi Temperature/Humidity Sensor diff --git a/source/images/supported_brands/deconz.jpeg b/source/images/supported_brands/deconz.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6bd2e5373d78d218e61aa4c935dcf4640cb16931 GIT binary patch literal 12197 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 S)&0-P{lC)xwFWr0d;TB&{nn%a literal 0 HcmV?d00001