DOIF mit Funktionsaufruf in myutils

Begonnen von iron.eagle, 31 März 2019, 15:03:14

Vorheriges Thema - Nächstes Thema

iron.eagle

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

CoolTux

Hallo Torsten,

Gibt es einen besonderen Grund warum Du nicht die FHEM eigene Routine IsWe verwendest?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Zudem macht ein Funktionsaufruf in eckigen Klammern kein Sinn. Da gehören Readings oder Events rein.


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

iron.eagle

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

iron.eagle

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

CoolTux

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?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iron.eagle

Danke an alle für Tipps. Wie schon geschrieben, habe ich es umgesetzt und es funktioniert.  :)

Torsten