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]: iGET HOME TS10 Thermostatic Radiator Valve - thermostatic head, Zigbee 3.0, LED LCD #24793

Open
Jozefik opened this issue Nov 16, 2024 · 2 comments
Labels
new device support New device support request

Comments

@Jozefik
Copy link

Jozefik commented Nov 16, 2024

Link

https://gear-up.me/usd/iget-home-ts10-thermostatic-radiator-valve-thermostatic-head-zigbee-3-0-led-lcd.html

Database entry

{"id":35,"type":"EndDevice","ieeeAddr":"0x3c2ef5fffe9ecad0","nwkAddr":28075,"manufId":4098,"manufName":"_TZE200_ch3t1xbl","powerSource":"Battery","modelId":"TS0601","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":81,"inClusterList":[0,4,5,61184],"outClusterList":[25,10],"clusters":{"genBasic":{"attributes":{"modelId":"TS0601","manufacturerName":"_TZE200_ch3t1xbl","stackVersion":0,"dateCode":""}}},"binds":[],"configuredReportings":[],"meta":{}}},"appVersion":69,"stackVersion":0,"hwVersion":1,"dateCode":"","zclVersion":3,"interviewCompleted":true,"meta":{},"lastSeen":1731762467694}

Zigbee2MQTT version

1.41.0

Comments

I have tried to model it using other similar thermostatic valves but it does not work.

External definition

const definition = {
    zigbeeModel: ['TS0601'],
    model: 'TS0601',
    vendor: '_TZE200_ch3t1xbl',
    description: 'Automatically generated definition',
    extend: [],
    meta: {},
};

module.exports = definition;

What does/doesn't work with the external definition?

Nothing is working. It says "device not supported" message.

@Jozefik Jozefik added the new device support New device support request label Nov 16, 2024
@Jozefik
Copy link
Author

Jozefik commented Nov 17, 2024

Okay i have managed to make it work using this External Definition:

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

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: '_TZE200_ch3t1xbl',
        },
    ],
    model: 'iGET Home TS10',
    vendor: 'iGET Home',
    description: 'Thermostat radiator valve',
    fromZigbee: [tuya.fz.datapoints],
    toZigbee: [tuya.tz.datapoints],
    onEvent: tuya.onEventSetLocalTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
    configure: tuya.configureMagicPacket,
    exposes: [
        e.battery_low(),
        e.child_lock(),
        e.open_window(),
        e.open_window_temperature().withValueMin(5).withValueMax(30),
        e.comfort_temperature().withValueMin(5).withValueMax(30),
        e.eco_temperature().withValueMin(5).withValueMax(30),
        e
            .climate()
            .withPreset(['auto', 'manual', 'holiday'])
            .withLocalTemperatureCalibration(-5, 5, 0.1, ea.STATE_SET)
            .withLocalTemperature(ea.STATE)
            .withSetpoint('current_heating_setpoint', 5, 30, 0.5, ea.STATE_SET)
            .withSystemMode(['off', 'heat'], ea.STATE_SET, 'Only for Homeassistant'),
        e
            .binary('heating_stop', ea.STATE_SET, 'ON', 'OFF')
            .withDescription(
                'Battery life can be prolonged' +
                    ' by switching the heating off. To achieve this, the valve is closed fully. To activate the ' +
                    'heating stop, the device display "HS", press the pair button to cancel.',
            ),
        tuya.exposes.frostProtection(
            'When Anti-Freezing function is activated, the temperature in the house is kept ' +
                'at 8 °C, the device display "AF".press the pair button to cancel.',
        ),
        e
            .numeric('boost_timeset_countdown', ea.STATE_SET)
            .withUnit('s')
            .withDescription(
                'Setting ' +
                    'minimum 0 - maximum 465 seconds boost time. The boost (â¨) function is activated. The remaining ' +
                    'time for the function will be counted down in seconds ( 465 to 0 ).',
            )
            .withValueMin(0)
            .withValueMax(465),
        e.holiday_temperature().withValueMin(5).withValueMax(30),
        e
            .text('holiday_start_stop', ea.STATE_SET)
            .withDescription(
                'The holiday mode will automatically start ' +
                    'at the set time starting point and run the holiday temperature. Can be defined in the following format: ' +
                    '`startYear/startMonth/startDay startHours:startMinutes | endYear/endMonth/endDay endHours:endMinutes`. ' +
                    'For example: `2022/10/01 16:30 | 2022/10/21 18:10`. After the end of holiday mode, it switches to "auto" ' +
                    'mode and uses schedule.',
            ),
        e
            .enum('working_day', ea.STATE_SET, ['mon_sun', 'mon_fri+sat+sun', 'separate'])
            .withDescription(
                '`mon_sun` ' +
                    '- schedule for Monday used for each day (define it only for Monday). `mon_fri+sat+sun` - schedule for ' +
                    'workdays used from Monday (define it only for Monday), Saturday and Sunday are defined separately. `separate` ' +
                    '- schedule for each day is defined separately.',
            ),
        e
            .composite('schedule', 'schedule', ea.SET)
            .withFeature(e.enum('week_day', ea.SET, ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']))
            .withFeature(e.text('schedule', ea.SET))
            .withDescription(
                'Schedule will work with "auto" preset. In this mode, the device executes ' +
                    'a preset week programming temperature time and temperature. Before using these properties, check `working_day` ' +
                    'property. Each day can contain up to 10 segments. At least 1 segment should be defined. Different count of segments ' +
                    'can be defined for each day, e.g., 3 segments for Monday, 5 segments for Thursday, etc. It should be defined in the ' +
                    'following format: `hours:minutes/temperature`. Minutes can be only tens, i.e., 00, 10, 20, 30, 40, 50. Segments should ' +
                    'be divided by space symbol. Each day should end with the last segment of 24:00. Examples: `04:00/20 08:30/22 10:10/18 ' +
                    '18:40/24 22:50/19.5`; `06:00/21.5 17:20/26 24:00/18`. The temperature will be set from the beginning/start of one ' +
                    'period and until the next period, e.g., `04:00/20 24:00/22` means that from 00:00 to 04:00 temperature will be 20 ' +
                    'degrees and from 04:00 to 00:00 temperature will be 22 degrees.',
            ),
        ...tuya.exposes.scheduleAllDays(ea.STATE, 'HH:MM/C'),
        e.binary('online', ea.STATE_SET, 'ON', 'OFF').withDescription('The current data request from the device.'),
        tuya.exposes.errorStatus(),
    ],
    meta: {
        // All datapoints go in here
        tuyaDatapoints: [
            [2, 'preset', tuya.valueConverter.tv02Preset()],
            [8, 'open_window', tuya.valueConverter.onOff],
            [10, null, tuya.valueConverter.TV02FrostProtection],
            [10, 'frost_protection', tuya.valueConverter.TV02FrostProtection],
            [16, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
            [24, 'local_temperature', tuya.valueConverter.divideBy10],
            [27, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration1],
            [
                31,
                'working_day',
                tuya.valueConverterBasic.lookup({mon_sun: tuya.enum(0), 'mon_fri+sat+sun': tuya.enum(1), separate: tuya.enum(2)}),
            ],
            [32, 'holiday_temperature', tuya.valueConverter.divideBy10],
            [35, 'battery_low', tuya.valueConverter.trueFalse0],
            [40, 'child_lock', tuya.valueConverter.lockUnlock],
            [45, 'error_status', tuya.valueConverter.raw],
            [46, 'holiday_start_stop', tuya.valueConverter.thermostatHolidayStartStop],
            [101, 'boost_timeset_countdown', tuya.valueConverter.raw],
            [102, 'open_window_temperature', tuya.valueConverter.divideBy10],
            [104, 'comfort_temperature', tuya.valueConverter.divideBy10],
            [105, 'eco_temperature', tuya.valueConverter.divideBy10],
            [106, 'schedule', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [107, null, tuya.valueConverter.TV02SystemMode],
            [107, 'system_mode', tuya.valueConverter.TV02SystemMode],
            [107, 'heating_stop', tuya.valueConverter.TV02SystemMode],
            [115, 'online', tuya.valueConverter.onOffNotStrict],
            [108, 'schedule_monday', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [112, 'schedule_tuesday', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [109, 'schedule_wednesday', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [113, 'schedule_thursday', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [110, 'schedule_friday', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [114, 'schedule_saturday', tuya.valueConverter.thermostatScheduleDaySingleDP],
            [111, 'schedule_sunday', tuya.valueConverter.thermostatScheduleDaySingleDP],
        ],
    },
    extend: [
        // A preferred new way of extending functionality.
    ],
};

module.exports = definition;

Which is the same as model: 'TV02-Zigbee', in tuya.ts definiton and everything seems to be working. So can we add support for it ?

@alesoharek
Copy link

Dobrý den, dnes jsem nainstaloval tuto hlavici na radiátory ale bohužel se mi jí nedaří přidat rozumně do HomeAssistant . Máte někdo toto rozchozené v HA? Děkuji za radu jak to zprovoznit.

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

2 participants