Hallo,
ich will auf logdb umstellen.
Ich habe folgendes eingestellt:
attr global userattr DbLogInclude ...
define logdb DbLog ./db.conf .*:.*
attr logdb DbLogSelectionMode include
attr logdb room Datenbank
define KS300_Wetter KS300 1234 295 1.0
attr KS300_Wetter event-on-change-reading state
attr KS300_Wetter room Wetterstation
attr KS300_Wetter DbLogInclude .*
leider werden keine Werte in die Datenbank geschrieben.
Wenn ich auf DbLogExclude umstelle geht's, allerdings
werden dann alle Daten mitgeschrieben!
Wer kann mir weiterhelfen
Danke bereits im Voraus
Lass das Attribut bei Deinem KS300 komplett weg. Die regexp .* ist ohnehin Unfug.
Hast Du denn geprüft, ob sich überhaupt irgendwelche Werte verändert haben - also ob events erzeugt werden? Mit Deinem event-on-change schränkst Du das ja erheblich ein. Ohne Event = kein Logeintrag.
Hi,
Events werden erzeugt, da auch Daten ins Filelog gehen:
2015-09-26_16:28:52 KS300_Wetter T: 17.1 H: 57 W: 4.4 R: 632.5 IR: no WI: 1 WA: 5.3
2015-09-26_16:31:25 KS300_Wetter T: 17.2 H: 57 W: 3.6 R: 632.5 IR: no WI: 1 WA: 5.3
2015-09-26_16:36:30 KS300_Wetter T: 17.2 H: 57 W: 3.3 R: 632.5 IR: no WI: 1 WA: 5.2
2015-09-26_16:44:07 KS300_Wetter T: 17.2 H: 57 W: 3.8 R: 632.5 IR: no WI: 1 WA: 5.2
Attribut bei KS300 weglassen (regexp .* ist ohnehin Unfug),
verstehe ich nicht wie soll ich DbLog mitteilen welche Daten
geschrieben werden sollen?
in der Doku steht:
Wenn DbLog genutzt wird, wird in alle Devices das Attribut DbLogInclude propagiert. DbLogInclude funktioniert im Endeffekt genau wie DbLogExclude, ausser dass eben readings mit diesen RegExp in das Logging eingeschlossen werden koennen, statt ausgeschlossen. Siehe dazu auch das DbLog-Device-Spezifische Attribut DbLogSelectionMode, das beeinflußt wie DbLogExclude und DbLogInclude ausgewertet werden.
Beispiele attr MyDevice1 DbLogInclude .* attr MyDevice2 DbLogInclude state,(floorplantext|MyUserReading):300,battery:3600
Zitat von: Noname am 26 September 2015, 17:05:21
weglassen verstehe ich nicht
Was ist am Wort "weglassen" unverständlich?
Hi,
ich erwartete eigentlich einen qualifizierten
fachlichen Rat.
Schade!
Einen fachlichen Rat hatte ich Dir gegeben,
ZitatLass das Attribut bei Deinem KS300 komplett weg.
dieser wird von Dir aber in Frage gestellt.
Von den ca. 250 Devices in meiner fhem Installation hat kein einziges das Attribut DbLogInclude, und trotzdem werden genau die ausgewählten Werte in meine Datenbank geloggt, die ich haben möchte.
ok,
vielleicht haben wir nicht vom gleichen gesprochen.
Also ich möchte von all meine Geräten, nur eine kleine
Auswahl von Geräten und davon nur ausgewählte Werte
in die DB logen.
deswegen dbloginclude.
kannst du mal die relevanten teile deiner config posten?
Ich habe schon verstanden, was Du machen willst.
Wunschgemäß hier der Auszug aus meiner Konfigurationsdatenbank.
define fhemDbLog DbLog ./FHEM/logDB.cfg (.*:lumi.*|.*:batVoltage.*|.*:measured-temp.*|.*:desired.*|.*:actuator.*|.*:valve.*|.*:Bb]attery:.*|.*:temperature.*|.*:humidity.*|.*:dewpoint.*|.*:pressure.*|Melder.*:.*|RM_.*:.*|sunDummy.*:.*|out_Regen.*:.*|.*_SenPwr.*|gds.*)
Danke für die Info,
allerdings hilft mir das nicht weiter.
Bei dir werden z.B. alle Temperaturen aller Geräte in die DB geschrieben.
Ich möchte aber die Auswahl der Geräte selber treffen. Die Angabe über
einen String ist nicht gerade praktikabel. Deswegen sollte die
Auswahl besser im Gerät über atrr .. getroffen werden, so wie bei den Filelogs.
Schau Dir doch die regexp einfach mal genau an, dann wirst Du feststellen, dass dort sowohl einzelne readings aller Geräte geloggt werden (z.B. temperature) als auch alle readings eines bestimmten Gerätes (z.B. out_Regen). Das Ganze kann man auch beliebig kombinieren.
Die Angabe der gewünschten Geräte in der regexp des DEF hat entscheidende Vorteile, beispielsweise dass man die gesamte Auswahl an einer einzelnen Stelle sehen (und bei Bedarf anpassen) kann.
Wenn man nur 5 Devices hat, mag Dein Lösungsansatz vielleicht umsetzbar sein. Aber bei einer größeren Installation suchst Du Dir später einen Wolf.
Zitat von: betateilchen am 26 September 2015, 20:34:41
define fhemDbLog DbLog ./FHEM/logDB.cfg (.*:lumi.*|.*:batVoltage.*|.*:measured-temp.*|.*:desired.*|.*:actuator.*|.*:valve.*|.*:Bb]attery:.*|.*:temperature.*|.*:humidity.*|.*:dewpoint.*|.*:pressure.*|Melder.*:.*|RM_.*:.*|sunDummy.*:.*|out_Regen.*:.*|.*_SenPwr.*|gds.*)
Danke für den Tipp - ich habe meine Config gerade um 77 Zeilen geschrumpft 8)
Die Möglichkeit gab es aber schon immer. Ich habe von Anfang an nicht verstanden, wofür man ein DbLogInclude benötigt. Das ist viel zu viel Aufwand.
Zitat von: marvin78 am 27 September 2015, 10:48:55
Ich habe von Anfang an nicht verstanden, wofür man ein DbLogInclude benötigt.
Ich auch nicht.
Ich hab am Anfang alles geloggt...
...und als ich dann gemerkt hab, dass das doch recht schnell recht viel wird hab ich nicht mehr dran gedacht, dass man das ja auch so filtern kann und hab halt nach und nach Excludes und Includes gesetzt :-\
Hallo,
ich glaube, Noname ist noch nicht weitergeholfen worden. Dann versuch ich es mal:
Setze das "DbLogSelectionMode" Attr auf "Exclude/Include". Dann musst Du das DbLogExclude Attribut des Gerätes auf ".*" setzen. Damit wird erstmal nichts geloggt. Das funktioniert bei mir beim Anlegen eines neuen Gerätes automatisch durch ein notify (habe ich in irgendeinem Artikel gelesen).
Nun kannst Du durch setzen des DbLogInclude Attributs einzelne Werte Deiner Wahl loggen lassen. Du bist dann sehr flexibel. Möglicherweise gehts auch anders, aber so funktionierts bei mir prima.
Gruß
Sven
das ist aber erheblich mehr Aufwand als meine Lösung 8)
Jo, das stimmt natürlich. Aber wie ich das verstanden habe, sollen auch bei gleichen Geräten unterschiedliche readings in die Datenbank. Und das ist mit meiner Lösung ganz gut zu machen. Habe aber auch noch nicht so viele Geräte verbaut, so dass sich der Aufwand in Grenzen hält. Sobald ich mehr Heizungsthermostate bei mir integriere, ist Deine Methode natürlich deutlich unaufwändiger.
Aber gut, mein Ziel war es, eine andere Möglichkeit darzustellen, die ihm hilft sein Problem zu lösen.
Bin gespannt.
Gruß
Man sollte nachhaltig denken. Und dann ist DbLogInclude, meiner Ansicht nach, eine schlechte Lösung. Mit einem gut überlegten Regex in der DbLog Definition muss ich nichts weiter machen, egal, wieviele Devices ist noch anlege (es sei denn es gibt ein neuartiges Device oder meine Log-Vorlieben ändern sich, dann müsste die DbLog Definition angepasst werden).
Hi,
ich habs momentan so gelöst:
define logdb DbLog ./db.conf (.*:temperature.*|.*:humidity.*|.*:wind.*|.*:wind_average.*|.*:rain.*|.*:israining.*|.*:dbvalue.*)
Bei meiner KS300 verwende ich ein angepasstes Modul, es erzeugt zusätzlich eine Reading wind_average (Mittelwertbildung)
Die Temperatur und Luftfeuchtigkeitsmessungen sollen alle geloggt werden, für meine FS20 Spezialanwendungen
habe ich mein Modul FS20Value ergänzt. Es kann ein Attribut angegeben werden, dass ein passendes Event dbvalue erzeugt, es übergibt dann den Wert mit Einheit.
define KS300_Einstrahlung FS20Value 1234 02
attr KS300_Einstrahlung IODev CUL
attr KS300_Einstrahlung ValueFactor 2.02
attr KS300_Einstrahlung ValueMax 1000
attr KS300_Einstrahlung ValueMin 0
attr KS300_Einstrahlung ValueUnit W/m²
attr KS300_Einstrahlung event-on-change-reading state
attr KS300_Einstrahlung ValueRaw dbvalue
attr KS300_Einstrahlung room Wetterstation
Aber Trotzdem Danke für eure Mühen.
.*:wind.*|.*:wind_average.*|
Nur mal so: .*:wind.* schließt .*:wind_average.* automatisch mit ein ;)
Hi betateilchen,
stimmt, kann ich rauslöschen.
Danke!