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 : 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
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
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
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.