Z-Wave Thermostat Battery Status?

Got it thanks. So it’s just a delay before the next command goes.

Ok, in doing some more digging on the whole humidity issue, I came across this from the MiCasaVerde site:

It’s in one of the embedded devices: the one with no temperature. http://<vera_ip>:3480/data_request?id=status&DeviceNum=<embedded_device_num>&output_format=json

        {
            "id": 9,
            "service": "urn:micasaverde-com:serviceId:HumiditySensor1",
            "variable": "CurrentLevel",
            "value": "41"
                  }

Just make sure you use the embedded device number instead of the main device number to query the status. Hopefully, they’ll fix the device UI to display the relative humidity in future updates.

@minollo & @RBoy I’m guessing you guys have already seen this, but in looking at the logging, I’m seeing:

zw device: 03, command: 3105, payload: 01 2A 02 BC

Any chance there’s a way to access other “devices” that would be part of the thermostat as referenced above? Or is the device 03 the reference for my thermostat on the zwave network? I’ll readily admit that I’m in a bit over my head here, so if I’m completely off base feel free to tell me. Just something I stumbled upon, so I thought I’d mention it.

Oh: here’s the link to the info from above: http://forum.micasaverde.com/index.php?topic=14790.0

Thanks!

I honestly don’t know; others with real z-wave knowledge may know more.
Reading the information you posted, it seems to me it’s very specific to how micasaverde handles things, rather than to the device itself; the device only communicates through zwave (no wifi), and I’m not aware of “sub-devices” available for it (or, for what it matters, what a zwave sub-device would be and/or how you would access it through ST…).

Good catch! I must say I’m still new to devices so I’ll try to figure it out.
I will ask help from veterans here @bflorian and @Ben can you suggest some folks who have indepth expertise of z-wave and ST platform who can point us on how to extract the above values. I’ll be happy to take over from there and experiment with thermostat but unfortunately I can’t find anything about id’s and embedded id’s on the ST documentation page.

Ok, so I’m still digging on this… I also found this reference on the HomeSeer board:

If you scroll down, there are some good pics showing the zwave info. One in this one also indicates something else happening. Though, in this one, it calls it a channel (Channel 2 specifically), not a device… Doing a little digging on the ST boards relating to multi-channel, instead of sub-device, I came across this:

It looks like the CT100 may be using an older style(?) of zwave communication for this. If so, there’s some code in there that might help. I’ll keep digging and see if I can find anything more solid.

Good find @jsulliweb - nice going.

Darm that link on the power strip doesn’t work (archived) but I’d like to bring in @bigpunk6 here who wrote that code. @bigpunk6 how did you access the sub channels on these devices? Your expertise would be very helpful here, we are trying to access the humidity sensor on the CT100 thermostat. Please see the above post.

Minor input here I see that the CT100 supports capability 0x60 which is Multi Channel V3 or Mult Instance V1 which corelates to your comments above and what @bigpunk6 wrote. Now to figure out how to use it.

Okay going to need some help here:

Here is what I wrote to try and get the multi instance details:

//test
def test() {
log.debug “Sending custom commands for multi channel device”
def cmds =
cmds << zwave.multiChannelV3.multiChannelCapabilityGet(endPoint:1).format()
cmds << zwave.multiChannelV3.multiChannelEndPointFind(genericDeviceClass:39).format() // Multi Sensor
cmds << zwave.multiChannelV3.multiChannelEndPointGet().format()
cmds << zwave.multiChannelV3.multiInstanceGet(commandClass:39).format()
cmds << zwave.multiInstanceV1.multiInstanceGet(commandClass:39).format()
log.debug “Sending ${cmds.inspect()}”
delayBetween(cmds, 2300)
}

Here is what I got back:

c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:52 PM: warn Unexpected zwave command MultiInstanceReport(commandClass: 39, instances: 1)
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:52 PM: debug Parsing → zw device: 1D, command: 6005, payload: 27 01
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:50 PM: warn Unexpected zwave command MultiInstanceReport(commandClass: 39, instances: 1)
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:50 PM: debug Parsing → zw device: 1D, command: 6005, payload: 27 01
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:48 PM: warn Unexpected zwave command null
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:48 PM: warn Exception ‘java.lang.NullPointerException: Cannot invoke method parse() on null object’ encountered parsing ‘cmd: 6008, payload: 40 02’
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:48 PM: debug Parsing → zw device: 1D, command: 6008, payload: 40 02
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:43 PM: warn Unexpected zwave command null
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:43 PM: warn Exception ‘java.lang.NullPointerException: Cannot invoke method parse() on null object’ encountered parsing ‘cmd: 600A, payload: 01 08 06 31 85’
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:29:43 PM: debug Parsing → zw device: 1D, command: 600A, payload: 01 08 06 31 85

My mistake it should have been command class 49 and I wrote a event handler for it and here where I am:
I think that instance 2 is something we need to extract:

c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:32 PM: debug multiinstancereport → MultiInstanceReport(commandClass: 49, instances: 2)
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:32 PM: debug Parsing → zw device: 1D, command: 6005, payload: 31 02
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:30 PM: debug multiinstancereport → MultiInstanceReport(commandClass: 49, instances: 2)
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:30 PM: debug Parsing → zw device: 1D, command: 6005, payload: 31 02
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:28 PM: warn Unexpected zwave command null
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:28 PM: warn Exception ‘java.lang.NullPointerException: Cannot invoke method parse() on null object’ encountered parsing ‘cmd: 6008, payload: 40 02’
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:28 PM: debug Parsing → zw device: 1D, command: 6008, payload: 40 02
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:23 PM: warn Unexpected zwave command null
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:23 PM: warn Exception ‘java.lang.NullPointerException: Cannot invoke method parse() on null object’ encountered parsing ‘cmd: 600A, payload: 01 08 06 31 85’
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 11:55:23 PM: debug Parsing → zw device: 1D, command: 600A, payload: 01 08 06 31 85

I think I’m close trying to figure out the right command here:

c45dc2e0-2f12-48ba-89ab-2cb845a687a1 12:56:45 AM: debug MultiInstanceCmdEncapv1 MultiInstanceCmdEncap(command: 5, commandClass: 96, instance: 2, parameter: [49, 2])
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 12:56:45 AM: debug Parsing → zw device: 1D, command: 6006, payload: 02 60 05 31 02
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 12:56:43 AM: debug MultiInstanceCmdEncapv1 MultiInstanceCmdEncap(command: 8, commandClass: 96, instance: 2, parameter: [64, 2])
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 12:56:43 AM: debug Parsing → zw device: 1D, command: 6006, payload: 02 60 08 40 02
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 12:57:06 AM: debug MultiInstanceCmdEncapv1 MultiInstanceCmdEncap(command: 10, commandClass: 96, instance: 2, parameter: [1, 8, 6, 49, 133])
c45dc2e0-2f12-48ba-89ab-2cb845a687a1 12:57:06 AM: debug Parsing → zw device: 1D, command: 6006, payload: 02 60 0A 01 08 06 31 85

@urman do you think you could shed some light on how this can be achieved? thanks

@RBoy I took a quick peek at the thread, but get what specificially working? It’s late :non-potable_water:

@urman thanks for looking into this. Am trying to see how to get the humidity sensor data from the CT100/CT101 thermostat. From the good work done by @jsulliweb managed to figure out that this data is embedded in one of the sub channels or what I understand z-wave calls Multi Instance. The best info I’ve found by prodding the device so far is here Z-Wave Thermostat Battery Status?

My issue is I don’t know how to write the code to request and extract this sub channel data from the device using ST. I’ve been trying but haven’t had much success. Can you help us figure out what code we need to write to extract this humidity sensor data from the sub device/instance?

@duncan do we support channels?

To request humidity from MultiChannel end point 2, I would try:

def req = zwave.sensorMultilevelV3.sensorMultilevelGet()
return zwave.multiChannelV3.multiChannelCmdEncap(destinationEndPoint: 2).encapsulate(req).format()
1 Like

Mixing some ideas here, I think I succeeded. I added this event handler:

def zwaveEvent(physicalgraph.zwave.commands.multiinstancev1.MultiInstanceCmdEncap cmd) {
    def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 3, 0x31: 3])
    log.debug ("multiinstancev1.MultiInstanceCmdEncap: command from instance ${cmd.instance}: ${encapsulatedCommand}")
    if (encapsulatedCommand) {
        return zwaveEvent(encapsulatedCommand)
    }
}

…and this new command in the poll() function:

zwave.multiChannelV3.multiInstanceCmdEncap(command: 5, commandClass: 96, instance: 2, parameter: [49, 2]).encapsulate(zwave.sensorMultilevelV3.sensorMultilevelGet()).format(),	//current RH

I do get a (reasonable) RH value back; I haven’t verified if it’s “real” yet though.

Okay, yeah – multiInstanceCmdEncap is an older version of the command. Sorry I didn’t notice it was using that, not the newer MultiChannelV3.

You can take out the parameters command: 5, commandClass: 96, parameter: [49, 2] from your multiInstanceCmdEncap. They aren’t quite correct and the call to .encapsulate() overwrites them so they aren’t being used.

zwave.multiInstanceV1.multiInstanceCmdEncap(instance: 2).encapsulate(zwave.sensorMultilevelV3.sensorMultilevelGet()).format()

The handler looks good.

Thank you @minollo & @duncan !!! @duncan’s poll command works perfectly with the handler code, (well, just be sure to add the comma at the end, newbie mistake). Anywho, I’ve added the code to my device type, and I’m pulling the same humidity reading that is showing on my CT100. Thanks again!

@duncan thanks

@minollo why do you use 0x30: 3 in your command identification? That’s Binary switch, you should only have 0x31: 2 infact since CT100/101 uses v2 commands (not v3) for multi instance.

@duncan on question for you, is there some way to idenfity in the code that this command should run ONLY if the device connected is CT-100/101? Reason I’m asking is that the instructions posted above for this customizing is based on the standard Z-Wave device type. All change made upto this point can apply to any device using the standard z-wave device type. however this one RH step is specific to CT100/101 so if in the code one can identify at runtime then the code can remain generic.