FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Jewe am 03 Oktober 2018, 13:31:39

Titel: DBLog und Regex DEF
Beitrag von: Jewe am 03 Oktober 2018, 13:31:39
Hallo,

also ich habe so meine schwierigkeiten mit den Regex und mache mache starte nochmal ein Thema dazu. Sorry.

Die DEF dazu muss ja dieses format haben: <devspec>:<Reading> bzw. (Device1|Device2):(Reading1|Reading2)

Seither habe ich die DEF so gemacht:
/opt/fhem/db.conf (.*:temperature.*|.*:measured-temp.*|.*:desired-temp.*|.*:actuator.*|.*:valveposition.*|.*:humidity.*|.*:pressure.*|WEB_Speedtest:.*|A2_I01_21_Zisterne_Fuellstand:.*|Regensensor:state.*|A2_OC3_Zirkulationspumpe:state.*|Zirkulationspumpe:state.*|Zirkulationspumpe:threshold_m.*|A2_OC8_Bypass_Oeffnen:state.*|A2_I06_26_Differenzdruck_DS01_Alarm:state.*|kwl_stufe:stata.*|RM_.*:state.*|Alarm_Rauchmelder:state.*)

Was irgendwie auch funktioniert. Wenn ich das nun in das eichtige format bringe, müsste es so aussehen:
/opt/fhem/db.conf (.*|.*|.*|.*|.*|.*|.*|WEB_Speedtest|A2_I01_21_Zisterne_Fuellstand|Regensensor|A2_OC3_Zirkulationspumpe|Zirkulationspumpe|Zirkulationspumpe|A2_OC8_Bypass_Oeffnen|A2_I06_26_Differenzdruck_DS01_Alarm|kwl_stufe|RM_.*|Alarm_Rauchmelder):
(temperature.*|measured-temp.*|desired-temp.*|actuator.*|valveposition.*|humidity.*|pressure.*|.*|.*|state|state|state|threshold_m|state|state|state|state|state).*


Habe ich das so richitg verstanden ? Das macht die lesbarkeit oder erweiterbatkeit nicht besser.

Wie macht Ihr das ?

Jens
Titel: Antw:DBLog und Regex DEF
Beitrag von: Jewe am 04 Oktober 2018, 22:11:00
Heute habe ich es nun ao einmal probiert, aber nun logge ich so ziemlich alles in der einer DB. Werde erstmal wieder die alte DEF
verwenden und eine Datensicherung einspielen.
Ich habe 2 Datenbanken. Mit exlunde und include kann ich nicht arbeiten, da ich dann ja in beiden DB´s das selbe stehen habe.
ggf. müsste ich das Konzept nochmals überdenken.

Nochmal die Frage, wie macht Ihr das ?
Titel: Antw:DBLog und Regex DEF
Beitrag von: DS_Starter am 04 Oktober 2018, 23:03:17
Hallo Jens,

im Prinzip mache ich es bei mir so, dass ich bei jeder DB im DEF die Devices angebe die geloggt werden sollen. Readings werden alle im DEF eingeschlossen.
Damit nur die Readings in der DB landen die ich dort will, setze ich event-on-change(update)-reading in den Quelldevices entsprechend ein.

Also etwa so:


(SMA_Energymeter|STP_5000|Sonnenstrom_Relative|Sonnenstrom|MyWetter|Dum.Energy|Rep.Fhem.Size|eg.az.fridge_Pwr|eg.flur.server_Pwr|withings.*:(?!.*done).*


Du kannst auch das Attribut excludeDevs einsetzen um bei jeder DB die Devices global ausschließen die jeweils die andere DB loggen soll. In diesem Attribut kannst du mit devspec arbeiten, was es sehr übersichtlich und mächtig macht.
Z.B.:


global,Log.*,
TYPE=DbLog,
TYPE=SSCam


Grüße
Heiko
Titel: Antw:DBLog und Regex DEF
Beitrag von: Jewe am 04 Oktober 2018, 23:16:55
Hallo Heiko,

Danke für Deine Antwort.
Was heisst den  (?!.*done).*   ??

Jens
Titel: Antw:DBLog und Regex DEF
Beitrag von: DS_Starter am 05 Oktober 2018, 08:03:17
ZitatWas heisst den  (?!.*done).*   ??
Der Konstrukt "(?!.*done).*" bedeutet, dass alle Readings außer ".*done.*" berücksichtigt/geloggt werden.
Das benutze ich immer. Ich habe wie geschrieben im Prinzip überall event-on-change(update)-reading eingesetzt. Es gibt aber Fälle in denen ich dennoch
dieses Reading (in dem Fall "done") nicht loggen will obwohl ich den Event zu Steuerungszwecken benötige.
Wenn du im Netz nach "Positive and Negative Lookahead" suchst, findest du Infos zu diesem Regex.

LG
Heiko