Neue Features: Aggregationsfunktion, Filtern nach Zahl mit Nachkommastellen

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: snickers2k am 24 Januar 2018, 22:00:13
Oh. Ich dachte damit würde eine Liste der Devices (eines von 4 Fenstern in der Gruppe Fenster_Alarm) ausgegeben werden, die nicht geschlossen sind. Jedenfalls war das der Plan :)

Dann musst du die Aggregationsfunktion im Ausführungsteil angeben:

DOIF ( <Trigger auf Schließen>) (set dummy [@"Fenster"::$STATE eq "open" and $group eq "Fenster_Alarm"])
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

snickers2k

Super. So hats funktioniert! Vielen, vielen dank!

stephanr

Zitat von: Damian am 20 Juni 2017, 17:55:13
Falls jemand "offene Fenster" nicht in einer Liste hintereinander, sondern untereinander darstellen möchte, so kann er den Separator s(...) mit Hilfe von html-Syntax angeben, hier mit <br>:

attr Offene_Fenster state [@s(<br> )"Fenster$":state:"open","keine"]

sieht dann so aus:

Moin,

kann man @s mit :a verbinden? Ich würde nämlich gerne den Alias nutzen, aber trotzdem einen Separator abgeben.

Aktueller Code:
Zitat(([22:00] or [HomeStatus] eq "Abwesend" or [HomeStatus] eq "Schlafen") and [?#".*":state: $_ eq "open"]) ({fhem ("set telebot message [@:a".*":state:"open"] \n ist/sind geoeffnet \nam $mday.$month.$year um $hms Uhr") }) DOELSE ()

Danke

Viele Grüße

Damian

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

stephanr

Zitat von: Damian am 10 März 2018, 19:59:57
Schon probiert? ;)

Klar, hier mal ein paar Beispiel ;)
[@:s(\n)a".*":state:"closed"]
[@:a,s(<br>)".*":state:"open"]
[@:a s(<br>)".*":state:"open"]

So gehts aber. Danke.
[@:as(\n)".*":state:"closed"]

Damian

nebenbei: ".*" entspricht "" und ist ein Performance-Schlucker, da bei jedem Event alle Devices nach "closed" geprüft werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stephanr

Zitat von: Damian am 10 März 2018, 20:31:55
nebenbei: ".*" entspricht "" und ist ein Performance-Schlucker, da bei jedem Event alle Devices nach "closed" geprüft werden.

Effektiv kann aber dabei nur über den Devicenamen gefiltert werden oder übersehe ich da eine Möglichkeit?

Damian

Zitat von: stephanr am 10 März 2018, 22:50:47
Effektiv kann aber dabei nur über den Devicenamen gefiltert werden oder übersehe ich da eine Möglichkeit?

und das Ereignis:

z. B.

[@:as(\n)":closed":state:"closed"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stephanr

Zitat von: Damian am 10 März 2018, 22:51:56
und das Ereignis:

z. B.

[@:as(\n)":closed":state:"closed"]

Ok, aber für meinen Fall passt das dann ja nicht, weil ich dann z. B. genau um 22:00 Uhr oder wenn der Home-Status auf "Schlafen" gesetzt wird zusätzlich ein Event :closed haben müsste, oder verstehe ich das mit dem Event falsch?

Für mein Verständnis: Die Einschränkung auf das Event :closed müsste sowohl in der Ereignis, als auch in der Ausführung gesetzt werden?

Mein aktueller Code:
(([22:00] or [HomeStatus] eq "Abwesend" or [HomeStatus] eq "Schlafen") and [?#".*":state: $_ eq "open"]) ({fhem ("set telebot message [@:as(\n)".*":state:"open"] \nist/sind geoeffnet \nam $mday.$month.$year um $hms Uhr") }) DOELSE ()

Danke Dir schon mal.

Damian

ja, wenn du im Ausführungsteil die Aggregationsfunktion benutzt, ist es kein Problem, da gibt es keinen Trigger. Wenn du in der Bedingung die Triggerung mit ? ausschaltest und nur bei seltenen Triggern prüfst, ist es sicherlich auch kein Problem.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mumpitzstuff

Ich wollte die Funktion mal ausprobieren und bin darüber gestolpert, das $DEVICE in cmdState nicht aufgelöst werden kann. Hat jemand eine Idee?

defmod di_Fenster DOIF ([#"^FENSTER:open":state:"open"] != 0) () DOELSEIF ([#"^FENSTER:closed":state:"open"] == 0) ()
attr di_Fenster cmdState $DEVICE zuletzt geöffnet|alle geschlossen
attr di_Fenster do always
attr di_Fenster room CUL_HM

setstate di_Fenster $DEVICE zuletzt geöffnet
setstate di_Fenster 2018-04-03 21:46:35 Device FENSTER_E2
setstate di_Fenster 2018-04-03 21:46:21 cmd 1
setstate di_Fenster 2018-04-03 21:46:21 cmd_event FENSTER_W2
setstate di_Fenster 2018-04-03 21:46:21 cmd_nr 1
setstate di_Fenster 2018-04-03 17:04:06 mode enabled
setstate di_Fenster 2018-04-03 21:46:21 state $DEVICE zuletzt geöffnet


Damian

Zitat von: mumpitzstuff am 03 April 2018, 21:49:21
Ich wollte die Funktion mal ausprobieren und bin darüber gestolpert, das $DEVICE in cmdState nicht aufgelöst werden kann. Hat jemand eine Idee?

defmod di_Fenster DOIF ([#"^FENSTER:open":state:"open"] != 0) () DOELSEIF ([#"^FENSTER:closed":state:"open"] == 0) ()
attr di_Fenster cmdState $DEVICE zuletzt geöffnet|alle geschlossen
attr di_Fenster do always
attr di_Fenster room CUL_HM

setstate di_Fenster $DEVICE zuletzt geöffnet
setstate di_Fenster 2018-04-03 21:46:35 Device FENSTER_E2
setstate di_Fenster 2018-04-03 21:46:21 cmd 1
setstate di_Fenster 2018-04-03 21:46:21 cmd_event FENSTER_W2
setstate di_Fenster 2018-04-03 21:46:21 cmd_nr 1
setstate di_Fenster 2018-04-03 17:04:06 mode enabled
setstate di_Fenster 2018-04-03 21:46:21 state $DEVICE zuletzt geöffnet



ja, $DEVICE wird nicht überall expandiert

Was neuerdings auf jeden Fall funktioniert ist dieses:

defmod di_Fenster DOIF {if ([#"^FENSTER:open":state:"open"] != 0) {set_Reading ("state","$DEVICE zuletzt geöffnet",1)}}
{if ([#"^FENSTER:closed":state:"open"] == 0){set_Reading ("state","alle geschlossen",1)}}


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

mumpitzstuff

Danke!

Kannst du dann vielleicht auch dein Beispiel in deiner Hilfe entsprechend anpassen, nicht das sonst noch jemand drüber stolpert... :)

Damian

Zitat von: mumpitzstuff am 04 April 2018, 11:08:11
Danke!

Kannst du dann vielleicht auch dein Beispiel in deiner Hilfe entsprechend anpassen, nicht das sonst noch jemand drüber stolpert... :)

ja, beim nächsten Update.

Bei cmdState oder state (state überlagert übrigens cmdState, daher sind beide nicht miteinander kombinierbar) kannst du statt [$DEVICE] [$SELF:Device] angeben - das funktioniert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mumpitzstuff

Oh wollte ich grad schreiben das es so geht. Bist mir zuvor gekommen.