FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: schwatter am 25 Oktober 2025, 12:09:21

Titel: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 25 Oktober 2025, 12:09:21
widget_test.png

widget_arcslider_flex.pngwidget_arcslider_f18.png


03.01.26 - Diverse Bugs gefixed. Silder vom Infofeld entkoppelt.
07.12.25 - Das Widget wird automatisch mit dem Update von Fhem verteilt.
30.11.25 - Anstatt Readings zum individualisieren, wird jetzt userattr verwendet.
29.11.25 - RadialArcButtonSlider nimmt Wert von gemessener Temperatur. Luftfeuchte ausblendbar mit #. Nicht verwendete Buttons komplett ausgeblendet.
23.11.25 - Color for DataUrlSvg repariert.
14.11.25 - RadialArcButtonSlider hinzugefügt. Inputfield entfernt.
08.11.25 - Fhemcmd: "set <devicename> controlMode manual" und Tempbogen gefixed.
08.11.25 - FhemIcons werden korrekt per Skinfarbe eingefärbt.
08.11.25 - Separator :fhem entfernt. Überbleibsel vom externen auswählen der SvgIcons.


Hallo zusammen,

ControlMiniDash ist ein kleines Dashboard-Widget, das sich zum Steuern von Thermostaten und Klimageräten eignet.
Das Widget wird ab dem 07.12.25 automatisch mit dem FHEM-Update verteilt und kann direkt im jeweiligen Device definiert werden.

Aktuell enthaltene Funktionen:





Alle Informationen zum Widget sammele ich nach und nach im Wikiartikel:

https://wiki.fhem.de/wiki/FHEMWEB/ControlMiniDash




Gruß schwatter
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 25 Oktober 2025, 23:34:40
Da hast du viel Code in einen Dummy gesteckt. Kann man machen. Besser wäre, wenn man schon so viel Aufwand investiert, ein FHEM-Widget mit dieser Funktionalität zu erstellen, welches man in anderen Modulen nutzen könnte, die FHEM-Widgets unterstützen (siehe https://wiki.fhem.de/wiki/FHEMWEB/Widgets).
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 26 Oktober 2025, 08:54:15
Moin,
mh, ja – ich bin da so reingerutscht, weil ich ein echter DAU bin :)
Eigentlich ist es nur ein angepasster Powerflow/Energyflow. Ich hatte mir schon mal die DateTimePicker-Widgets in FHEM angeschaut.
Auf den ersten Blick scheint es so, als bräuchte ich einen Wrapper. Außerdem muss ich prüfen, ob alles so funktioniert, wie ich es will,
oder ob ich mit Abstrichen leben kann. Deinem Ring würden ein paar Cmd-Knöpfe übrigens auch gut stehen ;)

Gruß schwatter
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 26 Oktober 2025, 11:35:58
Naja, wenn du es selbst programmiert hast und nicht die KI, dann kannst du kein DAU sein :)

Die Card-Funktion auf Widgets auszuweiten, habe ich auch schon überlegt. Deswegen hatte ich sie schon vorausschauend Card und nicht Plot genannt. Allerdings habe ich mich bisher nicht durchgerungen, da was zu machen. Zumal man dann intensiver in Javascript einsteigen müsste. Ein paar vernünftige FHEM-Widgets würden dem FHEM-System nicht schaden, zumal die bisherigen nur rudimentäre Funktionalität bieten und vor allem keine zeitgemäße Optik aufweisen. Klar, kann man sich schöne Dashboards mit TabletUI basteln, aber dann müsste ich zwei Oberflächen/Systeme pflegen. Dann würde ich vermutlich direkt auf Home Assistent wechseln, da hat man gleich eine schöne Oberfläche dabei.
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 26 Oktober 2025, 14:01:08
Mal sehen, ein Widget konnte ich laut Konsole schonmal laden. Nur noch nichts anzeigen. Ich schaue mir mal alle Widgets an, vielleicht wird es ja.

Edit:
Zum bearbeiten der SVG und Korrekturlesen nehme ich aber definitiv KI. Früher habe ich manchmal Wochenlang einen Fehler gesucht.
Da ist mir die Zeit mittlerweile zu schade. Und selbst der DEV von Valetudo outet sich da. Das Beste aus beiden Welten vereinen,
würde ich sagen.
Edit2:
Ich will einfach das Fhemweb etwas schöner wird.


Gruß schwatter
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 26 Oktober 2025, 16:34:25
Wenn du etwas Brauchbares ans laufen bekommst, dann kann ich mir das anschauen und darauf basierend aus dem uitable-Arsenal evtl. weitere bauen. Im DOIF kann man in uitable beliebig viele FHEM-Widgets tabellarisch nutzen. Ich weiß gerade nicht, ob man mehrere Informationen (Readings) an das FHEM-Widget übergeben kann oder nur eine. Ggf. müsste man die Schnittstelle erweitern oder etwas Eigenes bauen.
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 31 Oktober 2025, 19:47:09
Nabend,

ich habe mich an fhemweb_iconButtons.js orientiert. Hier der erste Versuch , daraus ein Widget zu machen.

Was funktioniert:



Installieren zum Test:

1. fhemweb_controlminidash.js nach /opt/fhem/www/pgm2. Eigentümer:fhem, Gruppe:dialout.
2. Dummy zum testen

defmod widgetDummy dummy
attr widgetDummy readingList measured-temp humidity desired-temp status
attr widgetDummy room Test
attr widgetDummy setList measured-temp humidity desired-temp status
attr widgetDummy webCmd controlMD
attr widgetDummy widgetOverride controlMD:controlminidash,measured-temp,humidity,desired-temp,status

setstate widgetDummy cooling
setstate widgetDummy 2025-10-31 19:36:42 desired-temp 22
setstate widgetDummy 2025-10-31 18:47:19 humidity 53
setstate widgetDummy 2025-10-31 19:36:57 measured-temp 15
setstate widgetDummy 2025-10-31 16:06:19 status cooling
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 31 Oktober 2025, 21:05:05
Mh, wenn ich in f18 "Wrap columns on small screen" und "Show all columns in portrait mode" aktiviere, dann funktioniert Mobile.
Ja klar, weil sonst der erweiterte CmdInput ausgeblendet wird, in dem sich das Widget befindet.
Weiß noch nicht, ob ich das gut finde.
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 31 Oktober 2025, 22:17:58
Der Anfang ist gemacht. Jetzt muss das Widget noch auf Eingaben reagieren, also direkt bedienbar sein.
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 02 November 2025, 09:36:06
beta9.png

Moin,

ich hab mein Problem mit der Mobileansicht lösen können. Dazu die informid vom dev, sprich Device, komplett entfernen.

$(`td[informid="${dev}"]`).remove();
Und zack ist das Widget immer sichtbar.


Update:

ToDo

Beispieldummy:
defmod widgetDummyBeta9 dummy
attr widgetDummyBeta9 readingList measured-temp humidity desired-temp status
attr widgetDummyBeta9 room Test
attr widgetDummyBeta9 setList measured-temp humidity desired-temp status
attr widgetDummyBeta9 webCmd controlMD
attr widgetDummyBeta9 widgetOverride controlMD:controlminidash,measured-temp,humidity,desired-temp,status

setstate widgetDummyBeta9 cooling
setstate widgetDummyBeta9 2025-11-01 23:06:38 btn1Color grey
setstate widgetDummyBeta9 2025-11-01 23:23:48 btn1Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M20.79%2C13.95L18.46%2C14.57L16.46%2C13.44V10.56L18.46%2C9.43L20.79%2C10.05L21.31%2C8.12L19.54%2C7.65L20%2C5.88L18.07%2C5.36L17.45%2C7.69L15.45%2C8.82L13%2C7.38V5.12L14.71%2C3.41L13.29%2C2L12%2C3.29L10.71%2C2L9.29%2C3.41L11%2C5.12V7.38L8.5%2C8.82L6.5%2C7.69L5.92%2C5.36L4%2C5.88L4.47%2C7.65L2.7%2C8.12L3.22%2C10.05L5.55%2C9.43L7.55%2C10.56V13.45L5.55%2C14.58L3.22%2C13.96L2.7%2C15.89L4.47%2C16.36L4%2C18.12L5.93%2C18.64L6.55%2C16.31L8.55%2C15.18L11%2C16.62V18.88L9.29%2C20.59L10.71%2C22L12%2C20.71L13.29%2C22L14.7%2C20.59L13%2C18.88V16.62L15.5%2C15.17L17.5%2C16.3L18.12%2C18.63L20%2C18.12L19.53%2C16.35L21.3%2C15.88L20.79%2C13.95M9.5%2C10.56L12%2C9.11L14.5%2C10.56V13.44L12%2C14.89L9.5%2C13.44V10.56Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyBeta9 2025-11-01 23:00:47 btn2Cmd { fhem("set HmIP_WZ_WTH desired-temp ".(ReadingsVal("HmIP_WZ_WTH","desired-temp",22)-0.5)) }
setstate widgetDummyBeta9 2025-11-01 23:06:28 btn2Color grey
setstate widgetDummyBeta9 2025-11-01 23:17:23 btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M17%2C11V13H7V11H17Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyBeta9 2025-11-01 22:50:44 btn3Cmd set Lampe02_Arb off
setstate widgetDummyBeta9 2025-11-01 23:06:43 btn3Color grey
setstate widgetDummyBeta9 2025-11-01 23:25:18 btn3Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M13.13%2022.19L11.5%2018.36C13.07%2017.78%2014.54%2017%2015.9%2016.09L13.13%2022.19M5.64%2012.5L1.81%2010.87L7.91%208.1C7%209.46%206.22%2010.93%205.64%2012.5M19.22%204C19.5%204%2019.75%204%2019.96%204.05C20.13%205.44%2019.94%208.3%2016.66%2011.58C14.96%2013.29%2012.93%2014.6%2010.65%2015.47L8.5%2013.37C9.42%2011.06%2010.73%209.03%2012.42%207.34C15.18%204.58%2017.64%204%2019.22%204M19.22%202C17.24%202%2014.24%202.69%2011%205.93C8.81%208.12%207.5%2010.53%206.65%2012.64C6.37%2013.39%206.56%2014.21%207.11%2014.77L9.24%2016.89C9.62%2017.27%2010.13%2017.5%2010.66%2017.5C10.89%2017.5%2011.13%2017.44%2011.36%2017.35C13.5%2016.53%2015.88%2015.19%2018.07%2013C23.73%207.34%2021.61%202.39%2021.61%202.39S20.7%202%2019.22%202M14.54%209.46C13.76%208.68%2013.76%207.41%2014.54%206.63S16.59%205.85%2017.37%206.63C18.14%207.41%2018.15%208.68%2017.37%209.46C16.59%2010.24%2015.32%2010.24%2014.54%209.46M8.88%2016.53L7.47%2015.12L8.88%2016.53M6.24%2022L9.88%2018.36C9.54%2018.27%209.21%2018.12%208.91%2017.91L4.83%2022H6.24M2%2022H3.41L8.18%2017.24L6.76%2015.83L2%2020.59V22M2%2019.17L6.09%2015.09C5.88%2014.79%205.73%2014.47%205.64%2014.12L2%2017.76V19.17Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyBeta9 2025-11-01 23:47:05 btn4Color red
setstate widgetDummyBeta9 2025-11-01 23:25:56 btn4Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M8.5%204.5L5.4%209.5L8.5%2014.7L5.2%2020.5L3.4%2019.6L6.1%2014.7L3%209.5L6.7%203.6L8.5%204.5M14.7%204.4L11.6%209.5L14.7%2014.5L11.4%2020.3L9.6%2019.4L12.3%2014.5L9.2%209.5L12.9%203.5L14.7%204.4M21%204.4L17.9%209.5L21%2014.5L17.7%2020.3L15.9%2019.4L18.6%2014.5L15.5%209.5L19.2%203.5L21%204.4%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyBeta9 2025-11-01 23:01:16 btn5Cmd { fhem("set HmIP_WZ_WTH desired-temp ".(ReadingsVal("HmIP_WZ_WTH","desired-temp",22)+0.5)) }
setstate widgetDummyBeta9 2025-11-01 23:06:54 btn5Color grey
setstate widgetDummyBeta9 2025-11-01 23:26:33 btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M11%2C7H13V11H17V13H13V17H11V13H7V11H11V7Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyBeta9 2025-11-01 22:57:32 btn6Cmd set Lampe02_Arb on:set Lampe02_Arb off
setstate widgetDummyBeta9 2025-11-01 23:06:59 btn6Color grey
setstate widgetDummyBeta9 2025-11-01 23:26:59 btn6Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C3A9%2C9%200%200%2C0%203%2C12A9%2C9%200%200%2C0%2012%2C21A9%2C9%200%200%2C0%2021%2C12A9%2C9%200%200%2C0%2012%2C3M12%2C19A7%2C7%200%200%2C1%205%2C12A7%2C7%200%200%2C1%2012%2C5A7%2C7%200%200%2C1%2019%2C12A7%2C7%200%200%2C1%2012%2C19M13%2C17H11V7H13V17Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyBeta9 2025-11-02 08:58:20 desired-temp 7
setstate widgetDummyBeta9 2025-10-31 18:47:19 humidity 53
setstate widgetDummyBeta9 2025-11-02 09:18:37 measured-temp 15
setstate widgetDummyBeta9 2025-10-31 16:06:19 status cooling
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 02 November 2025, 10:40:37
Ich denke, das wird was.

Es sollte allerdings möglich sein, ein Standard-Thermostat ohne zusätzliche Readings zu definieren und die Individualisierung über Readings optional anzubieten. Vor allem die Angabe der Icons im Reading ist zu kryptisch für den Normalanwender. Aber du bastelst ja noch.

Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 03 November 2025, 12:06:32
Moin,

ich stimme dir zu, möglichst einfach. Anhand der Readingposition kann der Setter bestimmt werden. In meinem Fall mit Hm und HmIp ist es desired-temp.
Dann gibt es aber noch viele andere Optionen bzw Setter. Manual, Automatik,Tag,Nacht,On,Off,...
Da muss ich schauen, welche nehmen und welche nicht.
Fhemicons klappt jetzt. Auch diese müssten dann direkt gesetzt werden, damit der Benutzer nicht viel machen muss.
Ich denke da müsste ich die Readings von 4 auf 10 erhöhen.
Und per widgetOverride dann zuteilen.

Ich mag alles lieber frei definierbar, mal sehen ob es 2 Versionen werden oder alles
unter einen Hut.

Gruß schwatter
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 03 November 2025, 12:33:04
Ja, es ist nicht immer einfach. Zu komplizierte Dinge werden allerdings erfahrungsgemäß von Anwendern nicht angenommen. Daher besser möglichst viel vorbelegen und im Bedarfsfall optional konfigurierbar machen. Für den Einstieg sollte die Hemmschwelle nicht zu hoch sein. Wenn es erstmal läuft, fangen die Leute an die Doku genauer zu studieren, weil sie dann individualisieren wollen ;)

Zwei Versionen will man nicht wirklich dauerhaft pflegen.
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 06 November 2025, 20:57:52
climacontrol.png

Nabend,

ja, ich stimme zu. Zwei Versionen will ich nicht pflegen. Ich habe jetzt versucht, alles zu verschmelzen.
Hier und da nach ein paar Bugs. Einen Bogenslider hatte ich auch schon drin, aber wir Beiden stehen noch
auf Kriegsfuß. Daher erstmal ein MiniSetFeld, unten in der Mitte.

Hier 2 Beispiele:

User-freundlich:
defmod widgetDummyFhemSVG dummy
attr widgetDummyFhemSVG readingList measured-temp humidity desired-temp status btn1Icon btn2Icon btn3Icon btn4Icon btn5Icon btn6Icon btn1Cmd btn2Cmd btn3Cmd btn4Cmd btn5Cmd btn6Cmd
attr widgetDummyFhemSVG room Test
attr widgetDummyFhemSVG setList measured-temp humidity desired-temp status btn1Icon btn2Icon btn3Icon btn4Icon btn5Icon btn6Icon btn1Cmd btn2Cmd btn3Cmd btn4Cmd btn5Cmd btn6Cmd
attr widgetDummyFhemSVG subType Thermostat
attr widgetDummyFhemSVG webCmd climacontrol
attr widgetDummyFhemSVG widgetOverride climacontrol:controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual:fhem@manual,rc_MINUS:fhem@temp-5,sani_heating_boost:fhem@boost,sani_heating_automatic:fhem@automatic,rc_PLUS:fhem@temp+5,sani_heating_mode:fhem@night_day

setstate widgetDummyFhemSVG night_day
setstate widgetDummyFhemSVG 2025-11-06 20:43:22 desired-temp 15
setstate widgetDummyFhemSVG 2025-11-03 21:05:23 humidity 54
setstate widgetDummyFhemSVG 2025-11-06 11:51:34 measured-temp 15
setstate widgetDummyFhemSVG 2025-11-06 20:43:13 state night_day
setstate widgetDummyFhemSVG 2025-11-03 21:05:27 status heating

User-feindlich
defmod widgetDummyDataUrlSVG dummy
attr widgetDummyDataUrlSVG readingList on off measured-temp humidity desired-temp status btn1Icon btn2Icon btn3Icon btn4Icon btn5Icon btn6Icon btn1Cmd btn2Cmd btn3Cmd btn4Cmd btn5Cmd btn6Cmd
attr widgetDummyDataUrlSVG room Test
attr widgetDummyDataUrlSVG setList on off measured-temp humidity desired-temp status btn1Icon btn2Icon btn3Icon btn4Icon btn5Icon btn6Icon btn1Cmd btn2Cmd btn3Cmd btn4Cmd btn5Cmd btn6Cmd
attr widgetDummyDataUrlSVG subType Thermostat
attr widgetDummyDataUrlSVG webCmd climacontrol
attr widgetDummyDataUrlSVG widgetOverride climacontrol:controlminidash,measured-temp,humidity,desired-temp,status

setstate widgetDummyDataUrlSVG 21.5
setstate widgetDummyDataUrlSVG 2025-11-06 20:28:15 btn1Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M20.79%2C13.95L18.46%2C14.57L16.46%2C13.44V10.56L18.46%2C9.43L20.79%2C10.05L21.31%2C8.12L19.54%2C7.65L20%2C5.88L18.07%2C5.36L17.45%2C7.69L15.45%2C8.82L13%2C7.38V5.12L14.71%2C3.41L13.29%2C2L12%2C3.29L10.71%2C2L9.29%2C3.41L11%2C5.12V7.38L8.5%2C8.82L6.5%2C7.69L5.92%2C5.36L4%2C5.88L4.47%2C7.65L2.7%2C8.12L3.22%2C10.05L5.55%2C9.43L7.55%2C10.56V13.45L5.55%2C14.58L3.22%2C13.96L2.7%2C15.89L4.47%2C16.36L4%2C18.12L5.93%2C18.64L6.55%2C16.31L8.55%2C15.18L11%2C16.62V18.88L9.29%2C20.59L10.71%2C22L12%2C20.71L13.29%2C22L14.7%2C20.59L13%2C18.88V16.62L15.5%2C15.17L17.5%2C16.3L18.12%2C18.63L20%2C18.12L19.53%2C16.35L21.3%2C15.88L20.79%2C13.95M9.5%2C10.56L12%2C9.11L14.5%2C10.56V13.44L12%2C14.89L9.5%2C13.44V10.56Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:30:51 btn2Cmd { fhem("set widgetDummyDataUrlSVG desired-temp ".(ReadingsVal("widgetDummyDataUrlSVG","desired-temp",0)+0.5)) }
setstate widgetDummyDataUrlSVG 2025-11-05 21:16:23 btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M17%2C11V13H7V11H17Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:25:41 btn3Cmd set widgetDummyDataUrlSVG off
setstate widgetDummyDataUrlSVG 2025-11-06 20:27:05 btn3Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20A8%2C8%200%200%2C1%204%2C12A8%2C8%200%200%2C1%2012%2C4A8%2C8%200%200%2C1%2020%2C12A8%2C8%200%200%2C1%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:27:32 btn4Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M8.5%204.5L5.4%209.5L8.5%2014.7L5.2%2020.5L3.4%2019.6L6.1%2014.7L3%209.5L6.7%203.6L8.5%204.5M14.7%204.4L11.6%209.5L14.7%2014.5L11.4%2020.3L9.6%2019.4L12.3%2014.5L9.2%209.5L12.9%203.5L14.7%204.4M21%204.4L17.9%209.5L21%2014.5L17.7%2020.3L15.9%2019.4L18.6%2014.5L15.5%209.5L19.2%203.5L21%204.4%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 12:27:15 btn5Cmd { fhem("set widgetDummyDataUrlSVG desired-temp ".(ReadingsVal("widgetDummyDataUrlSVG","desired-temp",0)+0.5)) }
setstate widgetDummyDataUrlSVG 2025-11-05 21:16:01 btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M11%2C7H13V11H17V13H13V17H11V13H7V11H11V7Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:25:31 btn6Cmd set widgetDummyDataUrlSVG on
setstate widgetDummyDataUrlSVG 2025-11-06 20:26:48 btn6Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20A8%2C8%200%200%2C1%204%2C12A8%2C8%200%200%2C1%2012%2C4A8%2C8%200%200%2C1%2020%2C12A8%2C8%200%200%2C1%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M12%2C7A5%2C5%200%200%2C0%207%2C12A5%2C5%200%200%2C0%2012%2C17A5%2C5%200%200%2C0%2017%2C12A5%2C5%200%200%2C0%2012%2C7Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:30:54 desired-temp 25
setstate widgetDummyDataUrlSVG 2025-10-31 18:47:19 humidity 53
setstate widgetDummyDataUrlSVG 2025-11-06 19:07:00 measured-temp 12
setstate widgetDummyDataUrlSVG 2025-11-06 20:29:01 off
setstate widgetDummyDataUrlSVG 2025-11-06 20:28:57 on
setstate widgetDummyDataUrlSVG 2025-11-02 19:10:30 state 21.5
setstate widgetDummyDataUrlSVG 2025-11-05 20:18:40 status Heating
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 06 November 2025, 21:49:58
Schön. Sobald ich etwas mehr Zeit habe, werde ich mir deine Lösung genauer anschauen, um ggf. weitere Widgets auf deiner Basis zu erstellen.

Ich könnte mir vorstellen in einer uiTable alle Räume mit Thermostaten abzubilden, allerdings sehe ich das Problem, dass du offenbar immer nur von einem Widget pro Device ausgehst. Wäre es nicht sinnvoller für die Konfiguration statt Readings user-Attribute zu verwenden?
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 06 November 2025, 23:12:25
Momentan ja, 1 Widget pro Device. Wenn ich mehrere, sagen wir Thermostate, gruppieren möchte, würde ich zu room und subType greifen.
Du hast vom DOIF den Anspruch, möglichst viel in einen Table zu packen, aber da sag ich als User, find ich zu viel.
Manchmal kann es auch mal nur ein kleines Element sein.
Ich nutze viel Handy anstatt Desktop.

Abgesehen davon, mag ich Strings in Readings abzulegen.
Ich muss aber auch gestehen, userattr hab ich noch nie genutzt.
Nicht mal angeschaut, mach ich jetzt mal.

Gruß schwatter
Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 07 November 2025, 11:03:47
OK. Dann wäre es das erste Widget, was es nicht unterstützt. Raumansicht ist leider kein Ersatz für eine "Dashboard"-Darstellung.

Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 07 November 2025, 13:27:09
widget_test.png

Meinst du das in etwa so? Die Buttons und auch das set sind noch nicht gemapped. Aber die angezeigten Readings. Ob ich das will, weiß ich noch nicht.
Ein Kontrolwidget reicht mir. Aber, ich gebe zu, zur Visualierung für mehrere Ringe oder was man sonst noch aus SVG basteln kann ist es super.
Auch sowas könnte damit umgesetzt werden:https://previews.123rf.com/images/liborpal/liborpal2301/liborpal230100005/197028818-old-analog-ammeter-on-a-white-background-measurement-of-electric-current.jpg

Edit:
Mehrere Def per widgetOverride funktionieren doch. Daher habe ich das JS im Anhang wieder entfernt.

defmod widgetDummyDataUrlSVG dummy
attr widgetDummyDataUrlSVG readingList on off measured-temp humidity desired-temp status measured-temp1 humidity1 desired-temp desired-temp1 desired-temp2 status1 measured-temp2 humidity2 desired-temp status2 btn1Icon btn2Icon btn3Icon btn4Icon btn5Icon btn6Icon btn1Cmd btn2Cmd btn3Cmd btn4Cmd btn5Cmd btn6Cmd
attr widgetDummyDataUrlSVG room Test
attr widgetDummyDataUrlSVG setList on off measured-temp humidity desired-temp status measured-temp1 humidity1 desired-temp desired-temp1 desired-temp2 status1 measured-temp2 humidity2 desired-temp status2 btn1Icon btn2Icon btn3Icon btn4Icon btn5Icon btn6Icon btn1Cmd btn2Cmd btn3Cmd btn4Cmd btn5Cmd btn6Cmd
attr widgetDummyDataUrlSVG subType Thermostat
attr widgetDummyDataUrlSVG webCmd climacontrol:climacontrol1:climacontrol2
attr widgetDummyDataUrlSVG widgetOverride climacontrol:controlminidash,measured-temp,humidity,desired-temp,status climacontrol1:controlminidash,measured-temp,humidity,desired-temp,status climacontrol2:controlminidash,measured-temp,humidity,desired-temp,status climacontrol:controlminidash,measured-temp,humidity,desired-temp,status climacontrol1:controlminidash,measured-temp1,humidity1,desired-temp1,status climacontrol2:controlminidash,measured-temp2,humidity2,desired-temp2,status

setstate widgetDummyDataUrlSVG 21.5
setstate widgetDummyDataUrlSVG 2025-11-06 20:28:15 btn1Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M20.79%2C13.95L18.46%2C14.57L16.46%2C13.44V10.56L18.46%2C9.43L20.79%2C10.05L21.31%2C8.12L19.54%2C7.65L20%2C5.88L18.07%2C5.36L17.45%2C7.69L15.45%2C8.82L13%2C7.38V5.12L14.71%2C3.41L13.29%2C2L12%2C3.29L10.71%2C2L9.29%2C3.41L11%2C5.12V7.38L8.5%2C8.82L6.5%2C7.69L5.92%2C5.36L4%2C5.88L4.47%2C7.65L2.7%2C8.12L3.22%2C10.05L5.55%2C9.43L7.55%2C10.56V13.45L5.55%2C14.58L3.22%2C13.96L2.7%2C15.89L4.47%2C16.36L4%2C18.12L5.93%2C18.64L6.55%2C16.31L8.55%2C15.18L11%2C16.62V18.88L9.29%2C20.59L10.71%2C22L12%2C20.71L13.29%2C22L14.7%2C20.59L13%2C18.88V16.62L15.5%2C15.17L17.5%2C16.3L18.12%2C18.63L20%2C18.12L19.53%2C16.35L21.3%2C15.88L20.79%2C13.95M9.5%2C10.56L12%2C9.11L14.5%2C10.56V13.44L12%2C14.89L9.5%2C13.44V10.56Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 22:11:25 btn2Cmd { fhem("set widgetDummyDataUrlSVG desired-temp ".(ReadingsVal("widgetDummyDataUrlSVG","desired-temp",0)-0.5)) }
setstate widgetDummyDataUrlSVG 2025-11-05 21:16:23 btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M17%2C11V13H7V11H17Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:25:41 btn3Cmd set widgetDummyDataUrlSVG off
setstate widgetDummyDataUrlSVG 2025-11-06 20:27:05 btn3Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20A8%2C8%200%200%2C1%204%2C12A8%2C8%200%200%2C1%2012%2C4A8%2C8%200%200%2C1%2020%2C12A8%2C8%200%200%2C1%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:27:32 btn4Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M8.5%204.5L5.4%209.5L8.5%2014.7L5.2%2020.5L3.4%2019.6L6.1%2014.7L3%209.5L6.7%203.6L8.5%204.5M14.7%204.4L11.6%209.5L14.7%2014.5L11.4%2020.3L9.6%2019.4L12.3%2014.5L9.2%209.5L12.9%203.5L14.7%204.4M21%204.4L17.9%209.5L21%2014.5L17.7%2020.3L15.9%2019.4L18.6%2014.5L15.5%209.5L19.2%203.5L21%204.4%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 12:27:15 btn5Cmd { fhem("set widgetDummyDataUrlSVG desired-temp ".(ReadingsVal("widgetDummyDataUrlSVG","desired-temp",0)+0.5)) }
setstate widgetDummyDataUrlSVG 2025-11-05 21:16:01 btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M11%2C7H13V11H17V13H13V17H11V13H7V11H11V7Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-06 20:25:31 btn6Cmd set widgetDummyDataUrlSVG on
setstate widgetDummyDataUrlSVG 2025-11-06 20:26:48 btn6Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20A8%2C8%200%200%2C1%204%2C12A8%2C8%200%200%2C1%2012%2C4A8%2C8%200%200%2C1%2020%2C12A8%2C8%200%200%2C1%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M12%2C7A5%2C5%200%200%2C0%207%2C12A5%2C5%200%200%2C0%2012%2C17A5%2C5%200%200%2C0%2017%2C12A5%2C5%200%200%2C0%2012%2C7Z%22%20%2F%3E%3C%2Fsvg%3E
setstate widgetDummyDataUrlSVG 2025-11-07 13:12:56 desired-temp 22.5
setstate widgetDummyDataUrlSVG 2025-11-07 13:12:20 desired-temp1 17.5
setstate widgetDummyDataUrlSVG 2025-11-07 13:12:00 desired-temp2 24
setstate widgetDummyDataUrlSVG 2025-10-31 18:47:19 humidity 53
setstate widgetDummyDataUrlSVG 2025-11-07 12:59:56 humidity1 54
setstate widgetDummyDataUrlSVG 2025-11-07 13:02:19 humidity2 68
setstate widgetDummyDataUrlSVG 2025-11-06 19:07:00 measured-temp 12
setstate widgetDummyDataUrlSVG 2025-11-07 12:59:47 measured-temp1 15
setstate widgetDummyDataUrlSVG 2025-11-07 13:01:21 measured-temp2 25
setstate widgetDummyDataUrlSVG 2025-11-07 13:12:55 off
setstate widgetDummyDataUrlSVG 2025-11-07 13:12:56 on
setstate widgetDummyDataUrlSVG 2025-11-02 19:10:30 state 21.5
setstate widgetDummyDataUrlSVG 2025-11-05 20:18:40 status Heating


Gruß schwatter

Titel: Aw: [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: Damian am 07 November 2025, 16:44:17
Als Beispiel ist hier alles in einem Device. Sowohl die Steuerung als auch die Visualisierung wurde durch eine Schleife generiert. Was hier zeilenweise aus mehreren Widgets definiert wurde, könnte ich mir kompakter und schöner jeweils als ein Widget vorstellen.

Und es macht auch keinen Sinn jeweils die gleichen Definitionen pro Raum auf viele Dummys oder sonstige Devices zu verteilen.

Wenn ich hierbei einen weiteren Raum mit Visualisierung und Steuerung hinzufügen will, dann brauche ich nur eine Zeile in der Definition hinzuzufügen:

z. B. 

push (@{$_sc},[qw(Bad TH_Bad_HM H_Bad)]);
Titel: Aw: Fhemweb Widget [ControlMiniDash] Thermostat,KlimaControl,....,
Beitrag von: schwatter am 07 November 2025, 19:00:22
Verstehe, das Widget einmalig definieren und einmalig alle Devices als attr ablegen. Und dann kommt ein fertiger Table raus mit allem pro Device.

So, habe den ersten Beitrag mal auf Widget getrimmt und auch die Überschrift vom Thread.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 08 November 2025, 21:16:46
Nabend,

Update im ersten Post.


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 08 November 2025, 23:34:28
Hab´s mal im DOIF mit einem echten HM-Wandthermostat getestet. Grundfunktionalität scheint gegeben zu sein.

defmod di_widget DOIF ##
attr di_widget room Test
attr di_widget uiTable {package ui_Table;;}\
widget([TH_DG_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")

setstate di_widget initialized
setstate di_widget 2025-11-08 22:35:14 cmd 0
setstate di_widget 2025-11-08 22:35:14 mode enabled
setstate di_widget 2025-11-08 22:35:14 state initialized
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 08 November 2025, 23:46:20
Auch mehrere Thermostate in einem Device funktionieren:

defmod di_widget DOIF ##
attr di_widget room Test
attr di_widget uiTable {package ui_Table;;}\
widget([TH_DG_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")|\
widget([TH_Kz_w_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")\
widget([TH_Kz_o_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")|\
widget([TH_Kueche_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")\
widget([TH_Keller_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")|\
widget([TH_Bad_HM:desired-temp],'controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")

Allerdings würde sich der Name des Raumes im Widget gut machen.
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 09 November 2025, 08:44:17
Morgen,


funktioniert super in deinem Table. Werde das im ersten Post als Info einfügen.

Screenshot 2025-11-09 084503.png

Zu Raum. Wie immer kann man alles mit Strings erschlagen oder es kurz und knapp halten. Da HM ohnehin alles auf die Channels aufgeteilt hat und man sich bei Devices hier und da userReadings anlegt, mache ich es so: Ich sammle die Informationen in einem Channel, der mir wichtig erscheint. In meinem Fall, ist es die ValvePosition, welche ich aus den HM-CC-RT-DN und meinem HmIP_FALMOT_C12 in die WTH_Climate als Reading setze. Wie du selber siehst, ist der state T: 19.9 desired: 21.0 unglücklich.

Mein userReading mit einen zusätzlichen Hinweis für den Raum wäre dann so:
valveState {
  my $v = ReadingsVal("TH_El_Clima","ValvePosition","?");
  return "Kdz - V ${v}%";
}

Und dann hier einfügen:
controlminidash,measured-temp,humidity,desired-temp,valveState,...,...
Mal sehen, wenn der Bogenslider richtig funktioniert und das Eingabefeld mit dem Setbutton wegfällt, ob dann noch ein 5tes Stringfeld einzieht.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 11 November 2025, 09:02:11
Im DOIF kann man mit Instanzvariablen arbeiten. Diese lassen sich pro Device deklarieren und innerhalb des Devices nutzen. Damit lassen sich gleichartige Aufrufe kürzer darstellen, siehe unten.

Ebenfalls ist im Regelfall im DOIF, im Gegensatz zu Dummy und Co., die Angabe der Attribute: readingList, setList, webCmd , widgetOverride nicht erforderlich.

defmod di_widget DOIF ##
attr di_widget room Test
attr di_widget uiTable {package ui_Table;;\
$_param='controlminidash,measured-temp,humidity,desired-temp,state,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day';;\
$_set="set desired-temp";;\
}\
widget([TH_DG_HM:desired-temp],$_param,$_set)|\
widget([TH_Kz_w_HM:desired-temp],$_param,$_set)\
widget([TH_Kz_o_HM:desired-temp],$_param,$_set)|\
widget([TH_Kueche_HM:desired-temp],$_param,$_set)\
widget([TH_Keller_HM:desired-temp],$_param,$_set)|\
widget([TH_Bad_HM:desired-temp],$_param,$_set)
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 11 November 2025, 20:23:20
Nabend,

ich habe das Beispiel 1zu1 im ersten Post übernommen.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 14 November 2025, 19:39:21
widget_arcslider.png

Nabend,

Update im ersten Post.


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 23 November 2025, 20:35:05
Screenshot 2025-11-23 201555.png

Nabend,

Update im ersten Post.



Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 25 November 2025, 07:45:00
Nachdem du alles getestet hast, kannst nach einem developer-Account anfragen. Damit kannst du deine widgets ins FHEM-Repository einchecken, dann stehen sie allen Usern automatisch zur Verfügung. Natürlich vorher eine vollständige Doku im FHEM-Wiki verfassen.
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 25 November 2025, 18:42:21
Nabend,

danke für den Zuspruch, aber das wird noch nichts. Es gibt da ein paar Probleme mit der Fhemkonformität.

- zu wenig Tester.
- mit $(`td[informid="${dev}"]`).remove(); schalte ich den state tot. Vielleicht ist das auch ok und wird geduldet.
- Ist das Widget geladen, dann sind subsets nicht mehr im Deviceoverview sichtbar. Bzw, das Widget drängt sich da rein.
- Erreichbar sind diese aber trotzdem noch, wenn ich z.B ein " set <name> boost on" absetze, aber schön ist das nicht...ich suche noch nach einer Lösung.



Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 25 November 2025, 21:28:16
Nabend,

Update im ersten Post für Arcsliderwidget.



Gruß schwatter

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 29 November 2025, 20:22:33
Nabend,

Update im ersten Post für Arcsliderwidget.


Beispiel:
attr HmIP_KLHR_STHD webCmd controlMD auto:manu:boost:on:off
attr HmIP_KLHR_STHD widgetOverride controlMD:controlminidash,measured-temp,#,desired-temp,HEATING_COOLING,#,#,#,#,#,#


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 30 November 2025, 12:00:29
Moin,

Update im ersten Post für Arcsliderwidget.


Hier ein funktionierendes Beispiel:
defmod widgetControlUserAttr dummy
attr widgetControlUserAttr userattr btn1Cmd btn1Color btn1Icon btn2Cmd btn2Color btn2Icon btn3Cmd btn3Color btn3Icon btn4Cmd btn4Color btn4Icon btn5Cmd btn5Color btn5Icon btn6Cmd btn6Color btn6Icon
attr widgetControlUserAttr btn1Cmd set widgetControlUserAttr state cooling
attr widgetControlUserAttr btn1Color blue
attr widgetControlUserAttr btn1Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M20.79%2C13.95L18.46%2C14.57L16.46%2C13.44V10.56L18.46%2C9.43L20.79%2C10.05L21.31%2C8.12L19.54%2C7.65L20%2C5.88L18.07%2C5.36L17.45%2C7.69L15.45%2C8.82L13%2C7.38V5.12L14.71%2C3.41L13.29%2C2L12%2C3.29L10.71%2C2L9.29%2C3.41L11%2C5.12V7.38L8.5%2C8.82L6.5%2C7.69L5.92%2C5.36L4%2C5.88L4.47%2C7.65L2.7%2C8.12L3.22%2C10.05L5.55%2C9.43L7.55%2C10.56V13.45L5.55%2C14.58L3.22%2C13.96L2.7%2C15.89L4.47%2C16.36L4%2C18.12L5.93%2C18.64L6.55%2C16.31L8.55%2C15.18L11%2C16.62V18.88L9.29%2C20.59L10.71%2C22L12%2C20.71L13.29%2C22L14.7%2C20.59L13%2C18.88V16.62L15.5%2C15.17L17.5%2C16.3L18.12%2C18.63L20%2C18.12L19.53%2C16.35L21.3%2C15.88L20.79%2C13.95M9.5%2C10.56L12%2C9.11L14.5%2C10.56V13.44L12%2C14.89L9.5%2C13.44V10.56Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetControlUserAttr btn2Cmd { fhem("set widgetControlUserAttr desired-temp ".(ReadingsVal("widgetControlUserAttr","desired-temp",0)-0.5)) }
attr widgetControlUserAttr btn2Color blue
attr widgetControlUserAttr btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M17%2C11V13H7V11H17Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetControlUserAttr btn3Cmd set widgetControlUserAttr state off
attr widgetControlUserAttr btn3Icon data:image/svg+xml;;;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20A8%2C8%200%200%2C1%204%2C12A8%2C8%200%200%2C1%2012%2C4A8%2C8%200%200%2C1%2020%2C12A8%2C8%200%200%2C1%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetControlUserAttr btn4Cmd set widgetControlUserAttr state heating
attr widgetControlUserAttr btn4Color red
attr widgetControlUserAttr btn4Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M8.5%204.5L5.4%209.5L8.5%2014.7L5.2%2020.5L3.4%2019.6L6.1%2014.7L3%209.5L6.7%203.6L8.5%204.5M14.7%204.4L11.6%209.5L14.7%2014.5L11.4%2020.3L9.6%2019.4L12.3%2014.5L9.2%209.5L12.9%203.5L14.7%204.4M21%204.4L17.9%209.5L21%2014.5L17.7%2020.3L15.9%2019.4L18.6%2014.5L15.5%209.5L19.2%203.5L21%204.4%22%20%2F%3E%3C%2Fsvg%3E
attr widgetControlUserAttr btn5Cmd { fhem("set widgetControlUserAttr desired-temp ".(ReadingsVal("widgetControlUserAttr","desired-temp",0)+0.5)) }
attr widgetControlUserAttr btn5Color red
attr widgetControlUserAttr btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M11%2C7H13V11H17V13H13V17H11V13H7V11H11V7Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetControlUserAttr btn6Cmd set widgetControlUserAttr state on
attr widgetControlUserAttr btn6Color green
attr widgetControlUserAttr btn6Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20A8%2C8%200%200%2C1%204%2C12A8%2C8%200%200%2C1%2012%2C4A8%2C8%200%200%2C1%2020%2C12A8%2C8%200%200%2C1%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M12%2C7A5%2C5%200%200%2C0%207%2C12A5%2C5%200%200%2C0%2012%2C17A5%2C5%200%200%2C0%2017%2C12A5%2C5%200%200%2C0%2012%2C7Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetControlUserAttr readingList measured-temp humidity desired-temp state
attr widgetControlUserAttr room Test
attr widgetControlUserAttr setList measured-temp humidity desired-temp state
attr widgetControlUserAttr subType Thermostat
attr widgetControlUserAttr webCmd climacontrol
attr widgetControlUserAttr widgetOverride climacontrol:controlminidash,measured-temp,humidity,desired-temp,state,#,#,#,#,#,#

setstate widgetControlUserAttr heating
setstate widgetControlUserAttr 2025-11-30 11:51:37 desired-temp 20.0
setstate widgetControlUserAttr 2025-11-30 11:42:42 humidity 56
setstate widgetControlUserAttr 2025-11-30 11:42:48 measured-temp 19
setstate widgetControlUserAttr 2025-11-30 11:51:21 state heating



So langsam wird es was für das SVN. Wikizugang habe ich schonmal beantragt.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 05 Dezember 2025, 23:16:33
Nabend,

ich habe unter Ankündigungen keine Schreibrechte. Daher mache ich das hier.


Ich glaube, ich muss noch einen Hinweis in der Commandref unter widgetOverride ablegen?
Habe ich noch etwas vergessen?

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 07 Dezember 2025, 20:20:14
hallo Schwatter
das ist ja ein super Widget, endlich geht's mit Fhem in die richtige Richtung weiter.
Ich glaub langsam ich kann bei Fhem bleiben und muss mich nicht mit HA beschäftigen. 😁

Besten Dank
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 09 Dezember 2025, 08:04:41
Hallo
soweit funktioniert das Widget schon recht gut.
Ich bin mit dem Sollwert im Konflikt.... In meiener Installation (KNX) habe ich ein Objekt für Sollwert setzen im Regler und eins für Sollwert lesen aus dem Regler. Somit können Aenderungen im Regler und in der Fhem gemacht werden und der jeweils Andere bekommt die Aenderung mit.
Gibt es eine Möglichkeit das einfach zu implementieren oder habe ich etwas falsch verstanden?

gruss

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 09 Dezember 2025, 09:34:00
Morgen,

mh, ich kenne KNX nicht vom Aufbau in Fhem. Bzw, wie die Devices sich darstellen. Ist Objekt = Device?.
Ich würde das Widget in dem Device setzen, in dem die Temperatur per set gesetzt wird. Und wenn
es 2 Devices sind, eins für get und eins für set, die Temp vom get-Device per notify in das set-Device
setzen.

Das ist das Beispiel:
attr <device> widgetOverride climacontrol:controlminidash,measured-temp,humidity,desired-temp,state,#,#,#,#,#,#
Die beiden Readings measured-temp und desired-temp sind wichtig:
measured-temp = Ein Reading, Name egal. Wichtig, muss gemessene Temperatur liefern.
humidity = Ein Reading, Name egal. Für Luftfeuchtigkeit oder mit # einfach ausblenden.
desired-temp = Ein Reading, Name egal. Wichtig, muss gewünschte Temperatur setzen.
state = Ein Reading, Name egal. Zur freien Verfügung.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 09 Dezember 2025, 17:20:51
Sollte das Reading der Soll-Temperatur zum Auslesen anders sein als mit set zum Setzen, dann kannst das Widget über DOIF definieren, da geht so was. Man kann sogar die Soll-Temperatur des Widgets im DOIF per setreading setzen.
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 10 Dezember 2025, 19:36:01
Besten Dank für eure Hilfe, aber ich kapier das nicht.... sorry.

Ich kann aus dem KNX Device  das Reading desired-tem im DoIF Device setzen und bekomme es auch angezeigt. perfekt.
Wenn ich aber im DoIF Device mit dem Arc-Slider eine neue desired-temp setze bekomme ich das Reading nicht im KNX Device geändert.

Anbei das DoIF:
defmod di_Klima_Buero DOIF {}
attr di_Klima_Buero alias Klima Büro Widget
attr di_Klima_Buero event_Readings measured-temp: [EG_Buero_Klima:measured-temp-get-num-only],\
temp_soll: [EG_Buero_Klima:temp_soll_num_only],\
valve: [EG_Buero_Klima:getG4]
attr di_Klima_Buero room Buero
attr di_Klima_Buero uiTable {package ui_Table;;;;}\\
card([[EG_Buero_Klima:getG2:col],[EG_Buero_Klima:getG3:col]],"Büro","temp_inside",15,40,undef,undef,["Ist °C,red","Soll °C,#287afc"],\&temp_hue,"1","180,,,,,,200",undef,undef)|\
widget([di_Klima_Buero:measured-temp],'controlminidash,measured-temp,#,temp_soll,valve,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set desired-temp")

und das KNX Device:
defmod EG_Buero_Klima KNX 4/2/101:dpt9.001:desired-temp 4/1/1:dpt9.001:measured-temp:listenonly 4/2/1:dpt9.001:desired-temp-read:listenonly 4/3/1:dpt5.001:listenonly
attr EG_Buero_Klima IODev myKNXGW
attr EG_Buero_Klima alias Temp Büro
attr EG_Buero_Klima group Raumklima
attr EG_Buero_Klima room Buero,Klima/ Heizung
attr EG_Buero_Klima sortby 8
attr EG_Buero_Klima stateFormat Ist:getG2 | Soll:getG3 | Ventil:getG4
attr EG_Buero_Klima userReadings measured-temp-get-num-only:measured-temp-get.* { ReadingsNum($name, 'measured-temp-get', 0) }, temp_soll_num_only:desired-temp-read-get.* { ReadingsNum($name, 'desired-temp-read-get', 0) }, value_num_only:getG4.* { ReadingsNum($name, 'getG4', 0) }
attr EG_Buero_Klima webCmd value
attr EG_Buero_Klima widgetOverride value:16.5,17.5,18.5,19.5,20.5,21.5,22.5,23.5,24.5  g1

Um eine Hilfestellung wäre ich sehr dankbar.

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 10 Dezember 2025, 20:08:33
Offenbar setzt du die Soll-Temperatur mit "set EG_Buero_Klima value <Wert>". Wo ist die dann im KNX-Device sichtbar?
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 11 Dezember 2025, 08:53:43
Morgen appi,

kannst du bitte bei beiden Devices jeweils unten auf "Copy for forum.fhem.de" klicken und hier einstellen.
Vielleicht wird daraus das Problem ersichtlich.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 11 Dezember 2025, 16:46:31
Ich hab heute noch etwas geübt, allerdings mit mässigem Erfolg.....
Das widgetOverride direkt im KNX Device funktioniert eigentlich, ausser wenn ich die solltemp direkt am Thermostat an der Wand ändere bekommt dieses Device das nicht mit, weil der neue Soll im Reading solltemp_ist upgedatet wird.

define EG_Buero_Klima KNX 4/2/101:dpt9:solltemp:set:nosuffix 4/1/1:dpt9:measured_temp:get:nosuffix 4/2/1:dpt9:solltemp_ist:get:nosuffix 4/3/1:dpt5.001:valvepos:get:nosuffix
attr EG_Buero_Klima IODev myKNXGW
attr EG_Buero_Klima alias Temp Büro
attr EG_Buero_Klima btn5Cmd { fhem("set widgetControlUserAttr solltemp ".(ReadingsVal("widgetControlUserAttr","solltemp_ist",0)+0.5)) }
attr EG_Buero_Klima comment GAs: SollTemp-schreiben, IstTemp, SollTemp-lesen, ValvePosition
attr EG_Buero_Klima group Raumklima
attr EG_Buero_Klima room Buero,Klima/ Heizung
attr EG_Buero_Klima sortby 8
attr EG_Buero_Klima stateFormat Ist: measured_temp °C | Soll: solltemp_ist °C | Ventil: valvepos
attr EG_Buero_Klima webCmd climacontrol
attr EG_Buero_Klima widgetOverride climacontrol:controlminidash,measured_temp,#,solltemp,valvepos,#,#,#,#,#,#
#  CFGFN     
#  DEF        4/2/101:dpt9:solltemp:set:nosuffix 4/1/1:dpt9:measured_temp:get:nosuffix 4/2/1:dpt9:solltemp_ist:get:nosuffix 4/3/1:dpt5.001:valvepos:get:nosuffix
#  FUUID      693a69cd-f33f-fb60-6cfa-11e02ca9bd002cea
#  IODev      myKNXGW
#  LASTInputDev myKNXGW
#  MSGCNT    793
#  NAME      EG_Buero_Klima
#  NR        1229
#  STATE      Ist: 23.3 °C | Soll: 19.5 °C | Ventil: 0 %
#  STILLDONETIME 0
#  TYPE      KNX
#  eventCount 887
#  model      dpt9
#  myKNXGW_MSGCNT 793
#  myKNXGW_TIME 2025-12-11 15:55:46
#  GADDETAILS:
#    measured_temp:
#      CODE      04101
#      MODEL      dpt9
#      NO        2
#      OPTION    get
#      RDNAMEGET  measured_temp
#      RDNAMESET  measured_temp
#      SETLIST   
#    solltemp:
#      CODE      04265
#      MODEL      dpt9
#      NO        1
#      OPTION    set
#      RDNAMEGET  solltemp
#      RDNAMESET  solltemp
#      SETLIST   
#    solltemp_ist:
#      CODE      04201
#      MODEL      dpt9
#      NO        3
#      OPTION    get
#      RDNAMEGET  solltemp_ist
#      RDNAMESET  solltemp_ist
#      SETLIST   
#    valvepos:
#      CODE      04301
#      MODEL      dpt5.001
#      NO        4
#      OPTION    get
#      RDNAMEGET  valvepos
#      RDNAMESET  valvepos
#      SETLIST    :slider,0,1,100
#  GADTABLE:
#    04101      measured_temp
#    04201      solltemp_ist
#    04265      solltemp
#    04301      valvepos
#  Helper:
#  READINGS:
#    2025-12-11 13:45:02  IODev          myKNXGW
#    2025-12-11 15:55:46  last-sender    1.1.8
#    2025-12-11 15:55:46  measured_temp  23.3
#    2025-12-11 15:53:53  solltemp        22.0
#    2025-12-11 15:54:34  solltemp_ist    19.5
#    2025-12-11 15:55:46  state          23.3
#    2025-12-11 15:54:59  valvepos        0 %
#
setstate EG_Buero_Klima Ist: 23.3 °C | Soll: 19.5 °C | Ventil: 0 %
setstate EG_Buero_Klima 2025-12-11 13:45:02 IODev myKNXGW
setstate EG_Buero_Klima 2025-12-11 15:55:46 last-sender 1.1.8
setstate EG_Buero_Klima 2025-12-11 15:55:46 measured_temp 23.3
setstate EG_Buero_Klima 2025-12-11 15:53:53 solltemp 22.0
setstate EG_Buero_Klima 2025-12-11 15:54:34 solltemp_ist 19.5
setstate EG_Buero_Klima 2025-12-11 15:55:46 state 23.3
setstate EG_Buero_Klima 2025-12-11 15:54:59 valvepos 0 %



Da funktioniert die Version mit dem widgetOverride in einem separaten DoIF Device etwas besser.
Das KNX Device bekommt die Aenderungen des Soll im DoIF nicht mit , hier stehe ich nun etwas hilfloss da..

define di_Klima_Buero DOIF {}
attr di_Klima_Buero alias Klima Büro Widget
attr di_Klima_Buero event_Readings measured-temp: [EG_Buero_Klima:measured_temp],\
solltemp: [EG_Buero_Klima:solltemp],\
solltemp_ist: [EG_Buero_Klima:solltemp_ist],\
valve: [EG_Buero_Klima:valvepos]
attr di_Klima_Buero room Buero
attr di_Klima_Buero uiTable {package ui_Table;;;;}\\
card([[EG_Buero_Klima:measured_temp:col],[EG_Buero_Klima:solltemp_ist:col]],"Büro","temp_inside",15,40,undef,undef,["Ist °C,red","Soll °C,#287afc"],\&temp_hue,"1","180,,,,,,200",undef,undef)|\
widget([EG_Buero_Klima:measured-temp],'controlminidash,measured_temp,#,solltemp,valvepos,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set solltemp")
#  CFGFN     
#  DEF        {}
#  FUUID      6939b694-f33f-fb60-cdbd-68861a665f10b40c
#  MODEL      Perl
#  NAME      di_Klima_Buero
#  NOTIFYDEV  global,EG_Buero_Klima
#  NR        1225
#  NTFY_ORDER 50-di_Klima_Buero
#  STATE      initialized
#  TYPE      DOIF
#  VERSION    30377 2025-10-12 09:46:59
#  eventCount 891
#  READINGS:
#    2025-12-11 16:37:05  measured-temp  23.1
#    2025-12-10 19:06:12  mode            enabled
#    2025-12-11 16:38:54  solltemp        23.0
#    2025-12-11 16:38:54  solltemp_ist    23
#    2025-12-10 19:06:12  state          initialized
#    2025-12-11 14:29:06  temp_soll      20.0
#    2025-12-10 19:10:40  temp_soll_num_only 20.5
#    2025-12-11 16:38:59  valve          0 %
#  Regex:
#    accu:
#    bar:
#    barAvg:
#    collect:
#      EG_Buero_Klima:
#        collect:
#          getG2      ^EG_Buero_Klima$:^getG2:
#          getG3      ^EG_Buero_Klima$:^getG3:
#          measured-temp ^EG_Buero_Klima$:^measured-temp:
#          measured_temp ^EG_Buero_Klima$:^measured_temp:
#          solltemo  ^EG_Buero_Klima$:^solltemo:
#          solltemp_ist ^EG_Buero_Klima$:^solltemp_ist:
#    event_Readings:
#      EG_Buero_Klima:
#        measured-temp:
#          measured_temp ^EG_Buero_Klima$:^measured_temp:
#        solltemp:
#          solltemp  ^EG_Buero_Klima$:^solltemp:
#        solltemp_ist:
#          solltemp_ist ^EG_Buero_Klima$:^solltemp_ist:
#        valve:
#          valvepos  ^EG_Buero_Klima$:^valvepos:
#    uiTable:
#      EG_Buero_Klima:
#        di_Klima_Buero_uiTable_c_1_0_0_0:
#          measured_temp ^EG_Buero_Klima$:^measured_temp:
#          solltemp_ist ^EG_Buero_Klima$:^solltemp_ist:
#        di_Klima_Buero_uiTable_c_1_1_0_0:
#          measured-temp ^EG_Buero_Klima$:^measured-temp:
#  card:
#  collect:
#    EG_Buero_Klima getG2:
#      24:
#        animate    0
#        dim        72
#        hours      24
#        last     
#        last_slot  1471159
#        last_v    22.3
#        max_value  22.3
#        max_value_slot 71
#        max_value_time 1765390947
#        min_value  22.3
#        min_value_slot 71
#        min_value_time 1765390947
#        name      EG_Buero_Klima
#        reading    getG2
#        ring      1
#        time      1765390987
#        type      col
#        value      22.3
#        times:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765390283
#          1765390947
#        values:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          22.3
#          22.3
#    EG_Buero_Klima getG3:
#      24:
#        animate    0
#        dim        72
#        hours      24
#        last     
#        last_slot  1471214
#        last_v    18.5
#        max_value  18.5
#        max_value_slot 16
#        max_value_time 1765390947
#        min_value  0
#        min_value_slot 71
#        min_value_time 1765457756
#        name      EG_Buero_Klima
#        reading    getG3
#        ring      1
#        time      1765457756
#        type      col
#        value      0
#        times:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765390283
#          1765390947
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765457756
#        values:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          18.5
#          18.5
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          0
#    EG_Buero_Klima measured-temp:
#      24:
#        animate    0
#        dim        72
#        hours      24
#        last     
#        last_slot  1471215
#        last_v    0
#        max_value  0
#        max_value_slot 71
#        max_value_time 1765458749
#        min_value  0
#        min_value_slot 71
#        min_value_time 1765458749
#        name      EG_Buero_Klima
#        reading    measured-temp
#        time      1765458749
#        type      col
#        value      0
#        times:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765457756
#          1765458749
#        values:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          0
#          0
#    EG_Buero_Klima measured_temp:
#      24:
#        animate    0
#        dim        72
#        hours      24
#        last     
#        last_slot  1471222
#        last_v    23
#        max_value  23.3
#        max_value_slot 69
#        max_value_time 1765464946
#        min_value  22.9
#        min_value_slot 68
#        min_value_time 1765463228
#        name      EG_Buero_Klima
#        reading    measured_temp
#        ring      1
#        time      1765467534
#        type      col
#        value      23.1
#        times:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765460228
#          1765460822
#          1765462030
#          1765463228
#          1765464946
#          1765466227
#          1765467425
#        values:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          22.9
#          22.9
#          22.9
#          22.9
#          23.3
#          23
#          23.1
#    EG_Buero_Klima solltemo:
#      24:
#        animate    0
#        dim        72
#        hours      24
#        last_slot  1471215
#        last_v   
#        max_value  0
#        max_value_slot 71
#        max_value_time 1765458749
#        min_value  0
#        min_value_slot 71
#        min_value_time 1765458749
#        name      EG_Buero_Klima
#        reading    solltemo
#        time      1765458749
#        type      col
#        value      0
#        times:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765458749
#        values:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          0
#    EG_Buero_Klima solltemp_ist:
#      24:
#        animate    0
#        dim        72
#        hours      24
#        last      23
#        last_slot  1471222
#        last_v    25
#        max_value  25.5
#        max_value_slot 68
#        max_value_time 1765463825
#        min_value  19
#        min_value_slot 71
#        min_value_time 1765466948
#        name      EG_Buero_Klima
#        reading    solltemp_ist
#        ring      1
#        time      1765467534
#        type      col
#        value      23
#        times:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          1765460228
#          1765460822
#          1765462030
#          1765463825
#          1765464874
#          1765466061
#          1765466948
#        values:
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          undef
#          20
#          20
#          20
#          25.5
#          19.5
#          25
#          19
#  condition:
#    0         
#  event_Readings:
#    measured-temp  ::ReadingValDoIf($hash,'EG_Buero_Klima','measured_temp')
#    solltemp    ::ReadingValDoIf($hash,'EG_Buero_Klima','solltemp')
#    solltemp_ist  ::ReadingValDoIf($hash,'EG_Buero_Klima','solltemp_ist')
#    valve      ::ReadingValDoIf($hash,'EG_Buero_Klima','valvepos')
#  helper:
#    NOTIFYDEV  global,EG_Buero_Klima
#    event      last-sender: 1.1.8,valvepos: 0 %,0 %
#    globalinit 1
#    last_timer 0
#    sleeptimer -1
#    triggerDev EG_Buero_Klima
#    triggerEvents:
#      last-sender: 1.1.8
#      valvepos: 0 %
#      0 %
#    triggerEventsState:
#      last-sender: 1.1.8
#      valvepos: 0 %
#      state: 0 %
#  perlblock:
#    0          block_01
#  uiState:
#  uiTable:
#    dev        EG_Buero_Klima
#    header   
#<table uitabid='DOIF-di_Klima_Buero' class=' block wide uiTabledoif doif-di_Klima_Buero ' style='border-top:none;'>
#    package    package ui_Table;
#    reading    measured-temp
#    table:
#      0:
#        0:
#          0:
#            0          'error syntax error at (eval 2378030) line 1, at EOF
# in expression: \'
#      1:
#        0:
#          0:
#            0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Klima_Buero_uiTable_c_1_0_0_0',card([::ReadingValDoIf($hash,'EG_Buero_Klima','measured_temp','','col'),::ReadingValDoIf($hash,'EG_Buero_Klima','solltemp_ist','','col')],"Büro","temp_inside",15,40,undef,undef,["Ist °C,red","Soll °C,#287afc"],\&temp_hue,"1","180,,,,,,200",undef,undef),"")
#        1:
#          0:
#            0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Klima_Buero_uiTable_c_1_1_0_0',widget(::ReadingValDoIf($hash,'EG_Buero_Klima','measured-temp'),'controlminidash,measured_temp,#,solltemp,valvepos,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set solltemp"),'EG_Buero_Klima','measured-temp')
#    tc:
#    td:
#      0:
#      1:
#    tr:
#
setstate di_Klima_Buero initialized
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_getG2_24_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1765390283,1765390947
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_getG2_24_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22.3,22.3
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_getG3_24_times ,,,,,,,,,,,,,,,1765390283,1765390947,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1765457756
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_getG3_24_values ,,,,,,,,,,,,,,,18.5,18.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_measured-temp_24_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1765457756,1765458749
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_measured-temp_24_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_measured_temp_24_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1765460228,1765460822,1765462030,1765463228
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_measured_temp_24_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22.9,22.9,22.9,22.9
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_solltemo_24_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1765458749
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_solltemo_24_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_solltemp_ist_24_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1765460228,1765460822,1765462030,1765463228
setstate di_Klima_Buero 2025-12-11 15:36:33 .col_72_EG_Buero_Klima_solltemp_ist_24_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,20,20,20
setstate di_Klima_Buero 2025-12-11 16:37:05 measured-temp 23.1
setstate di_Klima_Buero 2025-12-10 19:06:12 mode enabled
setstate di_Klima_Buero 2025-12-11 16:38:54 solltemp 23.0
setstate di_Klima_Buero 2025-12-11 16:38:54 solltemp_ist 23
setstate di_Klima_Buero 2025-12-10 19:06:12 state initialized
setstate di_Klima_Buero 2025-12-11 14:29:06 temp_soll 20.0
setstate di_Klima_Buero 2025-12-10 19:10:40 temp_soll_num_only 20.5
setstate di_Klima_Buero 2025-12-11 16:38:59 valve 0 %




Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 11 Dezember 2025, 17:26:05
Normalerweise wird ein FHEM-Widget an ein Device gebunden und nicht an mehrere. Innerhalb des angegebenen Devices kann man die Reading angeben, die man haben will. Beim DOIF kann man im letzten Parameter zusätzlich definieren, wie der Wert gesetzt werden soll, insbesondere wenn die Angabe vom anzuzeigenden Wert abweicht.

Wenn solltemp_ist den aktuellen Wert beinhaltet und man per set EG_Buero_Klima solltemp <Wert> die Temperatur setzt, dann sollte es so funktionieren:


widget([EG_Buero_Klima:solltemp_ist],'controlminidash,measured_temp,#,solltemp_ist,valvepos,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set solltemp")
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 11 Dezember 2025, 18:13:52
@appi

Probier mal ein userreading für dein Device EG_Buero_Klima

solltemp:solltemp_ist.* {
  my $s = ReadingsVal("EG_Buero_Klima","solltemp_ist","?");
  return $s;
}

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 12 Dezember 2025, 07:18:00
das wars, besten Dank. Nun funktionieren beide Varianten, als  widgetOverride oder  im DoIf.

Anbei die zwei Definitionen:

im KNX Device:
defmod EG_Buero_Klima KNX 4/2/101:dpt9:solltemp:set:nosuffix 4/1/1:dpt9:measured_temp:get:nosuffix 4/2/1:dpt9:solltemp_ist:get:nosuffix 4/3/1:dpt5.001:valvepos:get:nosuffix
attr EG_Buero_Klima_neu IODev myKNXGW
attr EG_Buero_Klima_neu alias Temp Büro
attr EG_Buero_Klima_neu comment GAs: SollTemp-schreiben, IstTemp, SollTemp-lesen, ValvePosition
attr EG_Buero_Klima_neu group Raumklima
attr EG_Buero_Klima_neu room Buero,Klima/ Heizung
attr EG_Buero_Klima_neu sortby 8
attr EG_Buero_Klima_neu userReadings solltemp:solltemp_ist.* {\
  my $s = ReadingsVal("EG_Buero_Klima","solltemp_ist","?");;\
  return $s;;\
}
attr EG_Buero_Klima_neu webCmd climacontrol
attr EG_Buero_Klima_neu widgetOverride climacontrol:controlminidash,measured_temp,#,solltemp,valvepos,#,#,#,#,#,#

und im DoIF:

defmod di_Klima_Buero DOIF {}
attr di_Klima_Buero alias Klima Büro Widget
attr di_Klima_Buero event_Readings measured-temp: [EG_Buero_Klima:measured_temp],solltemp: [EG_Buero_Klima:solltemp],solltemp_ist: [EG_Buero_Klima:solltemp_ist],valve: [EG_Buero_Klima:valvepos]
attr di_Klima_Buero room Buero
attr di_Klima_Buero uiTable {package ui_Table;;;;}\\
card([[EG_Buero_Klima:measured_temp:col],[EG_Buero_Klima:solltemp_ist:col]],"Büro","temp_inside",15,40,undef,undef,["Ist °C,red","Soll °C,#287afc"],\&temp_hue,"1","180,,,,,,200",undef,undef)|\
widget([EG_Buero_Klima:solltemp],'controlminidash,measured_temp,#,solltemp,valvepos,sani_heating_manual@controlMode.manual,rc_MINUS@temp-5,sani_heating_boost@boost,sani_heating_automatic@controlMode.automatic,rc_PLUS@temp+5,sani_heating_mode@night_day',"set solltemp")

Danke fürs verschönern von FHEM
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 12 Dezember 2025, 08:24:51
Schön das es funktioniert. Ich nehme das Beispiel mit dem abweichenden Reading
mit im Wiki auf.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Damian am 12 Dezember 2025, 21:31:47
@appi  Warum hast du im DOIF die event_Readings definiert? Sowohl im card-Aufruf als auch im Widget benutzt du Readings aus dem KNX-Device.
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 15 Dezember 2025, 07:42:20
@ Damian  die event_Readings waren nur für Testzwecke im Device
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 18 Dezember 2025, 08:01:35
hallo
wenn ich die Buttons nicht brauche, wie kann ich die Breite des Widget aufs nötige reduzieren?
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 18 Dezember 2025, 08:09:55
Morgen,

das habe ich noch nicht berücksichtig. Wo wäre das denn notwendig? Gerne auch ein Bild wenn möglich.
Bei mir sehe ich da kein Bedarf. Würde ich das einbauen, dann wäre mir das Widget optisch zu groß auf dem Handy.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: appi am 18 Dezember 2025, 08:45:06
ich arbeite mit f18 zwei Spalten und muss mit der Breite zurechtkommen.... ;D
Screenshot 2025-12-18 083737.png 

In der Kombination mit UiTable gefällt es mir schon recht gut
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 18 Dezember 2025, 09:15:21
Ah ok, schaue ich mir an.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 20 Dezember 2025, 09:48:12
Danke für dieses großartige Widget!

Die Funktionalität löst unmittelbar neue Wünsche aus...
Bitte nicht als Kritik verstehen, sondern als Anregung das generischer verwenden zu können, z.B. für Kühl/Gefrier-Räume, Geschwindigkeit-Anzeige, usw...
Daher die Wunschliste:
Slider: definieren min/max values. Auch negative werte sollten möglich sein.
ein optionales Attr "cmdTemplate", Beispiel siehe ASC-Modul: ASC_CommandTemplate
Parameterlist:
  1.parameter: slider wert und set(cmd) wert.
  2.-5. param.: readings die im Zentrum dargestellt werden, wie bisher, allerdings ohne (hart vergebene) Unit, die Unit steht evtl. bereits im reading oder könnte  mittels userreading hinzugefügt werden, oder als optionaler param?
  6.-xx. param.(buttons): no keine Meinung, denke das passt so perfekt. :)
l.g. und danke für dieses Widget!
erwin
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 20 Dezember 2025, 13:17:54
Mahlzeit,

das freut mich.

Zu 1. Das musst du mir nochmal genauer erklären.
Zu 2 bis 5. Ich habe erstmal alles fest verheiratet in Bezug auf Thermostat damit es flutscht. Aber deine Gedanken Teile ich. Steht auf dem Plan.
Das sind ca. 3 Baustellen -> Units, HueBogen und Value.
Zu 6. Bei den Buttons fehlt mir noch ein Togglebutton.
Ich hatte früher schon einen, aber der musste erstmal weichen.


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 20 Dezember 2025, 15:16:35
zu 1. parameter:
der readingname(value) soll der wert für den slider sein, und natürlich auch für das set-cmd,
unabhängig von den folgenden 4 parametern, die die darstellung im Zentrum sind - ohne "set-cmd" Möglichkeit.
Entweder den gesamten Text aus dem readingvalue verwenden (inkl. einer Unit), oder wie im Beispiel 2.-5.para "inline".
als Beispiel:
climacontrol:controlminidash,solltemp,measured_temp [°C],solltemp [°C],valvepos [%],Wert4,#,#,#,#,#,#...aber wie schon geschrieben, units kann man auch mittels userreadings oder stateFormat hinzufügen.
PS: Evtl. den set-cmd erst mit mouse-out triggern, bei mir passiert das mehrfach während ich den slider verstelle... - oder ich bin heute zu zittrig....
l.g & danke erwin

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 21 Dezember 2025, 10:54:15
Moin,

ah ok, jetzt versteh ich. Der momentane Arrayabruf war einfach Bequemlichkeit in Bezug auf die Anzeige in der Mitte.
Das passt so einfach sehr gut zusammen. Das entkoppeln und ein Reading bzw. String mehr ist unerheblich.

Die variable Angabe mit String und Units habe ich auch beim MinichartWidget so eingebaut wie du es beschreibst. Daher
werde ich das wahrscheinlich so oder so ähnlich übernehmen können. Da das Widget schon sehr groß ist und viel Code aufeinander
prallt, muss ich schauen, das nicht zu viel asynchrones Rendering entsteht. Das mag ich überhaupt nicht, tritt jetzt
aber auch schon etwas auf.

Zum Set des Buttons. Das ist bei mir Rock-Solid. Egal ob Handy mit Finger oder am Pc mit der Mouse. Wird der Button per Touch
oder Klick aktiviert, kann ich Kilometerweit aus dem Widget rausziehen und auch durch die Bewegung den Slider verstellen,
ohne das ein Event im EventMonitor sichtbar ist. Erst beim loslassen wird bei mir das Set gesetzt. Ich nutze Chrome (Handy,Desktop).
Passiert das bei dir auf dem Desktop? Ich kann mich erinnern, vor Jahren hatte ich mal eine Mouse mit defekten Button.
Die gleichen Symptome, Drag and Drap war nicht mehr möglich.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 21 Dezember 2025, 12:38:58
Hi,
Danke fürs Feedback,
ich freue mich, dass du über meine Vorschläge nachdenkst.

Das mit dem Mouse-out: Du hast recht, es liegt an meiner prellenden Mouse-Taste, hab HW getauscht- funktioniert!!
Danke erwin
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 25 Dezember 2025, 21:30:22
Nabend,

ich habe zum Testen im contrib ein Update bereitgestellt.



Einfach downloaden mit:
{ Svn_GetFile('contrib/fhemweb_controlminidash.js', 'www/pgm2/fhemweb_controlminidash.js') }

Beispiel dummy:
defmod widgetDummyFhemSVG dummy
attr widgetDummyFhemSVG userattr btn2Cmd btn2Color btn2Icon btn5Cmd  btn5Color btn5Icon knobMinMax knobColor
attr widgetDummyFhemSVG btn2Cmd { fhem("set widgetDummyFhemSVG mspeed ".(ReadingsVal("widgetDummyFhemSVG","mspeed",0) - 0.5)) }
attr widgetDummyFhemSVG btn2Color blue
attr widgetDummyFhemSVG btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M7%2C12L12%2C7V10H16V14H12V17L7%2C12M22%2C12A10%2C10%200%200%2C1%2012%2C22A10%2C10%200%200%2C1%202%2C12A10%2C10%200%200%2C1%2012%2C2A10%2C10%200%200%2C1%2022%2C12M20%2C12A8%2C8%200%200%2C0%2012%2C4A8%2C8%200%200%2C0%204%2C12A8%2C8%200%200%2C0%2012%2C20A8%2C8%200%200%2C0%2020%2C12Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetDummyFhemSVG btn5Cmd { fhem("set widgetDummyFhemSVG mspeed ".(ReadingsVal("widgetDummyFhemSVG","mspeed",0) + 0.5)) }
attr widgetDummyFhemSVG btn5Color red
attr widgetDummyFhemSVG btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M17%2C12L12%2C17V14H8V10H12V7L17%2C12M2%2C12A10%2C10%200%200%2C1%2012%2C2A10%2C10%200%200%2C1%2022%2C12A10%2C10%200%200%2C1%2012%2C22A10%2C10%200%200%2C1%202%2C12M4%2C12A8%2C8%200%200%2C0%2012%2C20A8%2C8%200%200%2C0%2020%2C12A8%2C8%200%200%2C0%2012%2C4A8%2C8%200%200%2C0%204%2C12Z%22%20%2F%3E%3C%2Fsvg%3E
attr widgetDummyFhemSVG knobColor purple,blue,green,yellow,orange,blue
attr widgetDummyFhemSVG knobMinMax -500,500
attr widgetDummyFhemSVG readingList mspeed dspeed boost state test1 test2 test3 test4
attr widgetDummyFhemSVG room Test
attr widgetDummyFhemSVG setList mspeed dspeed boost state test1 test2 test3 test4
attr widgetDummyFhemSVG subType Thermostat
attr widgetDummyFhemSVG webCmd climacontrol
attr widgetDummyFhemSVG widgetOverride climacontrol:controlminidash,mspeed,dspeed,mspeed@km/h,test1@%,dspeed@km/h,test3@%,#,rc_MINUS,#,#,#,#

setstate widgetDummyFhemSVG desired-temp 21.5
setstate widgetDummyFhemSVG 2025-12-25 08:45:59 boost 50
setstate widgetDummyFhemSVG 2025-12-25 21:25:47 dspeed 500.0
setstate widgetDummyFhemSVG 2025-12-25 21:10:04 mspeed 126
setstate widgetDummyFhemSVG 2025-12-25 09:16:59 state desired-temp 21.5
setstate widgetDummyFhemSVG 2025-12-25 09:08:49 test1 boost 30
setstate widgetDummyFhemSVG 2025-12-25 08:48:47 test2 windy
setstate widgetDummyFhemSVG 2025-12-25 09:08:17 test3 fuel 50



Wichtig bei zum Beispiel Thermostat:

Vorher:
... widgetOverride
controlMD:controlminidash,measured-temp,humidity,desired-temp,valveState,#,#,#,#,#,#

Nachher:
... widgetOverride
controlMD:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,valveState,#,#,#,#,#,#

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 26 Dezember 2025, 00:23:42
Guten Abend,
ich hab soeben getestet, funktioniert wunderbar!

PS: mein widgetoverride:
climacontrol:controlminidash,desired-temp,desired-temp,temperature@°C,desired-temp@°C,valvepos,#,#,#,#,#,#,#die ersten 2 param sind für den slider set-cmd / slider-wert, die folgenden für die Anzeige im Zentrum.
Auch knobColor und knobMinMax funktionieren.
Danke erwin
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 26 Dezember 2025, 13:49:01
Tag,

ein weiteres Update im contrib.


Beispiel:
attr <deviceNAme> widgetOverride climacontrol:controlminidash,dspeed,dspeed,mspeed@km/h,test1@%,dspeed@km/h,test3@%,#,rc_MINUS,#,#,#,#,compact

Download mit:
{ Svn_GetFile('contrib/fhemweb_controlminidash.js', 'www/pgm2/fhemweb_controlminidash.js') }
STRG+F5 nicht vergessen!

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 26 Dezember 2025, 19:17:13
Hi,
danke für die Weiterentwicklung, funktioniert, auch "compact" - Aufgefallen ist, das bei meine style nicht viel Unterschied in der Höhe ist, die "buttons" links/rechts aber nicht vorhanden sind.
Ich hab jetzt mein KNX-Beispiel aufgebohrt, dass mit plus/minus buttons die Soll-Temp um einen fixen Wert erhöht/reduziert wird.
Bei Bedarf stelle ich das gern zur Verfügung, entweder hier oder im Wiki, würde jedoch warten bis dein code im "offiziellen" SVN ist.
l.g.erwin
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 26 Dezember 2025, 19:45:20
Nabend,

das ist so beabsichtigt. Es geht darum nur den Slider und Infos in einem UiTable
im DOIF zu haben. Keine Buttons. Siehe Post #50.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 27 Dezember 2025, 10:34:50
Moin

@erwin

Ich habe gesehen, du hast eine Beispielseite für KNX

https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele

Da passt es super hin und ich kann ein Querverweis dahin machen.
Ich denke, wenn sich in 7 Tagen keiner meldet, dann checke ich das Update ein.


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Reinhart am 28 Dezember 2025, 11:31:47
Danke für das tolle Widget!
funktioniert soweit mit im Kreis mit der Maus, aber wie kann ich die 6 Buttons aktivieren? Laut Wiki nennen sich die btnXCmd.

btn2Cmd { fhem("set _OG_Wohnz_Kamin desired-temp ".(ReadingsVal("_OG_Wohnz_Kamin","desired-temp",0)-0.5)) }ich habe die Minus Taste jetzt so als userattr definiert, klappt aber nicht.

Unknown argument temp-5 choose one of clear defaults:reset,update,old,forceReset readingFilter:multiple-strict,VALVE_ADAPTION,BOOST_TIME,VALVE_STATE_ADJUSTMENT_TOO_SMALL,QUICK_VETO_TIME,PARTY_SET_POINT_TEMPERATURE,WINDOW_STATE,VALVE_STATE,VALVE_STATE_ERROR_POSITION,PARTY_MODE,VALVE_STATE_TOO_TIGHT,SWITCH_POINT_OCCURED,FROST_PROTECTION,ACTUAL_TEMPERATURE,SET_POINT_TEMPERATURE,VALVE_STATE_ADJUSTMENT_TOO_BIG,BOOST_MODE,ACTIVE_PROFILE,LEVEL,SET_POINT_MODE,PARTY_TIME_END,LEVEL_STATUS,ACTUAL_TEMPERATURE_STATUS,PARTY_TIME_START config datapoint boost:off,on off:noArg manu on:noArg desired-temp holiday week-program:1,2,3 party auto:noArgbekomme dann diese Fehlermeldung. Habe ich da was falsch verstanden oder ist die Bezeichnung der Taste "temp-5" und nicht  btn2Cmd?

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 28 Dezember 2025, 14:07:37
Hi Reinhart!
ich habe gestern begonnen ein Beispiel für KNX ins wiki zu stellen, siehe link in #62, das basiert allerdings auf der version im contrib!
Sollte eigentlich auch für andere DeviceTypen funktionieren, es geht ja "nur" um die entsprechenden readings....
Die in diesem Beispiel gezeigte eventmap behandelt die beiden buttons - und löst das richtige set-cmd aus.
die buttons werden so definert, im widget: <iconname>@<cmd> . .. und das wird mittels eventmap weiterverarbeitet.
l.g. erin
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 28 Dezember 2025, 15:06:56
Hallo zusammen,

in dem Zusammenhang habe ich wahrscheinlich einen Bug in der aktuellen contrib-Version gefunden.

Individuell funktioniert nicht richtig mit Fhemsvg, nach dem großen Umbau. Bzw wenn widgetOverride so angelegt ist:
climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,state,#,#,#,#,#,#
@Reinhart

Nutz du die aktuelle contrib-Version? Wenn ja, dann funktionieren Fhemperl-Cmd's gerade nur in Verbindung mit externen SVG's. Hier ein einfaches Beispiel:

defmod tcmdWidget dummy
attr tcmdWidget userattr btn2Cmd btn2Color btn2Icon btn5Cmd btn5Color btn5Icon
attr tcmdWidget btn2Cmd { fhem("set tcmdWidget desired-temp ".(ReadingsVal("tcmdWidget","desired-temp",0)-0.5)) }
attr tcmdWidget btn2Color blue
attr tcmdWidget btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M17%2C11V13H7V11H17Z%22%20%2F%3E%3C%2Fsvg%3E
attr tcmdWidget btn5Cmd { fhem("set tcmdWidget desired-temp ".(ReadingsVal("tcmdWidget","desired-temp",0) + 0.5)) }
attr tcmdWidget btn5Color red
attr tcmdWidget btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M19%2C19V5H5V19H19M19%2C3A2%2C2%200%200%2C1%2021%2C5V19A2%2C2%200%200%2C1%2019%2C21H5A2%2C2%200%200%2C1%203%2C19V5C3%2C3.89%203.9%2C3%205%2C3H19M11%2C7H13V11H17V13H13V17H11V13H7V11H11V7Z%22%20%2F%3E%3C%2Fsvg%3E
attr tcmdWidget readingList measured-temp desired-temp humidity state
attr tcmdWidget room Test
attr tcmdWidget setList measured-temp desired-temp humidity state
attr tcmdWidget webCmd climacontrol
attr tcmdWidget widgetOverride climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,state,#,#,#,#,#,#

setstate tcmdWidget auto - V.45%
setstate tcmdWidget 2025-12-28 14:56:58 desired-temp 20
setstate tcmdWidget 2025-12-28 14:11:59 humidity 55
setstate tcmdWidget 2025-12-28 14:11:52 measured-temp 22
setstate tcmdWidget 2025-12-28 14:57:11 state auto - V.45%


Bzw. der erwin hat da einen Workaround:
https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele#RaumThermostat_/_HeizungsAktor


Ich schaue es mir an.

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 28 Dezember 2025, 16:47:22
Hallo zusammen,

im contrib ist ein weiteres Update:


Ich hoffe jetzt ist alles abgedeckt.


Installieren mit:
{ Svn_GetFile('contrib/fhemweb_controlminidash.js', 'www/pgm2/fhemweb_controlminidash.js') }


Hier 3 widgetOverride-Beispiele

Fhemicon + Fhemcmd only:
attr tcmdWidget widgetOverride climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,state,#,rc_MINUS@boost.off,#,#,rc_PLUS@boost.on,#
Fhemicon + Fhemcmd bzw. Perlcmd aus userattr
attr tcmdWidget widgetOverride climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,state,#,rc_MINUS@#,#,#,rc_PLUS@#,#
SVG Data URL aus userattr + + Fhemcmd bzw. Perlcmd aus userattr
attr tcmdWidget widgetOverride climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,state,#,#,#,#,#,#

Schmeißt die Beispiele hier in den dummy:
defmod tcmdWidget dummy
attr tcmdWidget userattr btn2Cmd btn2Color btn2Icon btn5Cmd btn5Color btn5Icon
attr tcmdWidget btn2Cmd { fhem("set tcmdWidget desired-temp ".(ReadingsVal("tcmdWidget","desired-temp",0) - 0.5)) }
attr tcmdWidget btn2Color blue
attr tcmdWidget btn2Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20C7.59%2C20%204%2C16.41%204%2C12C4%2C7.59%207.59%2C4%2012%2C4C16.41%2C4%2020%2C7.59%2020%2C12C20%2C16.41%2016.41%2C20%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M7%2C13H17V11H7%22%20%2F%3E%3C%2Fsvg%3E
attr tcmdWidget btn5Cmd { fhem("set tcmdWidget desired-temp ".(ReadingsVal("tcmdWidget","desired-temp",0) + 0.5)) }
attr tcmdWidget btn5Color red
attr tcmdWidget btn5Icon data:image/svg+xml;;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20C7.59%2C20%204%2C16.41%204%2C12C4%2C7.59%207.59%2C4%2012%2C4C16.41%2C4%2020%2C7.59%2020%2C12C20%2C16.41%2016.41%2C20%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M13%2C7H11V11H7V13H11V17H13V13H17V11H13V7Z%22%20%2F%3E%3C%2Fsvg%3E
attr tcmdWidget readingList measured-temp desired-temp humidity state
attr tcmdWidget room Test
attr tcmdWidget setList measured-temp desired-temp humidity state
attr tcmdWidget webCmd climacontrol
attr tcmdWidget widgetOverride climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,humidity@%,desired-temp@°C,state,#,rc_MINUS@boost.off,#,#,rc_PLUS@boost.on,#

setstate tcmdWidget boost on
setstate tcmdWidget 2025-12-28 16:40:00 desired-temp 18.5
setstate tcmdWidget 2025-12-28 14:11:59 humidity 55
setstate tcmdWidget 2025-12-28 15:48:53 measured-temp 22
setstate tcmdWidget 2025-12-28 16:45:38 state boost on




Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Reinhart am 29 Dezember 2025, 09:08:57
Danke euch Beiden, Dummy funktioniert nun bei mir! Ich bau das dann so ein!
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Reinhart am 31 Dezember 2025, 11:25:19
im Prinzip hat sich leider nichts geändert, die + und - Tasten steuern ja jetzt den Boost, das funktioniert aber versuche ich das auf den desired-temp (temp-5, temp+5) zu ändern erhalte ich wieder dieselben Fehlermeldungen.
Internals:
   DEF        00399F29A00749:1
   FUUID      65c75411-f33f-27bd-cd9f-99b80195ed8296b2
   IODev      d_ccu
   NAME       Stiegenhaus
   NR         2800
   STATE      T: 14.9, desired: 22.0, valve: 100
   TYPE       HMCCUCHN
   ccuaddr    00399F29A00749:1
   ccudevstate active
   ccuif      HmIP-RF
   ccuname    HmIP-eTRV-B-2 R4M 00399F29A00749:1
   ccurolectrl HEATING_CLIMATECONTROL_TRANSCEIVER
   ccurolestate HEATING_CLIMATECONTROL_TRANSCEIVER
   ccusubtype TRV-B
   ccutype    HmIP-eTRV-B-2,R4M
   eventCount 446
   firmware   1.2.26
   readonly   no
   OLDREADINGS:
   READINGS:
     2025-12-31 11:11:34   ACTIVE_PROFILE  1
     2025-12-31 11:11:34   ACTUAL_TEMPERATURE 14.9
     2025-12-31 11:11:34   ACTUAL_TEMPERATURE_STATUS NORMAL
     2025-12-31 11:11:34   BOOST_MODE      off
     2025-12-31 11:11:34   BOOST_TIME      0
     2025-12-31 11:11:34   CONFIG_PENDING  false
     2025-12-31 11:11:34   DUTY_CYCLE      false
     2025-12-31 11:11:34   FROST_PROTECTION false
     2025-12-29 09:43:22   INSTALL_TEST    true
     2025-12-31 11:11:34   LEVEL           100
     2025-12-31 11:11:34   LEVEL_STATUS    NORMAL
     2025-12-31 11:11:34   LOW_BAT         ok
     2025-12-31 11:11:34   OPERATING_VOLTAGE 2.6
     2025-12-31 11:11:34   OPERATING_VOLTAGE_STATUS NORMAL
     2025-12-31 11:11:34   PARTY_MODE      false
     2025-12-29 09:43:22   PARTY_SET_POINT_TEMPERATURE 0.0
     2025-12-29 09:43:22   PARTY_TIME_END 
     2025-12-29 09:43:22   PARTY_TIME_START
     2025-12-31 11:11:34   QUICK_VETO_TIME 0
     2025-12-31 11:11:34   RSSI_DEVICE     -52
     2025-12-31 11:11:34   RSSI_PEER       -50
     2025-12-31 11:11:34   SET_POINT_MODE  auto
     2025-12-31 11:11:34   SET_POINT_TEMPERATURE 22.0
     2025-12-31 11:11:34   SWITCH_POINT_OCCURED false
     2025-12-31 11:11:34   UNREACH         alive
     2025-12-29 09:43:22   UPDATE_PENDING  false
     2025-12-29 09:43:22   VALVE_ADAPTION  false
     2025-12-31 11:11:34   VALVE_STATE     ADAPTION_DONE
     2025-12-31 11:11:34   VALVE_STATE_ADJUSTMENT_TOO_BIG false
     2025-12-31 11:11:34   VALVE_STATE_ADJUSTMENT_TOO_SMALL false
     2025-12-31 11:11:34   VALVE_STATE_ERROR_POSITION false
     2025-12-31 11:11:34   VALVE_STATE_TOO_TIGHT false
     2025-12-31 11:11:34   WINDOW_STATE    closed
     2025-12-31 11:11:34   activity        alive
     2025-12-31 11:11:34   battery         ok
     2025-12-31 11:11:34   boost           off
     2025-12-31 11:11:34   control         22.0
     2025-12-31 11:11:34   desired-temp    22.0
     2025-12-31 11:11:34   devstate        ok
     2025-12-31 11:11:34   hmstate         14.9
     2025-12-31 11:11:34   measured-temp   14.9
     2025-12-31 11:11:34   rssidevice      -52
     2025-12-31 11:11:34   rssipeer        -50
     2025-12-31 11:11:34   state           14.9
     2025-12-31 11:11:34   voltage         2.6
     2025-12-31 11:11:34   week-program    1
  

Attributes:
   btn2Cmd    { fhem("set Stiegenhaus desired-temp ".(ReadingsVal("Stiegenhaus","desired-temp",0) - 0.5)) }
   btn2Color  blue
   btn2Icon   data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20C7.59%2C20%204%2C16.41%204%2C12C4%2C7.59%207.59%2C4%2012%2C4C16.41%2C4%2020%2C7.59%2020%2C12C20%2C16.41%2016.41%2C20%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M7%2C13H17V11H7%22%20%2F%3E%3C%2Fsvg%3E
   btn5Cmd    { fhem("set Stiegenhaus desired-temp ".(ReadingsVal("Stiegenhaus","desired-temp",0) + 0.5)) }
   btn5Color  red
   btn5Icon   data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M12%2C20C7.59%2C20%204%2C16.41%204%2C12C4%2C7.59%207.59%2C4%2012%2C4C16.41%2C4%2020%2C7.59%2020%2C12C20%2C16.41%2016.41%2C20%2012%2C20M12%2C2A10%2C10%200%200%2C0%202%2C12A10%2C10%200%200%2C0%2012%2C22A10%2C10%200%200%2C0%2022%2C12A10%2C10%200%200%2C0%2012%2C2M13%2C7H11V11H7V13H11V17H13V13H17V11H13V7Z%22%20%2F%3E%3C%2Fsvg%3E
   ccuflags   ackState,showDeviceReadings
   ccuget     Value
   ccureadingfilter .*
   cmdIcon    auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus
   genericDeviceType thermostat
   group      CUL_HM
   icon       hc_wht_regler
   room       HM_Regler,HomematicIP,Test,_Stiegenhaus
   stateFormat T: measured-temp, desired: desired-temp, valve: LEVEL
   substexcl  desired-temp
   userattr   btn2Cmd btn2Color btn2Icon btn5Cmd btn5Color btn5Icon
   webCmd     climacontrol
   widgetOverride climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,LEVEL@%,desired-temp@°C,state,#,rc_MINUS@temp-5,#,#,rc_PLUS@temp+5,#
  

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: Reinhart am 31 Dezember 2025, 11:38:41
Nachtrag:
wenn ich im widgetoverride die Definition von temp-5 mit "#" ersetze funktioniert die Sollwertvorgabe und es kommt keine Fehlermeldung mehr!
Ich teste das immer wenn ich parallel ein Fenster im QpenCCU öffne und sehe sofort den neuen Sollwert. 

climacontrol:controlminidash,measured-temp,desired-temp,measured-temp@°C,LEVEL@%,desired-temp@°C,state,#,#,#,#,#,#
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 31 Dezember 2025, 12:14:53
Mahlzeit Reinhart,

temp-5 und temp+5 sind schlechte Platzhalter die suggerieren, sie würden funktionieren.
Weder das Homematic Fhemmodul oder das Widget unterstützen das direkt. Wenn ich demnächst das Widget
update, passe ich auch die Doku an. Benutz dafür die Custombuttons mit z.B btn2Cmd

fhem("set HmIP_WZ_WTH desired-temp ".(ReadingsVal("HmIP_WZ_WTH","desired-temp",0) - 0.5)) }

Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 01 Januar 2026, 23:09:02
Nabend,

neues Update im contrib.



Der Grund dafür, ich hatte eine Idee zu einem Popup-Widget. Dann habe ich mich an einen ganz alten Thread
von justme1968 erinnert.

https://forum.fhem.de/index.php?topic=33766.msg261329#msg261329

Dabei stellte sich heraus, dass die Funktion bereits vorhanden ist.
Unter bestimmten Umständen – wenn sich ein Device mit Popup-Definition und ControlMiniDash im selben Raum befanden – wurde ControlMiniDash in das Popup injiziert.

Frage:
Ich habe in der Commandref DE und ENG, sowie im Wiki geschaut. Finde aber keinen Hinweis auf das PopupWidgetFeature.

Beispieldummy:
defmod popupTest dummy
attr popupTest devStateIcon .*:on:slider:dropDown:dropDownOnOff .*:off:slider:dropDown:dropDownOnOff
attr popupTest room popup
attr popupTest setList slider:slider,0,5,100 dropDown:0,1,2,3,4,5 dropDownOnOff:on,off
attr popupTest webCmd slider:dropDown:dropDownOnOff

setstate popupTest slider 25
setstate popupTest 2026-01-01 22:41:02 state slider 25


Habt ihr dazu einen Hinweis in der Doku gesehen, oder ist es noch nicht dokumentiert?


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 02 Januar 2026, 00:44:51
HI,
ja das geht ganz normal mit den webCmd und widgetoverride Attributen:
attr test_Thermostat webCmd climacontrol:humidity
attr test_Thermostat webCmdLabel TC:Hum
attr test_Thermostat widgetOverride humidity:slider,0,1,100 climacontrol:controlminidash,desired-temp,desired-temp,temperature@°C,desired-temp@°C,humidity@%,valvepos,clock@.13.3,rc_MINUS@minus.1,#,#,rc_PLUS@plus.1,#
wichtig ist, dass das slider widgetoverride NICHT als letztes steht, sonst würfelt es die contorlmindash param durcheinander.

Edit: es geht auch unterhalb (einzige Änderung):
attr test_Thermostat webCmdLabel TC
:Hum

Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 02 Januar 2026, 10:34:37
Moin erwin,

wir reden aneinander vorbei. Mir geht es nicht um die Anordnung der Widgets im Device. Aber danke für das Beispiel.

1.
Ich möchte auf meinem Handy ein Popup der Widgets haben, wenn ich auf z.B das Lampensymbol klicke ohne das Handy dafür immer drehen zu müssen. (Wurde schon eingebaut).
Sogar schon 2015... https://forum.fhem.de/index.php?topic=33766.msg261329#msg261329
Das Popup interessiert mich in diesem Thread aber nur, da sich ControlMiniDash einfach ungefragt in ein anderes Device eingeschmuggelt hat.
Mit dem Patch hab ich das unterbunden.

2.
Wurde die Funktion irgendwo dokumentiert? Wenn nicht hole ich das nach oder wende mich an Rudolf.
https://forum.fhem.de/index.php?topic=33766.msg261329#msg261329


Beispiel:

Wenn du das letzte Update von ControlMiniDash hast. Kommentiere das mal aus:
    // Schutz gegen Dialog-Container
    //const parentDialog = $('#FW_okDialog').closest('.ui-dialog-content');
    //if (parentDialog.length) {
    //    return null;
    //}

Dann die 2 Dummys anlegen:
defmod popupTest dummy
attr popupTest devStateIcon .*:on:slider:dropDown:dropDownOnOff .*:off:slider:dropDown:dropDownOnOff
attr popupTest readingList humidity
attr popupTest room popup
attr popupTest setList slider:slider,0,5,100 dropDown:0,1,2,3,4,5 dropDownOnOff:on,off
attr popupTest webCmd slider:dropDown:dropDownOnOff

setstate popupTest slider 25
setstate popupTest 2026-01-02 01:25:05 state 13 3

defmod thermostatTest dummy
attr thermostatTest readingList desired-temp temperature humidity valvepos
attr thermostatTest room popup
attr thermostatTest setList desired-temp temperature humidity valvepos
attr thermostatTest webCmd climacontrol:humidity
attr thermostatTest webCmdLabel &nbsp;;\
:&nbsp;;
attr thermostatTest widgetOverride humidity:slider,0,1,100 climacontrol:controlminidash,desired-temp,desired-temp,temperature@°C,desired-temp@°C,humidity@%,valvepos@%,clock@.13.3,rc_MINUS@minus.1,#,#,rc_PLUS@plus.1,#

setstate thermostatTest 2026-01-02 10:06:51 desired-temp 22
setstate thermostatTest 2026-01-02 10:05:14 humidity 44
setstate thermostatTest 2026-01-02 10:06:43 temperature 22
setstate thermostatTest 2026-01-02 10:06:58 valvepos 15

Zum Abschluss klick bei dem popupTest Dummy auf das Lampensymbol. Dann siehst was ich meine.
1. Das Widget was da nicht sein darf.
2. Das Popup, was wahrscheinlich undokumentiert in devStateIcon existiert.


Gruß schwatter   
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: erwin am 02 Januar 2026, 11:51:47
Ah verstehe,
du nutzt devStateIcon (wg Handy drehen...) , während mein Beispiel ausschlieslich mit webcmd/widgetoverride auskommt (Handy in landscapemode). Das NaN kommt daher, das im state/STATE in deinem Beispiel kein Zahl vorkommt.
Das "einmischen" in andere devices hast du ja bereits gefixt.

re devStateIcon: erlaubt ist lt. doku auch perl in {} und darin auch HTML-code als return string. Daher sollten auch SVG's funktionieren. Das FHEM widgets dort auch funktionieren, war mir nicht bewußt.
l.g. erwin
 
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 03 Januar 2026, 01:20:21
Moin,

Die Version 0.3.6 aus dem contrib ist eingecheckt und morgen früh im Update.
Die Doku habe ich leicht angepasst und ziehe ich weiter nach.


Gruß schwatter
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: rudolfkoenig am 24 Januar 2026, 11:32:24
Um die Warnungen
*** EN www/pgm2/fhemweb_controlminidash.js: ignoring text due to DOS encodingzu vermeiden habe ich die DOS (CR/NL) Line-Endings aus www/pgm2/fhemweb_controlminidash.js entfernt, und diese Version versehentlich eingecheckt, statt es hier zu melden.

Bitte keine Programmdateien mit DOS Zeilenenden einchecken.
Bei .pm wird das per SVN commit hook geprueft, bei .js noch nicht.
Titel: Aw: [ControlMiniDash]Fhemweb Widget für Thermostat,KlimaControl,....,
Beitrag von: schwatter am 24 Januar 2026, 11:45:31
Vielen Dank! Da habe ich im Codeeditor die Einstellung vergessen zu setzen.
Ich werde die anderen Widgets nachziehen.

Gruß schwatter