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

RoBra81

Nicht wirklich ;-), aber als ich gestern was mit (...) oder {...} probiert hatte, stand exakt der Text im state und nicht das errechnete Ergebnis...

Gesendet von meinem SM-G935F mit Tapatalk


Ralli

Hallo Damian,

funktioniert das?


define DOIF_Aussensteckdosen DOIF ([23:00] and [#".*Aussensteck.*":state:"off"] != 0) (set .*Aussensteck.*:FILTER=STATE=on off)


Um 23 Uhr soll geschaut werden, ob es noch eine Außensteckdose mit Saft gibt und dieser dann abgedreht werden.

Alternativ?


define DOIF_Aussensteckdosen DOIF ([23:00]) (set [@".*Aussensteck.*":state:$_ ne "off" and $TYPE eq "HMCCUDEV"] off)
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 27 Mai 2017, 12:08:12
Hallo Damian,

funktioniert das?


define DOIF_Aussensteckdosen DOIF ([23:00] and [#".*Aussensteck.*":state:"off"] != 0) (set .*Aussensteck.*:FILTER=STATE=on off)


Um 23 Uhr soll geschaut werden, ob es noch eine Außensteckdose mit Saft gibt und dieser dann abgedreht werden.

Alternativ?


define DOIF_Aussensteckdosen DOIF ([23:00]) (set [@".*Aussensteck.*":state:$_ ne "off" and $TYPE eq "HMCCUDEV"] off)


Warum sollte es nicht gehen? Hast du schon probiert?

damit

([23:00] and [?#"Aussensteck":state:"off"] != 0)

wird dein Modul nur um 23:00 Uhr getriggert. Die Regexangabe .* kannst du dir bei DOIF auch sparen.

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

Damian

Zitat von: Damian am 28 Mai 2017, 08:38:12
Warum sollte es nicht gehen? Hast du schon probiert?

damit

([23:00] and [?#"Aussensteck":state:"off"] != 0)

wird dein Modul nur um 23:00 Uhr getriggert. Die Regexangabe .* kannst du dir bei DOIF auch sparen.

auch das würde funktionieren

([23:00] and [?#"Aussensteck":state:"off"])

da es hier mit != 0 gleichzusetzen ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ralli

Danke :)

Ja, probiert. Im Endeffekt wollte ich wissen, ob das so noch zu "kompliziert" ist - und du hast mir eine kürzere Variante gezeigt.

Edit: Wobei ich ja selbst einen Logikfehler drin habe. Ich möchte ja prüfen, ob irgendeine Aussensteckdose noch eingeschaltet ist und nur dann an die eingeschalteten einen Ausschaltbefehl senden.


([23:00] and ![?#"Aussensteck":state:"^((?!off).)*$"])
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 28 Mai 2017, 09:17:40
Danke :)

Ja, probiert. Im Endeffekt wollte ich wissen, ob das so noch zu "kompliziert" ist - und du hast mir eine kürzere Variante gezeigt.

Edit: Wobei ich ja selbst einen Logikfehler drin habe. Ich möchte ja prüfen, ob irgendeine Aussensteckdose noch eingeschaltet ist und nur dann an die eingeschalteten einen Ausschaltbefehl senden.


([23:00] and ![?#"Aussensteck":state:"^((?!off).)*$"])


sollte dann nicht schon reichen


([23:00] and [?#"Aussensteck":state:"on"])


ist wahr, wenn irgendwo noch ein state mit "on" als Teilstring vorkommt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ralli

Grundsätzlich hast du recht. Aber was ist, wenn eine der Aussensteckdosen einen undefinierten Zustand hat? Das fange ich so auch ab.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Damian

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

Per

Zitat von: CommandRefListe der Devices in der Gruppe "windows", die mit "rooms" enden, deren Status (nicht state-Reading) "on" ist:

[@"rooms$"::$STATE eq "on" and $group eq "windows"]
Tippfehler oder Absicht?

Damian

Zitat von: Per am 25 Juni 2017, 11:03:57
Tippfehler oder Absicht?

Absicht. Du kannst an der Stelle ein Reading angeben. Aber nach diesem wird hier nicht gesucht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Die Aggregationsfunktion wurde um Regex-Angabe für Readings erweitert.

Die Syntax lautet nun:

[<function>:<format>:"<regex device>:<regex event>":<reading>|"<regex reading>":<condition>,<default>]

Damit kann man jetzt nicht nur über mehrer Devices, sondern auch über mehrer Readings aggregieren:

Beispiele:

Kleinster Wert der Readings des Devices "abfall", in deren Namen "Gruenschnitt" vorkommt und die mit "_days" enden:

[#min:"^abfall$":"Gruenschnitt.*_days$"]

oder

Durchschnitt von Readings aller Devices, die mit "T_" beginnen, in deren Reading-Namen "temp" vorkommt.

[#average:"^T_":"temp"]

oder

Durchschnitt von Readings aller Devices, die mit "T_" beginnen, in deren Reading-Namen "temp" vorkommt, die größer als 15 sind:

[#average:"^T_":"temp":$_ > 15]

Neue Version ist ab morgen per Update verfügbar.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

snickers2k

Hey.
Super neue Funktionen. Vielen, vielen Dank für deine Mühe.

Ich habe das mal für meine Alarmanlage versucht zu integrieren.

DOIF wird getriggert, wenn der AnwesenheitsTrigger aktiviert wird und die Alarmanlage off ist - sofern eines der Fenster offen ist. Also im Grunde so, wie es hier schon oft beschrieben wurde, nur eben mit mehreren Bedingungen.
( ([@"Fenster"::$STATE ne "closed" and $group eq "Fenster_Alarm"]) && (([AnwesenheitsTrigger] eq "on") && ([Alarmanlage_dummy] eq "off")) ) (set AnwesenheitsTrigger off) (set Alarmanlage_dummy $DEVICE SCHLIESSEN)

Problem ist nur, dass ich ein "AnwesenheitsTrigger SCHLIESSEN" als Antwort bekomme. Obwohl ich ganz gerne die geöffneten Fenster mit $DEVICE angezeigt bekommen würde.
Ich habe nur leider keine Ahnung wie ich genau diesen Part auslese.


Würde mich über hilfe sehr freuen. Danke!

Damian

Wie viele Fenster hast du beim triggernden $DEVICE? Normaler weise doch nur eins.

ansonsten:

DOIF ( <Trigger auf Schließen>) (set dummy [@"$DEVICE"])
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

snickers2k

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 :)