Hilfe bei Regex für Monitoring

Begonnen von Nogga, 21 September 2020, 09:32:27

Vorheriges Thema - Nächstes Thema

Nogga

Ich nutze das Monitoring Tool um mich zu informieren, wenn die Feuchtigkeit nicht stimmt. Das funktioniert auch ganz gut.
Jetzt habe ich aber zum einen zwei verschiedene Sensoren (Thermostat und Thermometer) und gleichzeitig auch noch mehrere Thermometer, deren Feuchtigkeit ich NICHT berücksichtigen möchte. Also quasi ausschließen.

Folgende Regex inkludiert mir alle mit Feuchtigkeit >= 70%:

.*(Thermostat|TempHumid).*(HUMIDITY|humidity).*([7-9][0-9]|100)$

Das funktioniert prima bei:

EG_Diele_Thermostat:1.HUMIDITY
UG_Vorrat_TempHumid:humidity


Aber leider auch bei folgendem Thermometer (welches ich gerne ausschließen möchte):

EG_Eingang_TempHumid:humidty


Die Luftfeuchtigkeit draußen interessiert mich nicht als Warnung...

Danke für Eure Tipps!

gestein

Hallo,

Du könntest die regex so erweitern, dass an der 4. Stelle
- alles außer "E" oder
- nur (D|V)
genommen wird.

Mir hat die Seite www.regex101.com bei diesen Dingern schon sehr geholfen.

lg, Gerhard

Nogga

Nunja, ich habe noch ein paar weitere Außenthermometer - das wäre mir dann zu "instabil".
Ich bräuchte im prinzip obere RegEx nur mit Auschluß n spezifischer Werte.

Die Regex-Seiten kenne ich schon, da bin ich leider nicht weiter gekommen.

Otto123

#3
Hi,

ich habe nicht richtig verstanden um welches "monitoring Tool" es geht. Aber ich zitiere mal die Commandref zu notify
ZitatignoreRegexp regexp
Es ist nicht immer einfach ein Regexp zu bauen, was etwas _nicht_ matcht. Dieses Attribu hilft in diesen Fällen: das Event wird ignoriert, falls den angegebenen Regexp matcht. Syntax ist gleich wie in der Definition.
Bevor man sich die "Finger bricht" mit einem regExp was explizit nicht matcht solltest Du schauen ob es eine Möglichkeit gibt diese anderweitig auszuschließen oder ob das "Tool" eine Möglichkeit für ignore bietet.

Falls es um das FHEM Modul monitoring geht, da gibt es z.B. so etwas:
Zitatwhitelist {<perl code>}
Durch Leerzeichen getrennte Liste von devspecs die erlaubt sind werden.
Wenn das Attribut gesetzt wird werden alle Geräte die nicht durch die devspecs definiert sind von beiden Listen gelöscht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Nogga

Es ist tatsächlich das monitoring-Modul:
https://fhem.de/commandref_DE.html#monitoring

Naja, wenn ich mit whitelist arbeite, könnte ich ja auch alle Devices manuell der Liste hinzufügen.
Ich habe aber ca. 30 verschiedene Thermo/Hygrometer...
Deshalb wollte ich es über eine Regex machen.

So sieht übrigens das Monitoring device aus:


defmod Monitoring_Feuchtigkeit monitoring .*(Thermostat|TempHumid).*(HUMIDITY|humidity).*([7-9][0-9]|100)$ .*(Thermostat|TempHumid).*(HUMIDITY|humidity).*([0-6][0-9])$
attr Monitoring_Feuchtigkeit errorReturn {return unless(@errors);;\
$_ = AttrVal($_, "alias", $_) foreach(@errors);;\
return("Der Sensor meldet hohe Luftfeuchtigkeit:\n\"$errors[0]\"") if(int(@errors) == 1);;\
@errors = sort {lc($a) cmp lc($b)} @errors;;\
return(join("\n", "Folgende ".@errors." Sensoren melden hohe Luftfeuchtigkeit:", @errors))\
}
attr Monitoring_Feuchtigkeit errorWait {AttrVal($name, "monitoringErrorWait", 60*1)}
attr Monitoring_Feuchtigkeit group Monitoring
attr Monitoring_Feuchtigkeit room Sensoren
attr Monitoring_Feuchtigkeit stateFormat allCount | state

Otto123

Schon mal was von devspecs gehört?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Nogga

Das war ein interessanter Tipp!
Ich habe jetzt mal folgende whitelist hinzugefügt (die Events bleiben ja wie oben stehen - gut man könnte es vermutlich noch kürzer gestalten):


attr Monitoring_Feuchtigkeit whitelist ccutype=HmIP-BWTH .*TempHumid:FILTER=TYPE=LaCrosse:FILTER=NAME!=.*Balkon.*:FILTER=NAME!=.*Eingang.*:FILTER=NAME!=.*Garage.*


Morgen früh weiss ich mehr!

Nogga

...und damit funktioniert es!
Vielen Dank für den Tipp!