NEWS
Tuya Thermostat (_TZE200_hue3yfsn)
-
@diti kein Stress, Danke. Ich muß erstmal welche kaufen/bestellen bzw. lasse ich das wenn es nicht sinnvoll ist. Deswegen frage ich
Möchte mir ja auch keinen "Einzelfall" basteln den ich nacher nur als Problem mitschleppe und nicht handeln kann. -
@diti sagte in Neue Tuya Thermostat Zigbee 3.0:
@pete0815
die laufen lokal bei mir, die sind noch nicht in zigbee2mqtt-Liste der unterstützten Geräte eingetragen.Wenn du die durch Modifikationen zum laufen bekommen hast wäre es nett diese auch hier bzw. besser noch am zigbee-herdsman-converters projekt auf GitHub zu posten, dann können die offiziell unterstützt werden.
A.
-
@diti Hi Diti, ich würde mich auch interessieren, da es kälter wird und drei Thermostaten dieser Art aktuell nutzlos liegen... Wird Deine Anleitung hier gepostet, bzw. könntest Du bitte den Link auf andere Seite hier posten (googlen hat mir bisher nicht geholfen). Dankeschön im Voraus!
-
@diti würde mich auch über eine Anleitung freuen. Bekomme das Thermostat aktuell auch nicht zum Laufen
Danke im Voraus! -
@bluefish
Idealerweise um volle Funktionalität von diesen Thermostaten zu haben, man muss einen "externen Converter" für die Dinge schreiben, leider bin ich nicht so weit in Programmierung oder ehrlich zu sagen gar nicht so weit. Das einzige was mir eingefallen ist, die Namen von Thermostaten zu bestehenden beizumischen und Datenpunkten anzupassen. Dadurch es ist möglich geworden: gewünschte Temperatur zusetzen, lokale Temp. auszulesen, mehr brauche ich nicht.
Also zu Sache.
Eine Datei tuya.js finden.
/opt/iobroker/node_modules/zigbee-herdsman-converters/devices/tuya.js
Thermostat-Name {modelID: 'TS0601', manufacturerName: '_TZE200_hue3yfsn'}
Zu den anderen einfügen ungefähr Zeile 650 und speichern.zigbeeModel: ['kud7u2l'], fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ckud7u2l'}, {modelID: 'TS0601', manufacturerName: '_TZE200_ywdxldoj'}, {modelID: 'TS0601', manufacturerName: '_TZE200_cwnjrr72'}, {modelID: 'TS0601', manufacturerName: '_TZE200_hue3yfsn'}], model: 'TS0601_thermostat', vendor: 'TuYa',
Nächste Datei finden unter:
/opt/iobroker/node_modules/zigbee-herdsman-converters/lib/tuya.js
Und Data Point ID anzupassen.const dataPoints = { // Common data points // Below data points are usually shared between devices state: 1, heatingSetpoint: 16, coverPosition: 2, dimmerLevel: 3, localTemp: 24, coverArrived: 3, occupancy: 3, mode: 4, fanMode: 5, motorDirection: 5, config: 5, childLock: 40, coverChange: 7, runningState: 14, valveDetection: 20, battery: 35, tempCalibration: 27, // Data points above 100 are usually custom function data points waterLeak: 101, minTemp: 118, maxTemp: 119, windowDetection: 8, boostTime: 105, coverSpeed: 105, forceMode: 106, comfortTemp: 104, ecoTemp: 105, valvePos: 109, batteryLow: 35, weekFormat: 111, scheduleWorkday: 112, scheduleHoliday: 113, awayTemp: 32, autoLock: 116, awayDays: 31,
Ich habe nicht alle Data Points geändert nur die, die ich brauche, ihr könnt mit den anderen ausprobieren vielleicht bekommt noch mehr Funktionen.
Datei speichern, Ziegbee-Adapter neu starten und mit Kopplung anfangen.
Viel Erfolg! -
@diti sagte in Neue Tuya Thermostat Zigbee 3.0:
@bluefish
Idealerweise um volle Funktionalität von diesen Thermostaten zu haben, man muss einen "externen Converter" für die Dinge schreiben, leider bin ich nicht so weit in Programmierung oder ehrlich zu sagen gar nicht so weit. Das einzige was mir eingefallen ist, die Namen von Thermostaten zu bestehenden beizumischen und Datenpunkten anzupassen. Dadurch es ist möglich geworden: gewünschte Temperatur zusetzen, lokale Temp. auszulesen, mehr brauche ich nicht.
Also zu Sache.
Eine Datei tuya.js finden.
/opt/iobroker/node_modules/zigbee-herdsman-converters/devices/tuya.js
Thermostat-Name {modelID: 'TS0601', manufacturerName: '_TZE200_hue3yfsn'}
Zu den anderen einfügen ungefähr Zeile 650 und speichern.zigbeeModel: ['kud7u2l'], fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ckud7u2l'}, {modelID: 'TS0601', manufacturerName: '_TZE200_ywdxldoj'}, {modelID: 'TS0601', manufacturerName: '_TZE200_cwnjrr72'}, {modelID: 'TS0601', manufacturerName: '_TZE200_hue3yfsn'}], model: 'TS0601_thermostat', vendor: 'TuYa',
Nächste Datei finden unter:
/opt/iobroker/node_modules/zigbee-herdsman-converters/lib/tuya.js
Und Data Point ID anzupassen.const dataPoints = { // Common data points // Below data points are usually shared between devices state: 1, heatingSetpoint: 16, coverPosition: 2, dimmerLevel: 3, localTemp: 24, coverArrived: 3, occupancy: 3, mode: 4, fanMode: 5, motorDirection: 5, config: 5, childLock: 40, coverChange: 7, runningState: 14, valveDetection: 20, battery: 35, tempCalibration: 27, // Data points above 100 are usually custom function data points waterLeak: 101, minTemp: 118, maxTemp: 119, windowDetection: 8, boostTime: 105, coverSpeed: 105, forceMode: 106, comfortTemp: 104, ecoTemp: 105, valvePos: 109, batteryLow: 35, weekFormat: 111, scheduleWorkday: 112, scheduleHoliday: 113, awayTemp: 32, autoLock: 116, awayDays: 31,
Ich habe nicht alle Data Points geändert nur die, die ich brauche, ihr könnt mit den anderen ausprobieren vielleicht bekommt noch mehr Funktionen.
Datei speichern, Ziegbee-Adapter neu starten und mit Kopplung anfangen.
Viel Erfolg!Dieses Vorgehen ist gefährlich - es kann dazu führen das andere Thermostate nicht mehr funktionieren wenn data-point id’s umgeschrieben werden.
In diesem Fall sind weitere Anpassungen notwendig um neue data-point id’s hinzufügen.
A.
-
@asgothian
Ich weiß, habe nur diese, rückgängig kann man auch machen habe ich schon probiert.
ich habe im Github Forum externen Converter von kvazis gefunden die Data Points sind identisch, der Converter aber für HA gemacht. Ich habe da kleine Anpassungen gemacht , Temperatur einstellen funktioniert zwar aber Rückmeldung von TRV kommt nicht, was ist falsch ?/// Based on: // https://gist.github.com/basveeling/96ff0f16cd7185b0277a26c8d9305633 // https://github.com/Koenkk/zigbee-herdsman-converters/issues/1803 // https://github.com/Koenkk/zigbee-herdsman-converters/pull/2209 //https://gist.github.com/serrj-sv/af142b25de2d7ac54c3a2eb2623d9a6d#file-moes_radiator_alt-js-L328 //// Credits: // @serrj-sv, @wollo, @basveeling //// Usage: // zzonesmart_tvg01zg.js in the root of your zigbee2mqtt data folder (as stated in data_path, e.g. /config/zigbee2mqtt_data) // In your zigbee2mqtt hassio addon configuration, add the following two lines: // ... // external_converters: // - zzonesmart_tvg01zg.js // ... const fz = require('zigbee-herdsman-converters/converters/fromZigbee'); const tz = require('zigbee-herdsman-converters/converters/toZigbee'); const tuya = require('zigbee-herdsman-converters/lib/tuya'); const exposes = require('zigbee-herdsman-converters/lib/exposes'); const reporting = require('zigbee-herdsman-converters/lib/reporting'); const e = exposes.presets; const ea = exposes.access; const tuyaLocal = { dataPoints: { // ZONNSMART zsHeatingSetpoint: 16, zsFrostDetection: 10, zsWindowDetection: 8, zsChildLock: 40, zsTempCalibration: 27, zsLocalTemp: 24, zsBattery: 35, zsHeatingBoostCountdown: 101, zsComfortTemp: 104, zsEcoTemp: 105, zsAwayTemp: 32, zsErrorStatus: 45, zsMode: 2, zsHeatingStop: 107, }, }; const fzLocal = { zs_thermostat: { cluster: 'manuSpecificTuya', type: ['commandGetData', 'commandSetDataResponse'], convert: (model, msg, publish, options, meta) => { const dp = msg.data.dp; const value = tuya.getDataValue(msg.data.datatype, msg.data.data); // if (dp >= 101 && dp <=107) return; // handled by tuya_thermostat_weekly_schedule switch (dp) { case tuya.dataPoints.state: // on/off return !value ? {system_mode: 'off'} : {}; case tuyaLocal.dataPoints.zsChildLock: return {child_lock: value ? 'LOCK' : 'UNLOCK'}; case tuyaLocal.dataPoints.zsHeatingSetpoint: return {current_heating_setpoint: (value / 10).toFixed(1)}; case tuyaLocal.dataPoints.zsLocalTemp: return {local_temperature: (value / 10).toFixed(1)}; case tuyaLocal.dataPoints.zsBattery: return {battery: value}; case tuyaLocal.dataPoints.zsTempCalibration: return {local_temperature_calibration: value > 55 ? ((value - 0x100000000)/10).toFixed(1): (value/ 10).toFixed(1)}; case tuyaLocal.dataPoints.zsHeatingBoostCountdown: return {heating_boost_countdown: value}; case tuyaLocal.dataPoints.zsWindowDetection: return {window_detection: value ? 'ON' : 'OFF'}; case tuyaLocal.dataPoints.zsComfortTemp: return {comfort_temperature: (value / 10).toFixed(1)}; case tuyaLocal.dataPoints.zsEcoTemp: return {eco_temperature: (value / 10).toFixed(1)}; case tuyaLocal.dataPoints.zsAwayTemp: return {away_preset_temperature: (value / 10).toFixed(1)}; case tuyaLocal.dataPoints.zsMode: switch (value) { case 1: // manual return {system_mode: 'heat', away_mode: 'OFF', preset: 'manual'}; case 3: // away return {system_mode: 'heat', away_mode: 'ON', preset: 'vacation'}; case 0: // auto return {system_mode: 'auto', away_mode: 'OFF', preset: 'schedule'}; default: meta.logger.warn('zigbee-herdsman-converters:zsThermostat: ' + `preset ${value} is not recognized.`); break; } break; case tuya.dataPoints.runningState: return {running_state: value ? 'heat' : 'idle'}; default: meta.logger.warn(`zigbee-herdsman-converters:zsThermostat: Unrecognized DP #${ dp} with data ${JSON.stringify(msg.data)}`); } }, }, }; const tzLocal = { zs_thermostat_child_lock: { key: ['child_lock'], convertSet: async (entity, key, value, meta) => { await tuya.sendDataPointBool(entity, tuyaLocal.dataPoints.zsChildLock, value === 'LOCK'); }, }, zs_thermostat_window_detection: { key: ['window_detection'], convertSet: async (entity, key, value, meta) => { await tuya.sendDataPointBool(entity, tuyaLocal.dataPoints.zsWindowDetection, value === 'ON'); }, }, zs_thermostat_current_heating_setpoint: { key: ['current_heating_setpoint'], convertSet: async (entity, key, value, meta) => { const temp = Math.round(value * 10); await tuya.sendDataPointValue(entity, tuyaLocal.dataPoints.zsHeatingSetpoint, temp); }, }, zs_thermostat_comfort_temp: { key: ['comfort_temp_preset'], convertSet: async (entity, key, value, meta) => { const temp = Math.round(value * 10); await tuya.sendDataPointValue(entity, tuyaLocal.dataPoints.zsComfortTemp, temp); }, }, zs_thermostat_away_temp: { key: ['away_preset_temperature'], convertSet: async (entity, key, value, meta) => { const temp = Math.round(value * 10); await tuya.sendDataPointValue(entity, tuyaLocal.dataPoints.zsAwayTemp, temp); }, }, zs_thermostat_eco_temp: { key: ['eco_temp_preset'], convertSet: async (entity, key, value, meta) => { const temp = Math.round(value * 10); await tuya.sendDataPointValue(entity, tuyaLocal.dataPoints.zsEcoTemp, temp); }, }, zs_thermostat_system_mode_preset: { key: ['preset'], convertSet: async (entity, key, value, meta) => { const lookup = {'schedule': 0, 'manual': 1, 'holiday': 3}; await tuya.sendDataPointEnum(entity, tuyaLocal.dataPoints.zsMode, lookup[value]); }, }, zs_thermostat_local_temperature_calibration: { key: ['local_temperature_calibration'], convertSet: async (entity, key, value, meta) => { if (value > 0) value = value*10; if (value < 0) value = value*10 + 0x100000000; await tuya.sendDataPointValue(entity, tuyaLocal.dataPoints.zsTempCalibration, value); }, }, }; const device = { // Moes Tuya Alt Thermostat zigbeeModel: ['TS601'], fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_e9ba97vf'}], model: 'TV01-ZG', vendor: 'ZONNSMART', description: 'Radiator valve with thermostat', fromZigbee: [ fz.ignore_basic_report, fz.ignore_tuya_set_time, // handled in onEvent fzLocal.zs_thermostat, // fz.tuya_data_point_dump, ], toZigbee: [ tzLocal.zs_thermostat_current_heating_setpoint, tzLocal.zs_thermostat_child_lock, tzLocal.zs_thermostat_comfort_temp, tzLocal.zs_thermostat_eco_temp, tzLocal.zs_thermostat_system_mode_preset, tzLocal.zs_thermostat_local_temperature_calibration, tzLocal.zs_thermostat_away_temp, tzLocal.zs_thermostat_window_detection, tzLocal.zs_thermostat_heatingBoostCountdown, tz.tuya_data_point_test ], onEvent: tuya.onEventSetLocalTime, meta: { configureKey: 1, }, configure: async (device, coordinatorEndpoint, logger) => { const endpoint = device.getEndpoint(1); await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']); }, exposes: [ e.battery(), e.window_detection(), e.child_lock(), e.comfort_temperature(), e.eco_temperature(), e.away_preset_temperature(), exposes.climate().withSetpoint('current_heating_setpoint', 0.5, 29.5, 0.5) .withLocalTemperature() .withLocalTemperatureCalibration() .withSystemMode(['off', 'heat', 'auto'], ea.STATE_SET) //system mode only: off, heat, auto .withPreset(['schedule', 'manual', 'holiday']), exposes.numeric('heating_boost_countdown', ea.STATE) ], }; module.exports = device;
-
@diti sagte in Neue Tuya Thermostat Zigbee 3.0:
atei speichern, Ziegbee-Adapter neu starten und mit Kopplung anfangen.
Danke, auch wenn es vielleicht nicht die beste Lösung ist, aber es funktioniert bei mir auch. Habe sonst auch keine Tuya Thermostate, daher kein Problem mit den data-point id's
Danke für deine Anleitung
-
Weiß jemand, wie man ein converter file (z.B. https://github.com/PeWu/tuya-valve-z2m/blob/main/tuya_radiator_valve.js) im iobroker hinzufügt?
-
Thx. Konnte nun endlich mein Thermostat in Betrieb nehmen und bisher bin ich voll zufrieden und kann eigentlich nicht finden was nicht funktioniert. Nach dem Pairing ging alles "Out of the Box" mit Adapter 1.6.3.:
An 2 Punkten habe ich noch Fragezeichen:
- Wo liegt der Unterschied im Preset Mode "Manual" oder z.B. "Comfort"?
In Beiden kann ich nur die Target Temperature setzen und nicht die Ventilstellung. - Wenn ich über den Preset Punkt "schedule" nachdenke ihn zu nutzen, gibt es die Möglichkeit die Programme/Einstellungen per Zigbee zu programmieren und auszulesen? Am Ventil dies einzustellen ist ja richtig fummelig.
- Wo liegt der Unterschied im Preset Mode "Manual" oder z.B. "Comfort"?
-
@pete0815 sagte in Tuya Thermostat (_TZE200_hue3yfsn):
Wenn ich über den Preset Punkt "schedule" nachdenke ihn zu nutzen, gibt es die Möglichkeit die Programme/Einstellungen per Zigbee zu programmieren und auszulesen? Am Ventil dies einzustellen ist ja richtig fummelig.
Lies mal hier: https://github.com/ioBroker/ioBroker.zigbee/issues/1244
Die genaue Syntax der Daten die du hin schickst must Du dir bei zigbee2mqtt.io anschauen.
A,
-
Vielen Dank! Da kann ich mir viel abgucken. Da ich mir nichts "zerschießen" möchte und ich es noch nicht gemacht habe, wie schicke ich die Daten zum Gerät?
Über das Developer Menü im Adapter und z.B. diese Daten dann im Experten-Modus bei JSON versenden?sendTo('zigbee.0', 'SendToDevice', {'device':'5c0272fffedc3017', 'payload':{ "schedule": { "workdays": [ { "hour": 6, "minute": 0, "temperature": 19 }, { "hour": 8, "minute": 0, "temperature": 21 }, { "hour": 18, "minute": 0, "temperature": 21 }, { "hour": 20, "minute": 30, "temperature": 20 }, { "hour": 22, "minute": 0, "temperature": 19 }, { "hour": 23, "minute": 0, "temperature": 17 } ] } }}, function(res) { if (res.success) console.log("success") else console.log(res.error); });
-
@pete0815 sagte in Tuya Thermostat (_TZE200_hue3yfsn):
Vielen Dank! Da kann ich mir viel abgucken. Da ich mir nichts "zerschießen" möchte und ich es noch nicht gemacht habe, wie schicke ich die Daten zum Gerät?
Über das Developer Menü im Adapter und z.B. diese Daten dann im Experten-Modus bei JSON versenden?Zerschiessen kannst du da nichts.
Du musst den Code in ein JS Skript (oder dir ein entsprechendes Blockly Skript bauen) einbauen und das Skript einmal laufen lassen.Über den Entwickler Modus geht bei den TuYa wenig.
A.
-
@asgothian
Danke, da hätte ich noch lange an falscher Stelle gesucht -
@pete0815 sagte in Tuya Thermostat (_TZE200_hue3yfsn):
nur die Target Temperature setzen und nicht die Ventilstellung
bei mir geht die Ventilstellung-Steuerung auch nicht laut der Liste
diese Thermostate haben kein Data Point ID um das zu steuern.
Die Preset Mode ( 'manual', 'boost', 'complex', 'comfort', 'eco') benutze ich nicht, ich hab noch Werkeinstellungen. Ich hab bei mir einige Blockly Skripte laufen: ein Skript zum Beispiel in Interval 20 min. überprüft ob die Fenster geöffnet oder geschlossen sind, Uhrzeit und steuert entsprechend target_temperatur.Im Bild mit Device Information was du gepostet hast steht manufacturerName: '_TZE200_cwnjrr72 warum?
Ich hab bei mir solche:Was hast du geändert oder ist das der originale Name von Thermostat?
-
@diti said in Tuya Thermostat (_TZE200_hue3yfsn):
@pete0815 sagte in Tuya Thermostat (_TZE200_hue3yfsn):
nur die Target Temperature setzen und nicht die Ventilstellung
ok
Die Preset Mode ( 'manual', 'boost', 'complex', 'comfort', 'eco') benutze ich nicht, ich hab noch Werkeinstellungen.
Nutzen möchte ich das auch im Moment nicht. Da ich den Sinn noch nicht ganz verstehe dieser Presets, möchte ich wenigstens vermeiden, dass ich mit Blocklys gegen die interne Regelung des Ventils "ankämpfe".
Im Bild mit Device Information was du gepostet hast steht manufacturerName: '_TZE200_cwnjrr72 warum?
Ich hab bei mir solche:Was hast du geändert oder ist das der originale Name von Thermostat?
Das wurde orginal nach dem Pairing so gesetzt. Habe nichts verändert.
-
@pete0815
dann sind deine Thermostate in zigbee2mqtt eingepflegt, du musst gar nicht verändern, probier Mal die in Home Assistant da kannst du eventuell mehr Funktionen herausholen. -
@diti
bin aufm Sprung in den Urlaub und schaue ich danach mal.Im Moment funktioniert aber eigentlich alles und eine Erklärung um die Programme per Zigbee zu setzen gab es nettwerweise auch. Im Prinzip fehlt mir nix
-
@diti sagte in Tuya Thermostat (_TZE200_hue3yfsn):
probier Mal die in Home Assistant da kannst du eventuell mehr Funktionen herausholen
was willst du da mehr rausholen.. die greifen auch auf die gleiche Basis drauf.. z2m projekt
-
Hier die Beantwortung meiner eigenen Frage, vielleicht hat ja noch jemand die Frage zur Einbindung von converter files im iobroker...
-
Man besorgt sich ein converter file für das nicht unterstützte Gerät. Ich habe dieses gefunden: https://github.com/PeWu/tuya-valve-z2m/blob/main/tuya_radiator_valve.js
Funktioniert zwar nicht alles, aber setpoint, mode und child lock funktionieren, mehr hoffentlich bald -
Man legt das converter file (tuya_radiator_valve.js) zum Beispiel mit ftp irgendwo auf dem Pi ab. Ich habe dies einfach mal ins Verzeichnis /opt/iobroker/iobroker-data/ gelegt.
-
Im iobroker Adapter gibt es unter dem Punkt Einstellungen eine Rubrik "External converters", ganz am Ende der Seite. Dort gibt man den Pfad zur .js Datei an.
-
Adapter neu starten und _TZE200_hue3yfsn neu pairen. Anschließend wird das Gerät gefunden und hinzugefügt:
M.M.n. die bessere Lösung gegenüber der Lösung von @diti mit der Modifikation von /opt/iobroker/node_modules/zigbee-herdsman-converters/devices/tuya.js und /opt/iobroker/node_modules/zigbee-herdsman-converters/lib/tuya.js
-