FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: choetzu am 13 Januar 2019, 19:29:48

Titel: Alle Readings eines Devices in Bedingung
Beitrag von: choetzu am 13 Januar 2019, 19:29:48
Hallo

ich habe ein Dummy. Dort werden der Status meiner Gateway-Geräte gespeichert. Also ein OK oder Warnung pro Gerät. Nun wollte ich ein DOIF machen, welches im state aufführt, ob überall OK ist, oder nicht. Also, alle Readings beobachten, und falls OK, dann im STate ein OK schreiben.. So gehts aber nicht., er gibt mir ein "Warnung" zurück, obschon alles auf OK steht. Gibts da eine Lösung? Danke.

([Monitoring_Dummy:.*] ne "OK")
(set Monitoring_Dummy Warnung)

DOELSE
(set Monitoring_Dummy OK)
Titel: Antw:Alle Readings eines Devices in Bedingung
Beitrag von: Ellert am 13 Januar 2019, 22:57:42
Schau Dir die Aggregationsfunktion an.
Titel: Antw:Alle Readings eines Devices in Bedingung
Beitrag von: choetzu am 14 Januar 2019, 19:40:47
Zitat von: Ellert am 13 Januar 2019, 22:57:42
Schau Dir die Aggregationsfunktion an.

danke Ellert.. Ich habe nun die Aggregationsfunktion gefühlte 1000mal angeschaut, komme aber nicht darauf...

Mein Dummy hat folgende Readings:

nternals:
   CHANGED   
   NAME       Monitoring_Dummy
   NR         416
   STATE      OK
   TYPE       dummy
   Helper:
     DBLOG:
       Arlo:
         Logging:
           TIME       1547487170.26862
           VALUE      OK
       HUE:
         Logging:
           TIME       1547403148.09852
           VALUE      OK
       state:
         Logging:
           TIME       1547488618.13729
           VALUE      OK
   READINGS:
     2019-01-14 18:32:50   Arlo            OK
     2019-01-13 19:13:39   Batterien       OK
     2018-12-28 18:19:23   EnOcean         OK
     2019-01-09 04:56:29   GardenaSystem   OK
     2018-12-16 17:32:54   Gateway         OK
     2019-01-13 20:11:28   HUE             OK
     2019-01-13 19:14:35   Homematic       OK
     2019-01-09 11:20:13   LGW             OK
     2019-01-09 11:18:53   Netatmo         OK
     2019-01-09 11:18:41   PoolController  OK
     2019-01-09 11:17:09   SIP             OK
     2019-01-13 19:15:24   Thermometer     OK
     2018-12-28 18:20:13   ZWDongle        OK
     2019-01-09 11:17:45   mqtt            OK


Ich weiss einfach nicht, wie man ALLE Readings (ausser dann state) in einem DEVICE checkt... Also mit Monitoring_Dummy:.* gehts ja nicht.. auch so nicht.

([#"Monitoring_Dummy":.*: $_ != "OK"])
(set Monitoring_Dummy Warnung)

DOELSE
(set Monitoring_Dummy OK)


ich habe wohl Tomaten auf den Augen..
Titel: Antw:Alle Readings eines Devices in Bedingung
Beitrag von: Damian am 14 Januar 2019, 20:44:50
Probiere mal:

([#"^Monitoring_Dummy$":"": $_ ne "OK"] >1)
(set Monitoring_Dummy Warnung)
DOELSE
(set Monitoring_Dummy OK)


Würde bedeuten: alle Readings von Monitoring_Dummy auf ungleich "OK" prüfen. Es sollte nur einer sein, nämlich state selbst, wenn es mehr als einer ist, dann Meldung.
Titel: Antw:Alle Readings eines Devices in Bedingung
Beitrag von: choetzu am 15 Januar 2019, 13:01:55
danke Damian.. Jep, so hats geklappt. Musste jedoch noch etwas anpassen, damit es das Reading "state" berücksichtigt oder eben nicht.


([Monitoring_Dummy] eq "OK"
and [#"^Monitoring_Dummy$":"": $_ ne "OK"] >0)
(set Monitoring_Dummy Warning)

DOELSEIF
([Monitoring_Dummy] eq "Warning"
and [#"^Monitoring_Dummy$":"": $_ ne "OK"] ==1)
(set Monitoring_Dummy OK)