Heatit Z-Water - Generic Composite Driver

Hello.

I an new to hubitat and moving from smartthings. I am looking for a driver that I can use for my z-wave dinrail regulator for water heating system.
The name of the device is Heatit Z-Water: Heatit Z-Water - Heatit

On ST, it appears as a parent device with 14 child devices, using the rboi.com device handler for this exact unit.
10 of the devices are on/off switches, and the four inputs appears as temp sensors(not often in use by people who have this), in total 14 devices appears.

I have tried to use Zooz Multirelay driver. It works fine, but only 3 child devices appear. So if the zooz driver would load more than 3 child devices it should work fine.
Is there any driver that I can use who load and list all the available child devices of the parent device?

This is the only thing that holds me back from throwing out my ST, but important as it regulate all heating in the house.

Perhaps a quick modification of some of the other Composite Drivers for on/off switches would do the trick?

I really just need a generic composite driver that loads all the child devices.**

Thanks for all answers!

1 Like

I just got word from this vendor they will be sending me one to write a proper driver for this device and a couple others.. 2.2.5 has a few new Heatit drivers in it.

1 Like

wow! Thats fantastic! Would you update this post when it is ready?

Will do

1 Like

Just wanted to check out if there was any updates on this?

Still haven't received this from them.. They say they are sending it and others..

Hello, I'm also looking for a driver for this device. It's a very popular unit here in the UK. I find that the generic Zwave relay driver will control the first relay channel and it appears that another 9 child devices need to be added. I would think some copy and paste, patching in correct endpoints would solve the problem. Perhaps we could have the source code for this in the meantime so we can attempt a fix?

The 4 child device temperature probe inputs work perfectly. I find these useful on a hot water valve control device like this because I can measure actual temperatures of the heating equipment, in my case a ground source heat pump, such that automation can make informed decisions during operation. It's also good for temperature of other items in a typical utility room, like the hot water cylinder, to provide data for intelligent cycling.

Hi,

I'm thinking of buying this device to controle with my hubitat.
Is there anyone who can compile the hubitat driver out of the smartthings driver?
Or does anybody know about a similar device that's working with hubitat already?

Much appreciated!

I've never found anything quite like this device. While the 10 relay channels could be replicated with another device, the 4 built in standard temperature probe inputs really make this a super device.

I've spoken with Hubitat customer service, as well as their software guru Bryan Copeland (see above) who does these drivers. Apparently the sticking point is that they don't have the hardware unit to work with. I have a spare unit that I'll take back to the US with me in October and lend it to them if they don't have a solution by then.

I feel this driver would be quite easy to put together because the generic relay driver does work on a single channel. Some cut and paste with redirection of the inputs and outputs should be all that's necessary to get the relays running, However, when I requested source of that driver they said "We never release driver code". Unfortunate, as so many more devices might be supported with no effort on their part besides cooperation.

This might not address the temperature probes but access to the Heatit TK3 thermostat source code would provide a road map for that,

1 Like

I sent Brian Copeland a Z-Water unit for testing in late October 2021. I emailed yesterday requesting an update and will hopefully be able to share if an "implementation" or driver is forthcoming.

Here's a solution that might work while you are waiting for an "official" driver.

I've written a "generic" driver that is manufacturer independent and works for devices with multiple endpoints. After you install the parent driver, found here: https://github.com/jvmahon/HubitatDriverTools/blob/main/FullDrivers/Any_Z_Wave_Device_Universal_Parent_Driver_v1_7_3_517.groovy

You then define each endpoint and what it does.

To use it:

  1. Install the driver

  2. Apply it to your Heatit device

  3. Critical Step - Click "Initialize" on the web page interface for the driver or reboot your Hubitat
    image

  4. You then need to add 14 Child devices for the Heatit device using the add child device web interface control for the driver.
    image

You can add these a few at a time if you want - i.e., to "test" that it works as you go along.

For each of endpoints 1 through 10
A. In the DeviceName box, give the child device a name ("Switch 1" through "Switch 10")
B. Under componentDriverName select "Generic Component Switch (hubitat)"
C. Enter the endpoint number (1 through 10, correspondingly).
D. Click on "Add New Child device". That will then create a child device through which you control the particular endpoint.

For endpoints 11 through 14, the process is basically the same except in step 4.B, you select "Generic Component Temperature Sensor (hubitat)" instead of selecting the switch.

In case anybody wants to attempt customizing, the driver set is also available as a Hubitat Bundle here: https://github.com/jvmahon/HubitatDriverTools/tree/main/Bundled

1 Like

This seems like such an elegant solution, one which could solve missing driver programs for so many users. Thanks so much for creating this. I just wish I could make it work for me on this device!

Following your directions exactly, creating a new child with appropriate endpoint seems to be successful. Unfortunately, no matter which child/endpoint is selected and commanded, only the first switch contact assigned to endpoint 1 is controlled.

Some observations.

First try: When the device is first added, a driver is automatically selected that is more or less related to the type of device, so it was necessary to change this your "Any Z-Wave Device Universal . . ." driver. No problem there.

Then doing an "initialize", the correct number of child devices was created, one associated with each endpoint, child/endpoint 0 appearing to be the main device itself. Note that the device page shows the DNI's as "X-child0-ep000" through "X-child0-ep0014"

Changing the driver for each endpoint to the appropriate type, "Generic Component Switch" for example, makes it work as I described, all child devices with different endpoints only controlling contact 1. (The child devices for temperature sensor channels don't show anything.)

Second try: After initializing, I deleted all child devices that were automatically created and created new child devices through your driver. All of these show a DNI like "X-child1-ep001" through "X-child1-ep0014" . The results were the same- only first channel switched and no temperature displayed.

Other tweaking included using endpoints specified as "01" and "001" in case of a string parsing error, manually changing Device Network Id with various child/endpoint combinations, and "Generic Component Contact/Switch" in child type.

Bottom line, so far every configuration causes all switching to only actually affect the first channel or set of contacts.

I'm hoping something simple that I've overlooked jumps out at you!

Now . . . if this were able to output a compiled and optimized driver after testing, Brian Copeland might be out of a job (or have time for something new!)

Sorry it didn't work for you - this driver works for every non-battery device I have (dimmers, switches, fan controllers, dual outlets,), but without an actual Heatit device to test, I don't know why it isn't working for that. When you installed and initialized the device, it should have created a "deviceRecord=" block of data in your "state" shown on its web page. Can you copy / paste that data here. It may give me a clue as to what went wrong.

Also, you mention endpoints like "X-child0-ep0014" -- can you confirm that is how it appears with the two "0"s before the "14"? That field should always pad to be three digits long so should have been more like "X-child0-ep014". If it was "-ep0014" that might be a clue as to the error.

Here's the info you requested, just after the device is added and initialized:

  • deviceRecord : {endpoints={11={children=[{childName=RenameMe - device for endpoint: 11, namespace=hubitat, type=Generic Component Dimmer}], classes=[32, 49, 89, 94, 133, 142]}, 12={children=[{childName=RenameMe - device for endpoint: 12, namespace=hubitat, type=Generic Component Dimmer}], classes=[32, 49, 89, 94, 133, 142]}, 13={children=[{childName=RenameMe - device for endpoint: 13, namespace=hubitat, type=Generic Component Dimmer}], classes=[32, 49, 89, 94, 133, 142]}, 14={children=[{childName=RenameMe - device for endpoint: 14, namespace=hubitat, type=Generic Component Dimmer}], classes=[32, 49, 89, 94, 133, 142]}, 0={children=[{childName=RenameMe - device for endpoint: 0, namespace=hubitat, type=Generic Component Switch}], classes=[0, 32, 37, 38, 48, 49, 85, 89, 90, 94, 96, 108, 112, 114, 115, 122, 133, 134, 142, 152, 159]}, 1={children=[{childName=RenameMe - device for endpoint: 1, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 2={children=[{childName=RenameMe - device for endpoint: 2, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 3={children=[{childName=RenameMe - device for endpoint: 3, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 4={children=[{childName=RenameMe - device for endpoint: 4, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 5={children=[{childName=RenameMe - device for endpoint: 5, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 6={children=[{childName=RenameMe - device for endpoint: 6, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 7={children=[{childName=RenameMe - device for endpoint: 7, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 8={children=[{childName=RenameMe - device for endpoint: 8, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 9={children=[{childName=RenameMe - device for endpoint: 9, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}, 10={children=[{childName=RenameMe - device for endpoint: 10, namespace=hubitat, type=Generic Component Switch}], classes=[32, 37, 89, 94, 133, 142]}}, deviceInputs={11={size=2, name=11, description=Time interval between consecutive temperature reports., range=0..8640, title=(11) Input 1 report interval, type=number}, 12={size=2, name=12, description=Time interval between consecutive temperature reports., range=0..8640, title=(12) Input 2 report interval, type=number}, 13={size=2, name=13, description=Time interval between consecutive temperature reports., range=0..8640, title=(13) Input 3 report interval, type=number}, 14={size=2, name=14, description=Time interval between consecutive temperature reports., range=0..8640, title=(14) Input 4 report interval, type=number}, 1={size=1, name=1, options={0=LED turned off., 1=LED turned on. (Default), 2=LED flashing at 1 second intervals (½ Hz), 3=LED flashing at ½ second interval (1 Hz)}, description=Configuration of the status LED, title=(1) Status LED, type=enum}, 2={size=1, name=2, description=Configure the percentage of light in the status LED, when the LED is turned on, range=0..100, title=(2) LED brightness, type=number}, 3={size=1, name=3, options={0=No thermistor, input is disabled. (Default), 1=10K NTC. (PART NUMBER: TT02-10KC3-93D-3000R-TPH)}, description=This parameter decides which kind of thermistor that is connected to the input.., title=(3) Thermistor type input 1, type=enum}, 4={size=1, name=4, options={0=No thermistor, input is disabled. (Default), 1=10K NTC. (PART NUMBER: TT02-10KC3-93D-3000R-TPH)}, description=This parameter decides which kind of thermistor that is connected to the input., title=(4) Thermistor type input 2, type=enum}, 5={size=1, name=5, options={0=No thermistor, input is disabled. (Default), 1=10K NTC. (PART NUMBER: TT02-10KC3-93D-3000R-TPH)}, description=This parameter decides which kind of thermistor that is connected to the input., title=(5) Thermistor type input 3, type=enum}, 6={size=1, name=6, options={0=No thermistor, input is disabled. (Default), 1=10K NTC. (PART NUMBER: TT02-10KC3-93D-3000R-TPH)}, description=This parameter decides which kind of thermistor that is connected to the input., title=(6) Thermistor type input 4, type=enum}, 7={size=1, name=7, range=-40..40, title=(7) Input 1 calibration, type=number}, 8={size=1, name=8, description=Input 1 calibratio2, range=-40..40, title=(8) Input 2 calibration, type=number}, 9={size=1, name=9, range=-40..40, title=(9) Input 3 calibration, type=number}, 10={size=1, name=10, range=-40..40, title=(10) Input 4 calibration, type=number}}, classVersions={89=1, 37=1, 48=0, 38=0, 49=0, 152=0, 142=3, 0=1, 122=1, 133=2, 112=1, 134=2, 114=1, 115=1, 159=0, 90=1, 108=0, 94=1, 85=0, 96=2, 32=1}, formatVersion=1, fingerprints=[{deviceType=3, name=ThermoFloor: Heatit Z Water, deviceId=522, manufacturer=411}]}

Sorry, the "X-child0-ep0014" was a cut/paste error on my part. It's "X-child0-ep014" as expected.

Thanks for any suggestions!

Just checking - when you tried to control your device, did you try and control it from the web page for the "Parent", or did you try and control each port from their separate "child" device's web page?

If you were trying to control from the "Parent" -- i.e., the one that ended in "-ep000", then it may only control the first port. You should be controlling each port from its respective "child" device.

Also, a slightly updated version of the driver: https://raw.githubusercontent.com/jvmahon/HubitatDriverTools/main/FullDrivers/Any_Z_Wave_Device_Universal_Parent_Driver_v1_7_4_517.groovy

Install this, then click on "initialize" - this should create the child devices automatically (I think!).

Switches perfectly, thanks SO much!

The temperature sensors, however, only show a default of 20C on each of the four inputs with sensors connected. Parameters 3-6 need to be set to 1 to enable a standard NTC 10K device- I've tried that through your driver's Set Parameter, as well as the Basic Z-Wave tool and hoped to see them appear on the Show Parameter section. Other parameters display properly but not 3-6.

Any ideas? You're SOOO close!

Glad to hear the switches are now working.

According to this: Product Configuration Capabilities parameters 3-6 should already be set to a default of 1.

If the parameters aren't setting from my driver -- have you tried rebooting your hubitat after installing my driver?

Also, you mention setting them from my driver's "Set Parameter" control - the driver should also have created explicit controls for each of the HeatIt device's parameters -- you should be able to set parameters 3-6 through drop-down menu choices. Did this not appear for you?

Anohter thing I can suggest: The parameter size for parameters 3-6 is listed in the Heatit manual as size = 1. I've found that manufacturers sometimes list a size=1 when, in fact, the "real" size is size = 2. That could be causing your problem.

To check:

  1. Reboot hubitat or click on "initialize" for my driver. You must do one of these two every time you change a device to use my driver (there's a lot that happens during the initialize step).
  2. Try resetting parameter 3. Note that you set all parameters from the "Parent" device, not the child devices. There should be a drop-down for each of the parameters 3-6 allowing you to choose the 10K sensor
  3. Then select the "Save Preferences" button.
  4. Was the parameter changed - if so, then great
  5. Else, edit the driver file. Look at lines 1228-1231 and change size=1 to size=2. See the lines:

  1. Reboot again.
  2. Retry steps 2, 3, 4.
  3. If it works with size=2, let me know so I can make the change "permanent" in the driver.
  4. Else, I don't know!

Of course, the good news is that at least the switches are working. However, without an actual device to test, that may be as far as I can get in helping.

I've always tried to set the parameters from the parent, both with your driver and the Basic Z-Wave one. There is no pulldown menu unfortunately. Anway, I have tried your suggestions to no avail.

However . . . upon looking in the log, I see this:

errorgroovy.lang.MissingPropertyException: No such property: scaledMeterValue for class: hubitat.zwave.commands.sensormultilevelv11.SensorMultilevelReport on line 1764 (method parse)

That looks relevant and important . . .

Yep. Typo.
Try this update:
https://raw.githubusercontent.com/jvmahon/HubitatDriverTools/main/FullDrivers/Any_Z_Wave_Device_Universal_Parent_Driver_v1_7_5_517.groovy

That did it! Device is not functioning as expected.

Thanks so much for this driver; it's obviously taken a great effort to create it.

Now, if you figured out how to get my HAI/Leviton OmniPro II systems to communicate with the Hubitat world without a separate MQTT broker (as the excellent Homeseer Plug-in by Rob Mason does), life would be grand!