FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Honigmaul am 03 Januar 2023, 16:46:46

Titel: DbLogging - DbLogInclude nur zu bestimmter Zeit?
Beitrag von: Honigmaul am 03 Januar 2023, 16:46:46
Hallo,

Ich bin auf der Suche nach einer Möglichkeit gewisse Readings nur einmal pro Tag, um Mitternacht in die DB zu schreiben.
Leider bin ich hier noch nicht fündig geworden, bzw. mit DbRep wurde ich auch nicht schlau. :o

Konkret möchte ich diese Readings meines Wechselrichters oder viel mehr des Smartmeters loggen um Tagesverbrauchswerte darstellen zu können.

Internals:
   DEF        192.168.1.101
   FUUID      638df3be-f33f-4460-c31f-e54c24c11709c4ee
   NAME       PV0
   NR         419
   STATE      <div style="text-align:left;">
PV &nbsp;&nbsp;: 308.50 W<br>
Akku: 0.00 W<br>
Netz: 332.90 W<br>
Last: 602.26 W<br>
Bezug gestern 12.9 kWh<br>
Einspeisung gestern 0.9 kWh<br>
Bezug heute 4.23 kWh<br>
Einspeisung heute 0.00 kWh<br>
Eigenverbrauch heute: 0.09 kWh<br>
Gesamtverbrauch heute: 4.32 kWh
</div>

   TYPE       fronius
READINGS:
     2023-01-04 08:54:19   0.BezugNetzHeute_kWh 4.23
     2023-01-04 08:54:19   0.EigenverbrauchHeute_kWh 0.09
     2023-01-04 08:54:19   0.EinspeisungNetzHeute_kWh 0.00
     2023-01-04 08:54:19   0.GesamtverbrauchHeute_kWh 4.32
     2023-01-04 08:54:19   0.produziertHeute_kWh 0.09


Vielleicht hat jemand eine Idee?
Vielen Dank schon mal fürs Nachdenken  ;D
Titel: Antw:DbLogging - DbLogInclude nur zu bestimmter Zeit?
Beitrag von: dyna am 03 Januar 2023, 22:33:47
Moin,

ich benutze das hier. Das ist auch recycelter Code etwas abgewandelt. Würde sicher auch als "at" gehen.
define Solaranlage_Ergebnisse_Fortlaufend_Sichern_Doif DOIF ([23:58])\
    (\
{\
   my $timedelete = TimeNow();;\
   my ($year,$mon,$day,$hour,$min) = $timedelete =~ m/(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):\d\d/;;\
    \
   my $timestamp = "$year-$mon-$day $hour:$min:00";;\
   my $value = ReadingsNum("S10","Einspeisung_Fortlaufend",0);;\
   fhem "set logdb addCacheLine ".$timestamp."|S10|addlog|Einspeisung_Summe:|Einspeisung_Fortlaufend|".$value."|";;\
      $value = ReadingsNum("S10","Entladung_Fortlaufend",0);;\
   fhem "set logdb addCacheLine ".$timestamp."|S10|addlog|Entladung_Summe:|Entladung_Fortlaufend|".$value."|";;\
      $value = ReadingsNum("S10","Hausverbrauch_Fortlaufend",0);;\
   fhem "set logdb addCacheLine ".$timestamp."|S10|addlog|Hausverbrauch_Summe:|Hausverbrauch_Fortlaufend|".$value."|";;\
      $value = ReadingsNum("S10","Netzbezug_Fortlaufend",0);;\
   fhem "set logdb addCacheLine ".$timestamp."|S10|addlog|Netzbezug_Summe:|Netzbezug_Fortlaufend|".$value."|";;\
      $value = ReadingsNum("S10","Ertrag_Fortlaufend",0);;\
   fhem "set logdb addCacheLine ".$timestamp."|S10|addlog|Ertrag_Summe:|Ertrag_Fortlaufend|".$value."|";;\
   \
   \
   }\
)
attr Solaranlage_Ergebnisse_Fortlaufend_Sichern_Doif do always
attr Solaranlage_Ergebnisse_Fortlaufend_Sichern_Doif room Solaranlage
Titel: Antw:DbLogging - DbLogInclude nur zu bestimmter Zeit?
Beitrag von: DS_Starter am 03 Januar 2023, 23:52:57
Zitat
Leider bin ich hier noch nicht fündig geworden, bzw. mit DbRep wurde ich auch nicht schlau. :o
Generell ist DbLog zum speichern von Daten vorgesehen und DbRep zur Auswertung von Datenbankeinträgen.

Alternativ zu addCacheLine  hat DbLog auch den Befehl addLog eingebaut mit dem man über ein at oder DOIF zu einem definierten Zeitpunkt einen Wert loggen kann, z.B.:


define at.addlog.1 at *23:59:59 set LogDB addLog SMA_Energymeter:Bezug_Wirkleistung !useExcludes


siehe Commandref DbLog-> addLog
Titel: Antw:DbLogging - DbLogInclude nur zu bestimmter Zeit?
Beitrag von: Honigmaul am 04 Januar 2023, 08:42:22
Guten Morgen zusammen,

Vielen Dank für die Hilfe. Beide Varianten funktionieren. :D
Hab das jetzt so gelöst:

Internals:
   CFGFN     
   COMMAND    set DBLogging addLog PV0:0.BezugNetzHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.EinspeisungNetzHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.produziertHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.EigenverbrauchHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.GesamtverbrauchHeute_kWh !useExcludes;

   DEF        *23:59:30
set DBLogging addLog PV0:0.BezugNetzHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.EinspeisungNetzHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.produziertHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.EigenverbrauchHeute_kWh !useExcludes;
set DBLogging addLog PV0:0.GesamtverbrauchHeute_kWh !useExcludes;

   FUUID      63b52c35-f33f-4460-a865-86f4720a1da07135
   NAME       at_PV0Summen
   NR         11715
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 23:59:30
   TIMESPEC   23:59:30
   TRIGGERTIME 1672873170
   TRIGGERTIME_FMT 2023-01-04 23:59:30
   TYPE       at
   READINGS:
     2023-01-04 08:49:56   state           Next: 23:59:30
   hmccu:
Attributes:
   room       11_Strom,92_at


Ich lasse es mal die nächsten Tage so laufen.

Vielen Dank nochmal für die Antworten und Erklärungen.