Dblog zu große Datenmenge

Begonnen von Henry, 29 August 2013, 09:23:33

Vorheriges Thema - Nächstes Thema

Henry

Guten Morgen
Seit gestern habe ich DBLog am laufen und habe heute morgen in die Datenbank geschaut und dabei festgestellt das ich über das doppelte an Daten habe was sonst durch filelog gespeichert wird. eingebunden habe ich dblog über
## DBLog
define myDbLog DbLog /opt/fhem/db.conf .*:.*

jetzt werden alle Daten zu jedem Device in die Datenbank geschrieben wie ich sie analog mit
Telenet inform on auch sehen kann.
das sind bei einem S300TH sind das 3
2013-08-29 09:17:47 CUL_WS CUL_WS_2 T: 21.8 H: 54.5
2013-08-29 09:17:47 CUL_WS CUL_WS_2 temperature: 21.8
2013-08-29 09:17:47 CUL_WS CUL_WS_2 humidity: 54.5

und bei einem TX3 2 Datensätze
2013-08-29 09:20:18 CUL_TX CUL_TX_44 T: 16.1 H: 70.0
2013-08-29 09:20:18 CUL_TX CUL_TX_44 humidity: 70.0

gebraucht wird ja jeweils nur der erste Datensatz
in Filelog wurde auch immer nur dieser gespeichert und die anderen ignoriert
wie bekomme ich das denn bei Dblog hin??
DebianServer als FHEM-Plattform
FS20 über CUL868
Intertechno über Signalduino
Philips HUE

Puschel74

Hallo,

dieses Regexp
Zitat.*:.*
matcht ja auch auf alles.

Zitatwie bekomme ich das denn bei Dblog hin??

Das regexp entsprechend anpassen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Henry

Danke für deine Antwort
define myDbLog DbLog /opt/fhem/db.conf .*:T:.*
damit schreibt dblog nur noch die relevanten Temperatureinträge  in die Datenbank aber eben nur noch die Temperatur Daten
Dadurch werden die Daten der FHT8V nicht mehr mit geloggt also wieder nicht alles in einer Datenbank.
Muss ich jetzt für die anderen Device eine neue Datenbank erstellen oder wie schaffe ich es das die anderen Daten auch noch in die bestehende Datenbank bekomme.
DebianServer als FHEM-Plattform
FS20 über CUL868
Intertechno über Signalduino
Philips HUE

Puschel74

Hallo,

Zitataber eben nur noch die Temperatur Daten

Logisch. T matcht eben nur auf Temperatur und auf sonst nichts - auch nicht temperatur da T != t (meine ich zumindest).

ZitatMuss ich jetzt für die anderen Device eine neue Datenbank erstellen

Nein das wäre ja schöner overkill ;-)

Du kannst die regexp auch kombinieren (hoffe ich zumindest).
Versuch mal
define myDbLog DbLog /opt/fhem/db.conf .*:(T|t):.*
Dann sollte das temperature vom FHT geloggt werden.

Ich verwende als regexp .*:.* da bei mir alles auf eine 500 GB-HDD am RasPi loggt und da ist es mir mehr oder weniger egal welche Datenmenge anfällt.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Henry

So in der Richtung habe ich mir das auch gedacht. Ich habe eine 1TB Platte drin und wenn ich alles loggen lasse komme ich auf ungefähr 3 MB pro Tag also kann man mit ca 100 MB im Monat rechnen.
1. Der dumme Nebeneffekt beim begrenzen ist, das in der current tabelle auch nur die Temperatur Daten geschrieben werden. Aber gerade das hatte mir gefallen das ich in diesr tabelle von allen Geräten den momentanen Zustand ablesen kann.
2. möchte ich die Stellantriebe (FHT8V) in % mit geloggt haben und das hatte ich bis jetzt mit filelog nicht hin bekommen aber ohne Begrenzung werden schön in die Datenbank geschrieben.

Wäre wohl besser eine Lösung die Monatlich die history tabelle sichert und auf Null setzt sonst würden ja im Jahr über 1GB Daten anfallen oder habe ich hier einen Denkfehler?

mich würde mal interessieren wie es andere User so machen?  

Ach ja eine Frage habe ich noch
Zitat.*:.*
meine FHT8V sind als Device "stellantrieb.01" bis "stellantrieb.06" wie kann ich denn die zusammen fassen links vom :* mit ich die %zahl geloogt bekomme
DebianServer als FHEM-Plattform
FS20 über CUL868
Intertechno über Signalduino
Philips HUE

Puschel74

Hallo,

Zitatsonst würden ja im Jahr über 1GB Daten anfallen

Ich hab jetzt nicht nachgerechnet aber das würde bei meiner 500 GB-Platte heissen das ich 500 Jahre drauf loggen kann ^^
So alt will ich dann doch nicht werden.
Ja, die Platte hängt erstmal nur am RasPi dran und auf der wird zur Zeit sonst nichts gespeichert ausser das DBLog drauf loggt.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Henry

ich hab jetzt nicht nachgerechnet aber das würde bei meiner 500 GB-Platte heissen das ich 500 Jahre drauf loggen kann
denke auch an deine Nachwelt :-)
ich denke aber mal wenn man einen Temperatur Plot gaben möchte könnte das bei 1GB größe lange dauern oder keine Ahnung --> in dieser Richtung liegen ehr meine bedenken.
ZitatAch ja eine Frage habe ich noch
Zitat:
.*:.*
meine FHT8V sind als Device "stellantrieb.01" bis "stellantrieb.06" wie kann ich denn die zusammen fassen links vom :* mit ich die %zahl geloogt bekomme
DebianServer als FHEM-Plattform
FS20 über CUL868
Intertechno über Signalduino
Philips HUE

Puschel74

Hallo,

bzgl. der Anzeige der Plots mach ich mir weniger Sorgen.
Einen Jahresplot egal welches Device lass ich mir eh nicht mit den 5-Minuten-Werten anzeigen.
Dafür gehen grad noch so die Tageshöchst- und -tiefstwerte (und das sind schon 365 Werte in einem Plot).
Für Wochen- oder Monatsplot nehme ich auch nur noch die Tageshöchst- und -tiefstwerte.
Alles andere ist dann nur noch ein roter bzw. blauer Balken und da kann ich eh nichts mehr erkennen.

Wegen deiner Stellantriebe:
Ich vermute mal du willst die Ventilstellung loggen.

Dann solltest du sowas noch dazu nehmen:
define myDbLog DbLog /opt/fhem/db.conf .*:(T|t|actuator):.*

Und für Luftfeuchte evtl. noch:
define myDbLog DbLog /opt/fhem/db.conf .*:(T|t|actuator|humidity):.*


Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Henry

dann solltest du sowas noch dazu nehmen:
Zitatdefine myDbLog DbLog /opt/fhem/db.conf .*:(T|t|actuator):.*
das klappt leider nicht :-(
die valve Werte werden nicht mit geloggt, wäre ja auch zu einfach gewesen
übrings wenn .*:T:.* begrenze werden Temperatur und Luftfeuchte geloggt "T: 23.2  H: 49.7"<-- und so in die Datenbank geschrieben.
DebianServer als FHEM-Plattform
FS20 über CUL868
Intertechno über Signalduino
Philips HUE

Henry

so habe mal den FHT80B Termostat und Steuergerät in Betrieb genommen und bei dem funktioniert das .*:(T|t|actuator):.* da wird der Prozentsatz dem sich die Stellantriebe (FHT8V) bewegen sollen mit gelogt.
Aber die Stellantriebe (FHT8V) selber antworte ja zurück wie weit sie geöffnet haben und das möchte ich gerne geloggt haben. Hier mal die Einträge vom Event Monitor:
2013-08-31 17:30:33 FHT FHT_1a16 actuator: 0%<-- funktioniert vom FHT80B
2013-08-31_17:37:13 FHT_1a16 temperature: 24.2<-- aber seine Temperatur wird trotz T|t nicht mit geloggt
2013-08-31 17:31:36 FHT8V stellantrieb.03 valve 0<-- wird nicht geloggt vom FHT8V
die valve Werte werden nicht mit geloggt, das sind aber die Ist Werte von den Stellantrieben
DebianServer als FHEM-Plattform
FS20 über CUL868
Intertechno über Signalduino
Philips HUE

Puschel74

Hallo,

Zitatdie valve Werte werden nicht mit geloggt,

Natürlich nicht.
Das regexp lautet ja .*:(T|t|actuator):.* und da ist von
Zitatvalve
keine Rede.
Wenn du valve auch loggen willst musst du das nur ins regexp mit aufnehmen.
So wie übringes alles andere auch was du loggen willst.

Zitataber seine Temperatur wird trotz T|t nicht mit geloggt
Das wundert mich jetzt etwas.
Versuch mal
Zitattemperature
anstelle von
Zitatt

Zitatübrings wenn .*:T:.* begrenze werden Temperatur und Luftfeuchte geloggt "T: 23.2  H: 49.7"<-- und so in die Datenbank geschrieben.
Ich auch logisch da die Zeile mit T beginnt wird die gesamte Zeile geloggt.
.*: = von jedem beliebigem Device
T: = jede Zeile die mit T beginnt
.* = auf das x-beliebige Zeichen folgen werden in die Datenbank geschrieben.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Sailor

Zitat von: Puschel74 am 30 August 2013, 22:47:10
Hallo,

Ich hab jetzt nicht nachgerechnet aber das würde bei meiner 500 GB-Platte heissen das ich 500 Jahre drauf loggen kann ^^
So alt will ich dann doch nicht werden.
Ja, die Platte hängt erstmal nur am RasPi dran und auf der wird zur Zeit sonst nichts gespeichert ausser das DBLog drauf loggt.

Grüße

Hallo Puschel

Frage: Wie schaffst Du es, dass die externe Platte in den Stromsparmodus geht und damit die Lebensdauer nachhaltig vergrößert.
Hast Du einen Mechanismus/Routine am laufen, welche alle xMB die Daten erst auf die Festplatte schreibt oder läuft die ständig unter Vollast mit?

Gruß
    Sailor
******************************
Man wird immer besser...

justme1968

je nach platte verlängert es die lebensdauer wenn sie durch läuft statt immer wieder neu zu starten...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Puschel74

Hallo,

ZitatWie schaffst Du es, dass die externe Platte in den Stromsparmodus geht
Garnicht - ich lass die einfach laufen und laufen und laufen ...

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

roedert

#14
Ich nutze DbLog jetzt schon ziemlich lange - eine mysql-Datenbank ist für mich die deutlich sinnvollere und flexiblere Lösung zur Speicherung solcher Daten.
Außerdem habe ich noch ein unabhängiges "Anzeigefrontend" in php auf dem Webserver laufen, welches seine Infos nur aus der Datenbank bekommt und sonst keine Verknüpfung zu FHEM hat.

Für die Definition vom DbLog gibt es 2 Ansätze:

a) in der DbLog-Definition alles einschliessen - also .*:.* ... und alles was man nicht möchte pro Device mit DbLogExclude ausschliessen.
Hat den Nachteil, dass man bei neuen Devices erstmal Einträge ins Log bekommt und man DbLogExclude für jedes Device nachträglich sauber pflegen muss.

b) DbLog nur für die benötigten Device und/oder Readings aktivieren.
So nutze ich es jetzt, da Variante a) zu viel Pflegeaufwand wurde und ich ständig unnützen Müll in der DB hatte.

Beide Varianten können problemlos ziemlich umfangreiche Definitionen haben ... zB.

attr xxxx DbLogExclude (C|R-(b|dayl|h|m|no|s|t|w)|R_P[123]_t|Reg|b|com|s|T|w).*

define DbLog DbLog ./myfiles/db.conf .*(Katzenklappe.Sensor|Thermostat_Climate|Fenster(|.L|.M|.R)|_Pwr|Heizung(|.L|.R)_Clima|Luefter|Kuehlschrank|Spuelmaschine|Gas7[02]|Strom(70|72|.EDV)|Helligkeit|[Tt]emperatur|Temp|Wetter|Twilight):(ValvePosition|window|consumption.*|controlMode|cooling|working|current|desired-temp|humidity|hum_diffAvg.*|inside|kWh_[tl].*|level|measured-temp|power|temperature|total|twilight).*


Wichtig ist es auch die Datenbank regelmäßig zu bereinigen - bei zB ein tägliches
set DbLog deleteOldDays 30

Besonders beim Anzeigen der Plots braucht eine große Datenbank schon ziemlich lang ... vor allem auf dem nicht so flotten Raspberry Pi, ich habe sie deswegen auf den Server (Mac Mini) verlegt.
Ansonsten wirklich versuchen die Datenbank möglichst klein zu halten.
Wenn man sein komplettes Leben protokollieren will, kann man auch "archivieren", d.h. ältere Datensätze in eine andere Tabelle bzw. Datenbank auslagern ... oder auch nur Daten löschen, von vor 30 Tagen brauche ich die gemessenen Temperaturen sicherlich nicht mehr im 5-Minuten-Takt, sondern nur noch stündlich.

Allein durch solche Maßnahmen lässt sich viel Platz und Performance gewinnen.   
Ein andere Möglichkeit zum Performancegewinn wäre vielleicht auch noch eine Verbesserte DB-definition - damit habe ich mich bisher aber noch nicht beschäftigt.
Standardmäßig ist die DBLog-Datenbank ja nur eine ziemlich primitive Tabellendefinition ohne jegliche Indizierung oder (Primär)schlüssel.