Neue Features: Aggregationsfunktion, Filtern nach Zahl mit Nachkommastellen

Begonnen von Damian, 15 April 2017, 21:25:06

Vorheriges Thema - Nächstes Thema

Damian

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

Damian

Zitatoffen: "open", "tilt" & 0-100%

so etwas sollte so funktionieren

[@"",state,$_ =~ "open|tilt" or $number != 0]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StephanFHEM

danke für die tolle Erweiterung. hab meine Fenster-Abfrage jetzt damit gelöst.

gibt es eine Möglichkeit eine Liste aller abgefragten Geräte [@"^Window:state:"open|closed"] in ein UserReading zu schreiben?
Hab es auch schon mit der Perl-Funktion AggrDoif versucht aber es will irgendwie nicht....

Ellert

Meinst Du ein selbst angelegtes Reading oder das Attribut userReadings?

StephanFHEM

ich wollte mit dem Attribut UserReading ein eigenes Reading in meinem DOIF anlegen. Im Attribut wollte ich das Reading dann so definieren, dass es die Liste aller überwachten Geräte anzeigt

Ellert

Dafür sind userReadings nicht gedacht, es reicht ein einfaches setreading $SELF P_geraeteliste [@...] im Ausführungsteil des DOIF

Damian

Zitat von: Ellert am 24 April 2017, 18:17:27
Dafür sind userReadings nicht gedacht, es reicht ein einfaches setreading $SELF P_geraeteliste [@...] im Ausführungsteil des DOIF

Das geht schon, ist halt nur etwas umständlich:

attr di_modul userReadings window:Window.* {join(",",AggrDoIf('@','^Window','state','"open|closed"'))}

entspricht demnächst:

attr di_modul myReadings window:[@"^Window":state:"open|closed"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StephanFHEM

da wäre ich nicht drauf gekommen. Bis demnächst (sieht einfacher aus) hab ich es jetzt erst mal mit setReadings umgesetzt, geht auch:-).

Jetzt noch eine letzte Frage:
Wenn ich mir eine Liste generiere nimmt er die Device-Namen. Kann ich auch die Aliase in der Liste darstellen?
Für ein EVENT im DOIF mach ich das mit {AttrVal("$DEVICE","alias", "$DEVICE")} .. aber geht das auch für die Komma-Getrennte @-Liste?

Damian

Zitat von: StephanFHEM am 24 April 2017, 18:44:08
da wäre ich nicht drauf gekommen. Bis demnächst (sieht einfacher aus) hab ich es jetzt erst mal mit setReadings umgesetzt, geht auch:-).

Jetzt noch eine letzte Frage:
Wenn ich mir eine Liste generiere nimmt er die Device-Namen. Kann ich auch die Aliase in der Liste darstellen?
Für ein EVENT im DOIF mach ich das mit {AttrVal("$DEVICE","alias", "$DEVICE")} .. aber geht das auch für die Komma-Getrennte @-Liste?

ja, allerdings auch noch etwas umständlich:

attr di_modul userReadings window:Window.* {my @list;foreach(AggrDoIf('@','^Window','state','"open|closed"')){push (@list, AttrVal($_,"alias", $_))};join(",",@list)}

demnächst voraussichtlich so (mit a wie alias):

attr di_modul myReadings window:[@:a:"^Window":state:"open|closed"]


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

StephanFHEM

ach mist....

ich habe jetzt im DOIF folgendes stehen:
DOIF (Trigger)({my @list;foreach(AggrDoIf('@','_Fenster|_Tuer','state','"open|closed"')){push(@list, AttrVal($_,"alias", $_));join(", ", @list);};fhem("setreading $SELF Sensoren @list")})

Das funktioniert auch soweit nur: er macht die blöden Kommata nicht zur Abgrenzung der einzelnen Variablen. Kannst du noch mal schauen welches Semikolon, geschweifte Klammer oder sonstiges ich falsch gesetzt habe?

Damian

Zitat von: StephanFHEM am 24 April 2017, 21:30:53
ach mist....

ich habe jetzt im DOIF folgendes stehen:
DOIF (Trigger)({my @list;foreach(AggrDoIf('@','_Fenster|_Tuer','state','"open|closed"')){push(@list, AttrVal($_,"alias", $_));join(", ", @list);};fhem("setreading $SELF Sensoren @list")})

Das funktioniert auch soweit nur: er macht die blöden Kommata nicht zur Abgrenzung der einzelnen Variablen. Kannst du noch mal schauen welches Semikolon, geschweifte Klammer oder sonstiges ich falsch gesetzt habe?

Überlass mal lieber die Perl-Basteleien den Perl-Puristen und nimm die angehängte Version. Sie kann jetzt auch Aliasnamen ausgeben :)

DOIF (Trigger)(setreading $SELF Sensoren [@a"_Fenster|_Tuer",state,"open|closed"])

Gesucht wird allerdings (hier: "_Fenster|_Tuer") immer nach den echten Namen und nicht nach Aliasnamen, das geht auch schlecht anders, weil es gleichzeitig das Triggerdevice ist und das ist kein Aliasname.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StephanFHEM

klasse:-) Hätte ich geahnt, dass "demnächst" für dich noch heute Abend ist hätte ich mir 2 Stunden basteln mit Perl-Viertelwissen gespart:-)

Das ist schon gut so, dass ich nach den echten Namen suche. Die Aliase sind für den WAF und die echten Namen sind die logischen... 8)

edit: getestet und es funktioniert wie ein Traum. Eine Anmerkung (Verbesserungsvorschlag) hätte ich aber noch -> kannst du nicht nach dem Komma immer noch ein Leerzeichen einfügen. Sieht optisch etwas besser aus wenn man sich die Liste aufs Handy sendet

Damian

Zitat von: StephanFHEM am 24 April 2017, 22:09:37
klasse:-) Hätte ich geahnt, dass "demnächst" für dich noch heute Abend ist hätte ich mir 2 Stunden basteln mit Perl-Viertelwissen gespart:-)

Das ist schon gut so, dass ich nach den echten Namen suche. Die Aliase sind für den WAF und die echten Namen sind die logischen... 8)

Doku ist auch schon angepasst. Ich werde es noch einen Tag lang testen und vermutlich morgen einchecken. Tja manche Dinge gehen schneller von der Hand als man denkt ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StephanFHEM


Damian

Zitat von: StephanFHEM am 24 April 2017, 22:18:24
schau bitte noch mal nach meinem Edit:-)

Das Problem ist, dass man diese Liste auch für den set-Befehl nutzen kann und da müssen die Devicenamen mit Komma getrennt werden. Die Aliasnamen funktionieren jetzt aber auch bei der AggrDoIf-Funktion, das würde dann so aussehen:

DOIF (Trigger)(setreading $SELF Sensoren {(join(" ",AggrDoIf('@a','_Fenster|_Tuer',state,'"open|closed"')))})

Hier ist der Perl-Aufruf noch überschaubar.

Edit: Ich sehe gerade, du wolltest Komma mit Leerzeichen, dann halt:

DOIF (Trigger)(setreading $SELF Sensoren {(join(", ",AggrDoIf('@a','_Fenster|_Tuer',state,'"open|closed"')))})
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF