Hallo zusammen,
ich versuche das Widget Thermostat auf ein MQTT Thermostat an zuwenden.
Mein derzeitiger Code sieht so aus:
<div data-type="thermostat"
data-device="Schlafzimmer"
data-get="desired-temp"
data-set="desired-temp"
data-temp="temperature"
data-height="200"
data-width="200"
data-step="0.5"
data-min="7.5"
data-max="30">
</div>
Desire-temp ist als Reading vorhanden allerdings in dem Attr setList wie folgt definiert:
desired-temp:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }
Wie kann ich die Temperatur im Widget steuern.
Bin für jede Hilfe dankbar.
Gruß
Roman
Vielleicht hilft eine nähere Fehlerbeschreibung. Beim Bewegen des Zeigers springt dieser sofort auf 0. Es wird ein "set Schlafzimmer desired-temp 0" ausgegeben.
Das Absetzen des set Befehls in der Weboberfläche z.B. "set Schlafzimmer desired-temp 20" funktioniert.
Lösche mal das Attribut setStateList.
Danke hat leider nicht geholfen.
Weils gerade gepasst hat hab ich deine FTUI Definition eben mal nachvollzogen und bei mir klappt das auf Anhieb die Temperatur zu setzen. An der Konfiguration in FTUI kann als nix falsch sein.
Zeig halt mal die komplette MQTT2_Definition.
Anbei das List eines der Thermostaten die das Problem haben:
Internals:
CID zigbee_Kinderzimmer
DEF zigbee_Kinderzimmer
FUUID 698a423e-f33f-e93f-71cc-cae690e15ea08048
IODev myBroker
LASTInputDev myBroker
MSGCNT 3351
NAME Kinderzimmer
NR 403
STATE desired-temp
TYPE MQTT2_DEVICE
eventCount 3506
myBroker_CONN myBroker_192.168.187.76_54192
myBroker_MSGCNT 3351
myBroker_TIME 2026-04-17 16:03:40
JSONMAP:
Battery battery_low
current_heating_setpoint desired-temp
local_temperature temperature
system_mode mode
READINGS:
2026-03-09 12:58:48 IODev myBroker
2026-04-16 20:29:51 associatedWith zigbee2mqtt
2026-02-09 21:28:32 attrTemplateVersion 20251221
2026-04-17 16:03:40 batteryState ok
2026-04-17 16:03:40 battery_low false
2026-04-17 16:03:40 child_lock UNLOCK
2026-04-17 16:03:40 desired-temp 0
2026-04-17 16:03:40 frost_protection ON
2026-04-17 16:03:40 linkquality 153
2026-04-17 16:03:40 local_temperature_calibration 4
2026-04-17 16:03:40 mode off
2026-04-17 16:03:40 running_state idle
2026-04-17 16:03:40 scale_protection ON
2026-04-17 16:03:40 schedule_friday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 16:03:40 schedule_monday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 16:03:40 schedule_saturday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 16:03:40 schedule_sunday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 16:03:40 schedule_thursday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 16:03:40 schedule_tuesday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 16:03:40 schedule_wednesday 06:00/17.0 08:00/17.0 12:00/17.0 14:00/16.0 20:00/16.0 22:00/16.0
2026-04-16 20:30:13 set z2m/Kinderzimmer/set 10
2026-04-17 16:03:40 state desired-temp
2026-04-17 16:03:40 temperature 21
Attributes:
comment For use with weekprofile, additional configuration and code would be needed, 6 Transitions required, format example: "HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C"
devStateIcon lock.LOCK:secur_locked:child_lock+UNLOCK lock.UNLOCK:secur_open:child_lock+LOCK modus.auto:sani_heating_automatic modus.heat:sani_heating_manual modus.off:sani_heating_level_0
devicetopic z2m/Kinderzimmer
getList desired-temp:noArg desired-temp $DEVICETOPIC/get {"current_heating_setpoint": ""}
temperature:noArg temperature $DEVICETOPIC/get {"local_temperature": ""}
attr zigbee_Kinderzimmer periodicCmd temperature:55
group Heizung
icon temp_control
jsonMap current_heating_setpoint:desired-temp local_temperature:temperature Battery:battery_low system_mode:mode
model zigbee2mqtt_thermostat_AVATTO_TRV06_TS0601
readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
z2m/Kinderzimmer/set:.* set
room Geräte,MQTT2_DEVICE
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"}
schedule_monday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_monday":"$payload"})}
schedule_tuesday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_tuesday":"$payload"})}
schedule_wednesday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_wednesday":"$payload"})}
schedule_thursday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_thursday":"$payload"})}
schedule_friday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_friday":"$payload"})}
schedule_saturday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_saturday":"$payload"})}
schedule_sunday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_sunday":"$payload"})}
mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}
pi_heating_demand:slider,0,1,100,1 $DEVICETOPIC/set {"pi_heating_demand": $EVTPART1 }
frost_protection:ON,OFF $DEVICETOPIC/set {"frost_protection": "$EVTPART1"}
scale_protection:ON,OFF $DEVICETOPIC/set {"scale_protection": "$EVTPART1"}
local_temperature_calibration:slider,-9.0,1,9.0,1 $DEVICETOPIC/set {"local_temperature_calibration": $EVTPART1 }
x_send_set_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set $payload)}
userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}
verbose 0
und die FTUI Defination:
<li data-row="3" data-col="1" data-sizex="2" data-sizey="2">
<header class="large">Kinderzimmer</header>
<div class="vbox top-space">
<div data-type="thermostat"
data-device="Kinderzimmer"
data-get="desired-temp"
data-set="desired-temp"
data-temp="temperature"
data-height="200"
data-width="200"
data-step="0.5"
data-min="5.0"
data-max="30">
</div>
</div>
</li>
Hab auch schon angefangen mittel FTUI.Toast im Widget die Stelle zu finden wo die Null herkommt.
Leider fordert am Wochenende die Freundin ihr Recht.
ZitatLeider fordert am Wochenende die Freundin ihr Recht.
Wenn die Freiheit sich ergibt
z2m/Kinderzimmer/set:.* set mal aus der ReadingList zu entfernen, dann würde ich das mal prüfen, ob das hilft.
Habe das Device mal neu mit dem Template AVATTO TRV06 TS0601 neu angelegt.
Internals:
CFGFN
CID Kinderzimmer
DEF Kinderzimmer
FUUID 69e28685-f33f-e93f-3a0c-27570ae43d8deed5
IODev myBroker
LASTInputDev myBroker
MSGCNT 70
NAME Kinderzimmer
NR 425
STATE lock:LOCK\modus:off
Measured: 21°C / Desired: 17.5°C<br>Battery: ok
TYPE MQTT2_DEVICE
eventCount 98
myBroker_CONN myBroker_192.168.187.76_54192
myBroker_MSGCNT 70
myBroker_TIME 2026-04-17 21:53:34
periodicCounter 42
JSONMAP:
Battery battery_low
current_heating_setpoint desired-temp
local_temperature temperature
system_mode mode
OLDREADINGS:
READINGS:
2026-04-17 21:23:46 IODev myBroker
2026-04-17 21:14:13 associatedWith zigbee2mqtt
2026-04-17 21:25:00 attrTemplateVersion 20251221
2026-04-17 21:53:34 batteryState ok
2026-04-17 21:53:34 battery_low false
2026-04-17 21:53:34 child_lock LOCK
2026-04-17 21:53:34 desired-temp 17.5
2026-04-17 21:53:34 frost_protection ON
2026-04-17 21:53:34 linkquality 149
2026-04-17 21:53:34 local_temperature_calibration 4
2026-04-17 21:53:34 mode off
2026-04-17 21:53:34 pi_heating_demand 20
2026-04-17 21:53:34 running_state idle
2026-04-17 21:53:34 scale_protection ON
2026-04-17 21:53:34 schedule_friday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_monday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_saturday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_sunday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_thursday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_tuesday 06:00/21.0 08:00/16.0 12:00/21.0 14:00/16.0 18:00/21.0 22:00/16.0
2026-04-17 21:53:34 schedule_wednesday 06:00/17.0 08:00/17.0 12:00/17.0 14:00/16.0 20:00/16.0 22:00/16.0
2026-04-17 21:53:34 temperature 21
Attributes:
comment For use with weekprofile, additional configuration and code would be needed, 6 Transitions required, format example: "HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C"
devStateIcon lock.LOCK:secur_locked:child_lock+UNLOCK lock.UNLOCK:secur_open:child_lock+LOCK modus.auto:sani_heating_automatic modus.heat:sani_heating_manual modus.off:sani_heating_level_0
devicetopic z2m/Kinderzimmer
getList desired-temp:noArg desired-temp $DEVICETOPIC/get {"current_heating_setpoint": ""}
temperature:noArg temperature $DEVICETOPIC/get {"local_temperature": ""}
attr Kinderzimmer periodicCmd temperature:55
icon temp_control
jsonMap current_heating_setpoint:desired-temp local_temperature:temperature Battery:battery_low system_mode:mode
model zigbee2mqtt_thermostat_AVATTO_TRV06_TS0601
periodicCmd temperature:55
readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
room MQTT2_DEVICE
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"}
schedule_monday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_monday":"$payload"})}
schedule_tuesday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_tuesday":"$payload"})}
schedule_wednesday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_wednesday":"$payload"})}
schedule_thursday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_thursday":"$payload"})}
schedule_friday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_friday":"$payload"})}
schedule_saturday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_saturday":"$payload"})}
schedule_sunday:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set {"schedule_sunday":"$payload"})}
mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}
frost_protection:ON,OFF $DEVICETOPIC/set {"frost_protection": "$EVTPART1"}
scale_protection:ON,OFF $DEVICETOPIC/set {"scale_protection": "$EVTPART1"}
local_temperature_calibration:slider,-9.0,1,9.0,1 $DEVICETOPIC/set {"local_temperature_calibration": $EVTPART1 }
x_send_set_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($DEVICETOPIC/set $payload)}
setStateList on off
stateFormat lock:child_lock\modus:mode
Measured: temperature°C / Desired: desired-temp°C<br>Battery: batteryState
userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}
userattr weekprofile
webCmd desired-temp
weekprofile zigbee_Kinderzimmer
Entfernt habe ich folgendes setList, da nicht vorhanden:
pi_heating_demand:slider,0,1,100,1 $\DEVICETOPIC/set {"pi_heating_demand": $EVTPART1 }
Und das Attribut da ich lieber mit dem Slider arbeite:
attr DEVICE widgetOverride desired-temp@set:knob,min:5,max:30,angleArc:.....
Zumindest klappt jetzt das Get und die desired-temp wird im Widget und WebUI nachgeführt.
Das Setzen mittels WebUI klappt. Das Setzen per Widget nicht. Das Widget scheint das $DEVICETOPIC
nicht auflösen zu können.
Ergebnis MQTT Explorer:
$DEVICETOPIC
set = {"current_heating_setpoint": 0 }
Ein get Kinderzimmer desired-temp im WebUI ergibt
"Timeout reading answer for z2m/Kinderzimmer/get {"current_heating_setpoint": ""}"
Ein get Kinderzimmer temperature im WebUI ergibt
"Timeout reading answer for z2m/Kinderzimmer/get {"local_temperature": ""}"
Ich bin da etwas ratlos.
Guten Morgen,
es scheint wohl ein Problem des MQTT2_Device zu sein. Nachdem ich die DEF änderte in die Orginal z2m EndDevice Nummer oder die dort angegeben MQTT Defination war die Kommunikation WebUI -> z2m nicht mehr möglich. Änderung in z2m wurde im Device aktualisiert.
Ich schließe mal den Thread und fange am Montag neu an. Melde mich dann im MQTT-Board.
Ich muss dieses Thema noch mal öffnen, nachdem ich folgendes herausgefunden habe.
Im Widget_thermostat.js wird der Wert desired-temp über get geholt. Da im MQTT2-Device bei Änderung der Text der Änderung
'set desired-temp 12' erscheint bevor der Zahlenwert als Rückmeldung kommt, ist die Variable leer. Nachdem ich den Zahlenwert mit value.match gesetzt habe ist zumindest der Anfangswert, geprüft mit ftui.toast(value), korrekt. Beim Klick auf das Widget verwandelt sich allerdings der Wert wieder zu 0. Mit dem Modul Knob bin ich allerdings überfordert.
var value = elem.getReading('get').val;
value = value.match(/\d+\.?\d*/g);
Vielleicht kann ja einer da mal drauf schauen.
Ich gebe auf das Problem an dieser Stelle zu bekämpfen.
Verlagere meine Bemühungen zu dem MQTT2 Verhalten hin.
Das sonderbare "set..." ist sicherlich die Ursache für die Probleme.