Hauptmenü

DBLog und Regex DEF

Begonnen von Jewe, 03 Oktober 2018, 13:31:39

Vorheriges Thema - Nächstes Thema

Jewe

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

Jewe

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 ?

DS_Starter

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
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Jewe

Hallo Heiko,

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

Jens

DS_Starter

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
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter