FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Fredi69 am 02 Dezember 2020, 08:18:51

Titel: DOIF im Frontend mit Defaultwert aus Dummy
Beitrag von: Fredi69 am 02 Dezember 2020, 08:18:51
Nachdem ich viele Jahre jede Menge DOIFs nur zur Steuerung im Hintergrund genutzt habe, beschäftige ich mich jetzt das erste mal mit DOIF im Frontend.
Um damit laufen zu lernen habe ich mir mal ein Beispiel aus der Commandref gezogen:
define time_switch DOIF (["$SELF:mybutton: on"] or [[$SELF:mybegin,"00:00"]])
(set lamp on)
DOELSEIF (["$SELF:mybutton: off"] or [[$SELF:myend,"00:00"]])
(set lamp off)

attr time_switch cmdState on|off
attr time_switch readingList mybutton mybegin myend
attr time_switch setList mybutton:on,off mybegin:time myend:time
attr time_switch webCmd mybutton:mybegin:myend


Meine Frag ist, kann ich z.B. mybeginmit einem Defaultwert aus einem Dummy vorbelegen?
Sollte sich der Inhalt des Dummys ändern, sollte auch der wieder der Defaultwert angenommen werden.
Geht das automatisch oder muss ich bei Berechnung des Dummys den Wert auch in mybegin schreiben?

Danke
Titel: Antw:DOIF im Frontend mit Defaultwert aus Dummy
Beitrag von: Damian am 02 Dezember 2020, 20:10:17
setList ist ein FHEM-Attribut, das nur auf eigene Readings anwendbar ist. Das Vorbelegen des Readings musst du separat programmieren.

Ich persönlich arbeite innerhalb des DOIF-Moduls mit dem Attribut uiTable, damit kann ich beliebige Readings (auch fremder Module)  visualisieren und über die Oberfläche ändern.

siehe: https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg
Titel: Antw:DOIF im Frontend mit Defaultwert aus Dummy
Beitrag von: Damian am 02 Dezember 2020, 21:31:21
so sieht eine vergleichbare Definition mit uiTable aus:

defmod time_switch DOIF {if ([[start:state,"00:00"]]) {fhem_set "lamp on"} elsif ([[end:state,"00:00"]]) {fhem_set"lamp off"}}
attr time_switch uiTable {package ui_Table}\
WID([start],"time")|WID([end],"time")|switch([lamp])


alternativ ohne if:

defmod time_switch DOIF \
{[[start:state,"00:00"]];;fhem_set"lamp on"}\
{[[end:state,"00:00"]];;fhem_set"lamp off"}
attr time_switch uiTable {package ui_Table}\
WID([start],"time")|WID([end],"time")|switch([lamp])


alternativ im FHEM-Modus:

defmod time_switch DOIF ([[start:state,"00:00"]])(set lamp on) DOELSEIF ([[end:state,"00:00"]]) (set lamp off)
attr time_switch uiTable {package ui_Table}\
WID([start],"time")|WID([end],"time")|switch([lamp])


Da man fremde Devices einbinden kann, lässt sich lamp unmittelbar über die Benutzeroberfläche schalten, ohne sie in der Bedingung abfragen zu müssen. start und end sind Dummys.

Allerdings macht es prinzipiell Sinn Informationen innerhalb eines Moduls zu kapseln, hier also start und end als Reading zu definieren, statt extra Dummys dafür zu definieren.

Alle Definitionen fallen kürzer aus und man braucht nur ein Attribut statt sonst drei.
Titel: Antw:DOIF im Frontend mit Defaultwert aus Dummy
Beitrag von: Damian am 02 Dezember 2020, 22:41:23
Um auf die ursprüngliche Frage zu kommen -  es geht doch :)

[[$SELF:mybegin,ReadingsVal("mydummy","state")]]

da habe ich wohl mehr programmiert, als ich dachte ;)