Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[config] Fix Leviton Vizia RF+ device family. #2290

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified config/images/leviton/vrcs2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added config/images/leviton/vrcs4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added config/images/leviton/vrcz4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added config/images/leviton/vrr15.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 36 additions & 12 deletions config/leviton/vrcs2.xml
Original file line number Diff line number Diff line change
@@ -1,21 +1,45 @@
<Product Revision="3" xmlns="https://github.com/OpenZWave/open-zwave">
<?xml version="1.0" encoding="utf-8"?>
<Product Revision="4" xmlns="https://github.com/OpenZWave/open-zwave">
<MetaData>
<MetaDataItem name="OzwInfoPage">http://www.openzwave.com/device-database/001D:0206:0201</MetaDataItem>
<MetaDataItem name="Name">VRCS2</MetaDataItem>
<MetaDataItem name="Description">2-Button Scene Controller with Switches</MetaDataItem>
<MetaDataItem name="OzwInfoPage">http://www.openzwave.com/device-database/001D:0243:1102</MetaDataItem>
<MetaDataItem name="ProductPic">images/leviton/vrcs2.png</MetaDataItem>
<MetaDataItem id="0206" name="ZWProductPage" type="0201">https://products.z-wavealliance.org/products/288/</MetaDataItem>
<MetaDataItem id="0206" name="FrequencyName" type="0201">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem name="Description">The Vizia RF + 4-Button Zone Controller with Switch (VRCZ4-MR) and 4-Button Scene Controller with Switch (VRCS4-MR) are perfect for retrofit applications because they replace an existing switch giving the user control of the local load as well as the benefit of scene or zone control.
Item Description
Vizia RF + 4-Button Zone Controller with Switch for Multi-Location Control with IR Remote Capability. White face assembled on device, ivory and light almond faces included.</MetaDataItem>
<MetaDataItem name="ProductPage">http://www.leviton.com/OA_HTML/ProductDetail.jsp?partnumber=VRCZ4-MRZ&amp;section=44147&amp;minisite=10251</MetaDataItem>
<MetaDataItem id="0206" name="Identifier" type="0201">VRCZ4-MR</MetaDataItem>
<MetaDataItem name="ProductSupport">http://www.leviton.com/OA_HTML/Home.jsp?minisite=10251&amp;respid=22372</MetaDataItem>
<MetaDataItem name="Name">VRCZ4-MR</MetaDataItem>
<MetaDataItem id="0243" name="ZWProductPage" type="1102">https://products.z-wavealliance.org/products/286/</MetaDataItem>
<MetaDataItem id="0243" name="FrequencyName" type="1102">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem id="0243" name="Identifier" type="1102">VRCS2-MRZ</MetaDataItem>
<ChangeLog>
<Entry author="Justin Hammond - [email protected]" date="03 May 2019" revision="1">Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/286/xml</Entry>
<Entry author="Justin Hammond - [email protected]" date="03 May 2019" revision="2">Updated Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/287/xml</Entry>
<Entry author="Justin Hammond - [email protected]" date="03 May 2019" revision="3">Updated Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/288/xml</Entry>
<Entry author="Jeff Brown - [email protected]" date="29 June 2020" revision="4">Fixed metadata, added groups and indicators</Entry>
</ChangeLog>
</MetaData>
<CommandClass id="112"/>

<!-- Association Groups -->
<CommandClass id="133">
<Associations num_groups="2">
<!-- Each button toggles an individual scene on or off. Multiple scenes can be active at once.
By default the device will associate groups 1 and 2 with the local loads.
Do not auto associate the controller with group 1. -->
<Group index="1" max_associations="232" label="Button 1" auto="false"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you do not auto associate, how does the controller get updates about state change? Maybe all Groups should be auto=true (group 1 is implicit)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The scene controller and the loads are represented as different zwave nodes using multichannel encapsulation.

The scene controller has factory default associations with the local loads (relays) on the device. There's no need to associate the primary controller unless you want the primary controller to respond to scene changes itself. In my case, I just want the VRCS2 loads to be locally controlled (so they're very responsive).

The loads appear as separate binary switches. They seem to get auto-associated (somehow?) with the primary controller so they do report their state changes as expected.

Aside: My old Vera automation system had a nasty habit of purging factory default associations when setting up a new device. In the case of the VRCS2, it would remove the associations for the local loads and effectively break the switch behavior unless manually reconfigured. It took ages to figure out what was happening there.

<Group index="2" max_associations="232" label="Button 2"/>
</Associations>
</CommandClass>

<!-- Indicator Lights -->
<!-- Use these messages to override the indicator lights.

91 00 1D 0D 01 00 00 : Reset LEDs to locally controlled operation (default behavior).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assuming I'm reading this correctly - its using the Manufactuter_Proprietary CC for Leds?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's correct. Unfortunately it doesn't support the "Indicator" command class.

91 00 1D 0D 01 FF xx : Set LEDs by OR-ing together the following bit patterns.

00000000: button 1 off
00000001: button 1 green
00010000: button 1 red
00010001: button 1 amber
00000000: button 2 off
00000010: button 2 green
00100000: button 2 red
00100010: button 2 amber
-->
</Product>
111 changes: 111 additions & 0 deletions config/leviton/vrcs4.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Product Revision="1" xmlns="https://github.com/OpenZWave/open-zwave">
<MetaData>
<MetaDataItem name="Name">VRCS4</MetaDataItem>
<MetaDataItem name="Description">4-Button Scene Controller with or without Switches</MetaDataItem>
<MetaDataItem name="OzwInfoPage">http://www.openzwave.com/device-database/001D:0261:0702</MetaDataItem>
<MetaDataItem name="ProductPic">images/leviton/vrcs4.png</MetaDataItem>
<MetaDataItem id="0261" name="ZWProductPage" type="0802">https://products.z-wavealliance.org/products/318/</MetaDataItem>
<MetaDataItem id="0261" name="FrequencyName" type="0802">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem id="0261" name="Identifier" type="0802">VRCS4-M0Z</MetaDataItem>
<MetaDataItem id="0243" name="ZWProductPage" type="1302">https://products.z-wavealliance.org/products/287/</MetaDataItem>
<MetaDataItem id="0243" name="FrequencyName" type="1302">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem id="0243" name="Identifier" type="1302">VRCS4-MRZ</MetaDataItem>
<ChangeLog>
<Entry author="Jeff Brown - [email protected]" date="29 June 2020" revision="1">Initial creation</Entry>
</ChangeLog>
</MetaData>

<!-- Association Groups -->
<CommandClass id="133">
<Associations num_groups="4">
<!-- Each button toggles an individual scene on or off. Only one scene can be active at once.
If the device has a switch, then by default it will associate group 1 with the local load.
Do not auto associate the controller with group 1. -->
<Group index="1" max_associations="232" label="Button 1" auto="false"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment as above.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly, the VRCS4 presents its load as a separate device and auto-associated it to button 1 as the factory default. That said, 3 of the 4 buttons are useless out of the box unless additional associations are made.

So we could argue that auto-association with the primary controller is more essential for this one. I've made those associations manually for my case along with other configurations documented in this file.

Unfortunately, openzwave currently doesn't know how to configure the scenes such that it can distinguish between each button and it doesn't handle incoming scene actuator commands either. With that in mind, I don't think auto-association is a good idea just yet but I will defer to your judgement on the matter.

<Group index="2" max_associations="232" label="Button 2"/>
<Group index="3" max_associations="232" label="Button 3"/>
<Group index="4" max_associations="232" label="Button 4"/>
</Associations>
</CommandClass>

<!-- Indicator Lights -->
<!-- Use these messages to override the indicator lights.

91 00 1D 0D 01 00 00 : Reset LEDs to locally controlled operation (default behavior).
91 00 1D 0D 01 FF xx : Set LEDs by OR-ing together the following bit patterns.

00000000: button 1 off
00000001: button 1 green
00010000: button 1 red
00010001: button 1 amber
00000000: button 2 off
00000010: button 2 green
00100000: button 2 red
00100010: button 2 amber
00000000: button 3 off
00000100: button 3 green
01000000: button 3 red
01000100: button 3 amber
00000000: button 4 off
00001000: button 4 green
10000000: button 4 red
10001000: button 4 amber
-->

<!-- Scene Control -->
<!-- Use these messages to assign scenes to the controller's buttons.
When no scene is assigned (default behavior), the controller sends BASIC_SET messages
to association groups 1 to 4 corresponding to the active button.
When a scene is assigned, the controller sends scene activations and level change messages
that offer richer control of the device's behavior.

The controller has 8 scene groups:
- Groups 1-4 are triggered when buttons 1-4 are pressed when their LED is not lit.
- Groups 5-8 are triggered when buttons 1-4 are pressed when their LED is already lit.

To configure the scenes, send SCENE_CONTROLLER_CONF_SET to associate scenes with
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't support this CC.... so your saying a user should use the SendRaw to get this working?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep. At least for now.

each scene group. The simplest solution is to assign scene groups 1-8 to scenes 1-8
so they are in one-to-one correspondence using the following messages:

2D 01 01 01 00 : Set scene group 1 to scene 1
2D 01 02 02 00 : Set scene group 2 to scene 2
2D 01 03 03 00 : Set scene group 3 to scene 3
2D 01 04 04 00 : Set scene group 4 to scene 4
2D 01 05 05 00 : Set scene group 5 to scene 5
2D 01 06 06 00 : Set scene group 6 to scene 6
2D 01 07 07 00 : Set scene group 7 to scene 7
2D 01 08 08 00 : Set scene group 8 to scene 8

Once this is done, the controller will send SCENE_ACTIVATION_SET to the devices
in association groups 1-4 whenever their corresponding scenes are triggered. To handle
these messages centrally, make sure to associate the primary controller (node 1) with
association groups 1-4. The primary controller will then receive messages like this:

2B 01 S# 00 : Sent by controller when scene S# is triggered

When you press the up/down level below the scene buttons, the controller will send
send SWITCH_MULTILEVEL_START_LEVEL_CHANGE and SWITCH_MULTILEVEL_STOP_LEVEL_CHANGE messages
to the association group corresponding to the most recently activated scene.

26 04 40 00 : Sent by controller when the down lever is pressed
26 05 : Sent by controller when the down lever is released
26 04 00 00 : Sent by controller when the up lever is pressed
26 05 : Sent by controller when the up lever is released

After a scene change, the controller sometimes sends SCENE_ACTUATOR_CONF_GET messages
(2C 02 00) to query the scene configuration of the controlled devices. The controlled
devices should reply with SCENE_ACTUATOR_CONF_REPORT (2C 03 <sceneId> FF 00) to confirm
the scene change. Ignoring the message works too although the controller seems to ask
several times after each scene change until it gets the expected reply.

Scene messages interact with the indicator light change messages described above.
Turning on and off button LEDs determines whether the controller considers the
corresponding scenes to be active.
-->
<CommandClass id="38">
<State>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to port AfterMark to Compatibility rather than state.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That sounds good. How about I remove this section from this patch for now and reintroduce it once the necessary command classes are implemented?

Alternatively, what would you think of encoding the "after mark" bit as an attribute of the CommandClass element itself because it fundamentally changes how the command class is interpreted?

<AfterMark>true</AfterMark>
</State>
</CommandClass>
</Product>
125 changes: 109 additions & 16 deletions config/leviton/vrcz4.xml
Original file line number Diff line number Diff line change
@@ -1,18 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Leviton 4 Button Zone Controller VRCZ4 / VRCZ4-MR
https://products.z-wavealliance.org/products/288
https://products.z-wavealliance.org/products/374
-->
<Product xmlns='https://github.com/OpenZWave/open-zwave' Revision="1">
<!-- Association Groups -->
<CommandClass id="133">
<Associations num_groups="4">
<!-- Do not auto associate with Group 1 on this device -->
<Group index="1" max_associations="232" label="Basic - Button 1" auto="false"/>
<Group index="2" max_associations="232" label="Basic - Button 2"/>
<Group index="3" max_associations="232" label="Basic - Button 3"/>
<Group index="4" max_associations="232" label="Basic - Button 4"/>
</Associations>
</CommandClass>
<Product Revision="2" xmlns="https://github.com/OpenZWave/open-zwave">
<MetaData>
<MetaDataItem name="Name">VRCZ4</MetaDataItem>
<MetaDataItem name="Description">4-Button Zone Controller with or without Switches</MetaDataItem>
<MetaDataItem name="OzwInfoPage">http://www.openzwave.com/device-database/001D:0261:0702</MetaDataItem>
<MetaDataItem name="ProductPic">images/leviton/vrcz4.png</MetaDataItem>
<MetaDataItem id="0261" name="ZWProductPage" type="0702">https://products.z-wavealliance.org/products/374/</MetaDataItem>
<MetaDataItem id="0261" name="FrequencyName" type="0702">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem id="0261" name="Identifier" type="0702">VRCZ4-M0Z</MetaDataItem>
<MetaDataItem id="0243" name="ZWProductPage" type="1202">https://products.z-wavealliance.org/products/288/</MetaDataItem>
<MetaDataItem id="0243" name="FrequencyName" type="1202">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem id="0243" name="Identifier" type="1202">VRCZ4-MRZ</MetaDataItem>
<ChangeLog>
<Entry author="Jeff Brown - [email protected]" date="29 June 2020" revision="2">Fixed metadata and groups, added indicators</Entry>
</ChangeLog>
</MetaData>

<!-- Association Groups -->
<CommandClass id="133">
<Associations num_groups="4">
<!-- Each button toggles an individual zone on or off. Multiple zones can be active at once.
If the device has a switch, then by default it will associate group 1 with the local load.
Do not auto associate the controller with group 1. -->
<Group index="1" max_associations="232" label="Button 1" auto="false"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment as others.

<Group index="2" max_associations="232" label="Button 2"/>
<Group index="3" max_associations="232" label="Button 3"/>
<Group index="4" max_associations="232" label="Button 4"/>
</Associations>
</CommandClass>

<!-- Indicator Lights -->
<!-- Use these messages to override the indicator lights.

91 00 1D 0D 01 00 00 : Reset LEDs to locally controlled operation (default behavior).
91 00 1D 0D 01 FF xx : Set LEDs by OR-ing together the following bit patterns.

00000000: button 1 off
00000001: button 1 green
00010000: button 1 red
00010001: button 1 amber
00000000: button 2 off
00000010: button 2 green
00100000: button 2 red
00100010: button 2 amber
00000000: button 3 off
00000100: button 3 green
01000000: button 3 red
01000100: button 3 amber
00000000: button 4 off
00001000: button 4 green
10000000: button 4 red
10001000: button 4 amber
-->

<!-- Scene Control -->
<!-- Use these messages to assign scenes to the controller's buttons.
When no scene is assigned (default behavior), the controller sends BASIC_SET messages
to association groups 1 to 4 corresponding to the active button.
When a scene is assigned, the controller sends scene activations and level change messages
that offer richer control of the device's behavior.

The controller has 8 scene groups:
- Groups 1-4 are triggered when buttons 1-4 are toggled to the left side.
- Groups 5-8 are triggered when buttons 1-4 are toggled to the right side.

To configure the scenes, send SCENE_CONTROLLER_CONF_SET to associate scenes with
each scene group. The simplest solution is to assign scene groups 1-8 to scenes 1-8
so they are in one-to-one correspondence using the following messages:

2D 01 01 01 00 : Set scene group 1 to scene 1
2D 01 02 02 00 : Set scene group 2 to scene 2
2D 01 03 03 00 : Set scene group 3 to scene 3
2D 01 04 04 00 : Set scene group 4 to scene 4
2D 01 05 05 00 : Set scene group 5 to scene 5
2D 01 06 06 00 : Set scene group 6 to scene 6
2D 01 07 07 00 : Set scene group 7 to scene 7
2D 01 08 08 00 : Set scene group 8 to scene 8

Once this is done, the controller will send SCENE_ACTIVATION_SET to the devices
in association groups 1-4 whenever their corresponding scenes are triggered. To handle
these messages centrally, make sure to associate the primary controller (node 1) with
association groups 1-4. The primary controller will then receive messages like this:

2B 01 S# 00 : Sent by controller when scene S# is triggered

When you press the up/down level below the scene buttons, the controller will send
send SWITCH_MULTILEVEL_START_LEVEL_CHANGE and SWITCH_MULTILEVEL_STOP_LEVEL_CHANGE messages
to the association group corresponding to the most recently activated scene.

26 04 40 00 : Sent by controller when the down lever is pressed
26 05 : Sent by controller when the down lever is released
26 04 00 00 : Sent by controller when the up lever is pressed
26 05 : Sent by controller when the up lever is released

After a scene change, the controller sometimes sends SCENE_ACTUATOR_CONF_GET messages
(2C 02 00) to query the scene configuration of the controlled devices. The controlled
devices should reply with SCENE_ACTUATOR_CONF_REPORT (2C 03 <sceneId> FF 00) to confirm
the scene change. Ignoring the message works too although the controller seems to ask
several times after each scene change until it gets the expected reply.

Scene messages interact with the indicator light change messages described above.
Turning on and off button LEDs determines whether the controller considers the
corresponding scenes to be active.
-->
<CommandClass id="38">
<State>
<AfterMark>true</AfterMark>
</State>
</CommandClass>
</Product>
15 changes: 15 additions & 0 deletions config/leviton/vrr15.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Product Revision="1" xmlns="https://github.com/OpenZWave/open-zwave">
<MetaData>
<MetaDataItem name="Name">VRR15</MetaDataItem>
<MetaDataItem name="Description">Scene Capable Receptable</MetaDataItem>
<MetaDataItem name="OzwInfoPage">http://www.openzwave.com/device-database/001D:0334:1603</MetaDataItem>
<MetaDataItem name="ProductPic">images/leviton/vrr15.png</MetaDataItem>
<MetaDataItem id="0334" name="ZWProductPage" type="1603">https://products.z-wavealliance.org/products/812/</MetaDataItem>
<MetaDataItem id="0334" name="FrequencyName" type="1603">U.S. / Canada / Mexico</MetaDataItem>
<MetaDataItem id="0334" name="Identifier" type="1603">VRR15-1LZ</MetaDataItem>
<ChangeLog>
<Entry author="Jeff Brown - [email protected]" date="29 June 2020" revision="1">Initial creation</Entry>
</ChangeLog>
</MetaData>
</Product>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No Config/Association Groups?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The configs are undocumented. I haven't needed to poke them, assuming there are any.

The association groups are automatically detected just fine. There's only one group and it reports the state of the controlled load.

Loading