From 676e753de9a6bd5c40e6bb4f94fba855c9ba1b6b Mon Sep 17 00:00:00 2001 From: Markus Ressel Date: Tue, 12 Feb 2019 00:28:26 +0100 Subject: [PATCH] XS1 component (#7771) * added icon added documentation * added configuration docs added info on how to combine climate sensor and actuator into a single device * updated doc to use "username" instead of "user" key added full yaml conf example * added documentation for every subcomponent moved parts to appropriate sections removed newlines * updated Hass release to 0.88 * updated Hass release to 0.88 * updated Hass release to 0.88 * review fixes * review fixes * Delete climate.xs1.markdown * Delete sensor.xs1.markdown * Delete switch.xs1.markdown * review fix * review fix * :pencil2: Try to fix the build error * :pencil2: Tweaks --- source/_components/xs1.markdown | 106 +++++++++++++++++++++++++ source/images/supported_brands/xs1.jpg | Bin 0 -> 13819 bytes 2 files changed, 106 insertions(+) create mode 100644 source/_components/xs1.markdown create mode 100644 source/images/supported_brands/xs1.jpg diff --git a/source/_components/xs1.markdown b/source/_components/xs1.markdown new file mode 100644 index 00000000000..1bf230dbb3b --- /dev/null +++ b/source/_components/xs1.markdown @@ -0,0 +1,106 @@ +--- +layout: page +title: "EZcontrol XS1" +description: "Instructions on how to integrate an XS1 Gateway within Home Assistant." +date: 2018-12-04 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xs1.jpg +ha_category: + - Hub + - Climate + - Sensor + - Switch +ha_release: 0.88 +featured: false +ha_iot_class: "Local Polling" +--- + +The [EZcontrol XS1](http://www.ezcontrol.de/content/view/36/28/) integration for Home Assistant allows you to observe and control devices configured on the XS1 Gateway. Please have a look at the official docs for using this gateway [Bedienungsanleitung v3.0.0.0](http://www.ezcontrol.de/support/downloads/XS1/xs1manual/Bedienungsanleitung_EZcontrol_XS1_3.0.0.0-2.pdf). + +## {% linkable_title Configuration %} + +Add the following entry to the `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +xs1: + host: "192.168.2.100" +``` + +The component will automatically detect the configuration of the XS1 Gateway only **on initialization** which currently means when Home Assistant boots. When you change the configuration of the XS1 you (currently) have to restart Home Assistant to see the effects. + +{% configuration %} +host: + description: Host of the XS1 Gateway. + required: true + type: string +port: + description: Custom port if you are running your gateway behind some kind of proxy. + required: false + type: integer + default: 80 +ssl: + description: Defines if `https` should be used for API requests (only possible via your own proxy). + required: false + type: boolean + default: false +username: + description: User to access XS1 web API. + required: false + type: string +password: + description: Password to access XS1 web API. + required: false + type: string +{% endconfiguration %} + +## {% linkable_title Supported Device Types %} + +

+This component currently only covers part of the device types supported by the XS1 gateway, unsupported types are simply ignored. +

+ +### {% linkable_title Sensors %} + +Any type of sensor is supported. + +

+If you are using climate devices the "current temp" sensor will be automatically used by the actuator (if named correctly). To make this work have a look at the actuator description below. +

+ +### {% linkable_title Actuators %} + +| Type | Supported | Notes | +|---------------|-----------|--------------------------------------------------| +| `switch` | Yes | | +| `dimmer` | Partly | Dimmers are currently handled like switches so actual dimming is not supported :(| +| `temperature` | Yes | | + + +### {% linkable_title Climate Actuator/Sensor%} + +Home Assistant can combine temperature sensors and climate actuators into a single device. The XS1 gateway does not allow this, but a sensor and actuator can be configured separately. To make Home Assistant register them in the same climate device just prefix the **sensor** name with the actuator name on the XS1 gateway configuration, f.ex: + +- Actuator device name: "Bedroom_Temp" +- Sensor device name: "Bedroom_Temp_Sensor" + +## {% linkable_title Examples %} + +In this section, you find some real-life examples of how to use this component. + +### {% linkable_title Full configuration %} + +This example shows how you can use the optional configuration options. + +```yaml +# Example configuration.yaml entry +xs1: + host: "192.168.2.100" + port: 80 + ssl: false + username: myuser + password: 123totallySecure +``` diff --git a/source/images/supported_brands/xs1.jpg b/source/images/supported_brands/xs1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4215eda2766b13be64867d9a6885ffa0091bf71 GIT binary patch literal 13819 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