FHEM Forum

FHEM => Automatisierung => Thema gestartet von: PS915 am 28 November 2021, 13:17:28

Titel: DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: PS915 am 28 November 2021, 13:17:28
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 ::)




Titel: Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: CoolTux 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
Titel: Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: PS915 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.
Titel: Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: CoolTux am 28 November 2021, 14:16:09
Zitat von: PS915 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.

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.
Titel: Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: PS915 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
Titel: Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: DS_Starter 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;
  }
}
Titel: Antw:DBLog - Logging bestimmter Geräte nur in "current" Tabelle
Beitrag von: CoolTux 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