Alle Readings eines Devices in Bedingung

Begonnen von choetzu, 13 Januar 2019, 19:29:48

Vorheriges Thema - Nächstes Thema

choetzu

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)
Raspi3, EnOcean, Zwave, Homematic

Ellert


choetzu

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..
Raspi3, EnOcean, Zwave, Homematic

Damian

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

choetzu

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)
Raspi3, EnOcean, Zwave, Homematic