Autor Thema: Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)  (Gelesen 200380 mal)

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1530 am: 01 Dezember 2021, 22:54:01 »
Hallo zusammen,

ich habe eine neue DbRep-Version eingecheckt.
Die Funktion diffValue kann nun unterscheiden nun ob keine Werte zur Auswertung vorhanden sind oder die Differenz 0 ist.
Im ersten Fall wird wie bisher "-" ausgegeben, im zweiten Fall entsprechend Differenz "0".

Ist morgen früh im update enthalten.

VG
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 Sailor

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2067
  • und es werden immer mehr...
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1531 am: 03 Dezember 2021, 16:01:17 »
Ein herzerfrischendes "Moin" vom achtern Diek vorweg!

Das Tool DbRep ist inzwischen so mächtig geworden, dass ich mich frage ob dort inzwischen auch folgende Problematik gelöst werden kann:

Ich möchte einmal am Tag einen Befehl absetzen, bei dem
a) Alle Werte die jünger als 30d sind, auf einen stündlichen Mittelwert um xx:30 Uhr reduzieren.
b) Alle Werte die älter sind als 180d auf einen täglichen Mittelwert um 12:00 Uhr reduzieren.
c) Alle Werte die älter sind als 365d löschen.

Wobei es Ausnahmen geben muss, da gewisse Readings (monatlicher Gasverbrauch einmal zum Ende des Monats ermittelt) nicht durch a) bis c) behandelt werden soll.

Ich hoffe ich habe mich dahingehend verständlich ausgedrückt.

Danke für Eure Hilfe

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1532 am: 03 Dezember 2021, 22:31:10 »
Hallo Sailor,

ja, das sollte machbar sein.
Übliche Praxis ist für jede Aufgabe ein separates DbRep zu erstellen, zu parametrisieren und regelmäßig ausführen lassen.
Ich nehme immer ein bereits existierendes Devices, kopiere es und passe es dann an.

Zitat
c) Alle Werte die älter sind als 365d löschen.

Die leichteste Aufgabe. Du setzt die Attr

allowDeletion = 1
 timeOlderThan = d:365

Mit dem Befehl "set ... delEntries" werden alle Daten älter als 365 Tage gelöscht.


Zitat
b) Alle Werte die älter sind als 180d auf einen täglichen Mittelwert um 12:00 Uhr reduzieren.

Mit reduceLog kannst du arbeiten. Du setzt die Attribute

allowDeletion = 1
 timeOlderThan = d:180
 (timeDiffToNow = d:365  - optional)

Mit dem Befehl "set ... reduceLog average=day"  werden die Daten älter als 180 Tage auf einen Tagesmittelwert reduziert.
Wenn du das optionale timeDiffToNow ebenfalls setzt, werden Daten älter als 180 und nicht älter als 365 Tage bearbeitet.

Sollen Device/Readings ausgeklammert werden, ergänzt du den Befehl mit "EXCLUDE=device1:reading1,device2:reading2,...".


Zitat
a) Alle Werte die jünger als 30d sind, auf einen stündlichen Mittelwert um xx:30 Uhr reduzieren.

Auch hier nimmst du reduceLog und setzt die Attribute

allowDeletion = 1
 timeDiffToNow = d:30

Der Befehl wäre dann "set ... reduceLog average". Device/Readings excluden wie oben angegeben.

Es gibt noch die Möglichkeit durch direkte Eingabe beim Befehl bestimmte Dinge mitzugeben.
Ich bevorzuge aber die fixe Einstellung über die Attribute.
Hoffe ich habe nichts vergessen. :) In der Hilfe findest du noch Infos zu möglichen Attributen in diesem Kontext.

Grüße,
Heiko
« Letzte Änderung: 03 Dezember 2021, 22:40:39 von DS_Starter »
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 Sailor

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2067
  • und es werden immer mehr...
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1533 am: 04 Dezember 2021, 13:30:50 »
Hallo Heiko

ja, das sollte machbar sein.
Übliche Praxis ist für jede Aufgabe ein separates DbRep zu erstellen, zu parametrisieren und regelmäßig ausführen lassen.
Ich nehme immer ein bereits existierendes Devices, kopiere es und passe es dann an.

Cool, ich bereite mal was vor und poste den Erfolg...

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1534 am: 04 Dezember 2021, 14:12:52 »
Hallo zusammen,

ich habe die Möglichkeiten des Attr userExitFn überarbeitet. Es ist nun möglich eigenen Code direkt im Attr zu hinterlegen.
Die Version liegt zunächst in meinem contrib zum Testen.

Zum Download in der FHEMWEB Kommandozeile inklusive der Ausführungszeichen angeben und danach FHEM restarten:

"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"


Grüße,
Heiko

-------------------------------------------------------------------------------

userExitFn - stellt eine Schnittstelle zur Ausführung eigenen Usercodes zur Verfügung.
Grundsätzlich arbeitet die Schnittstelle ohne Eventgenerierung bzw. benötigt zur Funktion keinen Event. Die Schnittstelle kann mit folgenden Varianten verwendet werden.

    1. Aufruf einer Subroutine, z.B. in 99_myUtils.pm

    Die aufzurufende Subroutine wird in 99_myUtils.pm nach folgendem Muster erstellt:

    sub UserFunction {
      my $name    = shift;             # der Name des DbRep-Devices
      my $reading = shift;             # der Namen des erstellen Readings
      my $value   = shift;             # der Wert des Readings
      my $hash    = $defs{$name};
      ...
      # z.B. übergebene Daten loggen
      Log3 $name, 1, "UserExitFn $name called - transfer parameter are Reading: $reading, Value: $value " ;
      ...
    return;
    }

    Im im Attribut wird die Subroutine und optional ein Reading:Value Regex als Argument angegeben werden. Ohne diese Angabe werden alle Wertekombinationen als "wahr" gewertet und an die Subroutine übergeben (entspricht .*:.*).

        Beispiel:
        attr userExitFn UserFunction .*:.*
        # "UserFunction" ist die Subroutine in 99_myUtils.pm.
    Die Regexprüfung nach der Erstellung jedes Readings. Ist die Prüfung wahr, wird die angegebene Funktion aufgerufen.

    2. direkte Einngabe von eigenem Code

    Der eigene Code wird in geschweifte Klammern eingeschlossen. Der Aufruf des Codes erfolgt nach der Erstellung jedes Readings. Im Code stehen folgende Variablen für eine Auswertung zur Verfügung:

        $NAME - der Name des DbRep-Devices
        $READING - der Namen des erstellen Readings
        $VALUE - der Wert des Readings


        Beispiel:

        {
          if ($READING =~ /PrEnergySumHwc1_0_value__DIFF/) {
            my $mpk  = AttrVal($NAME, 'Multiplikator', '0');
            my $tarf = AttrVal($NAME, 'Tarif', '0');                                   # Kosten €/kWh           
            my $m3   = sprintf "%.3f", $VALUE/10000 * $mpk;                            # verbrauchte m3
            my $kwh  = sprintf "%.3f", $m3 * AttrVal($NAME, 'Brennwert_kWh/m3', '0');  # Umrechnung m3 -> kWh
            my $cost = sprintf "%.2f", $kwh * $tarf;
           
            my $hash = $defs{$NAME};
           
            readingsBulkUpdate ($hash, 'gas_consumption_m3',   $m3);
            readingsBulkUpdate ($hash, 'gas_consumption_kwh', $kwh);
            readingsBulkUpdate ($hash, 'gas_costs_euro',     $cost);
          }   
        }

        # Es werden die Readings gas_consumption_m3, gas_consumption_kwh und gas_costs_euro berechnet und im DbRep-Device erzeugt.

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 DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1535 am: 05 Dezember 2021, 17:04:40 »
Hallo Ralf, @all,

ich habe mich mal deiner Meldung in #1513 zugewendet und die reduceLog Funktion überarbeitet.
Einen wesentlichen Fehler mit average=day konnte ich beseitigen.
Offen ist noch, dass bei average die letzte Stunde nicht auf den Halbstundenwert reduziert wird und bei average=day der letzte
Tag nicht auf den 12:00 Wert reduziert wird. Aber da bin ich dran.

Die Version liegt im contrib, download siehe eine Meldung zuvor.

@sailor, die gefixte Version dürfte für deine Aufgabenstellung wichtig sein !

Grüße,
Heiko
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 DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1536 am: 05 Dezember 2021, 21:12:32 »
Zitat
Offen ist noch, dass bei average die letzte Stunde nicht auf den Halbstundenwert reduziert wird und bei average=day der letzte
Tag nicht auf den 12:00 Wert reduziert wird. Aber da bin ich dran.

Ist nun auch erledigt und die Version ins contrib geladen.

LG
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 Sailor

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2067
  • und es werden immer mehr...
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1537 am: 06 Dezember 2021, 16:34:18 »
Hallo Heiko

Mit dem Befehl "set ... reduceLog average=day"  werden die Daten älter als 180 Tage auf einen Tagesmittelwert reduziert.
Wenn du das optionale timeDiffToNow ebenfalls setzt, werden Daten älter als 180 und nicht älter als 365 Tage bearbeitet.
Sollen Device/Readings ausgeklammert werden, ergänzt du den Befehl mit "EXCLUDE=device1:reading1,device2:reading2,...".

Frage: Mit dem Befehl - Zusatz EXCLUDE und INCLUDE
kann ich davon ausgehen, dass bei folgendem Befehl

EXCLUDE=Device:Reading1, Device:Reading2 INCLUDE=Device:.*

Alle Readings des Device gemittelt bzw. gelöscht werden, bis auf die unter EXCLUDE aufgeführt?

Gruss
   Sailor
« Letzte Änderung: 06 Dezember 2021, 16:36:07 von Sailor »
******************************
Man wird immer besser...

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1538 am: 06 Dezember 2021, 18:38:04 »
Nabend Sailor,

naja nicht ganz. Momentan zieht immer die ganz hinten stehende Option, also entweder das INCLUDE oder das EXCLUDE.
Das beide Optionen ziehen, daran arbeite ich noch.

Aber wenn du die Attribute mit verwendest, kannst du es umsetzen. Du setzt:

attr ... device Device

und rufst dann auf

set ... reduceLog average=day EXCLUDE=Device:Reading1,Device:Reading2

Dadurch werden im select alle Datensätze mit "DEVICE" aus der DB innerhalb der Zeitgrenzen gelesen.
In der nachfolgenden Verarbeitung werden wiederum die im EXCLUDE angegebenen Kombinationen ausgeschlossen.

Achtung: innerhalb des EXCLUDE keine Leerzeichen verwenden. Außerdem kann man dort keine Wildcards angeben. in den device/reading Attributen schon.

Es geht auch nur die Attr zu verwenden:

attr ... device Device
attr ... reading EXCLUDE=Reading1,Reading2

Dann führst du nur aus:

set ... reduceLog average=day

LG,
Heiko
« Letzte Änderung: 06 Dezember 2021, 20:29:27 von DS_Starter »
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 DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1539 am: 07 Dezember 2021, 00:14:25 »
Nun werden auch direkt bei der Kommandozeilenangabe von reduceLog gleichzeitig angegebene EXCLUDE / INCLUDE Optionen berücksichtigt:

 Beispiel:

    set <name> reduceLog 174:180 average EXCLUDE=SMA_Energymeter:Bezug_Wirkleistung INCLUDE=SMA_Energymeter:%
    # Datensätze älter als 174 und jünger als 180 Tage werden auf den Durchschnitt pro Stunde reduziert.
    # Es werden alle Readings vom Device "SMA_Energymeter" außer "Bezug_Wirkleistung" berücksichtigt. reduziert. 

So ist der Aufruf ebenfalls möglich um alle Device/Reading Kombinationen außer SMA_Energymeter:Bezug_Wirkleistung und DumDev:Energy zu bearbeiten:

set <name> reduceLog 174:180 average EXCLUDE=SMA_Energymeter:Bezug_Wirkleistung,DumDev:Energy INCLUDE=%:%

Liegt im contrib.
« Letzte Änderung: 07 Dezember 2021, 09:14:59 von DS_Starter »
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
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Sailor

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2067
  • und es werden immer mehr...
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1540 am: 07 Dezember 2021, 12:22:27 »
Hallo Heiko

Nun werden auch direkt bei der Kommandozeilenangabe von reduceLog gleichzeitig angegebene EXCLUDE / INCLUDE Optionen berücksichtigt:
So ist der Aufruf ebenfalls möglich um alle Device/Reading Kombinationen außer SMA_Energymeter:Bezug_Wirkleistung und DumDev:Energy zu bearbeiten:
set <name> reduceLog 174:180 average EXCLUDE=SMA_Energymeter:Bezug_Wirkleistung,DumDev:Energy INCLUDE=%:%

Danke fuer deinen Einsatz.

Verstehe ich das richtig, das "%" ersetzt das ".*" an beliebiger Stelle?
BR_RadiatorL
BR_RadiatorR
GR_Radiator
KT_Radiator
TR_RadiatorL
TR_RadiatorR
CR_Radiator

werden mit
EXCLUDE=%_Radiato%:%abgefangen?

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

Offline ch.eick

  • Hero Member
  • *****
  • Beiträge: 2137
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1541 am: 07 Dezember 2021, 12:31:38 »
Verstehe ich das richtig, das "%" ersetzt das ".*" an beliebiger Stelle?
BR_RadiatorL
BR_RadiatorR
GR_Radiator
KT_Radiator
TR_RadiatorL
TR_RadiatorR
CR_Radiator

werden mit
EXCLUDE=%_Radiato%:%abgefangen?
Hallo Sailer,

ja, das % ist für ein beliebiges Zeichen bei der SQL Abfrage in einer Datenbank.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; 230V zentral verschaltet; SamsungTV H-Serie; DLNARenderer; TV.pl;  Sonos; Vallox; Luxtronik; 2x FB7490; Stromzähler mit DvLIR; wunderground; clever-tanken; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP

Offline Sailor

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2067
  • und es werden immer mehr...
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1542 am: 07 Dezember 2021, 12:43:51 »
Hallo Christian

ja, das % ist für ein beliebiges Zeichen bei der SQL Abfrage in einer Datenbank.

Das war das Stichwort!

http://www.w3bai.com/de/sql/sql_wildcards.html

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

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1543 am: 07 Dezember 2021, 12:50:51 »
Ich ergänze es mal noch in der Hilfe. Die Verwendung von "%" ist nicht an jeder Stelle in DbRep gleichermaßen gültig und kommt auf den Kontext der jweiligen Funktion an.
Aber hier in reduceLog konnte ich es so bauen.
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 DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7614
Antw:Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)
« Antwort #1544 am: 07 Dezember 2021, 13:29:52 »
Habe die Hilfe ergänzt. Liegt im contrib:

Arbeitsweise mit Optionsangabe

....

Die Zusätze "EXCLUDE" bzw. "INCLUDE" können ergänzt werden um device/reading Kombinationen in reduceLog auszuschließen bzw. einzuschließen und überschreiben die Einstellung der Attribute "device" und "reading", die in diesem Fall nicht beachtet werden.
Diese Angabe in "EXCLUDE" wird als Regex ausgewertet. Innerhalb von "INCLUDE" können SQL-Wildcards verwendet werden (weitere Informationen zu SQL-Wildcards siehe mit get <name> versionNotes 6).
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
Gefällt mir Gefällt mir x 1 Liste anzeigen

 

decade-submarginal