Hallo,
in einem DOIF würde ich neben Geräten auch das Ergebnis einer Funktion in myutils testen und dann entsprechend schalten. Das DOIF lautet:
{if ([10:30|0123456] and [?dummy_WlanAus] eq "nein" and [?::isWeekend($we)] eq "1") {fhem_set "wz.SD.echo on"} }
Jeden Tag um 10.30 Uhr, falls der Dummy auf "nein" steht und die Funktion isWeekend eine "1" zurückgibt, soll geschaltet werden. Leider wird nicht geschaltet. Zu dem Zeitpunkt wird die Funktion aufgerufen, das besagen Logeinträge in der Funktion und per Return wird eine "1" zurückgegeben. Der Dummy steht auch auf "nein"; ich habe ihn aber auch schon weggelassen und es wurde nicht geschaltet.
Was mache ich falsch?
Torsten
Hallo Torsten,
Gibt es einen besonderen Grund warum Du nicht die FHEM eigene Routine IsWe verwendest?
Zudem macht ein Funktionsaufruf in eckigen Klammern kein Sinn. Da gehören Readings oder Events rein.
Kurz, weil mobil
Zitat von: KernSani am 31 März 2019, 15:27:37
Zudem macht ein Funktionsaufruf in eckigen Klammern kein Sinn. Da gehören Readings oder Events rein.
Kurz, weil mobil
Würde ich jetzt so nicht unterschreiben. Sinn würde es machen den Rückgabewert einer Funktion innerhalb einer Abfrage aus zu werten.
Zitat von: CoolTux am 31 März 2019, 15:34:15
Würde ich jetzt so nicht unterschreiben. Sinn würde es machen den Rückgabewert einer Funktion innerhalb einer Abfrage aus zu werten.
Ich habe nichts dagegen Funktionen auszuwerten, aber die Bedingung bei DOIF ist quasi Perl, da kann man einfach die Funktion aufrufen und auswerten und muss nichts mit Klammern und ? basteln.
Kurz, weil mobil
Zitat von: CoolTux am 31 März 2019, 15:12:42
Gibt es einen besonderen Grund warum Du nicht die FHEM eigene Routine IsWe verwendest?
Ja, meine Funktion wertet noch einen Dummy aus, welcher von einem Onlinekalender geändert wird.
Torsten
Zitat von: KernSani am 31 März 2019, 15:55:19
Ich habe nichts dagegen Funktionen auszuwerten, aber die Bedingung bei DOIF ist quasi Perl, da kann man einfach die Funktion aufrufen und auswerten und muss nichts mit Klammern und ? basteln.
Hallo KernSani,
das war der Tipp, den ich brauchte. So funktioniert es.
{if ([16:24|0123456] and [?dummy_WlanAus] eq "nein" and ::isWeekend($we) eq "1") {fhem_set "wz.SD.echo on"} }
Ist mein erstes DOIF :)
Torsten
Zitat von: iron.eagle am 31 März 2019, 16:30:38
Hallo KernSani,
das war der Tipp, den ich brauchte. So funktioniert es.
{if ([16:24|0123456] and [?dummy_WlanAus] eq "nein" and ::isWeekend($we) eq "1") {fhem_set "wz.SD.echo on"} }
Ist mein erstes DOIF :)
Torsten
::isWeekend($we) eq "1"
Entweder == 1 benutzen oder einfach nur
::isWeekend($we)
1 wieder immer als wahr genommen und 0 als nicht wahr.
::isWeekend($we)
ist wahr?
not ::isWeekend($we)
ist nicht wahr?
Zitat von: iron.eagle am 31 März 2019, 16:30:38
Hallo KernSani,
das war der Tipp, den ich brauchte. So funktioniert es.
{if ([16:24|0123456] and [?dummy_WlanAus] eq "nein" and ::isWeekend($we) eq "1") {fhem_set "wz.SD.echo on"} }
Ist mein erstes DOIF :)
Torsten
also [16:24|0123456] entspricht [16:24], da du alle Tage der Woche aufgezählt hast.
Danke an alle für Tipps. Wie schon geschrieben, habe ich es umgesetzt und es funktioniert. :)
Torsten