Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[New device support]: Thermostat Avatto TS0601 _TZE204_lzriup1j #19459

Closed
poky0611 opened this issue Oct 28, 2023 · 38 comments
Closed

[New device support]: Thermostat Avatto TS0601 _TZE204_lzriup1j #19459

poky0611 opened this issue Oct 28, 2023 · 38 comments
Labels
new device support New device support request

Comments

@poky0611
Copy link

Link

https://www.aliexpress.com/item/1005004149361837.html?spm=a2g0o.productlist.main.7.33b574e0fKVUhl&algo_pvid=4d80c551-5cbb-4ef1-a0a9-2e2b1390c7b1&aem_p4p_detail=202310280653406094599874110440001983376&algo_exp_id=4d80c551-5cbb-4ef1-a0a9-2e2b1390c7b1-3&pdp_npi=4%40dis%21CZK%211055.80%21686.34%21%21%2144.18%21%21%40210384db16985012208764468e5c35%2112000033940405467%21sea%21CZ%210%21AB&curPageLogUid=4Gk4YmDj1Uf6&search_p4p_id=202310280653406094599874110440001983376_4

Database entry

{"id":30,"type":"Router","ieeeAddr":"0xa4c138ff9bedf68f","nwkAddr":13877,"manufId":4417,"manufName":"_TZE204_lzriup1j","powerSource":"Mains (single phase)","modelId":"TS0601","epList":[1,242],"endpoints":{"1":{"profId":260,"epId":1,"devId":81,"inClusterList":[4,5,61184,0],"outClusterList":[25,10],"clusters":{"genBasic":{"attributes":{"65503":"���,i���,i���,i���,i���,i","65506":56,"65508":0,"stackVersion":0,"dateCode":"","appVersion":74}}},"binds":[],"configuredReportings":[],"meta":{}},"242":{"profId":41440,"epId":242,"devId":97,"inClusterList":[],"outClusterList":[33],"clusters":{},"binds":[],"configuredReportings":[],"meta":{}}},"appVersion":74,"stackVersion":0,"hwVersion":1,"dateCode":"","zclVersion":3,"interviewCompleted":true,"meta":{},"lastSeen":1698500204419,"defaultSendRequestWhen":"immediate"}

Comments

Hello,

I bought wall thermostat Avatto in Zigbee2Mqtt it shows as TS0601 _TZE204_lzriup1j and is unsupported. Can you please help me to make it work?

Thank You!
Robert Pokorný

External converter

No response

Supported color modes

No response

Color temperature range

No response

@poky0611 poky0611 added the new device support New device support request label Oct 28, 2023
@roon7
Copy link

roon7 commented Oct 31, 2023

Here is what I use now temporary, (saved in zigbe2mqtt folder TZE204_lzriup1.js)
it's for sure not perfect but most important settings are working.

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 extend = require('zigbee-herdsman-converters/lib/extend');
const utils = require('zigbee-herdsman-converters/lib/utils');
const ota = require('zigbee-herdsman-converters/lib/ota');
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const e = exposes.presets;
const ea = exposes.access;
const globalStore = require('zigbee-herdsman-converters/lib/store');

const valueConverter = {
systemMode: tuya.valueConverterBasic.lookup({'heat': true, 'off': false}),
runningState: tuya.valueConverterBasic.lookup({'heat': 1, 'idle': 0}),
preset: tuya.valueConverterBasic.lookup({'manual': 0, 'program': 1}),
backlight: tuya.valueConverterBasic.lookup({'off': 0, 'low': 1, 'medium': 2, 'high': 3}),
sound: tuya.valueConverterBasic.lookup({'off': 0, 'on': 1}),
divideBy10: tuya.valueConverterBasic.divideBy(10),
};

const definition = {
// Since a lot of TuYa devices use the same modelID, but use different datapoints
// it's necessary to provide a fingerprint instead of a zigbeeModel
fingerprint: [
{
// The model ID from: Device with modelID 'TS0601' is not supported
// You may need to add \u0000 at the end of the name in some cases
modelID: 'TS0601',
// The manufacturer name from: Device with modelID 'TS0601' is not supported.
manufacturerName: '_TZE204_lzriup1j',
},
],
model: 'TS0601_new',
vendor: 'TuYa',
description: 'Fill in a description of the device here',
fromZigbee: [tuya.fz.datapoints],
toZigbee: [tuya.tz.datapoints],
//onEvent: tuya.onEventSetTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
configure: tuya.configureMagicPacket,
exposes: [
exposes.climate().withSetpoint('current_heating_setpoint', 5, 60, 0.5, ea.STATE_SET)
.withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-9.9, 9.9, 0.1, ea.STATE_SET)
.withSystemMode(['off', 'heat'], ea.STATE_SET).withRunningState(['idle', 'heat'], ea.STATE)
.withPreset(['manual', 'program'], ea.STATE_SET),
exposes.enum('backlight', ea.STATE_SET, ['off', 'low', 'medium', 'high'])
.withDescription('Screen brightness'),
e.child_lock(),
exposes.binary('sound', ea.STATE_SET, 'ON', 'OFF')
.withDescription('Switches beep sound when interacting with thermostat'),
exposes.binary('frost', ea.STATE_SET, 'ON', 'OFF')
.withDescription('Antifreeze function'),
// <- added the humdity expose
// Here you should put all functionality that your device exposes
],
meta: {
// All datapoints go in here
tuyaDatapoints: [
[1, 'system_mode', valueConverter.systemMode],
[19, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration1],
[4, 'preset', tuya.valueConverterBasic.lookup(
{'manual': tuya.enum(0), 'program': tuya.enum(1)})],
[101, 'running_state', valueConverter.runningState],
[2, 'current_heating_setpoint', valueConverter.divideBy10],
[15, 'upper_temperature', tuya.valueConverterBasic.raw],
[3, 'local_temperature', valueConverter.divideBy10],
[15, 'heating_temperature_limit', valueConverter.raw],
[9, 'child_lock', tuya.valueConverter.lockUnlock],
[102, 'flost', tuya.valueConverter.onOff],
[105, 'sound', tuya.valueConverter.onOff],
[110, 'brightness_state', tuya.valueConverter.backlightMode],
],
},
};

module.exports = definition;

@poky0611
Copy link
Author

poky0611 commented Nov 2, 2023

Everything works fine now with your JS, thank you so much, you are the best!

@poky0611 poky0611 closed this as completed Nov 2, 2023
@Koenkk
Copy link
Owner

Koenkk commented Nov 3, 2023

@roon7 would you mind to make a pull request such that this code is integrated?

@roon7
Copy link

roon7 commented Nov 3, 2023

Hi @Koenkk
Unfortunately this is not ready, missing many settings: sensor, schedule, week, brightness_state, sound, frost_protection, factory_reset, heating_temp_limit, deadzone_temperature.
I couldn't devote too much time to it, so I focused on basic settings such as basic temperature control. The rest didn't really want to work for me.
This TZE204_lzriup1 is selled as Avatto ZWT100 3A, so I think it's very similar or even the same as
Beok TGR85-ZB, AVATTO ZWT-100-16A www.zigbee2mqtt.io/devices/X5H-GB-B.html
This one is supported now, but it's hard for me to check, as I coudn't find code for it.

@MrEcosse
Copy link

MrEcosse commented Dec 3, 2023

I am working on a version for this. I have decoded all of the endpoints now. Some will be useful for other TStats where folks have been unable to determine what some of them do. When I am a little further along I will post an update.

@vmrk00
Copy link

vmrk00 commented Dec 3, 2023

I tried what @roon7 suggested, but it didn't work for me. What could I have done wrong? Thanks!

@roon7
Copy link

roon7 commented Dec 3, 2023

Hi vmrk00,
You have to copy all code starting from first line "const fz = require('zigbee-herdsman-converters/converters/fromZigbee');"
to the end and save as txt file TZE204_lzriup1.js into folder zigbee2mqtt usualy located in folder config.
Best way to do is use Filebrowser add-on, then location is /homeassistant/zigbee2mqtt/ you can also review file if everything is OK.
Important is that your device has to be recognized as TZE204_lzriup1 in Zigbee2Mqtt, otherwize it will not work.
Of course you have to do it after device is registered and shows as not recognized.
Do you have latest version of the HA and Zigbee2Mqtt?

@vmrk00
Copy link

vmrk00 commented Dec 3, 2023

Hi @roon7 ,

I think I did everything as you said. I'll attach some pictures. Did I still mess something up somewhere?

image

image

@roon7
Copy link

roon7 commented Dec 3, 2023

Hi everything looks good,
it's my mistake, I forgot that you have add to the configuration.yaml existing in zigbee2mqtt folder lines:
external_converters:

  • TZE204_lzriup1.js
    then it will works for sure.

@roon7
Copy link

roon7 commented Dec 3, 2023

image

@vmrk00
Copy link

vmrk00 commented Dec 3, 2023

It's works! Thank you, you are awesome!

@MrEcosse
Copy link

MrEcosse commented Dec 4, 2023

I've decoded all of the endpoints and have tried to add the code to handle them. I have them all appearing on screen but when I attempt to change any of the new ones I get an error such as No converter available for 'sound' ("OFF") As this is happening for all the new items I have added I must be doing something fundamentally wrong. Any help gratefully appreciated.

The items with an issue are 105 - Sound, 106 - Sensor Choice, 108 - Sensor Limit, 111 - Inverse

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 extend = require('zigbee-herdsman-converters/lib/extend');
const utils = require('zigbee-herdsman-converters/lib/utils');
const ota = require('zigbee-herdsman-converters/lib/ota');
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const e = exposes.presets;
const ea = exposes.access;
const globalStore = require('zigbee-herdsman-converters/lib/store');

//const tzDataPoints = {
    //...tuya.tzDataPoints,
    //keys: ['system_mode', 'running_state', 'current_heating_setpoint', 'local_temperature'],
//}

const valueConverter = {
    systemMode: tuya.valueConverterBasic.lookup({'heat': true, 'off': false}),	
    runningState: tuya.valueConverterBasic.lookup({'heat': true, 'idle': false}),
    divideBy10: tuya.valueConverterBasic.divideBy(10),
};
const definition = {
        fingerprint: tuya.fingerprint('TS0601', ['_TZE204_lzriup1j']),
        model: 'ZWT100-16A',
        vendor: 'TuYa',
        description: 'Avatto wall thermostat for electric heating',
        onEvent: tuya.onEvent({timeStart: '1970'}),
        fromZigbee: [tuya.fz.datapoints],
        toZigbee: [tuya.tz.datapoints],
        whiteLabel: [{vendor: 'AVATTO', model: 'ZWT-100-16A'}],
        configure: tuya.configureMagicPacket,
        exposes: [
            e.binary('factory_reset', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Full factory reset, use with caution!'),
            e.binary('sound', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Switches beep sound when interacting with thermostat'),
            e.child_lock(),
            e.climate()
                .withSystemMode(['off', 'heat'], ea.STATE_SET)
                .withPreset(['auto', 'manual', 'temporary_manual'])
                .withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
                .withRunningState(['idle', 'heat'], ea.STATE)
                .withLocalTemperature(ea.STATE)
                .withLocalTemperatureCalibration(-9.9, 9.9, 0.1, ea.STATE_SET),
            e.binary('frost_protection', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Antifreeze function'),
            e.max_temperature_limit()
                .withUnit('°C')
                .withValueMin(15)
                .withValueMax(90)
                .withValueStep(0.5)
                .withPreset('default', 60, 'Default value')
                .withDescription('Maximum upper temperature'),
             e.numeric('sensor_limit', ea.STATE_SET)
                .withUnit('°C')
                .withValueMin(35)
                .withValueMax(60)
                .withValueStep(1)
                .withPreset('default', 60, 'Default value')
                .withDescription('Floor sensor temperature limit'),
            e.numeric('deadzone_temperature', ea.STATE_SET)
                .withUnit('°C')
                .withValueMax(10)
                .withValueMin(0.5)
                .withValueStep(0.5)
                .withPreset('default', 1, 'Default value')
                .withDescription('The delta between local_temperature and current_heating_setpoint to trigger Heat'),
            e.binary('inverse', ea.STATE_SET, true, false)
                .withDescription('Invert the main output relay'),
            e.enum('sensor_choice', ea.STATE_SET, ['inside', 'outside', 'all'])
                .withDescription('Which temperature sensor to use'),		
            e.enum('backlight_mode', ea.STATE_SET, ['off', 'low', 'medium', 'high'])
                .withDescription('Intensity of the backlight'),
            e.enum('working_day', ea.STATE_SET, ['disabled', '6-1', '5-2', '7'])
                .withDescription('Workday setting'),
            e.text('schedule_weekday', ea.STATE_SET).withDescription('Workdays (6 times `hh:mm/cc.c°C`)'),
            e.text('schedule_holiday', ea.STATE_SET).withDescription('Holidays (2 times `hh:mm/cc.c°C)`'),
        ],
        meta: {
            tuyaDatapoints: [
                [1, 'system_mode', tuya.valueConverterBasic.lookup({'heat': true, 'off': false})],
                [2, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
                [3, 'local_temperature', tuya.valueConverter.divideBy10],
                [4, 'preset', tuya.valueConverterBasic.lookup({'manual': tuya.enum(0), 'auto': tuya.enum(1), 'temporary_manual': tuya.enum(2)})],
                [9, 'child_lock', tuya.valueConverter.lockUnlock],
                [11, 'faultalarm', tuya.valueConverter.raw],
                [15, 'max_temperature_limit', tuya.valueConverter.divideBy10],
                [19, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration3],
                [101, 'running_state', tuya.valueConverterBasic.lookup({'heat': tuya.enum(1), 'idle': tuya.enum(0)})],
                [102, 'frost_protection', tuya.valueConverter.onOff],
                [103, 'factory_reset', tuya.valueConverter.onOff],
                [104, 'working_day', tuya.valueConverter.workingDay],
                [105, 'sound', tuya.valueConverter.onOff], 
                [106, 'sensor_choice', tuya.valueConverterBasic.lookup({'inside': tuya.enum(0), 'outside': tuya.enum(1), 'all': tuya.enum(2)})],    
                [107, 'deadzone_temperature', tuya.valueConverter.divideBy10],
                [108, 'sensor_limit', tuya.valueConverter.divideBy10], 
                [109, null, tuya.valueConverter.ZWT198_schedule],
                [109, 'schedule_weekday', tuya.valueConverter.ZWT198_schedule],
                [109, 'schedule_holiday', tuya.valueConverter.ZWT198_schedule],
                [110, 'backlight_mode', tuya.valueConverter.backlightModeOffLowMediumHigh],
                [111, 'inverse', tuya.valueConverter.inverse], 


		// Getting No converter avaialble errors for 105, 106, 108 and 111
		
                // These are the schedule values in bytes, 8 periods in total (4 bytes per period).
                // For each period:
                // 1st byte: hour
                // 2nd byte: minute
                // 3rd, 4th bytes: temperature multiplied by 10
                // On the device last 2 periods are ignored if schedule_mode is 7day. When schedule_mode is disabled,
                // scheduling can't be configured at all on the device.
                // For example, if schedule_mode is weekday/sat+sun and this byte array is received:
                // [6,10,1,144,8,10,0,170,11,40,0,170,12,40,0,170,17,10,0,230,22,10,0,170,8,5,0,200,23,0,0,160]
                // Then the schedule is:
                // Mon-Fri: 6:10 --> 40C, 8:10 --> 17C, 11:40 --> 17C, 12:40 --> 17C, 17:10 --> 23C, 22:10 --> 17C
                // Sat-Sun: 8:05 --> 20C, 23:00 --> 16C
            ],
        },
    };


module.exports = definition;

@vmrk00
Copy link

vmrk00 commented Dec 7, 2023

Hi @roon7 ,
Again me. Is it possible that since I set this up, my other devices aren't connecting to Zigbee2MQTT anymore?
All of other devices disabled and don't communicate with my HA.

@roon7
Copy link

roon7 commented Dec 7, 2023

Hi @vmrk00
it is not possible for this change to have this effect, so may be you did some changes in config file by miskate.
Do you have copy of the config file before you make change, if then try to compate it.
You can also undo the changes you made to add the thermostat and see if it changes anything.

@MrEcosse
Copy link

MrEcosse commented Dec 8, 2023

This is the completed converter with all the options now available such as the key sound, the ability to choose the internal or external (floor) sensor, and the ability to set the maximum temperature of the floor.

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 extend = require('zigbee-herdsman-converters/lib/extend');
const utils = require('zigbee-herdsman-converters/lib/utils');
const ota = require('zigbee-herdsman-converters/lib/ota');
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const e = exposes.presets;
const ea = exposes.access;
const globalStore = require('zigbee-herdsman-converters/lib/store');

const valueConverter = {
    systemMode: tuya.valueConverterBasic.lookup({'heat': true, 'off': false}),	
    runningState: tuya.valueConverterBasic.lookup({'heat': true, 'idle': false}),
    divideBy10: tuya.valueConverterBasic.divideBy(10),
};



const definition = {
        fingerprint: tuya.fingerprint('TS0601', ['_TZE204_lzriup1j']),
        model: 'ZWT100-16A',
        vendor: 'TuYa',
        description: 'Avatto wall thermostat for electric heating',
        onEvent: tuya.onEvent({timeStart: '1970'}),
        fromZigbee: [tuya.fz.datapoints],
        toZigbee: [{...tuya.tz.datapoints, key: [...tuya.tz.datapoints.key, 'key_sound', 'sensor_choice', 'sensor_limit', 'inverse']}],
        whiteLabel: [{vendor: 'AVATTO', model: 'ZWT-100-16A'}],
        configure: tuya.configureMagicPacket,
        exposes: [
            e.binary('factory_reset', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Full factory reset, use with caution!'),
            e.binary('key_sound', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Switches sound when interacting with thermostat'),
            e.child_lock(),
            e.climate()
                .withSystemMode(['off', 'heat'], ea.STATE_SET)
                .withPreset(['auto', 'manual', 'temporary_manual'])
                .withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
                .withRunningState(['idle', 'heat'], ea.STATE)
                .withLocalTemperature(ea.STATE)
                .withLocalTemperatureCalibration(-9.9, 9.9, 0.1, ea.STATE_SET),
            e.binary('frost_protection', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Antifreeze function'),
            e.max_temperature_limit()
                .withUnit('°C')
                .withValueMin(15)
                .withValueMax(90)
                .withValueStep(1)
                .withPreset('default', 60, 'Default value')
                .withDescription('Maximum upper temperature'),
             e.numeric('sensor_limit', ea.STATE_SET)
                .withUnit('°C')
                .withValueMin(35)
                .withValueMax(60)
                .withValueStep(1)
                .withPreset('default', 60, 'Default value')
                .withDescription('Floor sensor temperature limit'),
            e.numeric('deadzone_temperature', ea.STATE_SET)
                .withUnit('°C')
                .withValueMax(10)
                .withValueMin(0.5)
                .withValueStep(0.5)
                .withPreset('default', 1, 'Default value')
                .withDescription('The delta between local_temperature and current_heating_setpoint to trigger Heat'),
            e.binary('inverse', ea.STATE_SET, 'ON', 'OFF')
                .withDescription('Primary and secondary reverse selection.  ON is Auxillary reversal'),
            e.enum('sensor_choice', ea.STATE_SET, ['inside', 'outside', 'all'])
                .withDescription('Which temperature sensor to use'),		
            e.enum('backlight_mode', ea.STATE_SET, ['off', 'low', 'medium', 'high'])
                .withDescription('Intensity of the backlight'),
            e.enum('working_day', ea.STATE_SET, ['disabled', '5-2', '6-1', '7'])
                .withDescription('Workday setting'),
            e.text('schedule_weekday', ea.STATE_SET).withDescription('Workdays (6 times `hh:mm/cc.c°C`)'),
            e.text('schedule_holiday', ea.STATE_SET).withDescription('Holidays (2 times `hh:mm/cc.c°C)`'),
        ],
        meta: {
            tuyaDatapoints: [
                [1, 'system_mode', tuya.valueConverterBasic.lookup({'heat': true, 'off': false})],
                [2, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
                [3, 'local_temperature', tuya.valueConverter.divideBy10],
                [4, 'preset', tuya.valueConverterBasic.lookup({'manual': tuya.enum(0), 'auto': tuya.enum(1), 'temporary_manual': tuya.enum(2)})],
                [9, 'child_lock', tuya.valueConverter.lockUnlock],
                [11, 'faultalarm', tuya.valueConverter.raw],
                [15, 'max_temperature_limit', tuya.valueConverter.divideBy10],
                [19, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration3],
                [101, 'running_state', tuya.valueConverterBasic.lookup({'heat': tuya.enum(1), 'idle': tuya.enum(0)})],
                [102, 'frost_protection', tuya.valueConverter.onOff],
                [103, 'factory_reset', tuya.valueConverter.onOff],
                //[104, 'working_day', tuya.valueConverter.workingDay],
		[104, 'working_day', tuya.valueConverterBasic.lookup({'disabled': tuya.enum(0), '5-2': tuya.enum(1), '6-1': tuya.enum(2), '7': tuya.enum(3)})],  
		[105, 'key_sound', tuya.valueConverterBasic.lookup({'ON': true, 'OFF': false})],
                [106, 'sensor_choice', tuya.valueConverterBasic.lookup({'inside': tuya.enum(0), 'outside': tuya.enum(1), 'all': tuya.enum(2)})],    
                [107, 'deadzone_temperature', tuya.valueConverter.divideBy10],
                [108, 'sensor_limit', tuya.valueConverter.raw], 
                [109, null, tuya.valueConverter.ZWT198_schedule],
                [109, 'schedule_weekday', tuya.valueConverter.ZWT198_schedule],
                [109, 'schedule_holiday', tuya.valueConverter.ZWT198_schedule],
                [110, 'backlight_mode', tuya.valueConverter.backlightModeOffLowMediumHigh],
                [111, 'inverse', tuya.valueConverter.onOff], 

		
                // These are the schedule values in bytes, 8 periods in total (4 bytes per period).
                // For each period:
                // 1st byte: hour
                // 2nd byte: minute
                // 3rd, 4th bytes: temperature multiplied by 10
                // On the device last 2 periods are ignored if schedule_mode is 7day. When schedule_mode is disabled,
                // scheduling can't be configured at all on the device.
                // For example, if schedule_mode is weekday/sat+sun and this byte array is received:
                // [6,10,1,144,8,10,0,170,11,40,0,170,12,40,0,170,17,10,0,230,22,10,0,170,8,5,0,200,23,0,0,160]
                // Then the schedule is:
                // Mon-Fri: 6:10 --> 40C, 8:10 --> 17C, 11:40 --> 17C, 12:40 --> 17C, 17:10 --> 23C, 22:10 --> 17C
                // Sat-Sun: 8:05 --> 20C, 23:00 --> 16C
            ],
        },
    };


module.exports = definition;

@roon7
Copy link

roon7 commented Dec 8, 2023

Looks like everything works now, thank you @MrEcosse
Great job!

@MrEcosse
Copy link

MrEcosse commented Dec 8, 2023

No problem

MrEcosse added a commit to MrEcosse/zigbee-herdsman-converters that referenced this issue Dec 8, 2023
@tispokes
Copy link

With ZHA it's possible to sync time/weekday with HA, seems like this - via z2m - does not?

@MrEcosse
Copy link

The time does synchronise. You may need to wait until the following day before the day of the week is shown correctly - that was my experience.

@tispokes
Copy link

tispokes commented Dec 12, 2023

Okay thanks. Also there are some writing mistakes (copied #19459 (comment) as it is the latest post) according to the temperature unit
image
But it's not in the commit. So fine (y)

@tispokes
Copy link

tispokes commented Dec 20, 2023

@MrEcosse another issue I've to address:
Setting the current_heating_setpoint with 0.5 steps is possible on the device but not via z2m. When you set a x.5 value, the value step back to 0 degrees.
Do you issuing the same behaviour?

@MrEcosse
Copy link

Working OK for me on both my stats. Changed set point from the HA Gui to 18.5 and that's what the Stat now shows

@tispokes
Copy link

Interesting, maybe it's my Sonoff Plus dongle (ERF32)?

@MrEcosse
Copy link

Can you see anything in the MQTT messages when you change the temp? This is the message I see...

{"backlight_mode":"medium","child_lock":"UNLOCK","current_heating_setpoint":18.5,"deadzone_temperature":0.5,"factory_reset":"OFF","faultalarm":0,"frost_protection":"ON","inverse":"OFF","key_sound":"ON","linkquality":72,"local_temperature":20,"local_temperature_calibration":1,"max_temperature_limit":30,"preset":"manual","running_state":"idle","schedule_holiday":"08:00/20.0°C 23:00/14.0°C","schedule_weekday":"06:00/19.0°C 08:00/16.0°C 11:30/17.0°C 12:30/16.0°C 17:00/20.0°C 22:00/14.0°C","sensor_choice":"outside","sensor_limit":36,"system_mode":"heat","working_day":"5-2"}

@MrEcosse
Copy link

And on my other battery one I get:

{"backlight_mode":"high","child_lock":"UNLOCK","current_heating_setpoint":14.5,"deadzone_temperature":0.5,"factory_reset":"OFF","frost_protection":"ON","linkquality":142,"local_temperature":17.3,"local_temperature_calibration":0,"max_temperature_limit":30,"preset":"manual","running_state":"idle","schedule_holiday":"08:00/20.0°C 22:00/14.0°C","schedule_weekday":"06:00/19.0°C 08:30/16.0°C 11:30/18.5°C 13:30/16.0°C 16:00/20.0°C 22:00/14.0°C","system_mode":"heat","working_day":"5-2"}

@tispokes
Copy link

Hey, I'm pretty sorry, I was on the wrong device in my head. ZWT100 works just fine. Thanks for the effort. BHT6 makes these problems.

@tispokes
Copy link

@MrEcosse have you tested 0 degree deadzone? Is this working? Because the lag between the stopping of heating and stopping of radiating heat is about 1 hour in my case. I would even prefer negative settings, for the upper limit.

@MrEcosse
Copy link

I'm not sure the device itself supports a zero deadzone. IIRC it wasn't possible to set it so low on the Tuya app. (I tend to pair with Tuya first just so I can see what capabilities I need to get working in HA). I guess you are using underfloor heating?

@Akrotkiv
Copy link

Hi, I am new in HA and its workaround. I want to use thermostat:
BEOK TDR-89B-ZB-EP
It is represented as model TS0601 manufacturer _TZE204_lzriup1j

I tried all above, but doesn't work for me.
Should I do something else because of other "brand" or should it work?
I thing it's the same device as BEOK TGR-85 which was supported already (I think)
Product page: https://www.beok-controls.com/room-thermostat/underfloor-heating-thermostat/zigbee-underfloor-heating-thermostat.html

@tispokes
Copy link

Hey @Akrotkiv have you added the JavaScript file for this device (see screenshot attached)

The content you can use from this: #20072 (comment)

It's a bit newer. But you have to replace the Å characters with spaces, see my screenshot some posts above this post.

Screenshot_20231223-153754

You can adjust the Name in line 25
After adding this file you have to add it into the z2m config like this (line 28 and 29) and the reboot HA

Screenshot_20231223-154446

@Akrotkiv
Copy link

Thanks @tispokes
Yes I add .js and edited config. (see screenshots).

I'm not sure with "underscore" in begining and "j" in the end of name/filename.js
ha-4
ha-3

@roon7
Copy link

roon7 commented Dec 23, 2023

Hi @Akrotkiv,
I'm not sure if this could have impact .. but I have space before TZE204 in config
image
btw. file name isn't important, just has to be the same as used in config and end with .js

@tispokes
Copy link

@Akrotkiv I've recognized the space as well and never tried it without a space between dash and file name. Used yaml at work a lot, but never tested w/o the space.

You can use the simpler file editor with included syntax check.

@Akrotkiv
Copy link

The space doesn't solve anything.
If filename is not important, what defines exactly this device? fingertip?
Can I write "anything" (my device ID) into:
model:
vendor:
whitelabel:

@roon7
Copy link

roon7 commented Dec 23, 2023

fingerprint: tuya.fingerprint('TS0601', ['_TZE204_lzriup1j']) this define device.
If you add new device and it's not recognized you can see in logs it fingerprint like TZE204_lzriup1j in this particular situation.
I have no idea why it's not working for you.
Did you check logs is there any information?

@Akrotkiv
Copy link

Thanks @roon7 , @tispokes for your care. ;)
I just realized, that In was using an "edge" addon. Uninstalled, installed regular Zigbee2mqtt addon, and device was recognised as supported.
Wish you all Merry Christmas day,

@tispokes
Copy link

You're welcome and you too

@ljakab
Copy link

ljakab commented Jan 13, 2024

I know that this issue is close, but I have the gas version of the exact same thermostat, model number ZWT-BH-3A. @MrEcosse, since I'm a newbie, how would I go about discovering the differences needed? There is no floor temperature for example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new device support New device support request
Projects
None yet
Development

No branches or pull requests

8 participants