Hauptmenü

DOIF Perl-Block triggern

Begonnen von chq, 14 Oktober 2018, 19:27:50

Vorheriges Thema - Nächstes Thema

chq

Hallo,

ok, meine letzte Frage für heute.  ::)

Beim "normalen DOIF" gibt's doch oben diese praktische Möglichkeit um per set cmd_x ein bestimmtes Kommando/ einen bestimmten DOIF-Zweig zu triggern.

Wie triggert man denn sinnvollerweise die einzelnen Blöcke eines DOIFs, in dem der Perl-Modus verwendet wird?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Indem man den passenden Trigger mit dem FHEM-Befehl trigger auslöst.

z. B.

{if ("^FS$:^on$") {....

kannst du in der Commandozeile mit trigger FS on auslösen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

#2
Hm, ok.

Also muss ich, wenn ich z.B. ohnehin bereits mehrere Bedingungen haben, die gemeinsam ein Kommando auslösen sollen noch jeweils zusätzlich einen Trigger definieren, der alternativ zu den genannten Bedingungen das zu triggernde Kommando triggern kann.

z.B. wären es hier ja zwei Bedingungen, die beide erfüllt sein müssten:

{if([HM_rolloEsszimmer:""] and get_Reading("doifState") eq "idle") {set_Reading("doifState","sonnenstDisabled");
fhem_set("doif_sonnenstand disable")}}


Hier müsste ich also dann per or und einer weiteren Bedingung somit den zusätzlichen Trigger definieren?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Zitat von: chq am 14 Oktober 2018, 20:17:49
Hm, ok.

Also muss ich, wenn ich z.B. ohnehin bereits mehrere Bedingungen haben, die gemeinsam ein Kommando auslösen sollen noch jeweils zusätzlich einen Trigger definieren, der alternativ zu den genannten Bedingungen das zu triggernde Kommando triggern kann.

z.B. wären es hier ja zwei Bedingungen, die beide erfüllt sein müssten:

{if([HM_rolloEsszimmer:""] and get_Reading("doifState") eq "idle") {set_Reading("doifState","sonnenstDisabled");
fhem_set("doif_sonnenstand disable")}}


Hier müsste ich also dann per or und einer weiteren Bedingung somit den zusätzlichen Trigger definieren?

Gruß Chris
ja
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

Zitat von: Damian am 14 Oktober 2018, 19:34:16
Indem man den passenden Trigger mit dem FHEM-Befehl trigger auslöst.

z. B.

{if ("^FS$:^on$") {....

kannst du in der Commandozeile mit trigger FS on auslösen.

Das würde state vom Device FS triggern, oder? Hast Du mir evtl. einen Link, dem ich entnehmen kann, wie man ein bestimmtes Reading eines Devices antriggern kann?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Zitat von: chq am 15 Oktober 2018, 20:27:49
Das würde state vom Device FS triggern, oder? Hast Du mir evtl. einen Link, dem ich entnehmen kann, wie man ein bestimmtes Reading eines Devices antriggern kann?

Gruß Chris

Durch die Abfrage eines Readings wird ja gleichzeitig auf das Event des Readings reagiert.

([device:reading] eq ...)

nur auf das Event des Readings reagieren:

(["^device$:^reading"])

Die Eventabfrage ist aber eher unüblich, weil man meistens wie im ersten Beispiel auch gleich den Inhalt des Readings auswerten will.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

Zitat von: Damian am 14 Oktober 2018, 19:34:16
Indem man den passenden Trigger mit dem FHEM-Befehl trigger auslöst.

z. B.

{if ("^FS$:^on$") {....

kannst du in der Commandozeile mit trigger FS on auslösen.

Hallo,

ich habe das ausprobiert, musste jedoch feststellen, dass ich in meinem Fall noch eckige Klammern setzen musste:

{if([23:59] or ["^doif_rolloEZhandlerPerl$:^on$"]) {set_Reading("doifState","idle");
fhem_set("doif_sonnenstand enable")}}
}


Warum ist das so? Steht bestimmt auf ner ganz arg schlauen Perl-Seite.  :P

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Zitat von: chq am 28 Oktober 2018, 19:08:16
Hallo,

ich habe das ausprobiert, musste jedoch feststellen, dass ich in meinem Fall noch eckige Klammern setzen musste:

{if([23:59] or ["^doif_rolloEZhandlerPerl$:^on$"]) {set_Reading("doifState","idle");
fhem_set("doif_sonnenstand enable")}}
}


Warum ist das so? Steht bestimmt auf ner ganz arg schlauen Perl-Seite.  :P

Gruß Chris

Die eckigen Klammern hatte ich vergessen, daher war mein Vorschlag nicht korrekt. Die Syntax in eckigen Klammern ist DOIF-spezifisch und hat nicht viel (außer bei Regex-Angaben) mit Perl zu tun:

Die Sachen werden ja recht ausführlich in der Commandref zu DOIF behandelt:

https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

und

https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

#8
Vielen Dank für's Raussuchen und Deine Geduld.  :)

Ich denke, jetzt habe ich es verstanden.

Grundsätzlich muss man sich bei der Erstellung eines DOIFs also immer die Frage stellen, ob man Events, Zustände, oder beides abfragen will, um das zu erreichen, was man erreichen möchte.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

chq

Hallo,

es hat sich eine Zusatzfrage ergeben:

Wie würde man vorgehen, wenn man mit einem Trigger gerne mehrere Perl-Blöcke innerhalb eines Perl-Modus-DOIFs aufrufen wollen würde?

Geht das und falls ja, wie?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Damian

Zitat von: chq am 30 Oktober 2018, 11:48:55
Hallo,

es hat sich eine Zusatzfrage ergeben:

Wie würde man vorgehen, wenn man mit einem Trigger gerne mehrere Perl-Blöcke innerhalb eines Perl-Modus-DOIFs aufrufen wollen würde?

Geht das und falls ja, wie?

Gruß Chris

So, wie es beschrieben ist. Im Perl-Modus muss man sich da nicht viel Gedanken machen. Man kann beliebig viele Blöcke definieren und in jedem Block kann man beliebige Trigger angeben  - auch die gleichen. Die Blöcke sind unabhängig voneinander, genauso als wären sie in verschiedenen DOIF-Modulen.

DOIF
{ .... ["mytrigger"]....}
{ .... ["mytrigger"]....}
...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

So einfach wie möglich, so kompliziert wie nötig