FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: weini am 10 Juli 2020, 09:13:08

Titel: DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: weini am 10 Juli 2020, 09:13:08
Vorneweg: Habe die Suche bemüht, bin aber nicht fündig geworden. Wenn ich etwas übersehen habe, dann mea-culpa - stoßt mich bitte mit der Nase drauf.

Ich möchte in einem DOIF sinngemäß folgende Bedingung prüfen:
[myDev....Pattern] inlist {"initialized"|"Initialized"|"opend"|"active"}

Inhaltlich geht es mir darum, dass ich für die verschiedenen Steuergeräte wie CUL, sDuino, LaCrosse GW etc. mit einem DOIF eine Überwachung aufbaue, die mir eine Email schickt, falls ein Gerät disconnected. Genau genommen brauche ich also den negativen Fall "NOT inlist".

Ich denke, dass das "Defizit" hier schon von Perl kommt, wo ich keinen einfachen (=skalaren) Operator gefunden habe. DOIF "erbt" das ja quasi.
Gibt es über die Perl-Syntax ggf. einen enigermaßen eleganten Weg, das zu lösen?

Viele Grüße,
weini
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: MadMax-FHEM am 10 Juli 2020, 12:25:46
Also Perl ist an der Stelle sicher nicht die Limitierung ;)

Also nur mal so (ohne DOIF):

notify mit entsprechender Regex auf die Geräte und Werte die du willst (inlist) oder eben nicht willst (not in list)...

Dann eine Sub aufrufen wo du $NAME (-> NAME des auslösenden Devices) mitgibst

Dort dann in einer Schleife (foreach) prüfst, ob das Device einen der "inlist" Zustände hat -> dann scheint es ja ok zu sein!?

Oder eben prüfen, ob das Gerät einen unerwünschten Zustand hat, dann auch "inlist" ;) aber dort steht halt dann drin welchen Zusatnd die Geräte NICHT einnehemen sollen!?

Oder ich hab generell nicht richtig verstanden...

Gruß, Joachim
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: weini am 10 Juli 2020, 13:58:01
Doch, doch, du hat micht voll verstanden  ;)

Gehen wird das über Perl in einem Sub sicherlich. "Schöner" fände ich natürlich, wenn man es direkt in der DOIF Bedingung abbilden könnte. Auch ein Perl Einzeler würde mir noch besser gefallen. Die Lösung mit foreach hatte ich beim Recherchieren gefunden, aber das macht ja nur über ein Sub wirklich Sinn.
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: Damian am 10 Juli 2020, 14:02:15
Zitat von: weini am 10 Juli 2020, 13:58:01
Doch, doch, du hat micht voll verstanden  ;)

Gehen wird das über Perl in einem Sub sicherlich. "Schöner" fände ich natürlich, wenn man es direkt in der DOIF Bedingung abbilden könnte. Auch ein Perl Einzeler würde mir noch besser gefallen. Die Lösung mit foreach hatte ich beim Recherchieren gefunden, aber das macht ja nur über ein Sub wirklich Sinn.

Du kannst in der Bedingung eines DOIFs beliebige subs aufrufen und entsprechend abfragen.
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: MadMax-FHEM am 10 Juli 2020, 14:03:58
Warum (frage ich mich eigentlich bei DOIF immer) willst du Programmierung in Perl und Konfiguration mischen und findest das noch schöner!? ;)

Ein sauberes notify -> Konfiguration mit einem Sub-Aufruf -> Programmierung ist (finde ich) sehr viel übersichtlicher...
...als "alles" in ein DOIF quetschen und dann evtl. dort doch auch noch Perl und dann noch "Feinjustierung" mittels Attribute...

Aber: jeder wie er will...

Da ich aber (aus besagtem Grund ;) ) DOIF praktisch NICHT nutze: kann ich an dieser Stelle nicht weiterhelfen...

Außer auf die commandref und vielen Beispiele verweisen...

Gruß, Joachim
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: xenos1984 am 10 Juli 2020, 14:40:29
Für mich klingt das nach einem Anwendungsfall für DOIF mit Aggregationsbedingung:

http://fhem.de/commandref_DE.html#DOIF_aggregation

Dort gibt es einige Beispiele, die ähnliches tun, siehe z.B. das Beispiel "offene Fenster". Nur würde in deinem Fall die Aggregationsbedingung nicht

$_ =~ "open"

lauten, sondern z.B. sowas wie

$_ =~ "initialized|Initialized|opened|active"

wenn das entsprechende Wort vorkommen soll, oder

$_ =~ "^(initialized|Initialized|opened|active)$"

wenn nur auf kompletten Wert reagiert werden soll. Wie das nun im Detail aussehen muss, hängt davon ab, wie deine Geräte und deren Readings heißen.
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: weini am 10 Juli 2020, 15:03:02
Danke dir, das sieht sehr vielversprechend aus!
Werde damit mal einen Versuch starten und euch wissen lassen, wie es mir ergangen ist.
Titel: Antw:DOIF Vergleich mit Werten aus diskreter Liste
Beitrag von: weini am 22 Juli 2020, 07:41:16
Kurzes Update hier: Ich bin mit der Aggregation nicht ganz glücklich geworden. Das DOIF hat mir aus nebulösen Gründen immer auch bei Messages getriggert, die mich nicht interessiert haben. Das lag wohl zum einen am Sonderfall "state" Event (habs auch mit AddStateEvent versucht). Zum anderen lag es wohl auch daran, dass ich mir zum Testen mein LaCrosse Device ausgesucht habe und genau von dem Modul beim Disconnect kein Event generiert wird.

Am Ende habe ich es jetzt m. M. nach recht elegant über DOIF Templates gelöst bekommen: https://forum.fhem.de/index.php/topic,84969.msg1073693.html#msg1073693

Vielen Dank euch!