Hallo zusammen,
ich "quäle" mich zur Zeit mit DbLog rum... Um die geloggte Datenflut zu reduzieren, wollte ich den regulären Ausdruck anpassen, dass nur relavante Sensorwerte geloggt werden. Die wichtigen Geräte haben einen Namen gemäß folgendem Schema erhalten:
"<RAUM>.<TYPE>.<SUBTYPE>". Des Weiteren werden per KNX-Gerät bei einer Wertänderung immer drei Events erzeugt: "state", "getG1" und "last-sender". Die (zusammenkopierte) Einträge in DBLog (noch mit altem Gerätenamen) sehen wie folgt aus:
| 2017-09-08 18:07:08 | KNX_0403012 | KNX | state: 4904.96 lux | state | 4904.96 | lux |
| 2017-09-09 09:18:44 | KNX_0403014 | KNX | getG1: 4359.68 lux | getG1 | 4359.68 | lux |
| 2017-09-08 07:22:45 | KNX_0403014 | KNX | last-sender: 1/1/31 | last-sender | 1/1/31 | |
"state" und "getG1" sind für mich vom Inhalt her gleichwertig. Habe mich entschieden den "state" Wert zu verwenden.
Nun versuche ich mich darin den richtigen Regulären Ausdruck zu finden.
Den Filter für "state" für ein Gerät habe ich gelöst bekommen:
define mylog DbLog ./db.conf RAUM1.TYPE1.SUBTYPE1:(state).*
Das ganze nun für alle Geräte von einem bestimmten Type jedoch nicht:
define mylog DbLog ./db.conf .*.(TYPE1|TYPE2|TYPE3|TYPE4).*:(state).*
Nach regex101, sollte der Match jedoch funktionieren: https://regex101.com/r/r42BOG/1
Wie müsste denn der RegEx-Ausdruck richtig aussehen?
Vielen Dank & viele Grüße
NehCoy
Was passiert denn mit dem Regexp den Du angegeben hast, denn generell passt der schon auf Deine Devicenamen?
Er liesse sich aber auch deutlich vereinfachen:
define mylog DbLog ./db.conf .*TYPE[1-4].*:state.*
Allerdings würde auch dieser auch auf Devices in denen TYPE1-4 in Raum oder Subtype vorkommen matchen. Sauberer wäre:
define mylog DbLog ./db.conf .*\.TYPE[1-4]\..*:state.*
Aber generell sollte Dein Regexp auch funktionieren, ich konnte das allerdings nicht ausprobieren
Hi!
Danke für deine Antwort!
Ja, keine Ahnung was mit meinem Regexp passiert. In der Datenbank kommt so zumindest nichts an.
Und innerhalb von FHEM kann ich das ja nicht testen, nachprüfen, oder?
Dein Vorschlag bzgl der Optimierung wäre zwar richtig, aber TYPE1, TYPE2, ... gibt es so durchnummeriert nicht.
Dabei handelt es sich halt um "Helligkeit", "Temp", usw.
Wenn du den Link zu regexp101.com (https://regex101.com/r/r42BOG/1) folgst, kannst du meinen RegEx und Testnamen finden.
Wie gesagt: Da passt eigentlich der Ausdruck! Daher verstehe ich nicht, warum er nicht funktioniert! :-(
Grüße
NehCoy
Ach!- Verdammte Axt!
Das Problem befand sich wiedereinmal zwischen Tastatur und Stuhllehne!
Warum auch immer habe ich einen Schreibfehler und bei der RegEx "status", anstatt "state" geschrieben.
Habe mich zu sehr auf den RegExp für den Gerätenamen fokusiert, dass mir das partout nicht aufgefallen ist!
Geht nun! - Mit meinem RegExp. ;-)
Dennoch vielen Dank für deine/eure Hilfe!
Grüße
NehCoy