FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: cwagner am 25 Februar 2026, 17:24:11

Titel: Befüllen eines Readings im aufrufenden DOIF
Beitrag von: cwagner am 25 Februar 2026, 17:24:11
Um eine Steuerungsaufgabe generalisiert zu formulieren und gleichzeitig die 23fache Anpassung von DOIFs zu vermeiden, hatte ich geglaubt, eine Hilfsvariable "desiredTemp" in einem DOIF, das eine Absenkung realisiert, ablegen zu können. Ich habe einige Varianten durchgespielt und natürlich auch die in diesem Fall aber genauso doofe KI befragt: Ich krieg's nicht hin. Hat jemand eine Idee?
defmod CC.DACHBad DOIF subs\
{\
$_CC = "$SELF";; ##double Quotes, Inhalt der Variable wird als Text benutzt, single Quote: Variablenname mit $ wird als Text benutzt\
}\
\
{\
 if ([06:00-22:00]) { \
 {fhem ("set ".[$SELF:desiredTemp]." 20");;set_State ("heizen")}\
  } \
  else { \
   {fhem_set("$_CC desiredTemp 16");;set_State ("Absenkung")}\
  } \
}
attr CC.DACHBad cmdState heizen|Absenkung
attr CC.DACHBad event-on-change-reading cmd_nr
attr CC.DACHBad group Raumregler
attr CC.DACHBad room DOIF
attr CC.DACHBad startup set $SELF checkall all
attr CC.DACHBad verbose 2

setstate CC.DACHBad heizen
setstate CC.DACHBad 2026-02-25 16:59:07 block_01 executed
setstate CC.DACHBad 2026-02-25 16:11:29 desiredTemp 18
setstate CC.DACHBad 2026-02-25 16:59:03 mode enabled
setstate CC.DACHBad 2026-02-25 16:59:07 state heizen
setstate CC.DACHBad 2026-02-25 16:59:03 timer_01_c01 26.02.2026 06:00:00
setstate CC.DACHBad 2026-02-25 16:59:03 timer_02_c01 25.02.2026 22:00:00


Das Reading desiredTemp habe ich mit "setReading CC.DachBad 18" von Hand angelegt, um als Fehlerquelle auszuschließen, dass die Ausführung deshalb ohne Wirkung, aber auch ohne Fehlermeldung bleibt.

Bisher steuerten diese DOIFs ein anderes Device; da funktionierte ein simples "set AndresDEVICE desiredTemp 20" und es funzte viele Jahre. Das SUB mit der selbstreferenziellen Namens-Variable (mEn "Patent Damian") macht das DOIF sehr bequem kopierbar. desiredTemp wird einerseits - wie hier zu sehen - über Zeit gesteuert, in anderen Zusammenhängen auch über Zustände und Bedingungen und kann WAF-freundlich jederzeit in einem zentralen Dashboard per Widget in einer uiTable eines übergeordneten DOIF per Touch übersteuertRegler.jpg werden:
Titel: Aw: Befüllen eines Readings im aufrufenden DOIF
Beitrag von: Per am 25 Februar 2026, 19:53:32
Wss soll
set ".[$SELF:desiredTemp]." 20bewirken?
In $SELF:desiredTemp ist eine Temperatur, nicht der Name des Devices.
Wolltest du evtl
set ".[$SELF]." desiredTemp 20