The valves arrived via DHL. I had to pay 30USD for the shipping and another 27USD in customs. I spend 141USD in total. 32.25USD per valve. Not bad.
The first thing I noticed is that the quality is not as good as in the pictures. It uses a colored LCD screen but some parts of the screen are dim depending of the angle of vision. I also noticed that sometimes the screen doesn’t go fully bright. That last problem seems random and is not very common.
The instructions came in English along with an adapter for Danfoss radiators. Oh, and AAx2 batteries included too. Btw, the instructions says I should use always dry batteries (not rechargable ones).
The devices were able to pair with my zigbee gateway (a CC2531 USB stick connected to my RPI 3B) but zigbee2mqtt.io printed in the logs that the device was not supported.
So, I had to add the support manually using the instructions at | Zigbee2MQTT . Here is where the problems started.
After spend hours preparing the environment to run Zigbee2mqtt with debug support (inside my pi), figuring out how the internals of Zigbee2mqtt works and analizing the data send by the devices, I managed to read the temperature from the valves and send them to Home Assistant. But that’s it. Just reading the values.
The problem is that Tuya didn’t publish the specs of the Zigbee Profile they use. There are not to-zigbee examples for Tuya devices in the repo of Zigbee2mqtt neither. Actually, the support that Zigbee2mqtt has for Tuya doesn’t exceed 5 devices (counting a BlitzWolf device too which seems to use the tuya API).
The data these valves send to the zigbee gateway are very cryptic.
I will share you what I managed to figure out so far:
You need to read the instructions at How to support new devices to understand where to put these gists.
devices.js
// ...
// Siterwell
{
zigbeeModel: ['ivfvd7h'],
model: 'GS361A-H04',
vendor: 'Siterwell',
description: 'Radiator thermostat',
supports: 'temperature',
fromZigbee: [fz.tuya_temperature, fz.ignore_basic_report],
toZigbee: [],
}
// ...
converters/fromZigbee.js
// ...
tuya_temperature: {
cluster: 'manuSpecificTuyaDimmer',
type: 'commandGetData',
convert: (model, msg, publish, options, meta) => {
const key = msg.data.dp;
const val = msg.data.data;
if ((key === 515 || key === 514) && val[2] === 0) {
const temp_raw = val[3] || 0;
const temperature = (temp_raw / 10).toFixed(1);
return { temperature };
} else {
console.log(`NOT RECOGNIZED dp ${key}: ${JSON.stringify(val)}`)
}
},
},
// ...
homeassistant.js
// ...
// Map homeassitant configurations to devices.
const mapping = {
// ...
'GS361A-H04': [cfg.sensor_temperature],
};
// ...
With that configuration you will end with something this:
Now, the problem I’m facing is how to discover the structure of the command to tell the valves to change their temperature. And also, how to disable the fucking detect-open-window option. I already have sensors on the windows and I would like to handle that fearure in HA.
I search all over the Internet but I couldn’t find what I needed to manually implement the missing piece. So I finally bought a tuya zigbee gateway and, once it arrives and I have it paired with the valves, I will sniff their comunication to figure out how to emulate the same commands from Zigbee2mqtt.
Btw, the approach how Zigbee2mqtt offers to add custom devices is awful.