[FTUI2] Widget Thermostat auf MQTT Thermostat anwenden.

Begonnen von romakrau, 16 April 2026, 20:06:22

Vorheriges Thema - Nächstes Thema

romakrau

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

romakrau

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.

Beta-User

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

romakrau


TomLee

#4
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.

romakrau

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.

TomLee

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.

romakrau

#7
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&deg;C / Desired: 17.5&deg;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&deg;C / Desired: desired-temp&deg;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.