From f0f99637cadc35325eaf28ad7459c7719b660ac8 Mon Sep 17 00:00:00 2001 From: Andre Lengwenus Date: Sat, 29 Dec 2018 02:13:30 +0100 Subject: [PATCH] Documentation for LCN component and light platform (#7599) * Initial documentation for LCN component and light platform * Light platform integrated into LCN component * Incorporated LCN lights example and configuration docs into corresponding component. --- source/_components/lcn.markdown | 157 +++++++++++++++++++++++++ source/_components/light.lcn.markdown | 23 ++++ source/images/supported_brands/lcn.png | Bin 0 -> 16272 bytes 3 files changed, 180 insertions(+) create mode 100644 source/_components/lcn.markdown create mode 100644 source/_components/light.lcn.markdown create mode 100644 source/images/supported_brands/lcn.png diff --git a/source/_components/lcn.markdown b/source/_components/lcn.markdown new file mode 100644 index 00000000000..e5130a00d84 --- /dev/null +++ b/source/_components/lcn.markdown @@ -0,0 +1,157 @@ +--- +layout: page +title: "LCN" +description: "Instructions on how to integrate LCN components with Home Assistant." +date: 2018-11-01 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: lcn.png +ha_category: Hub +ha_release: 0.85 +ha_iot_class: "Local Push" +--- + + +The `lcn` integration for Home Assistant allows you to connect to [LCN](http://www.lcn.eu) hardware devices. + +The component requires one unused license of the coupling software LCN-PCHK (version >2.8) and a LCN hardware coupler. Alternatively a LCN-PKE coupler can be used which offers two PCHK licenses. +With this setup sending and receiving commands to and from LCN modules is possible. + + +There is currently support for the following device types within Home Assistant: + +- [Light](/components/light.lcn) + +## {% linkable_title Configuration %} + +To use your LCN system in your installation, add the following lines to your `configuration.yaml` file. +You have to specify at least one ip/port with login credentials for a PCHK host. +Consider to store your credentials in a [secrets.yaml](/docs/configuration/secrets). + + +```yaml +lcn: + connections: + - name: myhome + host: 192.168.2.41 + port: 4114 + username: lcn + password: lcn + + lights: + - name: Bedroom light + address: myhome.s0.m7 + output: output1 + dimmable: true + transition: 5 +``` + +{% configuration %} +connections: + description: List of your connections + required: true + type: map + keys: + host: + description: IP address of the LCN-PCHK host. + required: true + type: string + port: + description: Port of the LCN-PCHK host. + required: true + type: integer + username: + description: Login username for the LCN-PCHK host. + required: true + type: string + password: + description: Login password for the LCN-PCHK host. + required: true + type: string + name: + description: Optional connection identifier. If omited, the connections will be named consecutively as _pchk_, _pchk1_, _pchk2_, ... + required: false + default: pchk + type: string + sk_num_tries: + description: Segment coupler scans. Increase this number if you have at least one segment coupler in your system. + required: false + default: 0 + type: integer + dim_mode: + description: "Dimming mode for connected modules. The operation mode is programmed into the LCN modules by the LCN-PRO software and depends on their firmware. If you experience unexpected dimming behavior, the connection is probably in the wrong operation mode. Possible values: _steps50_, _steps200_" + required: false + default: steps50 + type: string + +lights: + description: List of your lights. + required: true + type: map + keys: + name: + description: Name of the light. + required: true + type: string + address: + description: "[Address](/components/lcn#lcn-addresses) of the module/group." + required: true + type: string + output: + description: "Light source ([OUTPUT_PORT](/components/lcn#ports))." + required: true + type: string + dimmable: + description: Enable the dimming feature for this light + required: false + type: bool + default: false + transition: + description: Transition (ramp) time in seconds. + required: false + type: int + default: 0 +{% endconfiguration %} + + + +## {% linkable_title LCN Addresses %} +LCN hardware devices connected to the LCN bus are called _modules_. LCN modules are addressed by their numeric id in the range (5..254). + +Modules can be arranged in _segments_. Segments can be addressed by their numeric id (5..128) or 0 (= no segment exist) or 3 (= target all segments). + +LCN Modules within the _same_ segment can be grouped by their group id (5..254) or 3 (= target all groups.) + +The LCN component allow the connection to more than one hardware coupler. In this case it has to be specified which hardware coupler should be used for addressing the specified module. + +Whenever the address of a module or a group has to be specified, it can be addressed using one of the following syntaxes: + +Example for modules: +``` +connid.s000.m007 +connid.s0.m7 +s0.m7 +0.7 +``` + +Example for groups: +``` +connid.s000.g007 +connid.s0.g7 +s0.g7 +0.g7 +``` + +Leading zeroes in the segment id or module/group id can be omitted. If the `connection_id` is omitted, the first connection defined in the [configuration](#configuration) will be used. + + +## {% linkable_title LCN Constants %} +The platforms and service calls use several predefined constants as parameters. + +#### {% linkable_title Ports %} + +| Constant | Values | +| -------- | ------ | +| OUTPUT_PORT | `output1`, `output2`, `output3`, `output4` | diff --git a/source/_components/light.lcn.markdown b/source/_components/light.lcn.markdown new file mode 100644 index 00000000000..501b20091b2 --- /dev/null +++ b/source/_components/light.lcn.markdown @@ -0,0 +1,23 @@ +--- +layout: page +title: "LCN Light" +description: "Instructions on how to setup LCN lights within Home Assistant." +date: 2018-11-01 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: lcn.png +ha_category: Light +ha_release: 0.85 +ha_iot_class: "Local Push" +--- + +The `lcn` light platform allows the control of the following [LCN](http://www.lcn.eu) ports: + +- (Dimmable) output ports + +## {% linkable_title Configuration %} + +The `lcn` component must be configured correctly, see [LCN component](/components/lcn). +This platform is configured within the `lcn` component. \ No newline at end of file diff --git a/source/images/supported_brands/lcn.png b/source/images/supported_brands/lcn.png new file mode 100644 index 0000000000000000000000000000000000000000..41042628cad7c0c6b2d431a830019bbd3bdd53eb GIT binary patch literal 16272 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