Hauptmenü

dbLog

Begonnen von ernst1024, 15 Februar 2016, 02:49:23

Vorheriges Thema - Nächstes Thema

ernst1024

Morgen,

habe im Forum gesucht aber nix gefunden. Ich habe jetzt auch auf dbLog, sqlite umgestellt. Vorgegangen nach Anleitung in fhem-wiki.

Was mich ein wenig stört ist dass das Feld 'VALUE' als varchar angelegt wird. Das macht natürlich Probleme bei der Sortierung wenn man Temperaturwerte auf- oder asteigend sortiert. Daher meine Frage: könnte man dieses Feld auch als float anlegen, oder haut's dann alles durcheinander? Ich könnte es ja mal probieren, aber da jetzt erstmal soweit alles läuft dachte ich ich frag mal lieber...

hier das besagte create:

CREATE TABLE 'history' (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32));

Gruß Ernst

chris1284

es gibt in fhem nicht nur numerische values von readings die gespeichert werden wollen, somit mach die festlegung von value auf float generell keinen sinn.
wenn du natürlich eine extra log-db nur für temperaturwerte hast kannst du das bei dir auf float ändern

Benni

Zitat von: chris1284 am 15 Februar 2016, 06:27:18
kannst du das bei dir auf float ändern

Ich würde es trotzdem nicht tun.
Bis in ein paar Wochen hast du das vergessen und irgendwann treten dann "ganz plötzlich" merkwürdige Fehler auf.

ernst1024

#3
ok Danke.

Bin mir sicher dass ich nur numerische Daten logen werde, also werde ich es mal versuchen,sobald ich sicher raus habe wie ich wirklich nur die Daten logge die ich möchte.

Aber was anderes.  dbLog ist nicht sonderlich dokumentiert finde ich. Bei set deleteOldDays nehme ich an es erwartet Anzahl der zu löschenden Tage als Parameter, aber was macht/erwartet reduceLog?

Edit: hab's gefunden, alles klar
Gruß Ernst

chris1284

#4
Zitat von: ernst1024 am 15 Februar 2016, 13:26:25
sobald ich sicher raus habe wie ich wirklich nur die Daten logge die ich möchte.

recht einfach, hier mal mein beispiel:

ein notify welches bei neuen devices immer das logging in die db abstellt
define nft_globalDefined global:DEFINED.* attr $EVTPART1 DbLogExclude .*

dann gehe ich zu den devices die ich loggen will , entferne das attribut und arbeite mit DbLogInclude / DbLogExclude um redings ins logging aufzunehmen.
wenn du zb nur temprature mit rein nimmst solllte nur die temp gelogged werden
wenn du dann noch event-min-interval und event-on-change-reading rein nimmst kannst du auch die masse der einträge beinflussen

marvin78

Und noch viel einfacher ist das ganze mit klarer Benennung der Devices und einer gut durchdachten Regex in der DbLog Definition.

ernst1024

mi meinen devices habe ich da auch keine Probleme. Das sind 3 Temeperaturfühler und da habe ich gesorgt dass die readings 'temperature' heissen und im folgenden auch gelogt werden. Probleme habe ich noch mit den readings aus dem weather module. Hier möchte ich auch nur temperature, Luftdruck, Luftfeuchte und Wind loggen. Das ist kein Problem bei temperature und humidity da diese jeweils nur einmal vorkommen. Wind kommt zwar ein paarmal vor lässt sich aber eingrenzen.

Bleibt als einziges Problem  wie isoliere ich 'pressure' aus den readings: pressure, pressure_trend, pressure_trend_sym, pressure_trend_txt? Irgendwas mit regexp schätze ich mal aber noch keinen Plan wie ..... Evtl auch über den Umweg mit readingProxy und dass dann loggen......

define logdb DbLog ./db.conf .*:(temperature|pressure|humidity|wind_speed|wind_chill).*
Gruß Ernst