[gelöst] DOIF Template, fhem_set mit reading

Begonnen von chrisse111179, 05 Dezember 2023, 10:41:44

Vorheriges Thema - Nächstes Thema

chrisse111179

Hallo,
ich hoffe der Titel ist einigermaßen aussagekräftig..! :-)

Ich versuche mit einem Doif Template meine Steckdosen um eine Timerfunktion zu erweitern.
Dafür setze ich über FTUI ein timer_an und ein timer_aus Reading in den jeweiligen Geräten.
Mein Gedanke war wenn timer_an die Steckdose mit on-till timer_aus zu schalten.
Leider bekomme ich das Reading timer_aus nicht in den Ausführungsteil übernommen.

Mein erster Versuch sah folgendermaßen aus:
DEF TPL_Steckdosen(
{
if ([$1:$2] eq "timer" and [[$1:$3]]) {
fhem_set ("$1 on-till [$1:$4]");;
}
}   
)

TPL_Steckdosen (Steckdose_Kinderzimmer_Bett,mode,timer_an,timer_aus)

Da wird dann zwar block_01 ausgeführt wenn die Zeit erreicht ist die im Reading timer_an hinterlegt ist, allerdings wird der Aktor nicht geschaltet. Stattdessen steht dann im Aktor unter Internals

SetExtensionsCommand on-till ::ReadingValDoIf(HASH(0x559a423c78),'Steckdose_Kinderzimmer_Bett','timer_aus')
Mit diesem Versuch war ich dann auch am nächsten dran. Den Rest den ich mir aus dem Forum und der Doku zusammengesucht hatte erspare ich euch. :-D

Ich hoffe Ihr könnt mir helfen!

Viele Grüße,
Christian

xenos1984

DOIF ersetzt vermutlich "naiv" innerhalb der Anführungszeichen, also muss das Reading rausgenommen werden.

DEF TPL_Steckdosen(
{
if ([$1:$2] eq "timer" and [[$1:$3]]) {
fhem_set ("$1 on-till" . [$1:$4]);;
}
}  
)

TPL_Steckdosen (Steckdose_Kinderzimmer_Bett,mode,timer_an,timer_aus)

chrisse111179

Hallo xenos1984,

danke für deine Antwort!
Leider funktioniert das nicht. Wie vorher wird der Block zwar ausgeführt aber es wird nicht geschalten. Bei dieser Variante erscheint auch kein Eintrag in den Internals des Geräts.

Auf der Suche nach der Lösung stolpere ich im Zusammenhang von DOIF-Templates und Readings immer mal wieder über "get_Reading". Kann es sein, dass man sich damit das Reading holen muss? Ich habe damit rumexperimentiert, kam aber auf keinen grünen Zweig.
Ich habe mal als Beispiel einen Codeschnipsel aus diesem Beitrag kopiert:

if ($yday == 1) {\
    set_Reading("$1_$2_last_year",get_Reading("$1_$2_year",0),1);;\
    set_Reading("$1_$2_year",0,1);;\
  }\

Viele Grüße

mumpitzstuff

Zitat von: xenos1984 am 05 Dezember 2023, 12:29:51DOIF ersetzt vermutlich "naiv" innerhalb der Anführungszeichen, also muss das Reading rausgenommen werden.

DEF TPL_Steckdosen(
{
if ([$1:$2] eq "timer" and [[$1:$3]]) {
fhem_set ("$1 on-till" . [$1:$4]);;
}
}   
)

TPL_Steckdosen (Steckdose_Kinderzimmer_Bett,mode,timer_an,timer_aus)

Hinter on-till dürfte auf jeden Fall ein Leerzeichen fehlen.

chrisse111179

Hallo mumpitzstuff,

ich glaubs nicht, das wars!
Und schon wieder bin ich über die Syntax gestolpert...

Ich danke euch Beiden und wünsche einen schönen Abend!