Koenkk / zigbee2mqtt

Zigbee 🐝 to MQTT bridge 🌉, get rid of your proprietary Zigbee bridges 🔨
https://www.zigbee2mqtt.io
GNU General Public License v3.0
11.5k stars 1.63k forks source link

[New device support]: Siemens RDZ100ZB #20132

Open JFFilip opened 7 months ago

JFFilip commented 7 months ago

Link

https://hit.sbt.siemens.com/RWD/app.aspx?RC=HQEU&lang=en&MODULE=Catalog&ACTION=ShowProduct&KEY=S55772-T113

Database entry

{"id":20,"type":"EndDevice","ieeeAddr":"0x0080e1250167790e","nwkAddr":61017,"manufId":4311,"manufName":"Siemens","powerSource":"Mains (single phase)","modelId":"RDZ100","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":769,"inClusterList":[0,3,513,1],"outClusterList":[16,25],"clusters":{"genPowerCfg":{"attributes":{"144":0,"65534":1,"batteryPercentageRemaining":192}},"hvacThermostat":{"attributes":{"80":0,"81":0,"82":0,"83":4,"84":0,"87":1,"88":0,"65534":1,"localTemp":2300,"pIHeatingDemand":0,"localTemperatureCalibration":5,"occupiedHeatingSetpoint":1800,"unoccupiedHeatingSetpoint":2000,"minHeatSetpointLimit":500,"maxHeatSetpointLimit":3000,"ctrlSeqeOfOper":2,"systemMode":4,"remoteSensing":-32768}},"genBasic":{"attributes":{"powerSource":1}}},"binds":[{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0xe0798dfffe9986d0","endpointID":1},{"cluster":513,"type":"endpoint","deviceIeeeAddress":"0xe0798dfffe9986d0","endpointID":1},{"cluster":0,"type":"endpoint","deviceIeeeAddress":"0xe0798dfffe9986d0","endpointID":1}],"configuredReportings":[{"cluster":1,"attrId":33,"minRepIntval":3600,"maxRepIntval":65000,"repChange":0,"manufacturerCode":null},{"cluster":513,"attrId":0,"minRepIntval":0,"maxRepIntval":3600,"repChange":10,"manufacturerCode":null},{"cluster":513,"attrId":18,"minRepIntval":0,"maxRepIntval":3600,"repChange":10,"manufacturerCode":null},{"cluster":513,"attrId":20,"minRepIntval":0,"maxRepIntval":3600,"repChange":10,"manufacturerCode":null},{"cluster":513,"attrId":8,"minRepIntval":0,"maxRepIntval":3600,"repChange":10,"manufacturerCode":null}],"meta":{}}},"appVersion":1,"stackVersion":1,"hwVersion":1,"dateCode":"010000","swBuildId":"0.00.04","zclVersion":1,"interviewCompleted":true,"meta":{"configured":-1688112927},"lastSeen":1702162086155,"defaultSendRequestWhen":"immediate"}

Comments

Hello, I would like to submit request for new device: Siemens RDZ100ZB smart thermostat.

I tried it on my own, but partly successful. I am reading basic battery and thermostat properties, but submiting new occupied_heating_setpoint was sometimes successful and sometimes zigbee returns timeout error.

Error change request:

Error 2023-12-10 00:27:49Publish 'set' 'occupied_heating_setpoint' to 'Siemens RDZ100ZB' failed: 'Error: Write 0x0080e1250167790e/1 hvacThermostat({"occupiedHeatingSetpoint":1800}, {"sendWhen":"immediate","timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"srcEndpoint":null,"reservedBits":0,"manufacturerCode":null,"transactionSequenceNumber":null,"writeUndiv":false}) failed (Timeout - 61017 - 1 - 139 - 513 - 4 after 10000ms)'

Communication snapshot where is most info from the device:

Debug 2023-12-09 23:31:02Received Zigbee message from 'Siemens RDZ100ZB', type 'attributeReport', cluster 'hvacThermostat', data '{"65534":1,"88":0}' from endpoint 1 with groupID 0
Debug 2023-12-09 23:31:31Received Zigbee message from 'Siemens RDZ100ZB', type 'attributeReport', cluster 'genPowerCfg', data '{"144":0,"65534":1}' from endpoint 1 with groupID 0
Debug 2023-12-09 23:32:43Received Zigbee message from 'Siemens RDZ100ZB', type 'attributeReport', cluster 'hvacThermostat', data '{"65534":1,"80":0,"81":0,"82":0,"83":4,"84":0,"87":1,"ctrlSeqeOfOper":2,"maxHeatSetpointLimit":3000,"minHeatSetpointLimit":500,"remoteSensing":-32768}' from endpoint 1 with groupID 0
Info 2023-12-09 23:32:43MQTT publish: topic 'zigbee2mqtt/Siemens RDZ100ZB', payload '{"88":1,"battery":96,"control_sequence_of_operation":"heating_only","linkquality":216,"local_temperature":23,"local_temperature_calibration":0.5,"max_heat_setpoint_limit":30,"min_heat_setpoint_limit":5,"occupancy":false,"occupied_heating_setpoint":18,"pi_heating_demand":0,"remote_sensing":{"local_temperature":"internally","occupancy":"internally","outdoor_temperature":"internally"},"system_mode":"heat","unoccupied_heating_setpoint":20}'
Debug 2023-12-09 23:33:02Received Zigbee message from 'Siemens RDZ100ZB', type 'attributeReport', cluster 'hvacThermostat', data '{"65534":1,"88":1}' from endpoint 1 with groupID 0

Device docs: https://sid.siemens.com/r/A6V13360586/21494412811_22237829771__en-US_21535228683

External converter

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const constants = require('zigbee-herdsman-converters/lib/constants');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;

/**
 * @type {import('zigbee-herdsman-converters').Definition}
 */
const definition = {
  zigbeeModel: ['RDZ100'],
  model: 'RDZ100',
  vendor: 'Siemens',
  description: 'Thermostat Siemens Connected Home RDZ100ZB',
  fromZigbee: [
    fz.battery,
    fz.thermostat,
  ],
  toZigbee: [
    tz.thermostat_local_temperature,
    tz.thermostat_local_temperature_calibration,
    tz.thermostat_remote_sensing,
    tz.thermostat_system_mode,
    tz.thermostat_occupied_heating_setpoint,
    tz.thermostat_unoccupied_heating_setpoint,
    tz.thermostat_pi_heating_demand,
  ],
  exposes: [
    e.battery(),
    e.climate()
      .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5)
      .withSetpoint('unoccupied_heating_setpoint', 5, 30, 0.5)
      .withSystemMode(['off', 'heat'])
      .withLocalTemperature()
      .withLocalTemperatureCalibration(-2.5, 2.5, 0.5)
      .withControlSequenceOfOperation(['heating_only'])
      .withPiHeatingDemand(),
  ],
  configure: async (device, coordinatorEndpoint, logger) => {
    const endpoint = device.getEndpoint(1);
    const clusters = ['genBasic', 'genPowerCfg', 'hvacThermostat'];
    await reporting.bind(endpoint, coordinatorEndpoint, clusters);

    await reporting.batteryPercentageRemaining(endpoint);
    await reporting.thermostatTemperature(endpoint);
    await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
    await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
    await reporting.thermostatPIHeatingDemand(endpoint);
  },
};

module.exports = definition;

Supported color modes

No response

Color temperature range

No response

devkot1 commented 6 months ago

These new devices from Siemens look promising. Please keep us updated

JFFilip commented 6 months ago

For anyone wondering how my convertor works, I am using it with home assistant for about a week with no issues. Errors was in my opinion tied to rapid temperature change I did during testing.

devkot1 commented 6 months ago

For anyone wondering how my convertor works, I am using it with home assistant for about a week with no issues. Errors was in my opinion tied to rapid temperature change I did during testing.

Good to hear! I am planning to buy and use this thermostat with my sonoff zigbee 3.0 usb -e dongle in HA. Did you encounter any problems when pair the device? Also, is there a way to select TPI mode (slow/medium/fast) or desired 2-position via zigbee2mqtt?

JFFilip commented 6 months ago

I am planning to buy and use this thermostat with my sonoff zigbee 3.0 usb -e dongle in HA - I have same dongle and setup. Did you encounter any problems when pair the device? - Pairing device was without problem. Also, is there a way to select TPI mode (slow/medium/fast) or desired 2-position via zigbee2mqtt? - No, the converter does not cover this yet. My guess is that it uses default TPI slow mode (it is noted in docs as default value).

From docs it is definitely possible to change these settings over zigbee (it is even mandatory, because you can not change these on device by hand), but siemens have it hidden under custom keys in communication, so it is impossible to decifer it without help.

devkot1 commented 6 months ago

Since there are five modes of operation (Control behavior: 2-Pos 1K, 2-Pos 0.3K, TPI Slow, TPI Medium, TPI fast) they could be enumerated as 0,1,2,3 and 4. The default, TPI Slow, is third in the list (2) which is the value of "ctrlSeqeOfOper" in your trace. Just a wild guess...

devkot1 commented 5 months ago

For anyone wondering how my convertor works, I am using it with home assistant for about a week with no issues. Errors was in my opinion tied to rapid temperature change I did during testing.

Hi, I am using the same model for a month now via HA and it works fine. The only issue that I have is that every about 2 weeks the display becomes unresponsive, while the thermostat operates fine via zigbee. Removing and re-inserting the batteries fixes the display. Have you encountered a similar issue? The firmware version (sw_build_id) is 0.00.04.

JFFilip commented 5 months ago

Hi, no, I do not, but I barely touch the device, mostly change values remotely.

VladislavVesely commented 1 month ago

Any progress on this topic?