Zigbee2MQTT - Template für Thermostat

Begonnen von Snocksman, 07 Dezember 2020, 17:22:39

Vorheriges Thema - Nächstes Thema

Snocksman

Hallo zusammen,
wie von Beta-User vorgeschlagen hier nun der eigenständige Thread zum Thema "MQTT-Template für Zigbee (China)-Thermostate".

Was haben wir soweit...?
- Scheinbar gibts es mindestens zwei Bauarten, die an FHEM nach dem einbinden die gleichen Werte übergeben.
Bauart 1: https://de.aliexpress.com/item/4001050739921.html?spm=a2g0s.9042311.0.0.54624c4dCtUJKR
Bauart 2: https://de.aliexpress.com/item/4001065031604.html

Die Devices auf Blackadder: https://zigbee.blakadder.com/Moes_HY368-ZB.html

Hier die RAW-definition des Devices:

defmod MQTT2_zigbee_0xbc33acfffe45850a MQTT2_DEVICE zigbee_0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_0xbc33acfffe45850a room MQTT2_DEVICE

setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 16:55:11 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 auto_lock MANUAL
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 away_mode OFF
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 away_preset_days 1
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 away_preset_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 boost_time 300
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 child_lock UNLOCKED
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 comfort_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 current_heating_setpoint 23.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 eco_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 force normal
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_1_hour 134
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_1_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_1_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_2_hour 8
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_2_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_2_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_3_hour 11
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_3_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_3_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_4_hour 12
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_4_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_4_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_5_hour 17
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_5_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_5_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_6_hour 22
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_6_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 holidays_6_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 linkquality 127
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 local_temperature 22.5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 local_temperature_calibration -1.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 max_temperature 35
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 min_temperature 5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 position 60
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 preset manual
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 system_mode manual
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 week 5+2
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 window_detection OFF
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 window_detection_params_minutes 10
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 window_detection_params_temperature 5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_1_hour 6
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_1_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_1_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_2_hour 8
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_2_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_2_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_3_hour 11
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_3_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_3_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_4_hour 12
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_4_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_4_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_5_hour 17
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_5_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_5_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_6_hour 22
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_6_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-07 17:12:10 workdays_6_temperature 15


Ich habe mal versucht, das Template zigbee2mqtt_eurotronic_spirit zu nutzen, leider lässt sich das Thermostat damit nicht ansteuern.

Was kann ich an weiteren Infos liefern ?

Beta-User

Bitte wie in dem zigbee2tasmota-Thread zum Spirit mal die JSON-Daten "roh" mitschneiden und gleich für jsonMap vorbereiten:
attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  zigbee2mqtt/0xbc33acfffe45850a:.* json_raw

Dann entweder über den Event-Monitor (nur) die json_raw-Einträge bei lokalen Schaltaktionen mitschneiden oder das ganze (für einen kleineren Zeitraum) in ein FileLog umleiten.

Dann brauchen wir ein jsonMap. "current_heating_setpoint" dürfte unsere Wunschtemperatur sein => "desired-temp" sein,
local_temperature => measured-temp, Battery ist geraten auf Basis von https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html#battery-numeric
attr MQTT2_zigbee_0xbc33acfffe45850a jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp Battery:batteriePercent Damit sollte dann klar sein, wie man Reading-Namen erzeugt...

Als nächstes wäre dann setList dran.
Da sollten wir als erstes mal "standardisieren", damit die hier aktiv Beteiligten das einfach kopieren können. Daher bitte
attr MQTT2_zigbee_0xbc33acfffe45850a devicetopic zigbee2mqtt/0xbc33acfffe45850a
und mal versuchsweise den ersten Eintrag (lt. https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html#climate müßte das vom Spirit hier passen):
attr MQTT2_zigbee_0xbc33acfffe45850a setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }
Kann sein, dass man dann nach dem Setzen des Werts auch ein get ausführen muss. Das geht ggf. bitte direkt über das MQTT2-Interface
set MQTT2_FHEM_Server publish zigbee2mqtt/0xbc33acfffe45850a/get {"current_heating_setpoint": ""}
Falls man das häufiger machen muss, wäre das in die getList einzutragen:attr MQTT2_zigbee_0xbc33acfffe45850a getList desired-temp:noArg desired-temp $DEVICETOPIC/get {"current_heating_setpoint": ""}
Ich hoffe, damit wird das ggf. etwas klarer? (Sobald man mal die ersten Schritte gemacht hat, wird es einfacher, am Anfang ist das vermutlich alles sehr strange, und der Weg wird tendenziell ziemlich weit, soviel ist schon jetzt klar...)

(Ich schreibe das hier etwas ausführlicher in der Hoffnung, dass das Teil von meinem "workshop" werden kann.)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

So, das war scheinbar schonmal ganz gut... Nachdem ich deine Anleitung durchgegangen bin, konnte ich die Solltemperatur des Thermostats setzen. Folgende Punkte habe ich dabei nicht durchgeführt, da das setzen der Solltemperatur auch so schon auf anhieb funktioniert hat (und es las sich, als ob die Punkte nur gebraucht werden, wenn das setzen der Solltemperatur nicht funktioniert...).

Nicht durchgeführt:

set MQTT2_FHEM_Server publish zigbee2mqtt/0xbc33acfffe45850a/get {"current_heating_setpoint": ""}

attr MQTT2_zigbee_0xbc33acfffe45850a getList desired-temp:noArg desired-temp $DEVICETOPIC/get {"current_heating_setpoint": ""}


Was mich zuerst ein wenig verwirrt hat:
- Wenn man die Temperatur an dem Thermostat selbst ändert, wird das scheinbar nicht an FHEM weitergegeben... Scheinbar schickt das Thermostat seine Werte aber nur in einem festen Intervall an FHEM und nicht noch zusätzlich bei änderung der Werte.
- Zumindest mein Thermostat schickt scheinbar keine Infos zum Batteriezustand.

Beta-User

Na ja, in das attrTemplate (bzw. den stub davon), das via svn verfügbar ist, habe ich den getter aufgenommen, einfach, weil die Funktion verfügbar ist.
Was wann warum verfügbar ist, ist leider - bis auf das, was via blakadder bekannt gemacht wurde - ziemlich blackbox. Deswegen auch mein Ansatz, erst mal auch die JSON-Rohdaten zu loggen, dann sieht man in etwa, was wann kommt (und in welchem Format; blackadder schweigt sich z.B. dazu aus, wie das mit den Temperaturlisten ist. Es wird jedenfalls definitiv was gesendet; das Ergebnis sieht nach einem (von json2nameValue() aufgebrochenen) Array aus.

Jetzt würde ich vorschlagen, erst die Basis-Funktionalität fertig zu machen (measured-temp?) und dann mal die getter zu vervollständigen.

Ist eine Fleißaufgabe, also feel free...

Und dann müßte es irgendwo auch eine Doku geben, wie der Java-Code die erhaltenen Messages dann in ZigBee-Payload umwandelt. Ggf. müßte man da auch mal mit Koenkk bzw. den Entwicklern bei zigbee2mqtt sprechen, um volle Unterstützung für das Device zu erhalten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Also hier auch nochmal das, was das Device so sendet:

2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a comfort_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_4_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a child_lock: UNLOCKED
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a week: 5+2
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_1_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_6_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_6_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_2_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a force: normal
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_5_hour: 17
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_4_hour: 12
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_3_hour: 11
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a preset: manual
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_3_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_5_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a away_mode: OFF
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_3_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_4_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a boost_time: 300
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a local_temperature_calibration: -1.0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a current_heating_setpoint: 23.0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_4_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_5_hour: 17
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_2_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a local_temperature: 23.0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a min_temperature: 5
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_4_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_2_hour: 8
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_2_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a position: 100
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_6_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_5_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_6_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_5_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_1_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a away_preset_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a auto_lock: MANUAL
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a away_preset_days: 1
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_2_hour: 8
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a system_mode: manual
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_2_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a window_detection_params_minutes: 10
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_1_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_3_hour: 11
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a max_temperature: 35
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a linkquality: 154
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_1_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_6_hour: 22
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a window_detection_params_temperature: 5
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_5_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a window_detection: OFF
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_1_hour: 134
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_4_hour: 12
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_3_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_6_hour: 22
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a eco_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_3_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_1_hour: 6
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a json_raw: {"auto_lock":"MANUAL","away_mode":"OFF","away_preset_days":1,"away_preset_temperature":15,"boost_time":300,"child_lock":"UNLOCKED","comfort_temperature":20,"current_heating_setpoint":"23.0","eco_temperature":15,"force":"normal","holidays":[{"hour":134,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}],"linkquality":154,"local_temperature":"23.0","local_temperature_calibration":"-1.0","max_temperature":35,"min_temperature":5,"position":100,"preset":"manual","system_mode":"manual","week":"5+2","window_detection":"OFF","window_detection_params":{"minutes":10,"temperature":5},"workdays":[{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}]}
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a window_detection_params_minutes: 10
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_3_hour: 11
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a max_temperature: 35
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_1_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a linkquality: 154
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a window_detection_params_temperature: 5
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_6_hour: 22
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_1_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_5_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a window_detection: OFF
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_1_hour: 134
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_4_hour: 12
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_6_hour: 22
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_3_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_1_hour: 6
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_3_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a eco_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_6_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a position: 100
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_6_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_5_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_1_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_5_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a away_preset_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a away_preset_days: 1
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a auto_lock: MANUAL
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a system_mode: manual
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_2_hour: 8
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_2_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_5_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_3_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a preset: manual
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_3_hour: 11
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_3_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_4_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a boost_time: 300
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a away_mode: OFF
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_4_minute: 30
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a local_temperature_calibration: -1.0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a current_heating_setpoint: 23.0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_5_hour: 17
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a local_temperature: 23.0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_2_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_4_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a min_temperature: 5
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_2_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_2_hour: 8
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a comfort_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a week: 5+2
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_4_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a child_lock: UNLOCKED
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_6_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_6_temperature: 15
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_1_temperature: 20
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_2_minute: 0
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a force: normal
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a workdays_5_hour: 17
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a holidays_4_hour: 12
2020-12-08 15:28:32 MQTT2_DEVICE MQTT2_zigbee_0xbc33acfffe45850a json_raw: {"auto_lock":"MANUAL","away_mode":"OFF","away_preset_days":1,"away_preset_temperature":15,"boost_time":300,"child_lock":"UNLOCKED","comfort_temperature":20,"current_heating_setpoint":"23.0","eco_temperature":15,"force":"normal","holidays":[{"hour":134,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}],"linkquality":154,"local_temperature":"23.0","local_temperature_calibration":"-1.0","max_temperature":35,"min_temperature":5,"position":100,"preset":"manual","system_mode":"manual","week":"5+2","window_detection":"OFF","window_detection_params":{"minutes":10,"temperature":5},"workdays":[{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}]}

Beta-User

OK, das ist lustig... Ein JSON, alles drin (qed).

Kannst du mal "position" nach "valve" mappen (jsonMap) und das loggen (so du es nicht bei allem machst)?

Außerdem wäre interessant, was passiert, wenn du "system_mode" auf "auto" stellst (was lt. https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html die einzige Einstellung sein soll... Es gibt aber offenkundig noch "manual" ;) ). Da wäre dann "desired-temp" zu loggen, dann sollte evtl. am WE klarer sein, was "hour":134 zu bedeuten hat...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dcboy

So, habe mich auch mal etwas mit meinem Thermostat beschäftigt und über das Webinterface von z2m auch folgendes JSON gefunden:


{
    "auto_lock": "MANUAL",
    "away_mode": "OFF",
    "away_preset_days": 1,
    "away_preset_temperature": 15,
    "battery_low": false,
    "boost_time": 300,
    "child_lock": "UNLOCKED",
    "comfort_temperature": 20,
    "current_heating_setpoint": 20,
    "eco_temperature": 15,
    "force": "normal",
    "holidays": [
        {
            "hour": 6,
            "minute": 0,
            "temperature": 20
        },
        {
            "hour": 8,
            "minute": 0,
            "temperature": 15
        },
        {
            "hour": 11,
            "minute": 30,
            "temperature": 15
        },
        {
            "hour": 12,
            "minute": 30,
            "temperature": 15
        },
        {
            "hour": 17,
            "minute": 30,
            "temperature": 20
        },
        {
            "hour": 22,
            "minute": 0,
            "temperature": 15
        }
    ],
    "linkquality": 76,
    "local_temperature": 20.5,
    "local_temperature_calibration": -1,
    "max_temperature": 35,
    "min_temperature": 5,
    "position": 90,
    "preset": "schedule",
    "system_mode": "heat",
    "week": "5+2",
    "window_detection": "OFF",
    "window_detection_params": {
        "minutes": 10,
        "temperature": 5
    },
    "workdays": [
        {
            "hour": 6,
            "minute": 0,
            "temperature": 20
        },
        {
            "hour": 8,
            "minute": 0,
            "temperature": 15
        },
        {
            "hour": 11,
            "minute": 30,
            "temperature": 15
        },
        {
            "hour": 12,
            "minute": 30,
            "temperature": 15
        },
        {
            "hour": 145,
            "minute": 30,
            "temperature": 20
        },
        {
            "hour": 22,
            "minute": 0,
            "temperature": 15
        }
    ]
}


Zusätzlich habe ich hier auch folgende Ansicht, wenn auch nicht ganz logisch, da eine genaue Bezeichnung fehlt. Bei mir wird z.B. keine Batterieinfo angezeigt, nur ob die Batterie ok ist. 
Aus meiner Anleitung zum Device geht auch ein Stück weit hervor, was das Thermostat alles kann und was eingestellt werden kann.

Beta-User

Wäre natürlich top, wenn man darüber auch was einstellen könnte und dann sehen, was sich wie verändert...

In jedem Fall ist es erst mal gut, alles mögliche an Infos zu sammeln, das irgendwie hilfreich sein kann.
In diesem Sinn noch ein Beitrag von Rudi zu einem ganz anderen Device (Erklärung durch Otto123 ist über den Link zu finden):
Zitat von: rudolfkoenig am 07 Dezember 2020, 13:59:20
{ my (%h,$cnt);; $EVENT=~ s/(\{[^[]*?})/$h{"Readings".++$cnt}=$1/ge;; \%h }
Plan für hier wäre, die JSON für holidays und workdays nicht aufzudröseln, sondern vorher rauszufischen und nur den Rest durch json2nameValue() bearbeiten zu lassen; weiß noch nicht, ob man das an myUtils auslagern sollte, aber mir scheint, das wäre das einfachste, auch, weil wir ggf. dann noch einen "guten Anknüpfungspunkt" für weekprofile benötigen, um die JSON für den Sendeweg automatisiert zusammenbasteln zu können. Ausgangsbasis wäre dann der Code von hier: https://forum.fhem.de/index.php/topic,115620.msg1099706.html#msg1099706 (go-eCharger).
(Nicht erschrecken, das ist (hoffentlich) alles weniger kompliziert als es klingt)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Irgendwie habe ich scheinbar noch ein paar Einstiegsprobleme... Ich wollte mir anhand deiner Erlärung mal die Kindersicherung als ersten Versuch vornehmen. Ich habe das Teil absichtlich hier erstmal "Kindersicherung" genannt, das kann später aber gerne geändert werden.

Folgendes habe ich mir zusammengereimt:

attr MQTT2_zigbee_0xbc33acfffe45850a jsonMap child_lock:Kindersicherung

attr MQTT2_zigbee_0xbc33acfffe45850a devicetopic zigbee2mqtt/0xbc33acfffe45850a

attr MQTT2_zigbee_0xbc33acfffe45850a setList Kindersicherung:LOCKED,UNLOCKED $DEVICETOPIC/set {"child_lock": $EVTPART1 }


FHEM frisst das auch erstmal so, aber wenn ich nun ein set MQTT2_zigbee_0xbc33acfffe45850a Kindersicherung LOCKED absetze, passiert an dem Thermostat nichts.
Die Werte scheinen, anders als bei blackadder angegeben, aber tatsächlich LOCKED und UNLOCKED zu sein... Zumindest gibt mir FHEM das so aus, wenn ich an dem Thermostat händisch schalte...

Beta-User

#9
Also:
Zum einen sollte jsonMap (bzw. auch set- und readingList) immer nur erweitert werden, nicht komplett überschrieben. Hier würde ich das einfach so lassen, wie es ist, später können wir mal schauen, welche Benennungs-Varianten in anderen Modulen für diese Funktionalität vorhanden sind; tendenziell ist das auch relevant für Sprachsteuerung ("guter Name" => klappt automatisch...).

Dann ist es nicht eben selten so, dass man in Sende- und Empfangsrichtung unterschiedliche Werte hat. Wenn da also bei zigbee2mqtt.io steht, die payload soll
{"child_lock": "LOCK"}sein, dann sollte man zu allererst mal sicherstellen, dass ganz genau das rausgeht, über das eventuell erforderliche "ummappen" der Empfangsbestätigung machen wir uns dann erst im nächsten Schritt einen Kopf
attr MQTT2_zigbee_0xbc33acfffe45850a setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  child_lock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}

Falls das nicht klappt, ist vermutlich das Leerzeichen das Problem, erst danach würde ich mit "LOCKED" anfangen.
Sofern da nichts automatisch zurückgemeldet wird, wäre dann noch auf .../get entsprechend zu publishen; ob die jeweiligen Messages zu 100% zu den Vorgaben bei zigbee2mqtt.io passen, kann man z.B. mit mosquitto_sub parallel ansehen (oder mit rawEvents am MQTT2_SERVER).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Hier auch noch etwas Code für die readingList:
{ my %h; $EVENT =~ s/("(holidays|workdays)":.([^]]+))/$h{$2}=$3/ge; my $h2 = json2nameValue($EVENT,'',$JSONMAP); %h = (%h, %$h2); \%h }

Viel Spaß beim austesten ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Also, so sieht mein Device aktuell aus:

define MQTT2_zigbee_0xbc33acfffe45850a MQTT2_DEVICE zigbee_0xbc33acfffe45850a
setuuid MQTT2_zigbee_0xbc33acfffe45850a 5fd0ddf1-f33f-d11a-849c-9e690badf6f811e8
attr MQTT2_zigbee_0xbc33acfffe45850a IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_0xbc33acfffe45850a devicetopic zigbee2mqtt/0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp Battery:batteriePercent
attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_0xbc33acfffe45850a room MQTT2_DEVICE
attr MQTT2_zigbee_0xbc33acfffe45850a setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  child_lock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}


Damit funktioniert:
- ändern der Temperatureinstellung des Thermostats aus FHEM heraus
- übertragen der eingestellten Temperatur an FHEM (wenn diese am Thermostat geändert wurde)
- ändern des Child-lock aus FHEM heraus
- übertragen der Child-lock Einstellung an FHEM (wenn diese am Thermostat geändert wurde)

Das mit dem Code für die readingList scheint nicht so recht zu klappen... Oder ich verstehe nicht, was es tun soll. Die geänderte Zeile sieht bei mir so aus:

attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { my %h;; $EVENT =~ s/("(holidays|workdays)":.([^]]+))/$h{$2}=$3/ge;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h, %$h2);; \%h }

Ich erhalte dann jeweils eine Zeile für workdays und holidays welche folgende Werte enthält:

{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}


Beta-User

 :) Toll, das das mit dem child_lock jetzt klappt. Eventuell könnte man da noch ein Event-Mapping machen, aber im Zweifel glaube ich, dass es mit etwas devStateIcon-Code schon hübsch hinzubiegen sein wird:
attr MQTT2_zigbee_0xbc33acfffe45850a devStateIcon LOCKED:secur_lock:child_lock+UNLOCK UNLOCKED:secur_open:child_lock+LOCK
attr MQTT2_zigbee_0xbc33acfffe45850a stateFormat child_lock


attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { json2nameValue($EVENT) }ist in jedem Fall unvollständig, weil damit jsonMap nicht greifen kann.


attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { my %h;; $EVENT =~ s/("(holidays|workdays)":.([^]]+))/$h{$2}=$3/ge;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h, %$h2);; \%h }
erzeugt mit dem hier dargestellten Vorgehen/JSON bei mir nicht identische Reading-Inhalte, sondern unterschiedliche, nämlich einen mit '{"hour":134,[...]', und einen mit '{"hour":6,[...]' (sowie einige wenige andere wie bisher auch). Wenn das bei dir auch so ist, ist alles ok.

Ziel sollte sein, zum einen die normalen Readings zu haben und zum anderen zu wissen, wie in etwa der JSON aussehen sollte, mit dem man komplette Temperaturlisten AN das Thermostat senden kann. Dazu habe ich bei https://github.com/Koenkk/zigbee2mqtt/issues/4486 einen netten Link gefunden auf https://raw.githubusercontent.com/Koenkk/zigbee-herdsman/master/docs/Zigbee%20Cluster%20Library%20Specification%20v7.pdf, wo dann auch (ca. S. 426) dargestellt ist, wie das im Detail aufgebaut ist usw.. Sieht also so aus, als würde zigbee2mqtt das unterstützen, wenn es der Thermostat kann.

Mittelfristig wäre es der Plan, dass die Verwaltung der Wochenpläne weekprofile macht, das dann einfach das betreffende MQTT2_DEVICE informiert, das dann selbständig das JSON bastelt und an den Thermostaten schickt.
In jedem Fall macht das Aufbrechen des (vom Device kommenden) JSON in Einzelreadings mAn. keinen großen Sinn oder fangt ihr damit was an?

Generell: bitte möglichst mit $DEVICETOPIC arbeiten, das ist viel einfacher zu transferieren.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Hier nochmal die RAW-definition des Devices (Ich denke mal, dass bei den Redings noch was nicht stimmt, oder ?  ??? ):

defmod MQTT2_zigbee_0xbc33acfffe45850a MQTT2_DEVICE zigbee_0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_0xbc33acfffe45850a devStateIcon LOCKED:secur_lock:child_lock+UNLOCK UNLOCKED:secur_open:child_lock+LOCK
attr MQTT2_zigbee_0xbc33acfffe45850a devicetopic zigbee2mqtt/0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp
attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { my %h;; $EVENT =~ s/("(holidays|workdays)":.([^]]+))/$h{$2}=$3/ge;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h, %$h2);; \%h }
attr MQTT2_zigbee_0xbc33acfffe45850a room MQTT2_DEVICE
attr MQTT2_zigbee_0xbc33acfffe45850a setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  child_lock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}
attr MQTT2_zigbee_0xbc33acfffe45850a stateFormat child_lock

setstate MQTT2_zigbee_0xbc33acfffe45850a UNLOCKED
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 20:40:42 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 auto_lock MANUAL
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 away_mode OFF
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 away_preset_days 1
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 away_preset_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 boost_time 300
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 child_lock UNLOCKED
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 comfort_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 current_heating_setpoint 21.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 desired-temp 17.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 eco_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 force normal
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 holidays {"hour":134,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_1_hour 134
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_1_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_1_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_2_hour 8
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_2_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_2_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_3_hour 11
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_3_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_3_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_4_hour 12
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_4_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_4_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_5_hour 17
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_5_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_5_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_6_hour 22
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_6_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 holidays_6_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 linkquality 197
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 local_temperature 24.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 local_temperature_calibration -1.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 max_temperature 35
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 min_temperature 5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 position 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 preset manual
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:03:50 state desired-temp
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 system_mode manual
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 week 5+2
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 window_detection OFF
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 window_detection_params_minutes 10
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 window_detection_params_temperature 5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 09:09:09 workdays {"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_1_hour 6
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_1_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_1_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_2_hour 8
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_2_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_2_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_3_hour 11
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_3_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_3_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_4_hour 12
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_4_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_4_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_5_hour 17
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_5_minute 30
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_5_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_6_hour 22
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_6_minute 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-09 21:00:22 workdays_6_temperature 15

Beta-User

Ja, korrekt, da war noch doppelt was schräg.

Mach' erst mal noch die alten Readings weg:

deletereading MQTT2_zigbee_0xbc33acfffe45850a .*

Bei meinem Codevorschlag war da zum einen nicht bedacht, dass da der Rückgabewert der Funktion wieder in der Variable landet (for the records: das scheint hier $3 zu sein), und zum anderen auch ein 100% gültiger JSON nach dem Wegschneiden verbleiben sollte (also der Match zu kurz war). Teilt man das auf, kommt (hoffentlich) das passende Ergebnis raus:
{ my %h; my $temp = $EVENT; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g; my $h2 = json2nameValue($EVENT,'',$JSONMAP); %h = (%h,%$h2); \%h }
(Komisch war nur, dass das bis zur "Rückgabestelle" des "ge"-Ausdrucks soweit ok zu sein scheint, dass json2NameValue() bis dahin damit klarkommt...)
Wieder was gelernt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Jetzt sieht das ganze so aus:

defmod MQTT2_zigbee_0xbc33acfffe45850a MQTT2_DEVICE zigbee_0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_0xbc33acfffe45850a devStateIcon LOCKED:secur_lock:child_lock+UNLOCK UNLOCKED:secur_open:child_lock+LOCK
attr MQTT2_zigbee_0xbc33acfffe45850a devicetopic zigbee2mqtt/0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp
attr MQTT2_zigbee_0xbc33acfffe45850a readingList zigbee2mqtt/0xbc33acfffe45850a:.* { my %h;; my $temp = $EVENT;; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge;; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h,%$h2);; \%h }
attr MQTT2_zigbee_0xbc33acfffe45850a room MQTT2_DEVICE
attr MQTT2_zigbee_0xbc33acfffe45850a setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  child_lock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}
attr MQTT2_zigbee_0xbc33acfffe45850a stateFormat child_lock

setstate MQTT2_zigbee_0xbc33acfffe45850a UNLOCKED
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 auto_lock MANUAL
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 away_mode OFF
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 away_preset_days 1
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 away_preset_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 boost_time 300
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 child_lock UNLOCKED
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 comfort_temperature 20
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 desired-temp 27.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 eco_temperature 15
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 force normal
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 holidays {"hour":134,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 linkquality 214
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 local_temperature_calibration -1.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 max_temperature 35
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 measured-temp 22.0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 min_temperature 5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 position 0
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 preset manual
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:02:26 state desired-temp
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 system_mode manual
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 week 5+2
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 window_detection OFF
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 window_detection_params_minutes 10
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 window_detection_params_temperature 5
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 13:03:57 workdays {"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}

Beta-User

Sieht doch gut aus, oder?

Jetzt wäre noch zu klären, was das im einzelnen zu bedeuten hat, jsonMap, stateFormat etc. entsprechend zu erweitern, und dann schauen wir mal, wie wir weekprofile ggf. ins Boot holen können...?
Für's erste also erst mal versuchen, das Teil in einen Automatik-Modus zu überführen und das alles mal zu loggen (und zu visualisieren), ob es Sinn ergibt bzw. welchen.

Bitte auch mal rund um diesen Beitrag etwas rumlesen: https://forum.fhem.de/index.php/topic,97989.msg1099767.html#msg1099767. Ist zwar vermutlich kaum verständlich, aber im Kern geht es auch darum, dass man (mit jsonMap) "gute" Readingsnamen generiert, die dann ggf. auch nahtlos in die Sprachsteuerungswelt passen. Insbesondere klingt ggf. "system_mode" danach, als sollte man es kurz und bündig "mode" nennen. Weiß aber noch nicht, ob die Inhalte dann dazu passen.
(es gab irgendwo da verlinkt auch eine Seite, wo die ganzen Mapping-Werte (=Readings-Inhalte, nicht die Namen) erläutert waren; ggf. wäre es hilfreich, das noch zu unserer Materialsammlung hier zu verlinken, falls jemand drüberstolpert?).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Interessant fände ich auch noch folgendes:
- Boost Funktion (Da hier scheinbar ein Zeitwert mitgegeben werden muss... Das müsste dann irgendwas in Richtung set boost 300 werden...) Dabei wird das Thermostat dann für die angegebene Zeit voll aufgedreht.
- Das devStateIcon scheint noch nicht ganz zu funktionieren... Bei child_lock UNLOCK sieht man das offene Schloss, bei LOCK wird nur LOCKED angezeigt, anstelle des Schlosses.
- Schön wäre noch, die aktuell gemessene Temperatur irgendwie anzuzeigen.

Was mir sonst noch aufgefallen ist: Wenn sich nichts ändert scheint das Thermostat in so eine Art Sleep-Mode zu fallen... Es sendet dann keine Werte mehr, bis man es entweder am Gerät, oder per FHEM einmal "anstuppst"...

Beta-User

#18
Bzgl. boost:

Da auch andere Thermostate diesen Befehl kennen, würde ich ihn im attrTemplate so lassen, aber dann eben in der payload den (üblichen) Wert fest vorgeben; die 5 Min. scheinen sowas wie ein Standard zu sein. Wer es dann anders mag, kann ja daran rumschrauben.

Eventuell kann man ja einen allg. "userset"-setter vorsehen, der dann einfach beliebigen Payload entgegennimmt. Wäre zumindest zum Testen eh' gut, weil man dann auch das genaue Format für Temperaturlisten austesten könnte.

Das devStateIcon/stateFormat war bewußt unvollständig, dachte, "jemand" hätte vielleicht Freude am Knobeln; es ist keine große Kunst, via mehrzeiligem stateFormat alles mögliche anzuzeigen (und Icons dazu anzeigen lassen); eventuell kannst du auch meinen Code aus https://forum.fhem.de/index.php/topic,97430.msg906576.html#msg906576 ausschlachten, das ist dann aber Perl, und hier ginge es ggf. etwas transparenter mit devStateIcon/stateFormat, daher habe ich das erst mal so in den Raum geworfen.

Zitat von: Snocksman am 10 Dezember 2020, 14:28:11
Was mir sonst noch aufgefallen ist: Wenn sich nichts ändert scheint das Thermostat in so eine Art Sleep-Mode zu fallen... Es sendet dann keine Werte mehr, bis man es entweder am Gerät, oder per FHEM einmal "anstuppst"...
Hm, das kann zwei Ursachen haben: Es gibt nichts zu berichten, dann wäre das ok (keine wesentliche Änderung der gemessenen Temperatur oder der Soll-Temperatur), oder man muss es tatsächlich aktiv abfragen.

In letzterem Fall wäre der Weg, ein get abzusetzen:
Zitatlocal_temperature: Current temperature measured on the device (in °C). To read send a message to zigbee2mqtt/FRIENDLY_NAME/get with payload {"local_temperature": ""}
.Bereite mal einen getList-Eintrag für die measured-temp vor ;) . Den rufen wir dann per periodicCmd auf (alle 60 Minuten?).

Ansonsten habe ich etwas gebastelt und kann mit leicht ergänztem "weekprofile"-Code und ein paar Attributen und etwas Perl dann schon mal sowas hier erzeugen:
Zitatdefmod MQTT2_zigbee_0xbc33acfffe45850a MQTT2_DEVICE zigbee_0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a userattr weekprofile
attr MQTT2_zigbee_0xbc33acfffe45850a IODev m2server
attr MQTT2_zigbee_0xbc33acfffe45850a devStateIcon LOCKED:secur_lock:child_lock+UNLOCK UNLOCKED:secur_open:child_lock+LOCK
attr MQTT2_zigbee_0xbc33acfffe45850a devicetopic zigbee2mqtt/0xbc33acfffe45850a
attr MQTT2_zigbee_0xbc33acfffe45850a jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp
attr MQTT2_zigbee_0xbc33acfffe45850a readingList $DEVICETOPIC:.* { my %h;; my $temp = $EVENT;; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge;; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h,%$h2);; \%h }\
$DEVICETOPIC/set:.* set
attr MQTT2_zigbee_0xbc33acfffe45850a room MQTT2_DEVICE
attr MQTT2_zigbee_0xbc33acfffe45850a setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  child_lock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1) }
attr MQTT2_zigbee_0xbc33acfffe45850a stateFormat child_lock
attr MQTT2_zigbee_0xbc33acfffe45850a weekprofile zigbeetest

[...]
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 15:24:33 set
{"holidays":[{"hour":120,"minute":0,"temperature":18.0},{"hour":144,"minute":0,"temperature":18.0}],"workdays":[{"hour":0,"minute":0,"temperature":5.5,"hour":10,"minute":0,"temperature":19.0,"hour":12,"minute":0,"temperature":18.0},{"hour":24,"minute":0,"temperature":5.5,"hour":34,"minute":0,"temperature":19.0,"hour":36,"minute":0,"temperature":18.0},{"hour":48,"minute":0,"temperature":5.5,"hour":58,"minute":0,"temperature":19.0,"hour":60,"minute":0,"temperature":18.0},{"hour":72,"minute":0,"temperature":5.5,"hour":82,"minute":0,"temperature":19.0,"hour":84,"minute":0,"temperature":18.0},{"hour":96,"minute":0,"temperature":5.5,"hour":106,"minute":0,"temperature":19.0,"hour":108,"minute":0,"temperature":18.0}]}
setstate MQTT2_zigbee_0xbc33acfffe45850a 2020-12-10 15:24:33 state weekprofile

Ausgelöst habe ich das Reading (und den passenden publish, daher VORSICHT!) über das Setzen eines Topics an einem weekprofile-Device...

Ist noch WIP, aber hier mal die betreffenden beiden Codebausteinchen, die es dazu braucht...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Mir ist noch etwas sehr seltsames bei dem Thermostat aufgefallen... Ich wollte das Teil wirklich mal an einem Heizkörper montieren und händisch ein Wochenprogramm eingeben, dabei ist mir aufgefallen, dass scheinbar bei jeder Kommunikation mit FHEM die Uhrzeit des Thermostats wieder auf 06:28am zurückgesetzt wird; Sie läuft dann bis zur nächsten Kommunikation weiter und dann zack wieder zurück auf 06:28am.

Beta-User

...irgendwie hatte mich schon gewundert, dass bei https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html nirgends was zum Thema Uhrzeit/Datum zu finden ist...

Kannst du mal schauen, ob es dazu irgendwo bei zigbee2mqtt.io eine Doku gibt? Vermute, man muss immer einen aktuellen Timestamp mitgeben, wenn man mit Wochenplänen arbeitet.
Bekommst du da (irgendwann) irgendwas, wenn du das am Thermostaten einstellst?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

#21
Zur Info: Den Part mit den Wochenplänen habe ich noch gar nicht drin. Das Rücksetzen der Uhrzeit scheint bei jeglicher Kommunikation mit FHEM zu passieren, auch wenn ich nur am Thermostat etwas umstelle, z.B. die Solltemperatur.

Aber das hier könnte evtl. etwas sein: https://github.com/Koenkk/zigbee2mqtt/issues/2586 Sieht zumindest nach dem Problem aus...

Beta-User

Nach meinem Verständnis addressiert dieser Issue was anderes, da war nach dem Empfangszeitpunkt auf dem Coordinator gefragt.

Was wir hier brauchen ist eher vergleichbar mit dem hier:
Zitat von: dominik am 06 März 2020, 15:36:14
Die Werte sind jedoch nicht korrekt. Zuerst muss ich die aktuelle Uhrzeit an das Device per BLE schicken und dann bekomme ich als Notification die richtige Antwort zurueck. (Mach ich aktuell ueber gatttool --char-write-req .... --listen).
Es ginge also darum, eine Message mit der aktuellen Uhrzeit zu senden bzw. diesen (automatisch?) eben immer (oder nur einmalig?) mit allem anderen an den passenden Endpunkt zu senden.
Dazu passend: https://github.com/Koenkk/zigbee-herdsman-converters/pull/1730/files - da steht drin, was es ausser 2+5 noch so gibt, und es gibt eine neue Funktion "setLocalTime".

Jetzt müsste man noch noch rausfinden, wie die aufzurufen ist bzw. warum die nicht automatisch mit gesendet wird...?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dcboy

#23
Zu dem Zeitthema habe ich in den Issues von z2m folgendes gefunden:
https://github.com/Koenkk/zigbee2mqtt/issues/4456

Hier heisst es, dass die Firmware wohl das Problem hat und geupdatet werden müsste. Leider geht das wohl nur über das TuYa Gateway samt dazugehöriger App...

Beta-User

Hmm, Danke für's recherchieren.
Ist natürlich schwierig, wenn die firmware nicht mitspielt... Unklar ist mir allerdings, warum das nur mit dem Original-GW gehen sollte, wenn (!) man eine unverschlüsselte firmware-file haben würde. Der update-Mechanismus selbst sollte eigentlich soweit standardisiert sein, dass es prinzipiell mit jedem Coordinator gehen sollte.
Aber na ja, da kenne ich mich auch nicht tief genug aus.

Dann würde ich vorschlagen, dass ihr entweder die Dinger zurückschickt oder auf ein Einsehen des Herstellers hofft und erst mal die Steuerung über FHEM macht ohne das (direkte) weekprofile-feature.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Ne, für meinen Teil werde ich die Dinger nicht zurückschicken... Dann muss FHEM das Wochenprogramm halt abbilden. Ich habe trotzdem gerade nochmal getestet, wie sich das ganze mit der deConz Software verhält; da ist es aber genau so.
Ich habe mir aber gerade mal so ein Tuya-Gateway bestellt... Mal schauen, wie es dann nach einem Firmwareupdate aussieht.
Wäre aber schön, wenn wir die Boost Funktion noch hinbekommen würden.

Beta-User

{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }
Die boost-Zeit scheint auf dem Thermostat eingestellt zu sein, das scheint ein simpler "modus"-Command zu sein.
Testet bitte mal das betreffende neue attrTemplate aus. Ist noch nicht alles drin, was bei https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html zu finden ist, aber so sollte z.B. alle 55 Min. die measured-temp ausgelesen werden.

Ansonsten habe ich das mit der Kindersicherung noch umbenannt, angelehnt an die Benennung bei Homematic. Falls jemand was besseres einfällt: bitte melden...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Bei dem neuen Template funktioniert leider ganz viel noch nicht...

Was geht:
- Aktuell gemessene Temperatur wird ausgelesen und angezeigt

Was geht nicht:
- Setzen der Soll-Temperatur
- Child_Lock
- Batteriestatus in % (aber da vermute ich eh, dass der Wert vom Thermostat gar nicht übergeben wird.)

Im zigbee2mqtt Log stehen auch ein paar Meldungen:

Bei set Kommandos:

Dez 12 20:06:35 FHEM-Server npm[3504]: zigbee-herdsman-converters:tuyaThermostat: NOT RECOGNIZED DP #1293 with data {"type":"Buffer","data":[0]}

Bei get Kommandos:

Dez 12 20:09:03 FHEM-Server npm[3504]: Zigbee2MQTT:error 2020-12-12 20:09:03: Invalid JSON '{"current_heating_setpoint": ""} 5', skipping...

Beta-User

Hmm, Kleinigkeiten habe ich jetzt nochmal geändert, aber warum z.B. das mit der Soll-Temperatur nicht klappen soll, erschließt sich mir noch nicht so recht.

So wie es jetzt ist, müsste eigentlich jeweils genau das als publish rausgehen, was in https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html die Vorgabe ist.
Bitte also erst mal checken, ob das der Fall ist - und wenn nicht, bitte auch ein RAW hier posten, von dem, was das attrTemplate erstellt bzw. (detailierte) Korrekturvorschläge machen, wenn es offensichtliche Dinge sind, entweder als attrTemplate-Code oder eben durch Posten eines funktionierenden Devices (RAW-Code).

Wird korrekt gepublisht, liegt das Problem entweder in der Doku (=> selber testen und ggf. Korrekturvorschläge bei zigbee2mqtt.io einkippen), oder es ist noch tieferliegender bei der Umsetzung innerhalb zigbee-herdsman (oder es ist ein firmwareproblem). Da können wir dann in beiden Fällen via attrTemplate leider gar mehr eingreifen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

#29
Ich scheine da aber plötzlich auch generell Probleme zu haben... Ich habe noch einen Zigbee Helligkeitssensor, der auch nicht mehr mitspielen möchte...  :-\   Wie kann ich denn generell Devices unpairen (am besten aus FHEM heraus) ? Ich würde gerne mal einfach alle Devices unpairen und bei null anfangen. Aber wenn ich die einfach aus FHEM lösche, kommen die per zigbee2mqtt sofort wieder rein (sogar wenn die Devices ausgeschaltet sind).

OK, ich habe jetzt mal ein Backup zurückgespielt und den Conbee Stick zurückgesetzt und nun läuft wieder alles bis auf das Thermostat. Wenn ich das Template anwenden möchte bekomme ich immer folgenden Fehler:

Unknown command x_send_set_payload:textField, try help.
<html><input type='hidden' value='set MQTT2_zigbee_0xbc33acfffe45850a attrTemplate speechcontrol_alexa_specials'><p>Specify the unknown parameters for speechcontrol_alexa_specials:</p><table class='block wide'><tr><td>Set a new alexaName</td><td><input type='radio' name='s' value='RADIO_SETalexaNAME'></tr><tr><td>Leave alexaName attribute empty</td><td><input type='radio' name='s' value='RADIO_DoNotSetalexaName'></tr><tr><td>Discard genericDeviceType attribute</td><td><input type='radio' name='s' value='RADIO_Delete_gDT'></tr><tr><td>Skipp setting speech controll specific attributes</td><td><input type='radio' name='s' value='RADIO_SKIPP_SCONTROLL'></tr></table><script>
          setTimeout(function(){
            $("#FW_okDialog input[type=radio]").first().prop("checked",true);
            $("#FW_okDialog").parent().find("button").css("display","block");
            $("#FW_okDialog").parent().find(".ui-dialog-buttonpane button")
            .unbind("click").click(function(){
              var cmd;
              $("#FW_okDialog input").each(function(){
                var t=$(this).attr("type");
                if(t=="hidden") cmd = $(this).val();
                if(t=="text")  cmd +=" "+$(this).attr("name")+"="+$(this).val();
                if(t=="radio") cmd +=" "+$(this).val()+"="+
                                          ($(this).prop("checked") ? 1:0);
              });
              FW_cmd(FW_root+"?cmd="+encodeURIComponent(cmd)+"&XHR=1",
              function(resp){
                if(resp) {
                  if(!resp.match(/^<html>[\s\S]*<\/html>/))
                    resp = "<pre>"+resp+"</pre>";
                  return FW_okDialog(resp);
                }
                location.reload()
              });
              $("#FW_okDialog").remove();
            })}, 100);
         </script>
       </html>

Snocksman

Ich warte jetzt erstmal ab, bis ich dieses Tuya-Gateway bekommen habe (in der Hoffnung, dass es da wirklich ein Firmwareupdate für die Thermostate gibt)... Das Thermostat läuft nämlich mehr als bescheiden. Selbst wenn ich es mal soweit habe, dass es änderungen aus FHEM heraus annimmt, tut es das nur sehr unzuverlässig; Ich würde mal sagen, dass ca. 60% der Temperaturänderungen durch geht, der Rest wird scheinbar vom Thermostat ignoriert. Und zwischenzeitlich versagt es dann mal wieder komplett den Dienst.

Was mich trotzdem noch interessieren würde: Wie führe ich ein unpairing eines Devices durch ?

Beta-User

Würde auf den "remove"-Kommand tippen. Aber frag' mich nicht, wie man den verwendet, ich hatte das damals nur nach den Kommandos abgebildet, die bei zigbee2mqtt in der damaligen Doku zu finden waren; bisher hat sich keiner beschwert...

Generell noch:
- allgemeine Probleme fände ich in einem separaten Thread (im Zigbee-Bereich) besser aufgehoben;- CC2531 ist kein optimales IO, das ist einfach "zu klein";
- ich _vermute_, das Problem ist bei dem Thermostaten _auch_, dass da viele Datenpunkte sind, was entsprechend Speicher auf den Coordinator beansprucht. Es _könnte_ sein, dass die Aussage "16 oder 17" Geräte hätten auf dem CC2531 Platz stark davon abhängig ist, wieviele "endpoints" tatsächlich vorhanden sind, so dass evt. 13 oder 14 + das Thermostat "too much" sein könnten.

- "unpairing" "braucht" man nur dann, wenn das Device später nicht wieder an diesem IO gepairt werden soll, ansonsten kann man das recht beliebig hin- und her umziehen (verliert aber etwas Speicher auf dem Coordinator-Chip, wenn man das nicht explizit wieder freigibt...)

Also falls du ZigBee ausbauen willst, und noch einen CC253x verwendest: alsbald Ersatz beschaffen; der ist nur für kleine Installationen ok.



Sorry für das mit dem "x_send_set_payload:textField":Da fehlt in der Zeile vorher ein "\" als escape-Zeichen für den Zeilenumbruch. Bitte erst mal manuell nachpflegen und dann {AttrTemplate_Initialize()} ausführen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Also bei dem remove command meinst du in dem MQTT2_zigbee_bridge Device ? Da gibt es remove, wo ich danach ein Eingabefeld habe... Da wäre dann die Frage, was da rein soll (Ich würde mal auf 0xbc33acfffe45850a tippen ?) Ich war am schwanken, zwischen remove, oder x_bind_unbind...

Ich setze übrigens einen Conbee II Stick ein, der sollte doch genug Power haben...? An Devices habe ich bislang:
1x Philips HUE CCT Bulb
6x Osram Zwischenstecker
1x Diesen Lichtschalter https://de.aliexpress.com/item/4001138076397.html?spm=a2g0s.9042311.0.0.15d74c4dhpADAa
1x Diesen Helligkeitssensor https://de.aliexpress.com/item/1005001700532972.html?spm=a2g0s.9042311.0.0.15d74c4dhpADAa

...und eben das Thermostat.

Die Zwischenstecker, der Schalter und die HUE Bulb funktionieren ohne Probleme. Der Helligkeitssensor hat, vermute ich, ein kleines Distanzproblem... Er meldet zwar Werte, aber ein wenig unregelmäßig.

Beta-User

Wie das im Einzelnen mit den Befehlen ist, kann ich auch nur rausfinden, wenn ich in die Doku schaue... Bind war glaube ich für das, was bei Homematic "peering" heißt, also "Gruppenbildung" zwischen zwei Devices?...

Der ConBee II sollte potent genug sein für das bißchen... Firmware ist auf dem letzten Stand? (Anfang Dez. 2020) (Und sorry für die Unterstellung, es wäre was anderes, falls ich das übersehen haben sollte).

"Unregelmäßig" muss nichts heißen, evtl. sind da Schwellenwerte für Abweichungen definiert, die mal schneller, mal langsamer "gerissen" werden. Kenne ich von meinen Temp/hum-Sensoren, das kann auch bis zu einer Stunde dauern, bis da mal wieder ein Wert kommt, wenn sich nichts wesentliches geändert hat (deconz pusht auch).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Ich habe jetzt gerade zigbee2mqtt nochmal komplett runter geschmissen und die Installation mit deConz durchgeführt und nun läuft alles. Das Thermostat funktioniert (auch die Uhrzeit wird nicht mehr zurückgesetzt) und die restlichen Devices schalten viel schneller als per zigbee2mqtt.  8)  Als Template für das Thermostat habe ich hierbei C_01_Eurotronic... verwendet. Das ist zwar auch nicht perfekt und es fehlen noch ein paar Sachen, aber das Schalten funktioniert hier schonmal zuverlässig.

MQTT wäre mir zwar lieber gewesen, aber wenns so funktioniert, bleibe ich erstmal dabei. Danke aber auf jeden Fall für die geduldige Hilfe !!!

Beta-User

Hmm, irgendwie finde ich das jetzt schade ;D .

Aber evtl. möchtest du die neu gewonnene Zeit jetzt dafür verwenden, mal ein paar Vorschläge für die huedevice.template zu erarbeiten... Da ist die Zeit irgendwie ziemlich stehen geblieben ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

ZitatWürde auf den "remove"-Kommand tippen. Aber frag' mich nicht, wie man den verwendet, ich hatte das damals nur nach den Kommandos abgebildet, die bei zigbee2mqtt in der damaligen Doku zu finden waren; bisher hat sich keiner beschwert...

Nur mal zur Bestätigung das die Doku damals dann korrekt interpretiert wurde:

set MQTT2_zigbee_Bridge remove 0x00158d00028aedf7

Dez 14 15:09:33 FHEMPIOS npm[585]: Zigbee2MQTT:info  2020-12-14 15:09:33: Removing '0x00158d00028aedf7'
Dez 14 15:09:33 FHEMPIOS npm[585]: Zigbee2MQTT:warn  2020-12-14 15:09:33: Device '0x00158d00028aedf7' left the network
Dez 14 15:09:33 FHEMPIOS npm[585]: Zigbee2MQTT:info  2020-12-14 15:09:33: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"left_network","meta":{"friendly_name":"0x00158d00028aedf7"},"type":"device_removed"}'
Dez 14 15:09:33 FHEMPIOS npm[585]: Zigbee2MQTT:info  2020-12-14 15:09:33: Successfully removed 0x00158d00028aedf7
Dez 14 15:09:33 FHEMPIOS npm[585]: Zigbee2MQTT:info  2020-12-14 15:09:33: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"0x00158d00028aedf7","type":"device_removed"}'


dcboy

Ich hab gerade wieder was gefunden, wurde heute ein neues Issue eröffnet wegen den seltsamen Werten in der Auflistung der Heizprofile:
https://github.com/Koenkk/zigbee2mqtt/issues/5298

Der Fehler scheint wohl in der aktuellen DEV behoben worden zu sein.

Auch der Fehler mit der Uhrzeit scheint per Firmwareupdate Geschichte zu sein, sollte sogar inzwischen per z2m funktionieren!
https://github.com/Koenkk/zigbee2mqtt/issues/3821#issuecomment-702825657
und die Erfolgsmeldung hier:
https://github.com/Koenkk/zigbee-OTA/commit/a3c4aad6ea0dc04b6afcbc92a2dc762cca9726e5
https://github.com/Koenkk/zigbee2mqtt/issues/3821#issuecomment-716237961

Vielleicht hilft's bei dir auch @Snocksman ?

Beta-User

 :) Schön, dass es weitergeht!

Mit Risiko (weekprofile-Maintainer) hatte ich Kontakt, werde ihm die Tage dann eine noch etwas geänderte Fassung des Moduls zukommen lassen, dann hätten wir schon mal die Basisintegration vorbereitet, um mit Topics zu arbeiten.

So, wie ich die Sache jetzt verstehe, kann man "nur" zwei Tages Profile senden, nämlich eines für Werktage und eines für WE-Tage. 5+2 => Sa,So sind WE-Tage, 6+1 => nur So ist WE, 7 => alle Tage gleich (vermutlich nach workday).
Werde dann mal versuchen, das entsprechend so umzusetzen, dass Montag und Sonntag die "Leit-Tage" sind, die dann in das zu versendende Profil umgesetzt werden. Fraglich wäre dann aber, wie man mit $we-Tagen umgeht. Vermutlich gibt es dazu eine Art Modus-Umschalter, durch denn dann "holiday" ist, allerdings findet sich dazu nichts in der Doku.
Mal sehen, Rom und so...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Was ich nicht ganz verstehe: Wenn das mit der Uhrzeit ein Firmwarethema des Thermostats ist... Warum tritt das Problem mit der deConz Lösung nicht auf...?  ???

Ich glaube ich teste das die Tage aber auch nochmal mit Zigbee2MQTT... Ich finde das jetzt irgendwie komisch, dass das ganze mit deConz so viel besser läuft. Das schalten der Zwischenstecker funktioniert viel schneller, das Thermostat funktioniert einwandfrei und auch der Helligkeitssensor liefert jetzt regelmäßig Werte.

Vielleicht war da ja mit meiner Zigbee2MQTT Installation irgendwas nicht 100%ig...

dcboy

ok, das ist in der Tat etwas seltsam. Vielleicht ist wirklich was an der Installation faul.

@Beta-User
wie werden sich eigentlich die von dir erstellten Templates nach dem 01.01.2021 verhalten? Koenkk hat ja eine neue API Struktur entwickelt, die wird ab der neuen Version am 01.01 auch eingesetzt
https://github.com/Koenkk/zigbee2mqtt/issues/4466
bzw. hier der genaue Post
https://github.com/Koenkk/zigbee2mqtt/issues/4466#issuecomment-742709335

Beta-User

#41
Na ja, wenn ich das richtig interpretiere mit der API-Änderung, betrifft das nur eine Kleinigkeit an einem "getter"; update kommt mit der nächsten Version.

Da wird dann voraussichtlich auch das mit weekprofile gleich integriert sein, passenden Modulcode hatte ich vorhin auch Risiko geschicht und hoffe mal darauf, dass er Zeit findet, um sich das anzuschauen.

Wäre gut, wenn jemand das noch testen wollte, dazu die beiden Dateien einfach mit den richtigen Rechten (typ: fhem:dialout) ins Modulverzeichnis packen...

attrTemplate sähe dann so aus:
name:zigbee2mqtt_thermostat_with_weekrofile
desc: stub of a version for <a href="https://zigbee.blakadder.com/Moes_HY368-ZB.html">Model HY368-ZB manufactured by Moes</a> via zigbee2mqtt <br>Not yet tested... <br>To contribute, participate in <a href="https://forum.fhem.de/index.php/topic,116535.0.html">Forum Thread</a>
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
order:L_17a
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef }
par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef }
par:ICON;ICON as set, defaults to hm-cc-rt-dn;{ AttrVal("DEVICE","icon","hm-cc-rt-dn") }
farewell:template has been applied successfully. <br>NOTE: code has been downloaded from svn (contrib). <br>For use with weekprofile, additional configuration is needed!
attr DEVICE comment For use with weekprofile, additional configuration is needed
attr DEVICE icon ICON
attr DEVICE devicetopic BASE_TOPIC/DEV_ID
attr DEVICE userattr weekprofile
attr DEVICE readingList $\DEVICETOPIC:.* { my %h; my $temp = $EVENT; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g; my $h2 = json2nameValue($EVENT,'',$JSONMAP); %h = (%h,%$h2); \%h }
attr DEVICE setList \
  desired-temp:slider,5.0,0.5,30.0,1 $\DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  btnLock:LOCK,UNLOCK $\DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
  boost:noArg $\DEVICETOPIC/set {"preset": "boost"}\
  mode:schedule,manual,boost,complex,comfort,eco $\DEVICETOPIC/set {"preset": "$EVTPART1"}\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1, $EVTPART2) }\
  x_send_set_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($\DEVICETOPIC/set $payload)}
attr DEVICE getList desired-temp:noArg desired-temp $\DEVICETOPIC/get {"current_heating_setpoint": ""}\
  measured-temp:noArg measured-temp $\DEVICETOPIC/get {"local_temperature": ""}\
  mode:noArg mode $\DEVICETOPIC/get {"preset": ""}
attr DEVICE periodicCmd measured-temp:55
attr DEVICE stateFormat btnLock\
Measured: measured-temp Battery: batteryPercent %
attr DEVICE devStateIcon LOCKED:secur_lock:btnLock+UNLOCK UNLOCKED:secur_open:btnLock+LOCK
attr DEVICE webCmd desired-temp
attr DEVICE widgetOverride desired-temp:knob,min:5,max:30,angleArc:180,width:40,height:40,fgColor:#FF9900,bgColor:#CCCCCC,step:0.5,lineCap:round,angleOffset:225
attr DEVICE jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp Battery:batteryPercent preset:mode
attr DEVICE setStateList on off
attr DEVICE model zigbee2mqtt_thermostat_with_weekrofile
set DEVICE attrTemplate speechcontrol_type_thermostat
deletereading -q DEVICE (?!associatedWith).*
setreading DEVICE attrTemplateVersion 20201215


Der Code macht jetzt aus weekprofile-"Mon" "workdays" und aus weekprofile-"Sun" "holidays" (wenn "week" nicht "7" ist, sonst wird nur "wordkdays" gesendet), alles andere wird ignoriert, und ob die Zeiten so dann sinnvoll übersetzt sind, kann ich nicht sagen.

Testen kann man auch ohne direkte weekprofile-Unterstützung, dann sind der Name des weekprofile-Devices und <topic>:<entity> als Argumente zu verwenden, also z.b.

set MQTT2_zigbee_0xbc33acfffe45850a weekprofile wp_test default:zigbeetest
oder
set MQTT2_zigbee_0xbc33acfffe45850a weekprofile wp_test test:zigbeetest

("zigbeetest" ist der Name des Thermostaten im weekprofile-Device "wp_test"; das ist aber nur dann relevant, wenn man diesen Namen dann im Attribut "weekprofile" gesetzt hat; darüber identifiziert weekprofile dann (später) seine "Clients".

Falls ihr noch nicht mit weekprofile gearbeitet haben solltet, ist das ggf. alles etwas verwirrend. Bin da zwar auch noch nicht vertieft drin, aber eine erste Orientierung kann ich vermutlich notfalls versuchen zu vermitteln...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Kurze Info: Risiko hat die Version mit MQTT2_DEVICE-Unterstützung vorhin dankenswerter Weise eingecheckt, und auch die attrTemplate-Änderung samt myUtils ist seit kurzem im svn und kommt dann mit dem morgigen update.
Irgendwann ziehe ich dann noch die commandref dazu nach, ist vermutlich erklärungsbedürftig, der perl-Code an der Stelle (v.a. auch, was die Voraussetzungen angeht, die erfüllt sein müssen).

Ob es glücklich ist, dass bei "week = "7" nur "workdays" versendet wird, werden wir sehen, es ging zunächst auch darum, die Möglichkeiten zu zeigen ;) .

feedback wäre willkommen (falls jemand dann schon auf der letzten Version von z2m ist).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Ich setze mir morgen mal nen zweiten Raspi mit zigbee2mqtt zum testen auf... Dann zerbastele ich mir nicht ständig meinen FHEM Raspi (da ist die Frau dann irgendwann auch genervt...   ;D ) und ich kann leichter zwischen deconz und zigbee2mqtt switchen.

dcboy

Ich habe bisher noch gar nicht mit den weekprofiles gearbeitet, mein "Produktiv-FHEM" steuert eigentlich bisher nur Licht und loggt etwas Stromverbrauch. Die ganzen Spielereien wie jetzt mit den Thermostaten, Telegram Bot usw. betreibe ich auf einem Test-PI, da kann ich problemlos ausprobieren. Ich bin bisher eher so derjenige, der sich nach Tutorials alles zusammenbastelt, Hauptsache danach funktionierts ;-)

Zwischenzeitlich wurde auch die Infoseite des Thermostats überarbeitet, jetzt kann man auch die Profile bearbeiten und die Comfort und Eco Temperatur, sowie die Boostfunktion und -zeit einstellen:

https://github.com/groenmarsmannetje/zigbee2mqtt.io/commit/ff407757a98c021f71544d06e65048a8de0602e4

Am Wochenende werd ich mir mal das mit den weekprofiles anschauen

Beta-User

Na ja, ich wollte eigentlich auch nur ein paar Rollläden zur richtigen Zeit hoch- und runterfahren lassen...

Also willkommen an Bord ihr zwei, wir werden das schon irgendwie hinschaukeln ;D . Ihr müßt halt etwas Geduld mit mir haben, ohne Hardware ist es manchmal schwierig zu verstehen, wie so ein Teil "tickt"...

"/set/schedule" als Teil des Topic-Pfades müßte man noch ergänzen, das geht bisher nur nach "/set", und meine Spekulationen über die Bedeutung von n+m bzw. "7" scheinen zu passen.

Was weekprofile angeht, versuche ich das grade hier zu erklären: https://forum.fhem.de/index.php/topic,116719.msg1110591.html#msg1110591
Ist egal, dass es da um WDT geht, "zufällig" tickt MQTT2_DEVICE gleich, was Topic-usage betrifft ::) .

ACHTUNG: Man muss nach dem Setzen des weekprofile-Attributs (das macht das attrTemplate eigentlich schon, es wird einfach erst mal der Device-Name verwendet) dann nochmal die DEF des MQTT2_DEVICE anfassen, damit weekprofiles seine Clients neu scannt! Sonst halt FHEM neu starten (oder ein anderes MQTT2_DEVICE anlegen), das hätte auch denselben Effekt.

weekprofile ist übrigens wirklich klasse. Bisher kannte ich das nur "vom Hörensagen" und dem Basteln der Schnittstelle zu WeekdayTimer. Jetzt habe ich seit kurzem einen ZWave-Spirit im Einsatz, der via WeekdayTimer seine Soll-Temperaturen erhält und bei der Gelegenheit auch meine Homematic-Thermostate nach weekprofile transferiert. Hat jetzt alles eine einheitliche Verwaltung und ich muss nicht mehr irgendwelche obskuren Textfiles editieren (für CUL_HM/HMinfo). Wirklich sehr funktional, die Kombi :) .



Was die Profile angeht, müßten die eigentlich über {"system_mode": "auto"} aktivierbar sein, und die Schaltzeiten würde ich als "ab jetzt soll nn °C der Sollwert sein" deuten.

Unklar ist mir noch, ob wir ggf. die erste Schaltzeit eines Tages ignorieren sollten. Aber das besprechen wir dann, wenn ihr mal etwas "weekprofile intus" habt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Hat sich für zigbee2mqtt jemand schonmal Zigbee2Mqtt Assistant angeschaut ? Sieht eigentlich recht cool aus... https://github.com/yllibed/Zigbee2MqttAssistant Das macht das ganze etwas deconz ähnlicher. Macht vielleicht gerade für Einsteiger dann alles etwas leichter zu fassen.

dcboy

Zitat von: Snocksman am 17 Dezember 2020, 20:00:17
Hat sich für zigbee2mqtt jemand schonmal Zigbee2Mqtt Assistant angeschaut ? Sieht eigentlich recht cool aus... https://github.com/yllibed/Zigbee2MqttAssistant Das macht das ganze etwas deconz ähnlicher. Macht vielleicht gerade für Einsteiger dann alles etwas leichter zu fassen.

ist das nicht das gleiche wie das Frontend von z2m?
https://www.zigbee2mqtt.io/information/frontend.html

TL60

Hallo,
das geht auch etwas einfacher. Zigbee2Mqtt hat ein eingebautes Webfrontend, welches nur in der Configuration.yaml aktiviert werden muß siehe https://www.zigbee2mqtt.io/information/frontend.html. Läuft bei mir auf einem Testsystem seid 1 Woche zu meiner vollsten Zufriedenheit.
Gruß Thomas
Edit: dcboy war schneller, :( und es scheint nicht dasselbe zu sein, weil ich den Zigbee2MqttAssistant nicht vernünftig zum laufen bekommen habe. Beispielsweise hat er bei mir nie die Netzwerkmap vernünftig angezeigt Beim eingebauten Frontend kein Problem.
Gruß Thomas

Beta-User

Bevor ihr testet, bitte dann erst nochmal ein
{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }ausführen und dann auch das attrTemplate nochmal anwenden, damit der aktualisierte Code auch noch aus contrib heruntergeladen wird.

Habe mal setter für workdays und holidays eingefügt, der Code macht jetzt intern zwei "set DEVICE ...", um die Profildaten dann letztendlich über diese setter zu senden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Danke für den Tipp, mit dem integrierten Webinterface von Zigbee2MQTT !!!  Hab das gerade mal auf meinem Testraspi aufgesetzt und festgestellt, dass man dem Thermostat auch hierüber ein Firmwareupdate verpassen kann... (Wenn auch sehr langsam; Veranschalgte Zeit: über ne Stunde) Naja, muss ich nicht mehr auf dieses Tuya-Gateway warten. Ich bin gespannt, was das Teil sagt, wenn die Stunde rum ist.

Beta-User

#51
Hmmm, vielleicht ist es Zeit, tatsächlich mal wieder einen Pi aus dem Keller zu holen...?!?
Wäre interessant, mal zigbee2mqtt mit meinem ConBee II anzuwerfen und dann ggf. mal zu schauen, ob es da was an updates gibt.

Hat jemand eine Ahnung, woher das update genau runtergeladen wird? (Dann müßte es auch mit deconz gehen, oder? Das interessiert mich v.a., weil es evtl. ja auch für manchen anderen "China-Kram" updates gibt, die ggf. das Verhalten deutlich verbessern (=> unboxing)).
(EDIT: hat sich erledigt, es gibt eine Seite, auf der so ziemich alles zusammenläuft: https://github.com/Koenkk/zigbee-OTA)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Also mit deconz hatte ich auch mal versucht den Thermostat Upzudaten, leider ohne Erfolg. Das Update über das Webfrontend von Zigbee2MQTT hat zwar sehr lange gedauert, ich bin aber spontan begeistert... Nicht nur, dass die Uhrzeit sich nicht mehr verstellt, sie wird jetzt auch korrekt auf die Uhrzeit des Raspberry gesetzt, auf dem Zigbee2MQTT läuft.  8)

Beta-User

Hmm, allgemein sind firmware-updates bei Batterie-Geräten gerne langwierig (nicht nur bei ZigBee).

Interessehalber: Welchen Abstand hattest du zum Dongle und: lief das direkt Dongle<=>Thermostat oder war da noch was dazwischen? Tendenziell würde ich vermuten, dass 2m Abstand+neu Pairen (zwecks update des Mesh-Routings) hilfreich wären...?

Dass die Uhrzeit jetzt passt, überrascht mich eher weniger, das war ja eine der Verbesserungen, die das bringen sollte :P .

Jetzt bin ich mal gespannt, was du zum Thema "attrTemplate" und weekprofile sagen wirst und warte dann mal auf
- Ergänzung der weiteren Setter im attrTemplate und
- den passenden Abschnitt für's Wiki.
zigbee2mqtt habe ich zwischenzeitlich aus den "Praxisbeispielen" rausgenommen, ihr könnt den jetzt also nach Herzenslust verbessern, ohne auf den Gesamtkontext mit den Praxisbeispielen noch groß Rücksicht nehmen zu müssen ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Ich habe in den letzten Tagen FHEM mal komplett neu aufgesetzt und jetzt gerade Zigbee2MQTT installiert; nun habe ich allerdings ein neues Phänomen:

Beim starten von Zigbee2MQTT wird zunächst ein Device mit dem Namen MQTT2_mqttjs_7c54a8f7 erkannt, welchem ich das Template zigbee2mqtt_bridge zugeordnet habe. Nach einem neustart des Raspis wird nun jedoch ein weiters Device mit dem Namen MQTT2_zigbee_bridge erkannt. Was mache ich nun mit diesem Device...?! Auch das Template zigbee2mqtt_bridge zuweisen...? Ich habe es erstmal so gemacht... Aber warum bekomme ich Plötzlich zwei Devices angelegt ?!

MQTT2_mqttjs_7c54a8f7

defmod MQTT2_mqttjs_7c54a8f7 MQTT2_DEVICE mqttjs_7c54a8f7
attr MQTT2_mqttjs_7c54a8f7 IODev MQTT2_FHEM_Server
attr MQTT2_mqttjs_7c54a8f7 bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_mqttjs_7c54a8f7 comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
attr MQTT2_mqttjs_7c54a8f7 devicetopic zigbee2mqtt
attr MQTT2_mqttjs_7c54a8f7 getList devicelist:noArg log $DEVICETOPIC/bridge/config/devices/get\
  networkmap_raw:noArg raw $DEVICETOPIC/bridge/networkmap raw\
  networkmap_graphviz:noArg graphviz $DEVICETOPIC/bridge/networkmap graphviz
attr MQTT2_mqttjs_7c54a8f7 icon mqtt
attr MQTT2_mqttjs_7c54a8f7 model zigbee2mqtt_bridge
attr MQTT2_mqttjs_7c54a8f7 readingList $DEVICETOPIC/bridge/state:.* state\
  $DEVICETOPIC/bridge/config/devices:.* {}\
  $DEVICETOPIC/bridge/config/log_level:.* log_level\
  $DEVICETOPIC/bridge/config/permit_join:.* permit_join\
  $DEVICETOPIC/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }\
  $DEVICETOPIC/bridge/log:.*\"type\".\"devices\".\"message\".* devices\
  $DEVICETOPIC/bridge/log:.* log\
  $DEVICETOPIC/bridge/networkmap:.* {}\
  $DEVICETOPIC/bridge/networkmap/graphviz:.* graphviz\
  $DEVICETOPIC/bridge/networkmap/raw:.* raw\
  $DEVICETOPIC/bridge/config:.* { json2nameValue($EVENT) }
attr MQTT2_mqttjs_7c54a8f7 room MQTT2_DEVICE
attr MQTT2_mqttjs_7c54a8f7 setList log_level:debug,info,warn,error $DEVICETOPIC/bridge/config/log_level $EVTPART1\
  permit_join:true,false $DEVICETOPIC/bridge/config/permit_join $EVTPART1\
  remove:textField $DEVICETOPIC/bridge/config/remove $EVTPART1\
  ota_update:textField $DEVICETOPIC/bridge/ota_update/update $EVTPART1\
  ota_update_check:textField $DEVICETOPIC/bridge/ota_update/check $EVTPART1\
  y_device_setting:textField $DEVICETOPIC/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField $DEVICETOPIC/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField $DEVICETOPIC/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField $DEVICETOPIC/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField $DEVICETOPIC/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField $DEVICETOPIC/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField $DEVICETOPIC/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField $DEVICETOPIC/bridge/config/elapsed $EVTPART1\
  z_last_seen:disable,ISO_8601,epoch,ISO_8601_local $DEVICETOPIC/bridge/config/last_seen $EVTPART1\
  z_ban:textField $DEVICETOPIC/bridge/config/ban $EVTPART1\
  z_rename:textField $DEVICETOPIC/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg $DEVICETOPIC/bridge/config/reset
attr MQTT2_mqttjs_7c54a8f7 setStateList on off

setstate MQTT2_mqttjs_7c54a8f7 online
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:15:29 attrTemplateVersion 20201215
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 commit 0514204
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_meta_maintrel 0
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_meta_majorrel 38
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_meta_minorrel 102
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_meta_product 0
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_meta_revision 0x26660700
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_meta_transportrev 0
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 coordinator_type ConBee2/RaspBee2
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 log_level info
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 network_channel 11
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 network_extendedPanID 0xdddddddddddddddd
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 network_panID 6754
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 permit_join true
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:21 state online
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:16:02 subscriptions zigbee2mqtt/#
setstate MQTT2_mqttjs_7c54a8f7 2020-12-22 17:21:23 version 1.16.2


MQTT2_zigbee_bridge

defmod MQTT2_zigbee_bridge MQTT2_DEVICE zigbee_bridge
attr MQTT2_zigbee_bridge IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_bridge bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_bridge comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
attr MQTT2_zigbee_bridge devicetopic zigbee2mqtt
attr MQTT2_zigbee_bridge getList devicelist:noArg log $DEVICETOPIC/bridge/config/devices/get\
  networkmap_raw:noArg raw $DEVICETOPIC/bridge/networkmap raw\
  networkmap_graphviz:noArg graphviz $DEVICETOPIC/bridge/networkmap graphviz
attr MQTT2_zigbee_bridge icon mqtt
attr MQTT2_zigbee_bridge model zigbee2mqtt_bridge
attr MQTT2_zigbee_bridge readingList $DEVICETOPIC/bridge/state:.* state\
  $DEVICETOPIC/bridge/config/devices:.* {}\
  $DEVICETOPIC/bridge/config/log_level:.* log_level\
  $DEVICETOPIC/bridge/config/permit_join:.* permit_join\
  $DEVICETOPIC/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }\
  $DEVICETOPIC/bridge/log:.*\"type\".\"devices\".\"message\".* devices\
  $DEVICETOPIC/bridge/log:.* log\
  $DEVICETOPIC/bridge/networkmap:.* {}\
  $DEVICETOPIC/bridge/networkmap/graphviz:.* graphviz\
  $DEVICETOPIC/bridge/networkmap/raw:.* raw\
  $DEVICETOPIC/bridge/config:.* { json2nameValue($EVENT) }\
zigbee2mqtt/bridge/logging:.* { json2nameValue($EVENT) }\
zigbee2mqtt/bridge/info:.* { json2nameValue($EVENT) }\
zigbee2mqtt/bridge/devices:.* { json2nameValue($EVENT) }\
zigbee2mqtt/bridge/groups:.* groups
attr MQTT2_zigbee_bridge room MQTT2_DEVICE
attr MQTT2_zigbee_bridge setList log_level:debug,info,warn,error $DEVICETOPIC/bridge/config/log_level $EVTPART1\
  permit_join:true,false $DEVICETOPIC/bridge/config/permit_join $EVTPART1\
  remove:textField $DEVICETOPIC/bridge/config/remove $EVTPART1\
  ota_update:textField $DEVICETOPIC/bridge/ota_update/update $EVTPART1\
  ota_update_check:textField $DEVICETOPIC/bridge/ota_update/check $EVTPART1\
  y_device_setting:textField $DEVICETOPIC/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField $DEVICETOPIC/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField $DEVICETOPIC/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField $DEVICETOPIC/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField $DEVICETOPIC/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField $DEVICETOPIC/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField $DEVICETOPIC/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField $DEVICETOPIC/bridge/config/elapsed $EVTPART1\
  z_last_seen:disable,ISO_8601,epoch,ISO_8601_local $DEVICETOPIC/bridge/config/last_seen $EVTPART1\
  z_ban:textField $DEVICETOPIC/bridge/config/ban $EVTPART1\
  z_rename:textField $DEVICETOPIC/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg $DEVICETOPIC/bridge/config/reset
attr MQTT2_zigbee_bridge setStateList on off

setstate MQTT2_zigbee_bridge online
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_endpoints_1_clusters_input_1 genOta
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_endpoints_1_clusters_input_2 genTime
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_endpoints_1_clusters_output_1 ssIasZone
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_endpoints_242_clusters_output_1 greenPower
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_friendly_name Coordinator
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_ieee_address 0x00212effff05f38d
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_interview_completed true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_interviewing false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_network_address 0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_supported false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 1_type Coordinator
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 associatedWith MQTT2_zigbee_bridge
setstate MQTT2_zigbee_bridge 2020-12-22 17:20:18 attrTemplateVersion 20201215
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 commit 0514204
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_availability_timeout 0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_cache_state true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_cache_state_persistent true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_cache_state_send_on_startup true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_channel 11
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_elapsed false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_1 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_2 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_3 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_4 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_5 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_6 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_7 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_ext_pan_id_8 221
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_homeassistant_discovery_topic homeassistant
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_homeassistant_legacy_triggers true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_homeassistant_status_topic hass/status
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_last_seen disable
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_legacy_api true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_log_directory /opt/zigbee2mqtt/data/log/%TIMESTAMP%
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_log_file log.txt
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_log_level info
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_log_output_1 console
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_log_output_2 file
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_log_rotation true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_pan_id 6754
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_report false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_soft_reset_timeout 0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_advanced_timestamp_format YYYY-MM-DD HH:mm:ss
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_experimental_new_api true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_experimental_output json
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_frontend_host 0.0.0.0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_frontend_port 8080
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_homeassistant false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_fill_coordinator #e04e5d
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_fill_enddevice #fff8ce
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_fill_router #4ea3e0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_font_coordinator #ffffff
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_font_enddevice #000000
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_font_router #ffffff
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_line_active #009900
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_map_options_graphviz_colors_line_inactive #994444
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_mqtt_base_topic zigbee2mqtt
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_mqtt_force_disable_retain false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_mqtt_include_device_information false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_mqtt_server mqtt://localhost
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_permit_join true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_serial_disable_led false
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 config_serial_port /dev/ttyACM0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_meta_maintrel 0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_meta_majorrel 38
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_meta_minorrel 102
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_meta_product 0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_meta_revision 0x26660700
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_meta_transportrev 0
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 coordinator_type ConBee2/RaspBee2
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 groups []
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 level info
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 log_level info
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 message MQTT publish: topic 'zigbee2mqtt/bridge/config', payload '{"commit":"0514204","coordinator":{"meta":{"maintrel":0,"majorrel":38,"minorrel":102,"product":0,"revision":"0x26660700","transportrev":0},"type":"ConBee2/RaspBee2"},"log_level":"info","network":{"channel":11,"extendedPanID":"0xdddddddddddddddd","panID":6754},"permit_join":true,"version":"1.16.2"}'
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 network_channel 11
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 network_extendedPanID 0xdddddddddddddddd
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 network_extended_pan_id 0xdddddddddddddddd
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 network_panID 6754
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:22 network_pan_id 6754
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 permit_join true
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:21 state online
setstate MQTT2_zigbee_bridge 2020-12-22 17:21:23 version 1.16.2

Beta-User

...keine ClientID in der yaml vergeben...
(die paho-basierten Lösungen generieren eine zufällige Sitzungskennung bei jedem Start, wenn man nichts anderes angibt). Steht übrigens im Wiki, jetzt aus "Praxisbeispiele" ausgelagert in https://wiki.fhem.de/wiki/Zigbee2mqtt :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

Jepp, die Client-ID wars...  ::)

Das Thermostat habe ich gerade schonmal grob getestet und es sieht schon ganz gut aus. Das schalten der Temperatur funktioniert jetzt auch zuverlässig. Morgen spiele ich noch was mehr damit rum.

Was müsste ich bei dem Weekprofile denn eingeben ? In der FHEM GUI sieht das bei mir so aus, dass ich set weekprofile auswählen kann und dahinter ein leeres Eingabefeld habe...

Beta-User

In das Eingabefeld (so man das überhaupt direkt nutzen will...!?!) gehören:
set <m2-devicename> weekprofile <weekprofile-devicename> <weekprofile-identifier>
<weekprofile-identifier> ist dabei ein Paar aus <topic>:<entity>.

Rund um diesen Beitrag sollte da etwas mehr dazu zu finden sein, gilt hier 1:1 genauso.

Kurzfassung:
(Mind.) ein weekprofile-Device muss existieren, dort sollte useTopics aktiviert sein.
Dann sollte es da einige Profile geben, wobei eben immer das, was "dasselbe Ziel" hat, unter einer "entity" gruppiert wird.
Im m2-Device sollte diese "entity" dann im Attribut "weekprofile" angegeben sein, damit weekprofile seine "Clients" darüber findet. (Im Moment sollte da der Name des m2-Device drin stehen, das kann man aber ändern). Nach jeder Anpassung des Attributs bitte einmal die DEF des m2-Device anfassen, damit weekprofile seine Clients aktualisiert.

Dann kann man über einen Topic-Wechsel direkt alle Clients ansteuern, weekprofile sendet dann genau den passenden Befehl an die "Schnittstelle" weekprofile-setter am m2-Device.

Hoffe, das ist halbwegs nachvollziehbar?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Florian_GT

#58
Tag zusammen,

ich schließ mich mal eurer Bastelrunde an ;)

Gerät ist hier, wird gleich verbaut, schon gepaired und fhem zuckt auch schon. Noch einige Fehler z.B. beim Auslesen der Temperatur, aber das scheint an Zigbee2Mqtt zu liegen, muss bestimmt dann updaten?
error 2021-01-09 19:51:04: No converter available for 'local_temperature' ()
error 2021-01-09 19:51:07: No converter available for 'local_temperature' ()
error 2021-01-09 19:51:08: No converter available for 'local_temperature' ()
error 2021-01-09 19:51:29: No converter available for 'get' 'preset' ()


Was hat es mir der pm Datei auf sich, die im Background heruntergeladen worden ist? Und wie bekomm ich denn eine schöne Oberfläche? Gibts da schon was von TabletUI?. Wenn mich jemand unterstützt kann ich im Gegenzug dafür gleich eine Anleitung im Wiki schreiben. Oder gibt es schon anderswo ein Howto?

Gruß Florian
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Beta-User

Die Fehler kann ich nicht deuten, aber grade bei den (bei zigbee2mqtt) "frisch dazugekommenen" Geräten ist ein update sicher eine gute Idee. In FHEM können wir nur verarbeiten, was an Infos ankommt...

Die myUtils stellt nur eine Spezialfunktion bereit, mit der man weekprofile-Daten entgegennehmen kann und dann (mit Einschränkungen) an das Thermostat schicken.

Tablet-UI kenne ich nicht, aber im Prinzip ist das attrTemplate der Versuch, einen "normalen Thermostaten" aus den MQTT-Daten zu generieren, das sollte also eigentlich nicht groß anders sein, als z.B. bei einem CUL_HM-Clima-Device.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Snocksman

#60
Mit dem Weekprofile habe ich bisher leider noch nicht testen können... Vielleicht schaffe ich es dieses WE ja mal.

Hier aber noch ein paar kleine Änderungen bzw. Fehlerkorrekturen, welche ich an dem Template vornehmen würde:

Es gibt keinen Wert Battery, welcher von dem Thermostat zurückgeliefert wird. Es gibt nur einen Wert battery_low, welcher true oder false zurückgibt.

Im devStateIcon ist als Symbol secur_lock angegeben, es heißt aber secur_locked. Dann wird das Schloss Icon auch richtig dargestellt.

Ich habe jsonMap wie folgt geändert :

attr Bad_Thermostat jsonMap current_heating_setpoint:desired-temp local_temperature:measured-temp battery_low:batteryLow preset:mode


Und stateFormat dann so:

attr Bad_Thermostat stateFormat child_lock\
batteryLow\
Measured: measured-temp °C


Und zu guter letzt devStateIcon:

attr Bad_Thermostat devStateIcon LOCKED:secur_locked:btnLock+UNLOCK UNLOCKED:secur_open:btnLock+LOCK true:measure_battery_25@red false:measure_battery_100@green

Snocksman

#61
Jetzt hab ich lange genug rumprobiert und (glaube ich) endlich verstanden wie´s funktioniert...  8)

Hier noch eine Erweiterung für die setList um die Funktion system_mode:

attr Esszimmer_Thermostat setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  btnLock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
  mode:schedule,manual,boost,complex,comfort,eco $DEVICETOPIC/set {"preset": "$EVTPART1"}\
  system_mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}\
  holidays $DEVICETOPIC/set/schedule { "holidays":[$EVTPART1] }\
  workdays $DEVICETOPIC/set/schedule { "workdays":[$EVTPART1] }\
  week:5+2,6+1,7 $DEVICETOPIC/set $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1, $EVTPART2) }\
  x_send_set_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //;; qq($DEVICETOPIC/set $payload)}


Der Punkt ist, wie ich finde, noch ganz cool, weil sich damit der Heizkörper ganz abdrehen (off), oder voll Aufdrehen (heat) lässt. Das Abdrehen nutze ich z.B. wenn das Fenster über dem Heizkörper geöffnet wird.

Was mir noch aufgefallen ist: Der Punkt boost in der setList könnte wegfallen, weil es ja schon eine Option von mode ist.

Beta-User

Sorry, dass es mit der Rückmeldung etwas gedauert hat...

Vorab: Freut mich, wenn der Groschen zu der weekprofile-Geschichte gefallen ist. Ist nicht ganz so einfach zu verstehen, v.a. dann in diesem Zusammenhang. Btw.: es gibt ein Mini-update der myUtils-File wegen Änderungen, die @Risiko als Maintainer von weekprofile grade in der Mache hat.

Was die attrTemplates hier angeht, muss ich mir das mal in Ruhe ansehen, auch in der Zusammenschau mit anderen attrTemplate-Diskussionen (ausgehend von MAX!/MQTT_GENERIC_BRIDGE). Von daher dürfte z.B. das Reading für die gemessene Temperatur mittelfristig doch eher "temperature" heißen.

Was die Modi angeht, bin ich unschlüssig, welcher denn "mode" heißen sollte, eventuell sollte man auch den Namen "preset" unangetastet lassen?

"boost" als separaten Setter weglassen finde ich ok, das ist auch bei anderen Thermostaten (CUL_HM) nichts separates, und das hier anzubieten, ist ggf. später hinderlich...

battery_low ist schwierig, bin geneigt, das original-Reading zu belassen und einen userReadings-Eintrag zu ergänzen, der dann entsprechend https://wiki.fhem.de/wiki/DevelopmentGuidelinesReadings "batteryState: ok|low" liefert? Für stateFormat sollte man auf alle Fälle einen eindeutigen Kenner hinzufügen, damit man bei mehreren gleichen Werten weiß, was zu was gehört (in deinem Wording: "1:batteryLow\" und "1.true:measure_battery_25@red").

Bin mal auf deine Meinung gespannt, und vielleicht kannst du das im Zusammenhang gleich als attrTemplate so aufbereiten, dass ich's direkt einchecken kann?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dirkcx

vielen Dank für Eure Arbeit an dem Template.

zu batteryState nutze ich das userReading
batteryState {if(ReadingsVal($NAME,"battery_low","false") eq "false") {return "ok"} else  {return "low"} }

bei mir funktioniert das getList mode:noArg mode $DEVICETOPIC/get {"preset": ""} leider nicht.
Fehlermeldung: Timeout reading answer for zigbee2mqtt/ThermostatMultiraum/get {"preset": ""}

Das ist nachvollziehbar, im log von zigbee2mqtt gibts damit den folgenden Fehler: No converter available for 'get' 'preset' ()
Allerdings ist das lt. https://www.zigbee2mqtt.io/devices/TS0601_thermostat.html der korrekte Aufruf. Ich bin generell mit den mqtt Requests recht ratlos mit den Vorgaben dieser Website. Bei mir funktionieren viele nicht bzw. schmeißen analoge Fehlermeldungen.
Allerdings scheint mein Thermostat auch eine alte Firmware zu haben. Alle zeitbezogenen Funktionen klappen nicht. Wie kann ich ohne das Tuya Gateway die Firmware updaten?

off topic: mein Tuya TS0601 hat einen enormen Batteribedarf, ca. 6 Wochen für den ersten Batteriesatz.
Und das Regelverhalten hat ein ungewöhnlich großes Delta von 2 °C, siehe Screenshot
Seht Ihr ähnliches Verhalten bei Euren Thermostaten?

Server: Gigabyte GB-BACE3160 | Ubuntu 20.04 LTS Server | aktuelles FHEM | CULUSB (busware) FS20/FHT/... | MySensors: seriell / esp8266 | ZigBee (Zigbee CC2531 / zigbee2mqtt) | homebridge / homebridge-config-ui

Beta-User

Hier mal ein konsolidierter Zwischenstand:

name:zigbee2mqtt_thermostat_with_weekrofile
desc: Developed for <a href="https://zigbee.blakadder.com/Moes_HY368-ZB.html">Model HY368-ZB manufactured by Moes</a> via zigbee2mqtt <br>Might not completely work for all firmware versions and also some commands seem not yet to be fully integrated on the zigbee2mqtt side... <br>To contribute, participate in <a href="https://forum.fhem.de/index.php/topic,116535.0.html">Forum Thread</a>
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
order:L_17a
par:BASE_TOPIC;base topic set in configuration.yaml of the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[\b]?([^/:]+)[/].+, ? $1 : undef }
par:DEV_ID;name of the device in the zigbee2mqtt bridge;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,[^/]+[/]([^/:]+).*, ? $1 : undef }
par:ICON;ICON as set, defaults to temp_control;{ AttrVal("DEVICE","icon","temp_control") }
par:WPNAME;weekprofile attr value, defaults to device name;{ AttrVal("DEVICE","weekprofile","DEVICE") }
farewell:template has been applied successfully. <br>NOTE: code has been downloaded from svn (contrib). <br>For use with weekprofile, additional configuration is needed!
{ Svn_GetFile("contrib/AttrTemplate/99_attrT_z2m_thermostat_Utils.pm", "FHEM/99_attrT_z2m_thermostat_Utils.pm", sub(){ CommandReload(undef, "99_attrT_z2m_thermostat_Utils.pm") }) }
attr DEVICE comment For use with weekprofile, additional configuration is needed
attr DEVICE icon ICON
attr DEVICE devicetopic BASE_TOPIC/DEV_ID
attr DEVICE userattr weekprofile
attr DEVICE weekprofile WPNAME
attr DEVICE readingList $\DEVICETOPIC:.* { my %h; my $temp = $EVENT; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g; my $h2 = json2nameValue($EVENT,'',$JSONMAP); %h = (%h,%$h2); \%h }
attr DEVICE setList \
  desired-temp:slider,5.0,0.5,30.0,1 $\DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  btnLock:LOCK,UNLOCK $\DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
  preset:schedule,manual,boost,complex,comfort,eco $\DEVICETOPIC/set {"preset": "$EVTPART1"}\
  mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}\
  holidays $\DEVICETOPIC/set/schedule { "holidays":[$EVTPART1] }\
  workdays $\DEVICETOPIC/set/schedule { "workdays":[$EVTPART1] }\
  week:5+2,6+1,7 $\DEVICETOPIC/set $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1, $EVTPART2) }\
  x_send_set_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($\DEVICETOPIC/set $payload)}
attr DEVICE getList desired-temp:noArg desired-temp $\DEVICETOPIC/get {"current_heating_setpoint": ""}\
  temperature:noArg temperature $\DEVICETOPIC/get {"local_temperature": ""}\
  preset:noArg preset $\DEVICETOPIC/get {"preset": ""}
attr DEVICE periodicCmd temperature:55
attr DEVICE stateFormat btnLock\
Measured: temperature Battery: batteryPercent %
attr DEVICE devStateIcon LOCKED:secur_lock:btnLock+UNLOCK UNLOCKED:secur_open:btnLock+LOCK
attr DEVICE webCmd desired-temp
attr DEVICE widgetOverride desired-temp:knob,min:5,max:30,angleArc:180,width:40,height:40,fgColor:#FF9900,bgColor:#CCCCCC,step:0.5,lineCap:round,angleOffset:225
attr DEVICE jsonMap current_heating_setpoint:desired-temp local_temperature:temperature Battery:batteryPercent system_mode:mode
attr DEVICE setStateList on off
attr DEVICE userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}
attr DEVICE model zigbee2mqtt_thermostat_with_weekrofile
set DEVICE attrTemplate speechcontrol_type_thermostat
deletereading -q DEVICE (?!associatedWith).*
setreading DEVICE attrTemplateVersion 20210211


"mode" ist jetzt system_mode, das bat-userReadings ist mit trigger implementiert und boost raus, temperature wird jetzt auch in anderen Fällen statt measured-temp verwendet werden.

getList ist unverändert, in der Hoffnung, dass es entweder an der firmware liegt oder das auf zigbee2mqtt-Seite noch entspr. der dortigen "vorauseilenden Doku" nachgezogen wird. Wg. update (beide Aspekte...) bitte ggf. da mal nachhaken. Das "timeout" kann übrigens auch sein, wenn nicht rechtzeitig eine Rückmeldung kommt (ist hier aber wohl nicht das Thema).

Was das übersteuernde Verhalten angeht: sollte man wohl in der firmware angehen; falls es mit dem update nicht hilft ggf. mal schauen, ob man einen externen Sensor verwenden kann; ext. Sensorik hilft auch in anderen Fällen, ein gleichmäßigeres Regelverhalten zu erzielen. Der temp-Wert am Thermostat gemessen ist eh' prinzipiell ein "Probem".
Manche Thermostate lernen auch das Umgebungsverhalten und stellen die Änderungsparameter mit der Zeit entsprechend ein (siehe Diskussionen zum HM-CC-RT-DN und der firmware 1.4 bzw. 1.5, falls sich jemand damit näher auseinandersetzen will), aber 6 Wochen für einen Satz Batterien halte ich so oder so nicht für zeitgemäß.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

elle

#65
Hallo zusammen,

leider muss ich mal diesen Thread reanimieren, da ich ein Problem mit dem Setzen von schedules habe. Vielleicht koennte jmd. von Euch das mal Ueberpruefen (ev. bin ich ja einfach nur zu bloed hierfuer ;-)).

Ich habe hier einen Satz TuYa TS0601_thermostat Geraeten via z2m und MQTT2_SERVER an FHEM angeklemmt. So weit auch alles kein Thema, funktioniert bis auf folgendes:
Setzen eines Weekprofiles.

Wenn ich folgendes mache:

set MQTT2_zigbee_Thermostat_Bad_EG weekprofile WeekProfile.Thermostat_Bad_EG default:default

sollte er ja das Weekprofile umschreiben nach JSON und ueber das MQTT Topic
zigbee2mqtt/Thermostat_Bad_EG/set/schedule auf das Thermostat schreiben.

Nun hat mein Profile aber weniger als 6 Schaltpunkte pro Tag und das gibt leider in z2m einen Fehler:
Error 2022-10-23 17:58:55Publish 'set' 'schedule' to 'Thermostat_Bad_EG' failed: 'TypeError: Cannot read properties of undefined (reading 'hour')'

Ich habe im MQTT Explorer ein bisschen herumprobiert und scheinbar erwartet z2m an der Stelle (auch bei holidays) mindestens 6 Schaltpunkte. Hat jemand von Euch das schonmal gesehen?!

Danke + Gruss
/elle
Nachtrag, lists:

defmod MQTT2_zigbee_Thermostat_Bad_EG MQTT2_DEVICE zigbee_Thermostat_Bad_EG
attr MQTT2_zigbee_Thermostat_Bad_EG userattr batteryStatus batteryStatus_map structexclude weekprofile
attr MQTT2_zigbee_Thermostat_Bad_EG DbLogInclude position|preset|mode|desired-temp|linkquality|window_open|battery_low|temperature|comfort_temperature|away_preset_days|child_lock|batteryState
attr MQTT2_zigbee_Thermostat_Bad_EG alias Thermostat Bad EG
attr MQTT2_zigbee_Thermostat_Bad_EG batteryStatus Struct.BatterieStatus
attr MQTT2_zigbee_Thermostat_Bad_EG batteryStatus_map batteryState
attr MQTT2_zigbee_Thermostat_Bad_EG comment For use with weekprofile, additional configuration is needed
attr MQTT2_zigbee_Thermostat_Bad_EG devStateIcon Battery..ok:measure_battery_100@green Battery..low:measure_battery_0@red
attr MQTT2_zigbee_Thermostat_Bad_EG devicetopic zigbee2mqtt/Thermostat_Bad_EG
attr MQTT2_zigbee_Thermostat_Bad_EG event-on-change-reading position,preset,mode,desired-temp,linkquality,window_open,battery_low,temperature,comfort_temperature,away_preset_days,child_lock,batteryState
attr MQTT2_zigbee_Thermostat_Bad_EG getList desired-temp:noArg desired-temp $DEVICETOPIC/get {"current_heating_setpoint": ""}\
  temperature:noArg temperature $DEVICETOPIC/get {"local_temperature": ""}\
  preset:noArg preset $DEVICETOPIC/get {"preset": ""}
attr MQTT2_zigbee_Thermostat_Bad_EG group Thermostat
attr MQTT2_zigbee_Thermostat_Bad_EG icon temp_control
attr MQTT2_zigbee_Thermostat_Bad_EG jsonMap current_heating_setpoint:desired-temp local_temperature:temperature Battery:batteryPercent system_mode:mode battery:batteryPercent voltage:batterymV
attr MQTT2_zigbee_Thermostat_Bad_EG model zigbee2mqtt_thermostat_with_weekrofile
attr MQTT2_zigbee_Thermostat_Bad_EG periodicCmd temperature:55
attr MQTT2_zigbee_Thermostat_Bad_EG readingList $DEVICETOPIC:.* { my %h;; my $temp = $EVENT;; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge;; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h,%$h2);; \%h }\
zigbee2mqtt/Thermostat_Bad_EG/set\x20schedule:.* { json2nameValue($EVENT) }\
zigbee2mqtt/Thermostat_Bad_EG/set/schedule:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_Thermostat_Bad_EG room Heizung,Zigbee
attr MQTT2_zigbee_Thermostat_Bad_EG setList desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
  btnLock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
  preset:schedule,manual,boost,complex,comfort,eco $DEVICETOPIC/set {"preset": "$EVTPART1"}\
  mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}\
  holidays $DEVICETOPIC/set/schedule { "holidays":[$EVTPART1] }\
  workdays $DEVICETOPIC/set/schedule { "workdays":[$EVTPART1] }\
  week:5+2,6+1,7 $DEVICETOPIC/set $EVTPART1\
  weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1, $EVTPART2) }\
  x_send_set_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //;; qq($DEVICETOPIC/set $payload)}
attr MQTT2_zigbee_Thermostat_Bad_EG setStateList on off
attr MQTT2_zigbee_Thermostat_Bad_EG stateFormat temperature °C\
Battery: battery
attr MQTT2_zigbee_Thermostat_Bad_EG userReadings battery { ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}
attr MQTT2_zigbee_Thermostat_Bad_EG webCmd desired-temp:preset:child_lock
attr MQTT2_zigbee_Thermostat_Bad_EG webCmdLabel Soll:Preset:man. Bedienung
attr MQTT2_zigbee_Thermostat_Bad_EG weekprofile MQTT2_zigbee_Thermostat_Bad_EG
attr MQTT2_zigbee_Thermostat_Bad_EG widgetOverride preset:schedule,manual,boost,complex,comfort,eco desired-temp:15,15.5,16,16.5,17,17.5,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23,23.5,24 child_lock:LOCK,UNLOCK

WeekdayProfile

{"Tue":{"time":["06:30","23:00","24:00"],"temp":["17.0","19.0","19.0"]},"Thu":{"time":["06:30","23:00","24:00"],"temp":["17.0","19.0","19.0"]},"Wed":{"temp":["17.0","19.0","19.0"],"time":["06:30","23:00","24:00"]},"Fri":{"temp":["17.0","19.0","19.0"],"time":["06:30","23:00","24:00"]},"Sat":{"time":["08:00","23:00","24:00"],"temp":["17.0","19.0","19.0"]},"Mon":{"temp":["17.0","19.0","19.0"],"time":["06:30","23:00","24:00"]},"Sun":{"temp":["17.0","19.0","19.0"],"time":["08:00","23:00","24:00"]}}

juergen012

Hallo,
habe das mit dem weekprofile nicht hinbekommen. Deshalb habe ich ein DOIF gebastelt.
defmod di_Heizung_Buero_weekprofile DOIF ([00:00-08:00|Mo Di Mi Do Fr Sa] and [Urlaub] eq "off" and [HM_Buero_FK] eq "closed" and [rr_Juergen] eq "zuhause") (set MQTT2_zigbee_Thermostat desired-temp 17.0)\
DOELSEIF ([08:00-18:00|Mo Di Mi Do Fr Sa] and [Urlaub] eq "off" and [HM_Buero_FK] eq "closed" and [rr_Juergen] eq "zuhause")  (set MQTT2_zigbee_Thermostat desired-temp 20.0)\
DOELSEIF ([18:00-00:00|Mo Di Mi Do Fr Sa] and [Urlaub] eq "off" and [HM_Buero_FK] eq "closed" and [rr_Juergen] eq "zuhause") (set MQTT2_zigbee_Thermostat desired-temp 15.0)\
DOELSEIF ([00:00-09:00|WE] and [Urlaub] eq "off" and [HM_Buero_FK] eq "closed" and [rr_Juergen] eq "zuhause") (set MQTT2_zigbee_Thermostat desired-temp 20.0)\
DOELSEIF ([08:00-17:00|WE] and [Urlaub] eq "off" and [HM_Buero_FK] eq "closed" and [rr_Juergen] eq "zuhause") (set MQTT2_zigbee_Thermostat desired-temp 20.0)\
DOELSEIF ([17:00-00:00|WE] and [Urlaub] eq "off" and [HM_Buero_FK] eq "closed" and [rr_Juergen] eq "zuhause") (set MQTT2_zigbee_Thermostat desired-temp 20.0)\
DOELSEIF ([HM_Buero_FK] eq "open") (set MQTT2_zigbee_Thermostat desired-temp 5.0)\
DOELSEIF ([Urlaub] eq "on" or [rr_Juergen] ne "zuhause") (set MQTT2_zigbee_Thermostat desired-temp 17.0)
attr di_Heizung_Buero_weekprofile DbLogExclude .*
attr di_Heizung_Buero_weekprofile room DOIF
attr di_Heizung_Buero_weekprofile wait 0:0:0:0:0:0:5:5


Gruß
Jürgen K.
Fhem unter Proxmox

paulbaumann

Vielleicht kann ich wieder nicht mit der Suche umgehen aber unter Thermostat und Tasmota finde ich nur diesen Thread, cih stelle es auch gerne woanders rein:
Komme nicht weiter-> Habe ein ME81H.16 ESP8266 based TYWE3S Wandthermostat mit WLAN
Tasmota 12.2.0 geflasht und konfiguriert mit
{"NAME":"MeinThermostat","GPIO":[1,1,1,2304,1,2272,0,0,1,0,544,0,1,0],"FLAG":0,"BASE":54}
Emulation Belkin WeMo Single Device
in MQTT2 eingebunden Findet er sofort.
Nun habe ich 3 Templates in fhem versucht ohne Erfolg:
(halt die 3 wo Thermostat drin vorkommt...
ems-esp_thermostat_simple   
ems-esp_thermostat_RC35_type
WThermostat_Beca

Welches Template muss ich nehmen?
Was muss ich noch machen/ändern?

Beta-User

Zitat von: paulbaumann am 22 November 2022, 17:15:49
Vielleicht kann ich wieder nicht mit der Suche umgehen aber unter Thermostat und Tasmota finde ich nur diesen Thread, cih stelle es auch gerne woanders rein:
Komme nicht weiter-> Habe ein ME81H.16 ESP8266 based TYWE3S Wandthermostat mit WLAN
[...]
Welches Template muss ich nehmen?
Was muss ich noch machen/ändern?
Es gibt afaik noch kein attrTemplate für diesen Gerätetyp mit dieser firmware => ergo: Unterstützung in einem eigenen Thread nachfragen, nicht "irgendeinen" kapern, nur weil die Suchfunktion nichts besseres liefert...

Was man dazu braucht, steht eventuell in einem der angepinnten Threads, aber jedenfalls ich habe grade keine Lust, irgendwelche Tasmota-Doku zu wälzen, um die erwartete Topic/Payload-Struktur aus den Untiefen des Inet zu fischen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

paulbaumann

Ist ja auch eine Antwort ich mache einen neuen Thred auf!

Beta-User

Hallo zusammen,

nachdem @clumsy per pm Code für https://www.zigbee2mqtt.io/devices/BHT-002_BHT-006.html#moes-bht-002%252Fbht-006 beigesteuert hat, habe ich das eben eingecheckt. Bitte melden, falls wer Probleme damit hat, ich habe etwas im Code rumgemalt und kann es grade nicht wirklich testen...

(OT: Irgendwie gefällt mir nur bedingt, dass jedes dieser z2m-Thermostate irgendwie ein anderes Format haben will - v.a. für Wochenprofile überrascht mich das irgendwie).

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

clumsy

Ich habs nun seit 2 Tagen mit der eingecheckten Version laufen, bei mir scheint das zu klappen... Wobei ich nur das 99_attrT_z2m_thermostat_Utils.pm und nichts im device selbst geändert hab.

Vielen Dank für Deinen Support!!

STefan

Zitat von: Beta-User am 02 April 2024, 16:07:25(OT: Irgendwie gefällt mir nur bedingt, dass jedes dieser z2m-Thermostate irgendwie ein anderes Format haben will - v.a. für Wochenprofile überrascht mich das irgendwie).
Ja, find ich auch nicht so super, aber so auf die Schnelle war das die einfachste Variante...

Beta-User

Qed - noch eine Variante, diesmal wohl (?) ohne weekprofile: https://forum.fhem.de/index.php?topic=137785.0.

Mal sehen, vielleicht kann/muss man (....) das irgendwie zusammenfassen. ???
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files