From aa4c1c32104053595a3aeb244691809402491cb7 Mon Sep 17 00:00:00 2001 From: ziv1234 <16467659+ziv1234@users.noreply.github.com> Date: Thu, 17 Oct 2019 22:49:49 +0300 Subject: [PATCH 01/11] stub --- source/_integrations/dynalite.markdown | 156 ++++++++++++++++++++ source/images/supported_brands/dynalite.png | Bin 0 -> 26362 bytes 2 files changed, 156 insertions(+) create mode 100755 source/_integrations/dynalite.markdown create mode 100755 source/images/supported_brands/dynalite.png diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown new file mode 100755 index 000000000000..bb265bba7791 --- /dev/null +++ b/source/_integrations/dynalite.markdown @@ -0,0 +1,156 @@ +--- +title: "Philips Dynalite" +description: "Instructions on setting up Philips Dynalite within Home Assistant." +logo: dynalite.png +ha_category: + - Hub + - Light +ha_iot_class: Local Polling +ha_qa_scale: platinum +featured: true +ha_release: "0.60" +--- + +Philips Hue support is integrated into Home Assistant as a hub that can drive the light and sensor platforms. The preferred way to set up the Philips Hue platform is by enabling the [discovery component](/integrations/discovery/). + +There is currently support for the following device types within Home Assistant: + +- Lights +- Motion sensors (including temperature and light level sensors) + +Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the States developer tool ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue bridge in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. + +When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the IP address of the bridge. If the IP address for the bridge changes, you will need to register it with Home Assistant again. To avoid this, you may set up a DHCP reservation on your router for your Hue bridge so that it always has the same IP address. + +Once registration is complete you should see the Hue lights listed as `light` entities, the Hue motion sensors listed as `binary_sensor` entities, and the Hue temperature and light level sensors (which are built in to the motion sensors) listed as `sensor` entities. If you don't, you may have to restart Home Assistant once more. + +If you want to enable the integration without relying on the [discovery component](/integrations/discovery/), add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hue: + bridges: + - host: DEVICE_IP_ADDRESS +``` + +{% configuration %} +host: + description: The IP address of the bridge (e.g., 192.168.1.10). Required if not using the `discovery` integration to discover Hue bridges. + required: true + type: string +allow_unreachable: + description: This will allow unreachable bulbs to report their state correctly. + required: false + type: boolean + default: false +filename: + description: Make this unique if specifying multiple Hue bridges. + required: false + type: string +allow_hue_groups: + description: Disable this to stop Home Assistant from importing the groups defined on the Hue bridge. + required: false + type: boolean + default: true +{% endconfiguration %} + +## Examples + +```yaml +# Example configuration.yaml entry specifying optional parameters +hue: + bridges: + - host: DEVICE_IP_ADDRESS + allow_unreachable: true + allow_hue_groups: true +``` + +### Multiple Hue bridges + +Multiple Hue bridges work transparently with discovery, so you don't have to do anything special to set them up. If you prefer to configure them manually and use multiple Hue bridges, then you need to provide a configuration file for every bridge. The bridges can't share a single configuration file. + +Add `filename` to your Hue configuration entry in your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +hue: + bridges: + - host: BRIDGE1_IP_ADDRESS + filename: phue.conf + - host: BRIDGE2_IP_ADDRESS + filename: phue2.conf +``` + +### Using Hue Groups in Home Assistant + +The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. + +These Hue groups can be a `Luminaire`, `Lightsource`, `LightGroup`, or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API or the mobile app. A bulb can only exist in one `Room`, but can exist in more than one `LightGroup`. The `LightGroup` can be useful if you want to link certain bulbs together. + +The 2nd generation Hue app only has the ability to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. + +Example: + +To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2, and 3, execute the following command: + +```bash +$ curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups +``` + +The `` is the string that is used to register Home Assistant on the bridge. You can find it in the `core.config_entries` file in your configuration\.storage path. `` is the IP address or hostname of your Hue bridge. + +You can find the IDs of your lights by executing the following command: + +```bash +$ curl http:///api//lights +``` + +Home Assistant will automatically detect your new `LightGroup` and add it to the interface. + +
+ To support Hue light groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). +
+ +More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. + +### Using Hue Scenes in Home Assistant + +The Hue platform has its own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them—many that you've never used, and almost all very poorly named. + +To avoid user interface overload, we don't expose scenes directly. Instead there is a hue.hue_activate_scene service which can be used by `automation` or `script` components. +This will have all the bulbs transitioned at once, instead of one at a time like when using standard scenes in Home Assistant. + +For instance: + +```yaml +script: + porch_on: + sequence: + - service: hue.hue_activate_scene + data: + group_name: "Porch" + scene_name: "Porch Orange" +``` + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `group_name` | no | The group/room name of the lights. Find this in the official Hue app. +| `scene_name` | no | The name of the scene. Find this in the official Hue app. + +*Note*: `group_name` is not a reference to a Home Assistant group name. It can only be the name of a group/room in the Hue app. + +### Finding Group and Scene Names + +How do you find these names? + +The easiest way to do this is to only use the scenes from the 2nd generation Hue app, which is organized by room (group) and scene name. Use the values of room name and scene name that you see in the app. You can test that these work by using the `dev-service` console of your Home Assistant instance. + +Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together, but it is sufficient to get values that you can test in the `dev-service` console. + +### Caveats + +The Hue API doesn't activate scenes directly; rather, they must be associated with a Hue group (typically rooms, especially if using the 2nd gen app). But Hue scenes don't actually reference their group. So heuristic matching is used. + +Neither group names nor scene names are guaranteed unique in Hue. If you are observing unexpected behavior from calling Hue scenes in Home Assistant, make the names of your Hue scenes more specific in the Hue app. + +The Hue hub has limited space for scenes and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on the scenes that are "least recently used." diff --git a/source/images/supported_brands/dynalite.png b/source/images/supported_brands/dynalite.png new file mode 100755 index 0000000000000000000000000000000000000000..7751c6b564a93826be2478bc1ffcb83965daae76 GIT binary patch literal 26362 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 N002ovPDHLkV1jjS4<-Nr literal 0 HcmV?d00001 From 8728c3501fed7b757cd6f4ffc0a918c89d9de25d Mon Sep 17 00:00:00 2001 From: Ziv <16467659+ziv1234@users.noreply.github.com> Date: Thu, 17 Oct 2019 22:59:33 +0300 Subject: [PATCH 02/11] initial stuff --- source/_integrations/dynalite.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index bb265bba7791..bddacbc8b4ef 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -5,13 +5,13 @@ logo: dynalite.png ha_category: - Hub - Light -ha_iot_class: Local Polling -ha_qa_scale: platinum +ha_iot_class: Local Push +ha_qa_scale: No Score featured: true ha_release: "0.60" --- -Philips Hue support is integrated into Home Assistant as a hub that can drive the light and sensor platforms. The preferred way to set up the Philips Hue platform is by enabling the [discovery component](/integrations/discovery/). +Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light and sensor platforms. The preferred way to set up the Philips Hue platform is by enabling the [discovery component](/integrations/discovery/). There is currently support for the following device types within Home Assistant: From cbb9f16d16c8488c413c15a4e6e9ddea93fdd314 Mon Sep 17 00:00:00 2001 From: ziv1234 <16467659+ziv1234@users.noreply.github.com> Date: Thu, 17 Oct 2019 23:04:03 +0300 Subject: [PATCH 03/11] initial work --- source/_integrations/dynalite.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index bb265bba7791..d647711be862 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -11,12 +11,11 @@ featured: true ha_release: "0.60" --- -Philips Hue support is integrated into Home Assistant as a hub that can drive the light and sensor platforms. The preferred way to set up the Philips Hue platform is by enabling the [discovery component](/integrations/discovery/). +Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light and sensor platforms. The preferred way to set up the Philips Hue platform is by enabling the [discovery component](/integrations/discovery/). There is currently support for the following device types within Home Assistant: - Lights -- Motion sensors (including temperature and light level sensors) Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the States developer tool ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue bridge in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. From 661817b3cbedf007c9dfe0b3657afc8ae9a3d9c5 Mon Sep 17 00:00:00 2001 From: ziv1234 <16467659+ziv1234@users.noreply.github.com> Date: Fri, 18 Oct 2019 21:53:25 +0300 Subject: [PATCH 04/11] starting work --- source/_integrations/dynalite.markdown | 42 +++++++++++++++++--------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index 384a859c8ee0..dd79df35cf00 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -11,19 +11,21 @@ featured: true ha_release: "0.60" --- -Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light and sensor platforms. The preferred way to set up the Philips Hue platform is by enabling the [discovery component](/integrations/discovery/). +Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light platforms. There is currently support for the following device types within Home Assistant: - Lights -Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the States developer tool ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue bridge in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`. +A Philips Dynalite hub connects to the Dynet network, which is composed of areas, channels, and preset. -When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the IP address of the bridge. If the IP address for the bridge changes, you will need to register it with Home Assistant again. To avoid this, you may set up a DHCP reservation on your router for your Hue bridge so that it always has the same IP address. +A Dynalite area typically (although not necessarily) defines some physical area, such as a room. -Once registration is complete you should see the Hue lights listed as `light` entities, the Hue motion sensors listed as `binary_sensor` entities, and the Hue temperature and light level sensors (which are built in to the motion sensors) listed as `sensor` entities. If you don't, you may have to restart Home Assistant once more. +Each area can have one or more channels that correspond to the different devices they control. A channel can relate to a dimmable light, or other devices, such as a cover. -If you want to enable the integration without relying on the [discovery component](/integrations/discovery/), add the following lines to your `configuration.yaml` file: +Additionally each area can have one or more presets that determine the behavior of all the channels, and sometimes trigger additional actions. Typically, preset 1 in an area means 'on', and preset '4' means off. Additional presets could be used for scenes and dimming. + +Since Philips Dynalite has virtually no autodiscover capabilities, it needs to be configured via the `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -34,23 +36,35 @@ hue: {% configuration %} host: - description: The IP address of the bridge (e.g., 192.168.1.10). Required if not using the `discovery` integration to discover Hue bridges. + description: The IP address of the bridge (e.g., 192.168.1.10). required: true type: string -allow_unreachable: - description: This will allow unreachable bulbs to report their state correctly. +port: + description: Port number of the bridge required: false - type: boolean - default: false -filename: - description: Make this unique if specifying multiple Hue bridges. + type: integer + default: 12345 +name: + description: Name for the bridge + required: false + type: string + default: dynalite +log_level: + description: Log level for the libraries required: false type: string -allow_hue_groups: - description: Disable this to stop Home Assistant from importing the groups defined on the Hue bridge. + default: info +autodiscover: + description: Enable autodiscover. As Dynalite does not support autodiscovery, this tracks event on your network, so if you turn on a light, it will be added to Home Assistant required: false type: boolean default: true +polltimer: + description: Polling interval for devices in transition. Value in seconds. When devices are in transition (e.g. a light fading), it will ask for a new state every X seconds until it is at the target level. + required: false + type: float + default: 1.0 + {% endconfiguration %} ## Examples From e900c0dacb13679a0fde9fc721caeff52ca9ff33 Mon Sep 17 00:00:00 2001 From: ziv1234 <16467659+ziv1234@users.noreply.github.com> Date: Fri, 18 Oct 2019 23:12:24 +0300 Subject: [PATCH 05/11] initil work for the Dynalite component --- source/_integrations/dynalite.markdown | 147 ++++++++++--------------- 1 file changed, 59 insertions(+), 88 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index dd79df35cf00..a83fa8afb466 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -64,7 +64,45 @@ polltimer: required: false type: float default: 1.0 - +area: + description: Definition for the various Dynalite areas + required: true + type: map + keys: + 'AREA_NUMBER': + description: The Dynalite area number, 1-255 + required: true + type: map + keys: + name: + description: Name of the area + required: true + type: string + fade: + description: Fade time for the area, in seconds + required: false + type: float + default: 2.0 + channel: + description: Map of the channels in this area + required: false + type: map + keys: + 'CHANNEL_NUMBER': + description: The Dynalite channel number in the area, 1-255 + required: true + type: map + keys: + name: + description: Name of the channel + required: false + type: string + default: \"AREA_NAME Channel CHANNEL_NUMBER\" + fade: + description: Fade time for the channel, in seconds + required: false + type: float + default: 2.0 {% endconfiguration %} ## Examples @@ -74,96 +112,29 @@ polltimer: hue: bridges: - host: DEVICE_IP_ADDRESS - allow_unreachable: true - allow_hue_groups: true -``` - -### Multiple Hue bridges - -Multiple Hue bridges work transparently with discovery, so you don't have to do anything special to set them up. If you prefer to configure them manually and use multiple Hue bridges, then you need to provide a configuration file for every bridge. The bridges can't share a single configuration file. - -Add `filename` to your Hue configuration entry in your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -hue: - bridges: - - host: BRIDGE1_IP_ADDRESS - filename: phue.conf - - host: BRIDGE2_IP_ADDRESS - filename: phue2.conf -``` - -### Using Hue Groups in Home Assistant - -The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. - -These Hue groups can be a `Luminaire`, `Lightsource`, `LightGroup`, or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API or the mobile app. A bulb can only exist in one `Room`, but can exist in more than one `LightGroup`. The `LightGroup` can be useful if you want to link certain bulbs together. - -The 2nd generation Hue app only has the ability to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. - -Example: - -To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2, and 3, execute the following command: - -```bash -$ curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups + port: 12345 + autodiscover: true + polltimer: 1 + areacreate: auto + log_level: debug + area: + '2': + name: Living Room + channel: + '2': + name: Entrance Spot + fade: 10.0 + '3': + name: Dining Table ``` -The `` is the string that is used to register Home Assistant on the bridge. You can find it in the `core.config_entries` file in your configuration\.storage path. `` is the IP address or hostname of your Hue bridge. - -You can find the IDs of your lights by executing the following command: - -```bash -$ curl http:///api//lights -``` - -Home Assistant will automatically detect your new `LightGroup` and add it to the interface. - -
- To support Hue light groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). -
- -More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. - -### Using Hue Scenes in Home Assistant - -The Hue platform has its own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them—many that you've never used, and almost all very poorly named. - -To avoid user interface overload, we don't expose scenes directly. Instead there is a hue.hue_activate_scene service which can be used by `automation` or `script` components. -This will have all the bulbs transitioned at once, instead of one at a time like when using standard scenes in Home Assistant. - -For instance: - -```yaml -script: - porch_on: - sequence: - - service: hue.hue_activate_scene - data: - group_name: "Porch" - scene_name: "Porch Orange" -``` - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `group_name` | no | The group/room name of the lights. Find this in the official Hue app. -| `scene_name` | no | The name of the scene. Find this in the official Hue app. - -*Note*: `group_name` is not a reference to a Home Assistant group name. It can only be the name of a group/room in the Hue app. - -### Finding Group and Scene Names - -How do you find these names? - -The easiest way to do this is to only use the scenes from the 2nd generation Hue app, which is organized by room (group) and scene name. Use the values of room name and scene name that you see in the app. You can test that these work by using the `dev-service` console of your Home Assistant instance. - -Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together, but it is sufficient to get values that you can test in the `dev-service` console. +### Initial configuration and discovery -### Caveats +Maybe the most difficult thing about a Dynalite system is finding out the areas and channel mapping. If you have them or have access to the Dynalite software and your configuration files, this could be easy, +but in the likely case that your system was installed by an integrator, you will have to discover them on your own. -The Hue API doesn't activate scenes directly; rather, they must be associated with a Hue group (typically rooms, especially if using the 2nd gen app). But Hue scenes don't actually reference their group. So heuristic matching is used. +This is where the `autodiscover` option comes handy. If it is on, the component will track the Dynet network and every time a device is used, it will be added to home assistant. It will initially show as "Area 123 Channel 7", but you can then add it to your `configuration.yaml` with the correct configuration. -Neither group names nor scene names are guaranteed unique in Hue. If you are observing unexpected behavior from calling Hue scenes in Home Assistant, make the names of your Hue scenes more specific in the Hue app. +For example, you would go to your kitchen light and turn it on. Now you log into Home Assistant and see what the channel was. If there was more than one discovered (e.g. someone turned off the living room lights), you can try one, turn it on and off in Home Assistant and see which light it affects. -The Hue hub has limited space for scenes and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on the scenes that are "least recently used." +The initial process can be a bit time consuming and tidious, but it only has to be done once. Once you are done configuring, it is better to set `autodiscover` to `false`, since there are many "fake" channels and areas that the system use for internal communication and you do not want to have visible. From a14e97fbdf8db993f9bec8e86a75c836bc3633e1 Mon Sep 17 00:00:00 2001 From: ziv1234 <16467659+ziv1234@users.noreply.github.com> Date: Fri, 18 Oct 2019 23:18:33 +0300 Subject: [PATCH 06/11] fixes some place where it still says "hue" instead of "dynalite" --- source/_integrations/dynalite.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index a83fa8afb466..10831cda480e 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -29,7 +29,7 @@ Since Philips Dynalite has virtually no autodiscover capabilities, it needs to b ```yaml # Example configuration.yaml entry -hue: +dynalite: bridges: - host: DEVICE_IP_ADDRESS ``` @@ -109,7 +109,7 @@ area: ```yaml # Example configuration.yaml entry specifying optional parameters -hue: +dynalite: bridges: - host: DEVICE_IP_ADDRESS port: 12345 From 09d84d796cc0ebdfe6d27c18de18d78cac98f108 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Sat, 19 Oct 2019 16:20:50 +0200 Subject: [PATCH 07/11] :pencil2: Tweak --- source/_integrations/dynalite.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index 10831cda480e..02c2d131ac29 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -25,6 +25,8 @@ Each area can have one or more channels that correspond to the different devices Additionally each area can have one or more presets that determine the behavior of all the channels, and sometimes trigger additional actions. Typically, preset 1 in an area means 'on', and preset '4' means off. Additional presets could be used for scenes and dimming. +## Configuration + Since Philips Dynalite has virtually no autodiscover capabilities, it needs to be configured via the `configuration.yaml` file: ```yaml From 41e091e04660391c270ea0bad852a33313fbb271 Mon Sep 17 00:00:00 2001 From: ziv1234 <16467659+ziv1234@users.noreply.github.com> Date: Sat, 19 Oct 2019 19:43:05 +0300 Subject: [PATCH 08/11] updated the header per klaasnicolaas instructions --- source/_integrations/dynalite.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index 02c2d131ac29..84e209948d1c 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -6,9 +6,7 @@ ha_category: - Hub - Light ha_iot_class: Local Push -ha_qa_scale: No Score -featured: true -ha_release: "0.60" +ha_release: "0.101" --- Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light platforms. From efd90322a7958796bbf869a9e2be4100ec69d90e Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Sat, 19 Oct 2019 23:38:30 +0200 Subject: [PATCH 09/11] :pencil2: Tweak --- source/_integrations/dynalite.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index 84e209948d1c..46048231ddbc 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -6,7 +6,7 @@ ha_category: - Hub - Light ha_iot_class: Local Push -ha_release: "0.101" +ha_release: 0.101 --- Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light platforms. From 317406d492b572879f8f9e0bf4569f94fe02688c Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 11 Feb 2020 12:00:26 +0100 Subject: [PATCH 10/11] :pencil2: Tweaks --- source/_integrations/dynalite.markdown | 38 +++++++++++++------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index 46048231ddbc..b5f86e2fcb91 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -21,11 +21,11 @@ A Dynalite area typically (although not necessarily) defines some physical area, Each area can have one or more channels that correspond to the different devices they control. A channel can relate to a dimmable light, or other devices, such as a cover. -Additionally each area can have one or more presets that determine the behavior of all the channels, and sometimes trigger additional actions. Typically, preset 1 in an area means 'on', and preset '4' means off. Additional presets could be used for scenes and dimming. +Additionally, each area can have one or more presets that determine the behavior of all the channels, and sometimes trigger additional actions. Typically, preset 1 in an area means 'on', and preset '4' means off. Additional presets could be used for scenes and dimming. ## Configuration -Since Philips Dynalite has virtually no autodiscover capabilities, it needs to be configured via the `configuration.yaml` file: +Since Philips Dynalite has virtually no auto-discover capabilities, it needs to be configured via the `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -40,66 +40,66 @@ host: required: true type: string port: - description: Port number of the bridge + description: Port number of the bridge. required: false type: integer default: 12345 name: - description: Name for the bridge + description: Name for the bridge. required: false type: string default: dynalite log_level: - description: Log level for the libraries + description: Log level for the libraries. required: false type: string default: info autodiscover: - description: Enable autodiscover. As Dynalite does not support autodiscovery, this tracks event on your network, so if you turn on a light, it will be added to Home Assistant + description: Enable auto-discover. As Dynalite does not support autodiscovery, this tracks event on your network, so if you turn on a light, it will be added to Home Assistant. required: false type: boolean default: true polltimer: - description: Polling interval for devices in transition. Value in seconds. When devices are in transition (e.g. a light fading), it will ask for a new state every X seconds until it is at the target level. + description: Polling interval for devices in transition. Value in seconds. When devices are in transition (e.g., a light fading), it will ask for a new state every X seconds until it is at the target level. required: false type: float default: 1.0 area: - description: Definition for the various Dynalite areas + description: Definition for the various Dynalite areas. required: true type: map keys: 'AREA_NUMBER': - description: The Dynalite area number, 1-255 + description: The Dynalite area number, 1-255. required: true type: map keys: name: - description: Name of the area + description: Name of the area. required: true type: string fade: - description: Fade time for the area, in seconds + description: Fade time for the area, in seconds. required: false type: float default: 2.0 channel: - description: Map of the channels in this area + description: Map of the channels in this area. required: false type: map keys: 'CHANNEL_NUMBER': - description: The Dynalite channel number in the area, 1-255 + description: The Dynalite channel number in the area, 1-255. required: true type: map keys: name: - description: Name of the channel + description: Name of the channel. required: false type: string default: \"AREA_NAME Channel CHANNEL_NUMBER\" fade: - description: Fade time for the channel, in seconds + description: Fade time for the channel, in seconds. required: false type: float default: 2.0 @@ -128,13 +128,13 @@ dynalite: name: Dining Table ``` -### Initial configuration and discovery +## Initial configuration and discovery Maybe the most difficult thing about a Dynalite system is finding out the areas and channel mapping. If you have them or have access to the Dynalite software and your configuration files, this could be easy, but in the likely case that your system was installed by an integrator, you will have to discover them on your own. -This is where the `autodiscover` option comes handy. If it is on, the component will track the Dynet network and every time a device is used, it will be added to home assistant. It will initially show as "Area 123 Channel 7", but you can then add it to your `configuration.yaml` with the correct configuration. +This is where the `autodiscover` option comes handy. If it is on, the component will track the Dynet network and every time a device is used, it will be added to Home Assistant. It will initially show as "Area 123 Channel 7", but you can then add it to your `configuration.yaml` with the correct configuration. -For example, you would go to your kitchen light and turn it on. Now you log into Home Assistant and see what the channel was. If there was more than one discovered (e.g. someone turned off the living room lights), you can try one, turn it on and off in Home Assistant and see which light it affects. +For example, you would go to your kitchen light and turn it on. Now you log into Home Assistant and see what the channel was. If there was more than one discovered (e.g., someone turned off the living room lights), you can try one, turn it on and off in Home Assistant and see which light it affects. -The initial process can be a bit time consuming and tidious, but it only has to be done once. Once you are done configuring, it is better to set `autodiscover` to `false`, since there are many "fake" channels and areas that the system use for internal communication and you do not want to have visible. +The initial process can be a bit time consuming and tedious, but it only has to be done once. Once you are done configuring, it is better to set `autodiscover` to `false`, since there are many "fake" channels and areas that the system uses for internal communication and you do not want to have visible. From 835cacb3535fa99890e39713d675833466006bbb Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 11 Feb 2020 12:00:49 +0100 Subject: [PATCH 11/11] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20ha=5Fversion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_integrations/dynalite.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index b5f86e2fcb91..456245f3eea5 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -6,7 +6,7 @@ ha_category: - Hub - Light ha_iot_class: Local Push -ha_release: 0.101 +ha_release: 0.106 --- Philips Dynalite support is integrated into Home Assistant as a hub that can drive the light platforms.