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