Autor Thema: DBLog - Logging bestimmter Geräte nur in "current" Tabelle  (Gelesen 401 mal)

Offline PS915

  • Jr. Member
  • **
  • Beiträge: 60
Moin Moin!

Ich verwende DBLog mit einer MySQL Datenbank. Derzeit baue ich mir ein Dashboard mit Grafana auf.
Viele "Live"-Daten beziehe ich aus der Tabelle "current".

Zum Beispiel frage ich alle x Sekunden die Leistung meines Stromzählers ab und logge diese per DbLog. Natürlich läuft dabei meine "history" Tabelle unnötig schnell voll.

Daher suche ich einen Weg, bestimmte Geräte nur in die "current" Tabelle loggen zu lassen.

Soweit ich weiß, kann das DBLog aktuell nicht. Ideal wäre es, wenn es ein neues Attribut geben könnte, welches man auf dem betroffenen device setzen könnte aka: "DbLogCurrentOnly" = 1.

Vielleicht wird mein Wunsch ja von den Entwicklern erhört ::)





Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 27934
Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
« Antwort #1 am: 28 November 2021, 13:27:42 »
Also eigentlich kann DbLog das schon. Du musst nur das entsprechende Schema mit angeben. Ich habe einfach 2 verschiedene Schema dafür gemacht. Bei mir allerdings unter PostgreSQL
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline PS915

  • Jr. Member
  • **
  • Beiträge: 60
Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
« Antwort #2 am: 28 November 2021, 13:42:37 »
Du meinst bestimmt:
attr <device> dbSchema <schema>
Das kann ich ja nur im Device TYPE "DbLog" setzen (also im DBLogging Device). So wie ich es verstanden wird das damit global für alle Geräte gesteuert.

Ich möchte folgendes:
Normales DbLogging in current und history. Darüber hinaus möchte ich auf bestimmten Devices "nur" in current loggen.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 27934
Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
« Antwort #3 am: 28 November 2021, 14:16:09 »
Du meinst bestimmt:
attr <device> dbSchema <schema>
Das kann ich ja nur im Device TYPE "DbLog" setzen (also im DBLogging Device). So wie ich es verstanden wird das damit global für alle Geräte gesteuert.

Ich möchte folgendes:
Normales DbLogging in current und history. Darüber hinaus möchte ich auf bestimmten Devices "nur" in current loggen.

Was hindert Dich daran 2 dbLog Instanzen an zu legen?  ;)
Eines für current und eines für history. In current logst Du alles was Du nicht länger wie z.B. 30 Tage brauchst und in history alles was ewig bleiben soll. Und über die current lässt Du jeden Tag ein Job drüber laufen der alles älter 30 Tage löscht. Das kann DbLog von Hause aus.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline PS915

  • Jr. Member
  • **
  • Beiträge: 60
Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
« Antwort #4 am: 28 November 2021, 14:35:49 »
Ok, ich wusste nicht, dass ich zwei Instanzen von DbLog erstellen kann.

Trotzdem verstehe ich dann nicht, wie ich dann einem Device sagen kann, welches DbLog genutzt werden soll.
In den Devices habe ich ja nur "DBLogInclude" und DBLogExclude" zur Verfügung.  :o

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7997
Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
« Antwort #5 am: 28 November 2021, 14:59:50 »
Zitat
Trotzdem verstehe ich dann nicht, wie ich dann einem Device sagen kann, welches DbLog genutzt werden soll.
In den Devices habe ich ja nur "DBLogInclude" und DBLogExclude" zur Verfügung. 

Dafür kannst du das Attr valueFn  in DbLog nutzen.
In dem DbLog wo du DEV nicht loggen willst, aber alles andere was du eingestellt hast, schreibst du:

attr <DbLog device> valueFn
{
  if ($DEVICE eq "DEV") {
      $IGNORE=1;
  }
}

Und in dem DbLog Device in dem du nur DEV loggen willst, ist es:

attr <DbLog device> valueFn
{
  if ($DEVICE ne "DEV") {
      $IGNORE=1;
  }
}
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 27934
Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
« Antwort #6 am: 28 November 2021, 15:49:42 »
Du kannst auch das ganze include und exclude vergessen und stattdessen RegEX in der DbLog Definition angeben.

defmod logDbHistory DbLog ./fhemLogDb.conf .*:(temperature|dewpoint|humidity|lux|windstrength|rain|pressure|measured-temp|desired-temp|ValvePosition|energy|power).*
Loggt alle Events mit den angegebenen Readings
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net
Zustimmung Zustimmung x 1 Liste anzeigen

 

decade-submarginal