Frage zu dblogexclude - gezielt Werte loggen?

Begonnen von devil77, 06 November 2014, 21:24:32

Vorheriges Thema - Nächstes Thema

devil77

Ich bin dabei auf dblog umzusteigen und kämpfe noch mit Anfangsproblemen. In der defintion zu dblog habe ich festgelegt das erstmal alles geloogt werden soll. Ich möchte dann in jedem Device direkt festlegen was gelogt werden soll und was nicht.
Da fängt mein Problem schon an.
Mit folgenden Code schliesse ich alle readings eines devices von dblog aus, klappt auch ohne Probleme.
attr xxxxx dblogexclude .*
Was ich nicht schaffe oder wahrscheinlich nicht verstanden habe ist alle readings von dblog auszuschliessen und nur bestimmte definieren. Also quasi
attr xxxx dblogexclude .*,state:300
Damit will ich alles ausschliessen und nur state  nach 300 Sekunden logen wenn es sich geändert hat.
Aber mit dieser Zeile wird gar nichts vom device gelogt. Habe ich da einen Denkfehler oder funktioniert das Ganze nicht wie ich es mir wünsche?

marvin78

Wenn du nur per DBLog Exclude entscheiden möchtest, welche Werte geloggt werden und welche nicht, dann musst du alle nicht gewünschten Werte aussschließen. In deinem Fall würde das je nach Aktor (hier Homematic Schaltaktor) dann so ähnlich aussehen wie:

attr xxxx dblogexclude level,pct,deviceMsg,timedOn,trigLast,trig_.*,state:300

Wenn du .* als Regex einbaust, wird, wie du festgestellt hast, nichts geloggt. Man könnte auch noch einen RegEx in Betracht ziehen, der alles ausschließt außer ein gewisses Reading. Dazu solltest du dich mit Regex beschäftigen.

Einfacher wäre es, die zu loggenden Daten direkt in der DBLog Definition per RegEx zu definieren und dann nur noch individuell über DBLogExclude auszufiltern.

devil77

Danke für die Antwort, das hatte ich mir schon fast gedacht und angefangen Werte händisch in jedes Device einzutragen.
Jetzt kommt bestimmt ne blöde Frage aber wenn ich die DBlog definition mit einem besteimmten RegEx erstelle dann kann ich doch nicht ohne weiteres die RegEx nachträglich ändern. Oder bin ich schief gewickelt? Bisher habe ich dann immer die Definition gelöscht und mit geändertem RegEx neu angelegt. Da erschien es mir einfacher alles zu loggen
und einfach für jedes Device zu entscheiden was ich will und was nicht.

marvin78

Wenn deine Devices wohlüberlegte Namen (NAME) haben, dann kann man sich für ein DBLog schon was überlegen, das man nur in Ausnahmefällen ändern muss. Die Readings in den Devices sind ja auch immer die gleichen. Was du mit neu anlegen meinst, weiß ich nicht, denn DBlog lässt sich prima im Frontend ändern.

devil77

Da ich ja nicht weiß was noch für Device kommen kann ich nicht alles im Vorfeld definieren.
Deswegen habe ich DBlog so erstellt.
define myDbLog DbLog /opt/fhem/db.conf .*:.*
Hätte ich hier z. Bsp. statt dessen
define myDbLog DbLog /opt/fhem/db.conf .*:(temperature|valveposition|humidity).*
eingegeben, dann könnte ich das doch nicht später anpassen. Oder habe ich hier einen Denkfehler.
Denn wie kann ich diese Definition im nachhinein ändern?

marvin78

#5
Du findest das Device "myDbLog" in deiner FHEM Oberfläche. Das kannst du anklicken und im Device selbst kannst du auf  unter "Internals" auf "DEF" klicken und im Editor kannst du die Definition ändern, falls du ein Device mit einem neuen Reading loggen möchtest. Ab sofort wird dann nach der neuen Definition geloggt.

Ich würde an deiner Stelle auch noch mit dem RegEx vor dem Doppelpunkt spielen (wenn du "schöne" Device-Namen hast). Dann loggt DBLog noch weniger überflüssiges.

devil77

Ich habe mir immer einen abgebrochen um das zu ändern. Das man darauf klicken kann zum ändern ist total an mir vorbei gegangen.
Vielen Dank für den Tip!!

marvin78

Dann empfehle ich, das bei all deinen Änderungen so zu machen. An besten vergisst du, dass es eine fhem.cfg gibt. Du kannst nämlich alles im Frontend machen.

devil77

Cfg habe ich keine mehr. Im Zuge der Umstellung auf dblog habe ich auch auf configdb umgestellt.