#contributed by offebaescher
name:zigbee2mqtt_thermostat_AVATTO_TRV06_TS0601
desc: Developed for AVATTO TRV06 TS0601 (Thermostatic radiator valve)
filter:TYPE=MQTT2_DEVICE:FILTER=CID~zigbee.*
order:L_17c
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. NOTE: code has been downloaded from svn (contrib). 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, 6 Transitions required, format example: "HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C"
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 }\
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)}
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 stateFormat Measured: temperature Desired: desired-temp \
Battery: batteryState child_lock
attr DEVICE devStateIcon LOCKED:secur_lock:btnLock+UNLOCK UNLOCKED:secur_open:btnLock+LOCK
attr DEVICE webCmd desired-temp
attr DEVICE widgetOverride desired-temp@set: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:battery_low system_mode:mode
attr DEVICE setStateList on off
attr DEVICE periodicCmd temperature:55
attr DEVICE userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false')}
attr DEVICE model zigbee2mqtt_thermostat_AVATTO_TRV06_TS0601
set DEVICE attrTemplate speechcontrol_type_thermostat
deletereading -q DEVICE (?!associatedWith|IODev).*
setreading DEVICE attrTemplateVersion 20251208
Zitat von: lulatsch66 am 06 Dezember 2025, 13:20:31EVU_Tibber verwende ich zwar bisher auch, aber seit paar Tagen (und Experimenten mit connect15)Hallo Falko
klappt da irgendwas nicht mehr, obwohl ich auch schon mit dem Stand vom svn abgeglichen hatte.
Nun kann ich die Werte gut vergleichen.
attr EVU_Tibber_connect15 replacement01Mode expression
attr EVU_Tibber_connect15 replacement01Regex %%token%%
attr EVU_Tibber_connect15 replacement01Value {KeyValue("read","EVU_Tibber_connect_token")}
attr EVU_Tibber_connect15 replacement02Mode expression
attr EVU_Tibber_connect15 replacement02Regex %%homeID%%
attr EVU_Tibber_connect15 replacement02Value {KeyValue("read","EVU_Tibber_connect_homeID")}
Zitat von: lulatsch66 am 06 Dezember 2025, 13:20:31Hast du davon abgeleitet noch Darstellungen/Diagramme oder DOIF,Für die Bedienung gibt es das RAW_EVU_Tibber, was auch im contrib liegt. Das arbeitet jedoch noch mit dem EVU_Tibber_connect (1h) und müsste noch auf 15 Minuten angepasst werden. Da sind dan auch SVG mit drin.
mit denen du dein "Tibber" device verwendest?
Zitat von: rudolfkoenig am 07 Dezember 2025, 16:22:16Ich versuche meinen Beitrag von oben anders zu formulieren:
WENN die MQTT2_DEVICE Instanz ueber MQTT2_SERVER direkt eingebunden ist (d.h. nicht ueber eine weitere FHEM bridge Instanz)
UND in der Detailansicht kein subscriptions Reading zu sehen ist
DANN ist es nicht moeglich, dem Geraet von FHEM aus irgendetwas mitzuteilen, vulgo set funktioniert nicht.
Ob die MQTT2_DEVICE Instanz per autocreate angelegt ist oder nicht, ist irrelevant.
Das Geraet selbst muss diese subscriptions bei FHEM "bestellen", FHEM kann das nicht aufzwingen.
Jeder FHEM Befehl an diesem Geraet muss einem subscription aus dieser Liste entsprechen.
=> Falls das Geraet via MQTT Befehle entgegennehmen kann, dann muss man das in der Geraete-Einstellung reparieren.

Undefined subroutine &TimeSeries::contains_string called at FHEM/TimeSeries.pm line 117.