HeatIt Z-Scene Controller, how to use indicator command class

Hi all,
I’ve just got two HeatIt Z-Scene Controllers. The Controllers works fine with openHab 2.5.3 but I’m woundering how to use the indicator command class.
With this feature it should be possible to control the LED independent from the switch state.
It seems, the indicator command is not linked to a channel in the device database.
Is it necessary to add something here? What exactly?
Thanks for your advise,
Daniel

The cjannel information in our database came directly from the information reported by a device. If the channel is not there, then that functionality is not available unless the manufacturer added that feature in a later firmware.

For features added to later firmware versions we add a new device entry after confirming the changes. If that channel is available it would be listed in the xml file generated by OH in the zwave folder under userdata.

thanks for your reply,

I don’t think it is a version issue, because the used version on cd-jackson.com (1.0?) has no difference in the manual in this point against the actual version on the manufacturer homepage (2.02).

https://www.cd-jackson.com/index.php/zwave/zwave-device-database/zwave-device-list/devicesummary/846#endpoints

this are the endpoints from the device.
In example the command class switch multilevel have a channel, the dimmer. the indicator have nothing. So in my opinion, it is needed to add something here, is this right?

Because in openHab I need to link my Item against a channel to use it. Or is there another way to trigger the indicator command class?

No, the software in your device needs to expose that as a supported channel. If the vendor has not designed that capability into the product and exposed it to Z-Wave we cannot magically add it and have it function.

Since the command class is supported by your device, you are correct in that we just need to update the database to add this support.

V1 of this command class (which looks like what this device supports) was pretty basic if I remember correctly. (although the manual seems to say it’s V2).

There are the following channels supported -:

  • indicator_level
  • indicator_period
  • indicator_flash

The take either an OnOff or Decimal type.

These channels would each need to be added to the database for each endpoint if you need them all.

1 Like

I stand corrected by the expert here. :bowing_man:

it should be INDICATOR Version 2…

        <commandClass>COMMAND_CLASS_INDICATOR</commandClass>
        <COMMAND__CLASS__INDICATOR>
          <endpoint reference="../../../.."/>
          <version>2</version>
          <instances>1</instances>
          <control>false</control>
          <versionSupported>2</versionSupported>
          <isGetSupported>true</isGetSupported>
          <supportedIndicatorsInitialised>true</supportedIndicatorsInitialised>
          <supportedIndicators>
            <ZWaveIndicator>
              <type>LCD_BACKLIGHT</type>
            </ZWaveIndicator>
            <ZWaveIndicator>
              <type>BUTTON1_INDICATION</type>
            </ZWaveIndicator>
            <ZWaveIndicator>
              <type>BUTTON2_INDICATION</type>
            </ZWaveIndicator>
            <ZWaveIndicator>
              <type>BUTTON3_INDICATION</type>
            </ZWaveIndicator>
            <ZWaveIndicator>
              <type>BUTTON4_INDICATION</type>
            </ZWaveIndicator>
            <ZWaveIndicator>
              <type>BUTTON5_INDICATION</type>
            </ZWaveIndicator>
            <ZWaveIndicator>
              <type>BUTTON6_INDICATION</type>
            </ZWaveIndicator>
          </supportedIndicators>
        </COMMAND__CLASS__INDICATOR>

I’ve just uploaded the xml-file, but it changed nothing. Version still keeps 1.
But what exactly I have to do…
Add tree channels to each Endpoint with

  • indicator_level
  • indicator_period
  • indicator_flash

and ready?
Any part in field configuration?

And, many many thanks all for your quick help.

It won’t change - once a device has been created in the database you can’t upload another XML to change things. This avoids people loading the wrong file and making a mess. You can just change it manually - that said it wont actually matter since the binding doesn’t use this information from the database - it will know exactly what version it is.

Good point… I had to check since this is a reasonably recent addition to the binding…

The config needs to have type= ZWaveIndicator where ZWaveIndicator is what you see in the XML (eg LCD_BACKLIGHT or BUTTON1_INDICATION etc).

Hi Chris,
just tested your hints and expanded the database.
Unfortanly it does’t work.

10:04:09.658 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'ZWaveNode005HeatitZSceneControllerPushButton6Gang_LCDBacklightDeprecated' received command 12
10:04:09.660 [INFO ] [arthome.event.ItemStatePredictedEvent] - ZWaveNode005HeatitZSceneControllerPushButton6Gang_LCDBacklightDeprecated predicted to become 12
10:04:09.666 [INFO ] [smarthome.event.ItemStateChangedEvent] - ZWaveNode005HeatitZSceneControllerPushButton6Gang_LCDBacklightDeprecated changed from 0 to 12
10:04:09.667 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 5: Command received zwave:device:a2951589:node5:indicator_level --> 12 [PercentType]
10:04:09.668 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 5: Command for unknown channel zwave:device:a2951589:node5:indicator_level with PercentType

The First: why is it marked as deprecated?
The second: the field configurations isn’t exported. So the binding can’t know what to do…

By the way, I removed all default associations except lifeline, I think it is better so.

Thanks,
Daniel

Can you tell me what doesn’t work? Or at least tell me how you’ve tested this? Are you generating your own binding? Or have you somehow modified an existing binding?

Yes, normally for a ZWave + device, only the lifeline is required to communicate with the controller. Some devices require other associations, but most don’t and normally it’s best not to configure them.

Ok,
I’ve added the channel in the Database, exported the openHab2 XML File and edited the JAR-File (with renaming it to ZIP, open in Windows Explorer and replace the scenecontroller_0_0.xml file).
Then I’ve deleted and rediscovered the Device in Paper UI. The new added Channel appears, I linked it to an Item.
openhab.log (30.4 KB)
I’ve added the logfile from device discovery.
Hm, what is, what is not working… when I change the Item through Paper UI, I can read Command for unknown channel zwave:device:a2951589:node5:indicator_level with PercentType in the Logfile and the LED does nothing.

The binding is expecting a number - it should work with the percent, but it might need some changes so I’d try using a number type directly.

Hm, now I’m in trouble.
1st, I’ve tried to create a new number item and link to the channel in paper UI, this does’t work (it’s not a choice).
2nd, I’ve created a new Item in items-File and linked to the channel.

Number lcd_backlight_number {channel="zwave:device:a2951589:node5:indicator_level"}

Then, I’ve send a update and command to this item via karaf console (smarthome:update, smarthome:send), but the ZWave log shows nothing. What I’m doing wrong?

11:36:56.163 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'lcd_backlight_number' received command 100
11:36:56.166 [INFO ] [arthome.event.ItemStatePredictedEvent] - lcd_backlight_number predicted to become 100
11:36:56.168 [INFO ] [smarthome.event.ItemStateChangedEvent] - lcd_backlight_number changed from 1 to 100
11:37:43.192 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'lcd_backlight_number' received command 0
11:37:43.192 [INFO ] [arthome.event.ItemStatePredictedEvent] - lcd_backlight_number predicted to become 0
11:37:43.192 [INFO ] [smarthome.event.ItemStateChangedEvent] - lcd_backlight_number changed from 100 to 0

I wish it was that simple :slightly_smiling_face:

You also need to be sure to remove the old binding. Double check with list -s | grep zwave in the console. You then need to manually install the dependencies, unless you have another binding installed that shares them, like Zigbee. Details are documented here.

Hi @5iver, thanks,

list -s | grep zwave
250 │ Active │  80 │ 2.5.3                   │ org.openhab.binding.zwave
openhab>                                                                   

so I think there is not the problem.
I did a fresh install and only manually installed the zwave binding on developing machine.

I would agree - since the channel is showing up in PaperUI, I think the new binding is running.

Try to export the XML from the database again - I’ve changed the type to PercentType for now.

Now I get following exception:

12:33:28.687 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'ZWaveNode005HeatitZSceneControllerPushButton6Gang_LCDBacklight' received command 13
12:33:28.687 [INFO ] [arthome.event.ItemStatePredictedEvent] - ZWaveNode005HeatitZSceneControllerPushButton6Gang_LCDBacklight predicted to become 13
12:33:28.687 [INFO ] [smarthome.event.ItemStateChangedEvent] - ZWaveNode005HeatitZSceneControllerPushButton6Gang_LCDBacklight changed from NULL to 13
12:33:28.687 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 5: Command received zwave:device:a2951589:node5:indicator_level --> 13 [PercentType]
12:33:28.687 [ERROR] [rnal.common.AbstractInvocationHandler] - An error occurred while calling method 'ThingHandler.handleCommand()' on 'org.openhab.binding.zwave.handler.ZWaveThingHandler@1b0d62dd': Name is null
java.lang.NullPointerException: Name is null
        at java.lang.Enum.valueOf(Enum.java:236) ~[?:1.8.0_252]
        at org.openhab.binding.zwave.internal.protocol.commandclass.ZWaveIndicatorCommandClass$IndicatorType.valueOf(ZWaveIndicatorCommandClass.java:1) ~[?:?]
        at org.openhab.binding.zwave.internal.converter.ZWaveIndicatorConverter.receiveCommand(ZWaveIndicatorConverter.java:145) ~[?:?]
        at org.openhab.binding.zwave.handler.ZWaveThingHandler.handleCommand(ZWaveThingHandler.java:1181) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_252]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_252]
        at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:152) [bundleFile:?]
        at org.eclipse.smarthome.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [bundleFile:?]
        at com.sun.proxy.$Proxy306.handleCommand(Unknown Source) [?:?]
        at org.eclipse.smarthome.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:74) [bundleFile:?]
        at org.eclipse.smarthome.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:48) [bundleFile:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_252]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_252]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_252]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_252]
        at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:152) [bundleFile:?]
        at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:52) [bundleFile:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_252]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]

Ok, the Exception results on missing Configuration on Export (type=LCD_BACKLIGHT).
I’ve added this manually to the XML File, now I get no error in thie Logfile.
Unfortanly the LED is not switchable.

(for BUTTON1_INDICATION, therefore 41?).