FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hackstall am 30 April 2018, 08:15:33

Titel: [Gelöst] DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz in DB)
Beitrag von: Hackstall am 30 April 2018, 08:15:33
Hallo ich bekomme jede Menge Daten und habe die Datenflut unterschätzt.

Nun möchte ich meine Datenflut einschränken.

Bisher kommen von einem Sensor bei Änderung so ca alle 30sec neue Daten die dann auch gespeichert werden.

a) Ich würde diese nun alle 5 min speichern wollen unabhängig ob der Wert sich zwischendrin geändert hat.
b) Ich möchte aber auch einen state alle 5 min speichern auch wenn dieser sich nur 2 mal am Tag ändert.

Gibt es da Möglichkeiten?

Vielen Dank für Eure Antworten

P.S.: Wie gesagt ich habe schon mit den Attributen mein Glück versucht aber bin gescheitert:

attr Plug_Ku_HdyLadeStation DbLogInclude current,energy,power,voltage,state
attr Plug_Ku_HdyLadeStation event-on-change-reading state,current,power,voltage
attr Plug_Ku_HdyLadeStation event-min-interval state:600,current:600,power:600,voltage:600


Der Code Auszug bring weiterhin folgende Einträge.

2018-04-30 04:55:11 Plug_Ku_HdyLadeStation ZWAVE power:  0 W previous: 0 delta_time: 301 s power 0 W previous: 0 delta_time: 301 s
2018-04-30 04:55:12 Plug_Ku_HdyLadeStation ZWAVE voltage:  237.98 V previous: 237.97 delta_time: 301 s voltage 237.98 V previous: 237.97 delta_time: 3
2018-04-30 04:55:13 Plug_Ku_HdyLadeStation ZWAVE current:  0 A previous: 0 delta_time: 301 s current 0 A previous: 0 delta_time: 301 s
2018-04-30 05:00:00 Plug_Ku_HdyLadeStation ZWAVE state: on state on
2018-04-30 05:00:06 Plug_Ku_HdyLadeStation ZWAVE power:  11.14 W previous: 0 delta_time: 296 s power 11.14 W previous: 0 delta_time: 296 s
2018-04-30 05:00:07 Plug_Ku_HdyLadeStation ZWAVE voltage:  237.91 V previous: 237.98 delta_time: 296 s voltage 237.91 V previous: 237.98 delta_time: 2
2018-04-30 05:00:08 Plug_Ku_HdyLadeStation ZWAVE current:  0.1 A previous: 0 delta_time: 296 s current 0.1 A previous: 0 delta_time: 296 s
2018-04-30 05:00:15 Plug_Ku_HdyLadeStation ZWAVE power:  14.84 W previous: 11.14 delta_time: 9 s power 14.84 W previous: 11.14 delta_time: 9
2018-04-30 05:00:16 Plug_Ku_HdyLadeStation ZWAVE voltage:  238.01 V previous: 237.91 delta_time: 9 s voltage 238.01 V previous: 237.91 delta_time: 9
2018-04-30 05:00:17 Plug_Ku_HdyLadeStation ZWAVE current:  0.12 A previous: 0.1 delta_time: 9 s current 0.12 A previous: 0.1 delta_time: 9 s
2018-04-30 05:00:22 Plug_Ku_HdyLadeStation ZWAVE power:  12.53 W previous: 14.84 delta_time: 7 s power 12.53 W previous: 14.84 delta_time: 7
2018-04-30 05:00:23 Plug_Ku_HdyLadeStation ZWAVE voltage:  237.84 V previous: 238.01 delta_time: 7 s voltage 237.84 V previous: 238.01 delta_time: 7
2018-04-30 05:00:24 Plug_Ku_HdyLadeStation ZWAVE current:  0.11 A previous: 0.12 delta_time: 7 s current 0.11 A previous: 0.12 delta_time: 7 s
2018-04-30 05:00:30 Plug_Ku_HdyLadeStation ZWAVE power:  10.87 W previous: 12.53 delta_time: 9 s power 10.87 W previous: 12.53 delta_time: 9
2018-04-30 05:00:31 Plug_Ku_HdyLadeStation ZWAVE voltage:  237.83 V previous: 237.84 delta_time: 9 s voltage 237.83 V previous: 237.84 delta_time: 9
2018-04-30 05:00:32 Plug_Ku_HdyLadeStation ZWAVE current:  0.1 A previous: 0.11 delta_time: 9 s current 0.1 A previous: 0.11 delta_time: 9 s
2018-04-30 05:00:43 Plug_Ku_HdyLadeStation ZWAVE power:  10.69 W previous: 10.87 delta_time: 13 s power 10.69 W previous: 10.87 delta_time: 13


Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: thgorjup am 30 April 2018, 09:12:55
Du hast das eigentlich schon richtig mit "event-min-interval" gemacht.
Ich mache das mit meinen Technoline TX-29 auch und es klappt einwandfrei.

Beispiel bei mir:

attr <device> event-min-interval temperature:600,humidity:600,battery:3600


Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: Pfriemler am 30 April 2018, 09:18:34
Das Problem ist kein DBLog-spezifisches, sondern eher ein allgemeines über den Umgang mit anfallenden Daten.
Ich reduziere die Daten meiner Temperatursensoren, indem ich alle 15 Minuten die Daten diverser Sensoren in einen Dummy packe (mit setreading ... state), was ein Event erzeugt - nur dieses wird dann geloggt. Dabei ist es dann nämlich unerheblich, ob es in den letzten 15 Minuten 100 Daten oder gar keine gab. Ähnlich erzeuge ich jede Stunde bei meinen Anwesenheitsprotokollen ein Event, so funktionieren die Diagramme auch wenn ich den ganzen Tag zu Hause war ...  ;)
Ob man dafür einen eigenen Dummy nimmt oder userreadings in den Devices, ist nur eine Glaubensfrage.
Funktionieren sollte das auch mit DBLog.
Jm2c.
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: thgorjup am 30 April 2018, 09:26:15
Du kannst deine DB auch regelmäßig ausdünnen. Mit nachfolgendem Timer wird die DB um 01:00 Uhr geschrinked und zwar für alle Einträge die älter 30 Tage sind.


define DBLOG.Timer at *01:00:00 set DBLOG reduceLog 30
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: Hackstall am 30 April 2018, 10:13:10
Hallo,

vielen Dank für Eure Antworten aber:
a) die werte in dummy sammeln würde mein Problem sicherlich lösen. Ist mir aber etwas umständlich.
Ich denke aus das dieses ein generisches Problem ist und sicherlich durch ein Modul auch gelöst werden könnte.
Vielleicht gibt es ja so ein Modul oder es geht vielleicht auch noch etwas eleganter.
b) Das ausdünnen über reduce log ist ok aber löst mein aktuelles Problem natürlich auch nicht.

Eine Idee wäre ja vielleicht noch über das Statistics Modul.
Hat hier irgendeiner eine Idee wie ich ein Reading vielleicht alle 5 min statistisch (Mittelung) erfasse und dann in der 5 min Periode logge.

Danke Andreas
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: DS_Starter am 30 April 2018, 10:24:08
Hallo zusammen,

Zitat
a) Ich würde diese nun alle 5 min speichern wollen unabhängig ob der Wert sich zwischendrin geändert hat.
b) Ich möchte aber auch einen state alle 5 min speichern auch wenn dieser sich nur 2 mal am Tag ändert

Quick & dirty Lösung ... Alles im Regex des DbLog-DEF ausschliessen, z.B.

define myDbLog DbLog /etc/fhem/db.conf aaaaaa:bbbbb

Das Attribute excludeDevs kann man dafür auch gut benutzen.
Dann zwei AT's einrichten die in den gewünschten Zeitabständen das in DbLog integrierte addlog aufrufen:


set <name> addLog <devspec>:<Reading>


Lies dazu mal die commandref in DbLog dazu.

VG,
Heiko
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: Hackstall am 30 April 2018, 11:36:49
Hallo danke fuer die Antwort.
Waere meine Loesung aber was muss ich fuer <name> setzen?
Danke AK
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: DS_Starter am 30 April 2018, 11:54:29
ZitatWaere meine Loesung aber was muss ich fuer <name> setzen?

Der <name> wäre der Name deines DbLog-Devices. Deswegen auch bitte wegen dem addLog in die commandref von DbLog schauen und nicht den Beitrag "addLog" im Wiki verwenden. Die Dinge sind zwar ähnlich aber doch spezifisch und in DbLog umfassender.

VG,
Heiko
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: Hackstall am 30 April 2018, 20:19:57
Hallo,

Leider ist mein Problem immer noch da:

mein Log.Device sieht so aus:

define DBLogging DbLog /opt/fhem/contrib/dblog/db.conf .*:.*


mein zu loggendes Device hat Readings: energy, state, voltage, etc und heisst so:

define Plug_Ku_HdyLadeStation ZWave abcdefg 9
attr Plug_Ku_HdyLadeStation DbLogExclude .*


ich will state unbedingt loggen aber es funktioniert so nicht:

define at_Plug_Ku_HdyLadeStation_Log at +*00:05:00 {set DBLogging addLog Plug_Ku_HdyLadeStation:state}


Übrigens kann ich leider in der CommandRef nichts über addLog finden.

Noch irgendetwas was ich falsch mache?

Danke Andreas
Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: DS_Starter am 30 April 2018, 20:59:57
Hallo Andreas,

ZitatLeider ist mein Problem immer noch da:
Kann ich verstehen  ;)

Zitatmein Log.Device sieht so aus:
Code: [Auswählen]

define DBLogging DbLog /opt/fhem/contrib/dblog/db.conf .*:.*
Vergleiche mal mit dem DbLog-Define was ich dir oben hingeschrieben habe ...  (aaaaa:bbbbbb)

Zitat
mein zu loggendes Device hat Readings: energy, state, voltage, etc und heisst so:
Code: [Auswählen]

define Plug_Ku_HdyLadeStation ZWave abcdefg 9
attr Plug_Ku_HdyLadeStation DbLogExclude .*
Das attr DbLogExclude .* verhindert das Logging. Dafür gibt es bei addLog aber eine Option ...

Zitat
ich will state unbedingt loggen aber es funktioniert so nicht:
Code: [Auswählen]

define at_Plug_Ku_HdyLadeStation_Log at +*00:05:00 {set DBLogging addLog Plug_Ku_HdyLadeStation:state}
Ja ist ja auch nicht richtig bzw. nicht komplett.
So sollte es funktionieren:


define at_Plug_Ku_HdyLadeStation_Log at +*00:05:00 set DBLogging addLog Plug_Ku_HdyLadeStation:state !useExcludes


Und das ...

Zitat
Übrigens kann ich leider in der CommandRef nichts über addLog finden.

kann ich nun aber wirklich nicht verstehen. Der Absatz springt dich quasi an wenn du "help dblog" eintippst und dann runter scrollst bis zu den set-Kommandos.  ;)

Grüße
Heiko


Titel: Antw:DBLog Einträge (Anzahl) verringern (Daten nur in fester Frequenz abspeichern)
Beitrag von: Hackstall am 01 Mai 2018, 08:34:48
Hallo das wars.

Vielen Dank es funktioniert jetzt !!!!!!

MfG
Andreas