DBLog attribut DbLogSelectionMode exclude/include

Begonnen von Jewe, 16 Oktober 2017, 22:28:57

Vorheriges Thema - Nächstes Thema

Jewe

Hallo,

ich habe zwei DBLog Datenbanken, in denen ich wichtige und unwichtige Werte trennen möchte. Nun frage ich mich, wie das attribut DbLogSelectionMode exclude/include funktionieren soll ? Es wird ja keine Datenbank mit angegeben.
Kann ich das Attribut überhaupt verwenden ?

Jens

C0mmanda

??
Das Attribut setzt du doch im dbLog-Device...

Grtz

Jewe

In der Datenbank setzte ich attribut DbLogSelectionMode exclude/include.
und im device dann DbLogExclude oder DbLogInclude.
Welche Datenbank wird werden dann die Werte geschrieben, wenn ich das in beiden Datenbanken mache ?

C0mmanda

Das legt du im define der Datenbank per RegEx fest.

define logdb DbLog ./db.conf .*:.*

Loggt alles in die eine DB.

define logdb DbLog ./db.conf .*:temperature

Loggt alle temperature-Werte aller Devices in die eine DB.

define logdb DbLog ./db.conf Sensor1:.*

Loggt alle Werte von Sensor1 in die eine DB.

So kannst du das am Ende auf 2 DBs aufteilen.
Exclude/Include macht dann nochmal das Feintuning.

https://wiki.fhem.de/wiki/DbLog

Grtz

yellowpinky

Anscheinend hab ich in diesem Zusammenhang auch ein Verständnisproblem und komme nicht weiter.

Ich möchte das Reading "state" bei allen Devices loggen und bei ausgewählten Devices noch zusätzliche Readings. Leider schaffe ich nur das eine oder das Andere.

Meine Datenbankdefinitionen:
/opt/fhem/contrib/dblog/db.conf .*:(state).*
DbLogSelectionMode Exclude/Include


In meinen Devices habe ich dann die zusätzlichen Readings hinzu gefügt:
DbLogInclude Therme_Betriebsstunden_Hz,Therme_BrennerFlammesignal

In dem oben angeführten Fall wird jedoch nur der "state" aller Devices in die Datenbank geschrieben, nicht jedoch die Readings welche in DbLogInclude angeführt sind.

Wird DbLogSelectionMode Include gesetzt werden nur die Readings des DbLogInclude geloggt und kein "state" was ich lt. Doku auch so verstanden hätte

Frank_Huber

Zitat von: yellowpinky am 28 Dezember 2021, 12:57:44
Anscheinend hab ich in diesem Zusammenhang auch ein Verständnisproblem und komme nicht weiter.

Ich möchte das Reading "state" bei allen Devices loggen und bei ausgewählten Devices noch zusätzliche Readings. Leider schaffe ich nur das eine oder das Andere.

Meine Datenbankdefinitionen:
/opt/fhem/contrib/dblog/db.conf .*:(state).*
DbLogSelectionMode Exclude/Include


In meinen Devices habe ich dann die zusätzlichen Readings hinzu gefügt:
DbLogInclude Therme_Betriebsstunden_Hz,Therme_BrennerFlammesignal

In dem oben angeführten Fall wird jedoch nur der "state" aller Devices in die Datenbank geschrieben, nicht jedoch die Readings welche in DbLogInclude angeführt sind.

Wird DbLogSelectionMode Include gesetzt werden nur die Readings des DbLogInclude geloggt und kein "state" was ich lt. Doku auch so verstanden hätte

deine Datenbank loggt nur "state". da kannst mit dem Attribut im Gerät machen was Du willst...

Mein Standart:
in der DB habe ich alles drin. .*:.*
in jedem Gerät habe ich ein DbLogExclude .*
In den geräten wo ich etwas loggen will mache ich das über DbLogInclude.
SelectionMode Exclude/Include.

/Frank

yellowpinky

Das ist mir natürlich klar, aber ich möchte nicht alle Geräte nachziehen, wenn ich nur bei ein paar Devices mehr Readings loggen möchte.

Frank_Huber

Zitat von: yellowpinky am 28 Dezember 2021, 13:16:53
Das ist mir natürlich klar, aber ich möchte nicht alle Geräte nachziehen, wenn ich nur bei ein paar Devices mehr Readings loggen möchte.
wenn Du aber die oberste Ebene auf "state" limitiertst, dann kannst untergeordnet nichts weiteres dazu packen.
kannst ja auch keine Dose rote Gummibärchen kaufen und dich wundern dass keine grünen drin sind, oder? ;-)

ein attr .* DbLogExclude .* und attr .* DbLogInclude state richtet das global mit zwei Befehlen.

yellowpinky

Zitat von: Frank_Huber am 28 Dezember 2021, 13:30:20
wenn Du aber die oberste Ebene auf "state" limitiertst, dann kannst untergeordnet nichts weiteres dazu packen.
kannst ja auch keine Dose rote Gummibärchen kaufen und dich wundern dass keine grünen drin sind, oder? ;-)

ein attr .* DbLogExclude .* und attr .* DbLogInclude state richtet das global mit zwei Befehlen.

Danke Frank werde ich testen!

Ich steh nur auf der Leitung, denn bei..
DbLogSelectionMode Include werden ja auch alle Readings die im DbLogInclude enthalten sind geloggt, nur eben das "state" der obersten Ebene nicht. Anscheinend ist das DbLogInclude höher priorisiert als die DB Restriktion.

Frank_Huber

#9
Zitat von: yellowpinky am 28 Dezember 2021, 16:43:05
Ich steh nur auf der Leitung, denn bei..
DbLogSelectionMode Include werden ja auch alle Readings die im DbLogInclude enthalten sind geloggt, nur eben das "state" der obersten Ebene nicht. Anscheinend ist das DbLogInclude höher priorisiert als die DB Restriktion.
Das beantwortet die CRef:
ZitatDbLogSelectionMode

attr <device> DbLogSelectionMode [Exclude|Include|Exclude/Include]

Dieses fuer DbLog-Devices spezifische Attribut beeinflußt, wie die Device-spezifischen Attribute DbLogExclude und DbLogInclude (s.u.) ausgewertet werden.
Fehlt dieses Attribut, wird "Exclude" als Default angenommen.

Exclude: DbLog verhaelt sich wie bisher auch, alles was ueber die RegExp im DEF angegeben ist, wird geloggt, bis auf das, was ueber die RegExp in DbLogExclude ausgeschlossen wird.
Das Attribut DbLogInclude wird in diesem Fall nicht beruecksichtigt

Include: Es wird nur das geloggt was ueber die RegExp in DbLogInclude (im Quelldevice) eingeschlossen wird.
Das Attribut DbLogExclude wird in diesem Fall ebenso wenig beruecksichtigt wie die Regex im DEF. Auch der Devicename (des Quelldevice) geht in die Auswertung nicht mit ein.

Exclude/Include: Funktioniert im Wesentlichen wie "Exclude", nur das sowohl DbLogExclude als auch DbLogInclude geprueft werden. Readings die durch DbLogExclude zwar ausgeschlossen wurden, mit DbLogInclude aber wiederum eingeschlossen werden, werden somit dennoch geloggt.

yellowpinky

Zitat von: Frank_Huber am 28 Dezember 2021, 13:30:20
wenn Du aber die oberste Ebene auf "state" limitiertst, dann kannst untergeordnet nichts weiteres dazu packen.
kannst ja auch keine Dose rote Gummibärchen kaufen und dich wundern dass keine grünen drin sind, oder? ;-)

ein attr .* DbLogExclude .* und attr .* DbLogInclude state richtet das global mit zwei Befehlen.

Hab ich umgesetzt - funktioniert - LG Daniel