Hallo,
ich habe hier ein Zigbee Raumthermostat (Tuya ZWT198/ZWT100-BH (https://www.zigbee2mqtt.io/devices/ZWT198_ZWT100-BH.html)) per z2m in fhem angebunden.
Internals:
.triggerUsed 1
CID zigbee_raumthermostat
DEF zigbee_raumthermostat
FUUID 68f39d41-f33f-f310-6bbb-752578106f34ba21
IODev mqtt2_server
LASTInputDev mqtt2_server
MSGCNT 6605
NAME zigbee_raumthermostat
NR 824
STATE UNLOCK
Measured: 18.5 °C | Desired: 5 °C | Preset: manual | Sensor: internal | Mode: heat
STILLDONETIME 0
TYPE MQTT2_DEVICE
eventCount 6633
mqtt2_server_CONN mqtt2_server_192.168.1.12_49468
mqtt2_server_MSGCNT 6605
mqtt2_server_TIME 2025-10-19 12:08:43
.DT:
DEVICETOPIC zigbee2mqtt/zigbee_raumthermostat
.attraggr:
.attrminint:
.userReadings:
HASH(0x55d4c80080c8)
HASH(0x55d4c9316260)
JSONMAP:
Battery batteryPercent
child_lock btnLock
current_heating_setpoint desired-temp
local_temperature temperature
system_mode mode
voltage batterymV
OLDREADINGS:
READINGS:
2025-10-18 16:04:57 IODev mqtt2_server
2025-10-18 17:51:43 associatedWith zigbee_massi
2025-10-18 17:51:04 attrTemplateVersion 20240402
2025-10-19 12:08:43 backlight_mode medium
2025-10-19 12:08:43 btnLock UNLOCK
2025-10-19 12:08:43 child_lock UNLOCK
2025-10-19 12:08:43 current_heating_setpoint 5
2025-10-19 12:08:43 deadzone_temperature 1
2025-10-19 12:08:43 desired-temp 5
2025-10-19 12:08:43 factory_reset OFF
2025-10-19 12:08:43 frost_protection OFF
2025-10-19 12:08:43 linkquality 255
2025-10-19 12:08:43 local_temperature 18.5
2025-10-19 12:08:43 local_temperature_calibration 0
2025-10-19 12:08:43 max_temperature_limit 60
2025-10-19 12:08:43 mode heat
2025-10-19 12:08:43 preset manual
2025-10-19 12:08:43 running_state idle
2025-10-19 12:08:43 schedule_holiday 08:00/22.0°C 23:00/16.0°C
2025-10-19 12:08:43 schedule_weekday 06:00/20.0°C 08:00/16.0°C 11:30/16.0°C 12:30/16.0°C 17:00/22.0°C 22:00/16.0°C
2025-10-19 12:08:43 sensor internal
2025-10-18 18:26:05 state desired-temp
2025-10-19 12:08:43 system_mode heat
2025-10-19 12:08:43 temperature 18.5
2025-10-19 12:08:43 working_day disabled
Attributes:
DbLogExclude .*
devStateIcon LOCKED:secur_lock:btnLock+UNLOCK UNLOCKED:secur_open:btnLock+LOCK
devicetopic zigbee2mqtt/zigbee_raumthermostat
genericDeviceType thermostat
icon temp_control
jsonMap current_heating_setpoint:desired-temp local_temperature:temperature Battery:batteryPercent system_mode:mode voltage:batterymV child_lock:btnLock
model zigbee2mqtt_thermostat_with_weekrofile_5_1_1
readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
zigbee2mqtt/zigbee_raumthermostat:.* { json2nameValue($EVENT) }
room new-devices
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:heat,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}
preset:hold,program $DEVICETOPIC/set {"preset": "$EVTPART1"}
saturday $DEVICETOPIC/set/schedule { "saturday":[$EVTPART1] }
sunday $DEVICETOPIC/set/schedule { "sunday":[$EVTPART1] }
weekdays $DEVICETOPIC/set/schedule { "weekdays":[$EVTPART1] }
weekprofile { no strict 'vars';; FHEM::attrT_z2m_thermostat_Utils::z2t_send_BHT($NAME, $EVTPART1, $EVTPART2) }
x_send_set_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //;; qq($DEVICETOPIC/set $payload)}
stateFormat child_lock
Measured: local_temperature °C | Desired: current_heating_setpoint °C | Preset: preset | Sensor: sensor | Mode: system_mode
userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}, batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}
webCmd desired-temp
Als template habe ich das attrTemplate 'zigbee2mqtt_thermostat_with_weekprofile_5_1_1' benutzt. Das funktioniert auch soweit.
Nun habe ich einen Weekdaytimer angelegt, der meine weekprofile Topics an das Raumthermostat weiterleiten soll. Ich habe ein weekprofile wohnzimmer mit den Topics Sommer und Winter.
Das List des Weekdaytimers
Internals:
COMMAND
CONDITION
DEF zigbee_raumthermostat weekprofile:heizprofile
DEVICE zigbee_raumthermostat
FUUID 68f3934d-f33f-f310-0bbc-1ebed052abdcf8e1
GlobalDaylistSpec
LANGUAGE de
NAME WDT
NR 821
Profil 0: Sonntag 00:10:00 18.0, 02:00:00 16.0, 06:30:00 18.0,
Profil 1: Montag 00:10:00 18.0, 01:00:00 16.0, 06:00:00 18.0,
Profil 2: Dienstag 00:10:00 18.0, 01:00:00 16.0, 06:00:00 18.0,
Profil 3: Mittwoch 00:10:00 18.0, 01:00:00 16.0, 06:00:00 18.0,
Profil 4: Donnerstag 00:10:00 18.0, 01:00:00 16.0, 06:00:00 18.0,
Profil 5: Freitag 00:10:00 18.0, 01:00:00 16.0, 06:00:00 18.0,
Profil 6: Samstag 00:10:00 18.0, 01:00:00 16.0, 06:00:00 18.0,
STATE 18.0
STILLDONETIME 0
TYPE WeekdayTimer
eventCount 161
setModifier desired-temp
.attraggr:
.attrminint:
.dayNumber:
!$we 8
$we 7
di 2
do 4
fr 5
mi 3
mo 1
sa 6
so 0
.longDays:
de:
Sonntag
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Wochenende
Werktags
en:
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
weekend
weekdays
fr:
Dimanche
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
weekend
jours de la semaine
nl:
Zondag
Maandag
Dinsdag
Woensdag
Donderdag
Vrijdag
Zaterdag
weekend
werkdagen
.shortDays:
de:
so
mo
di
mi
do
fr
sa
$we
!$we
en:
su
mo
tu
we
th
fr
sa
$we
!$we
fr:
di
lu
ma
me
je
ve
sa
$we
!$we
nl:
zo
ma
di
wo
do
vr
za
$we
!$we
READINGS:
2025-10-19 06:30:00 currValue 18.0
2025-10-19 06:30:00 nextUpdate 2025-10-20 00:10:00
2025-10-19 06:30:00 nextValue 18.0
2025-10-19 06:30:00 state 18.0
2025-10-18 22:58:46 weekprofiles heizprofile:Winter:wohnzimmer
SWITCHINGTIMES:
5|00:10|18.0
5|01:00|16.0
5|06:00|18.0
1|00:10|18.0
1|01:00|16.0
1|06:00|18.0
6|00:10|18.0
6|01:00|16.0
6|06:00|18.0
0|00:10|18.0
0|02:00|16.0
0|06:30|18.0
4|00:10|18.0
4|01:00|16.0
4|06:00|18.0
2|00:10|18.0
2|01:00|16.0
2|06:00|18.0
3|00:10|18.0
3|01:00|16.0
3|06:00|18.0
TIMER:
WDT_midnight:
HASH WDT
MODIFIER midnight
NAME WDT_midnight
SETTIMERATMIDNIGHT 1
helper:
daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
SWITCHINGTIME:
0:
00:10:00 18.0
02:00:00 16.0
06:30:00 18.0
1:
00:10:00 18.0
01:00:00 16.0
06:00:00 18.0
2:
00:10:00 18.0
01:00:00 16.0
06:00:00 18.0
3:
00:10:00 18.0
01:00:00 16.0
06:00:00 18.0
4:
00:10:00 18.0
01:00:00 16.0
06:00:00 18.0
5:
00:10:00 18.0
01:00:00 16.0
06:00:00 18.0
6:
00:10:00 18.0
01:00:00 16.0
06:00:00 18.0
WEDAYS:
0 1
6 1
profil:
1:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
5
10:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
0
11:
EPOCH 1760832000
PARA 16.0
TIME 02:00
WE_Override
DAYS:
0
12:
EPOCH 1760848200
PARA 18.0
TIME 06:30
WE_Override
DAYS:
0
13:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
4
14:
EPOCH 1760828400
PARA 16.0
TIME 01:00
WE_Override
DAYS:
4
15:
EPOCH 1760846400
PARA 18.0
TIME 06:00
WE_Override
DAYS:
4
16:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
2
17:
EPOCH 1760828400
PARA 16.0
TIME 01:00
WE_Override
DAYS:
2
18:
EPOCH 1760846400
PARA 18.0
TIME 06:00
WE_Override
DAYS:
2
19:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
3
2:
EPOCH 1760828400
PARA 16.0
TIME 01:00
WE_Override
DAYS:
5
20:
EPOCH 1760828400
PARA 16.0
TIME 01:00
WE_Override
DAYS:
3
21:
EPOCH 1760846400
PARA 18.0
TIME 06:00
WE_Override
DAYS:
3
3:
EPOCH 1760846400
PARA 18.0
TIME 06:00
WE_Override
DAYS:
5
4:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
1
5:
EPOCH 1760828400
PARA 16.0
TIME 01:00
WE_Override
DAYS:
1
6:
EPOCH 1760846400
PARA 18.0
TIME 06:00
WE_Override
DAYS:
1
7:
EPOCH 1760825400
PARA 18.0
TIME 00:10
WE_Override
DAYS:
6
8:
EPOCH 1760828400
PARA 16.0
TIME 01:00
WE_Override
DAYS:
6
9:
EPOCH 1760846400
PARA 18.0
TIME 06:00
WE_Override
DAYS:
6
profile_IDX:
0:
00:10:00 10
02:00:00 11
06:30:00 12
1:
00:10:00 4
01:00:00 5
06:00:00 6
2:
00:10:00 16
01:00:00 17
06:00:00 18
3:
00:10:00 19
01:00:00 20
06:00:00 21
4:
00:10:00 13
01:00:00 14
06:00:00 15
5:
00:10:00 1
01:00:00 2
06:00:00 3
6:
00:10:00 7
01:00:00 8
06:00:00 9
weekprofiles:
heizprofile:
PROFILE Winter:wohnzimmer
PROFILE_JSON {"Mon":{"temp":["18.0","16.0","18.0"],"time":["01:00","06:00","24:00"]},"Fri":{"temp":["18.0","16.0","18.0"],"time":["01:00","06:00","24:00"]},"Tue":{"temp":["18.0","16.0","18.0"],"time":["01:00","06:00","24:00"]},"Wed":{"temp":["18.0","16.0","18.0"],"time":["01:00","06:00","24:00"]},"Sun":{"time":["02:00","06:30","24:00"],"temp":["18.0","16.0","18.0"]},"Thu":{"time":["01:00","06:00","24:00"],"temp":["18.0","16.0","18.0"]},"Sat":{"time":["01:00","06:00","24:00"],"temp":["18.0","16.0","18.0"]}}
SunAsWE 0
PROFILE_DATA:
Fri:
temp:
18.0
16.0
18.0
time:
01:00
06:00
24:00
Mon:
temp:
18.0
16.0
18.0
time:
01:00
06:00
24:00
Sat:
temp:
18.0
16.0
18.0
time:
01:00
06:00
24:00
Sun:
temp:
18.0
16.0
18.0
time:
02:00
06:30
24:00
Thu:
temp:
18.0
16.0
18.0
time:
01:00
06:00
24:00
Tue:
temp:
18.0
16.0
18.0
time:
01:00
06:00
24:00
Wed:
temp:
18.0
16.0
18.0
time:
01:00
06:00
24:00
Attributes:
DbLogExclude .*
commandTemplate set $NAME $EVENT
userattr weekprofile
Die Übergabe des weekprofile an WDT funktioniert auch, aber die Weitergabe an den Raumthermostaten nicht.
Habe ich da einen Verständnisfehler? Funktioniert das überhaupt so, wie ich das konfiguriert habe?
Oder ist da grundsätzlich etwas falsch?
gm
Lösche mal das Attribut commandTemplate.
Verständnisfrage meinerseits: was ist mit "weiterleiten" gemeint?
Entweder es wird das Profil vom Thermostat "überwacht", dann muss am MQTT2_DEVICE noch das weekprofile-Attribut sinnvoll gesetzt werden, oder FHEM überwacht die Timer (via WDT).
ZitatLösche mal das Attribut commandTemplate.
Habe ich gemacht und was passiert dann oder was passiert dann nicht?
ZitatVerständnisfrage meinerseits: was ist mit "weiterleiten" gemeint?
O.K., das habe ich wohl falsch interpretiert, im Weekdaytimer gibt es beim define ja die Angabe eines "Zieldevices" und da bin ich wohl fälschlicherweise davon ausgegangen, daß der WDT dann das weekprofile an, in meinem Fall, den Thermostaten schickt.
Zitatdann muss am MQTT2_DEVICE noch das weekprofile-Attribut sinnvoll gesetzt werden
Und da habe ich das Problem, daß ich irgendwie nicht verstehe, was man da sinnvollerweise bzw. wie man da etwas setzen würde.
Das Attribut sollte dann automatisch neu gesetzt werden - und das m2d auch als "Heizung" erkannt werden.
Anhand der "weekprofile"-Attribute erkennt jede weekprofile-Instanz, welche untergeordneten Devices es bei Topic-Wechseln beliefern soll. Das wäre hier wohl jeweils "wohnzimmer".
Vorteil der WDT-Methode: beliebig viele Schaltzeiten, alle Wochentage unterschiedlich möglich, $we-Umschaltung automatisch, wenn konfiguriert.
Vorteil der direkten Übergabe an die Hardware: läuft auch ohne FHEM.
Danke Dir, scheint jetzt zu funktionieren.
Nur nochmal ob ich den Mechanismus richtig verstanden habe.
Ich setze bei WDT ein weekprofile Topic, z.B. Sommer:Wohnzimmer, dann sendet WDT zum jeweiligen Schaltpunkt des Profils an den RT, daß dieser eine entsprechende Temperatur einstellen soll.
Das heißt also, der RT "sieht" die weekprofile gar nicht, sondern bekommt nur die Schaltzeitpunkte übermittelt?
Zitat von: grossmaggul am 19 Oktober 2025, 17:10:45Danke Dir, scheint jetzt zu funktionieren.
Nur nochmal ob ich den Mechanismus richtig verstanden habe.
Ich setze bei WDT ein weekprofile Topic, z.B. Sommer:Wohnzimmer, dann sendet WDT zum jeweiligen Schaltpunkt des Profils an den RT, daß dieser eine entsprechende Temperatur einstellen soll.
Das heißt also, der RT "sieht" die weekprofile gar nicht, sondern bekommt nur die Schaltzeitpunkte übermittelt?
Halbwegs richtig, zumindest was der wdt->Thermostat-Teil betrifft.
"Eigentlich" ist es so gedacht, dass man den Topic am weekprofile setzt, und das dann die Info bzw. die Profile an seine "entities" verteilt.
Ich habe manchmal wirklich Schwierigkeiten mit den Begrifflichkeiten, was ist denn genau mit "entities" gemeint.
Zitat von: grossmaggul am 19 Oktober 2025, 17:33:53Ich habe manchmal wirklich Schwierigkeiten mit den Begrifflichkeiten, was ist denn genau mit "entities" gemeint.
Diejenigen Geräte (=FHEM-Devices), an die aus weekprofile heraus Profile verteilt werden sollen.
O.K., das wäre also in dem Fall der Weekdaytimer, wenn ich das jetzt richtig verstanden habe.
Zitat von: grossmaggul am 19 Oktober 2025, 17:47:41O.K., das wäre also in dem Fall der Weekdaytimer, wenn ich das jetzt richtig verstanden habe.
Korrekt.
Vielleicht zum besseren Gesamt-Verständnis: ich habe bei mir genau eine einzige weekprofile-Instanz. Wechselt dort das Topic, bekommen das Ergebnis ein gutes Dutzend CUL_HM-Thermostate, ein wdt (für einen zwave-Thermostat) und zwei "vitoconnect"-Instanzen mit (über die Heizungungstherme und Warmwasserbereitung laufen).
O.K., danke für die Klarstellung.
Ich habe auch nur eine weekprofile Instanz, die ich bisher mittels eines MAX! Raumthermostat und eines Notify an verschiedenste Thermostate(MAX!, Homematic) entsprechend verteilt habe.
Ich konnte dann die Heizprofile für Sommer, Winter, Urlaub über die FTUI3 einfach einstellen, wie ich es gerade brauchte.
Ob das jetzt ein geschickter Weg war, weiß ich nicht, es hat zumindest gut funktioniert.
Ich habe jetzt fast alles auf zigbee umgestellt, bis auf ein paar MAX! Thermostate und muss das jetzt erstmal wieder zusammen fummeln.
An den MAX-Instanzen dürfte dann auch jeweils ein userAttr "weekprofile" vorhanden und gesetzt sein, so wie du das schilderst.
Bei den zigbee-Dingern kann man die Profile häufig auch - wie bei MAX und Homematic - auf der Hardware laufen lassen (via Code in MQTT2_DEVICE), nur gibt es da nicht für jeden (Wochen-) Tag ein individuelles Profil.
Welcher Weg dir lieber ist, musst du entscheiden...