Hallo Zusammen,
ich werte meinen Hoymiles Wechselrichter (Solaranlage) mit FHEM aus. Dabei würde ich gerne einen Plot erstellen der mir für 365 Tage im Jahr die Stromerzeugung pro Tag anzeigt. Also jeden Tag einen Wert und zwar den letzten im Log für diesen Tag. Ist das überhaupt umsetzbar? Und wenn ja, wie?
Im Moment bekomme ich über MQTT alle 5 Sekunden den aktuellen Wert für diesen Tag.
Viele Grüße
Am einfachsten über ein at jeden Tag um z.b. 23:59 den Tageswert in ein separates reading schreiben, dieses reading loggen und aus diesem Logfile dann den Plot erzeugen.
Theoretisch kann ich dir folgen, praktisch bin ich leider überfordert:
define dailyStromerzeugungSchreiben at *23:30:00 ...
Das Reading lege ich als UserReading im Device von meinem Inverter an? Und wie schreib ich dort rein? Hast du evtl. ein Beispiel für mich?
Danke schonmal :)
Servus
ich messe mein BKW mit einem EM und verwende das statistics Modul-
Da hab ich dann kWh Day, DayLast, Hour HourLast, Month mit Month Last und Year
Dann nehme ich für den Plot delta-d und bekomme so einen schönen BAR Chart
Hoffe es ist ein Ansatz und hilft weiter
Gruß
Helmut
Zitat von: DaCracker am 04 Juli 2022, 14:55:18
define dailyStromerzeugungSchreiben at *23:30:00 ...
Das Reading lege ich als UserReading im Device von meinem Inverter an?
Nein, kein userreading.
define dailyStromerzeugungSchreiben at *23:30:00 {
my $temp = ReadingsNum("<device>" ,"Tageswert",0);
fhem("setreading <device> TageswertLetzter $temp");
}
Eingabe über den def-Editor.
Dann noch das Logfile erstellen, wobei ein Jahresfile reicht. Also in der Definition
./log/TageserzeugungSolar-%Y.log <device>:TageswertLetzter:.*
<device> muss natürlich entsprechend ersetzt werden.
Erstens ist es (nach meiner Erfahrung von 15 Jahren PV-Anlage in FHEM) ziemlich unsinning, den WR alle 5 Sekunden abzufragen. Alle 60 Sekunden reicht vollkommen aus, denn die Aufsummierung zur Energie macht die Kiste ja in der Regel selbst.
Zweitens ist es nicht sehr instruktiv, das gesamte Jahr tageweise zu plotten - daraus kann man gar nichts entnehmen, das Rauschen ist viel zu groß. Sehr viel sinnvoller ist eine Aggregation pro Monat, und die Monatsergebnisse dann in einem Jahresplot. Oder einen gleitenden Mittelwert über mindestens 7 Tage ==> Siehe movingAverage im Wiki.
LG
pah
Die Software sendet leider alle 5s mir würden auch locker 60s Intervall ausreichen. Und ja, du hast vermutlich recht, dass es keine Auswertung pro Tag sein muss, aber wenn das hier mal funktioniert, dann kann man es ja noch beliebig anpassen.
@Nobbynews
define dailyStromerzeugungSchreiben at *23:30:00 {my $temp = ReadingsNum(,,inverter" ,"YieldDay",0); fhem(,,setreading inverter InverterTageswert $temp");}
Wenn ich das so eingebe, dann bekomme ich folgende Fehlermeldung:
Zitat
Unrecognized character \xE2; marked by <-- HERE after adingsNum(<-- HERE near column 77 at (eval 74340) line 1.
Unknown command fhem(,,setreading, try help.
Unknown command }, try help.
Zitat von: DaCracker am 04 Juli 2022, 16:35:12
define dailyStromerzeugungSchreiben at *23:30:00 {my $temp = ReadingsNum(,,inverter" ,"YieldDay",0); fhem(,,setreading inverter InverterTageswert $temp");}
Mach mal aus
,,inverter" ==> "inverter"
und aus
,,setreading ==> "setreading
Ja ist mir auch aufgefallen, man sollte sowas nicht mit dem iPad machen :(
Leider ist das Thema noch nicht gelöst, aus irgendeinem Grund passiert nichts, wenn der ,,at" läuft. Wenn ich das setreading Kommando manuell abschicke, ohne Variable, dann wird der Wert eingetragen. Auch mit einem execnow funktioniert es nicht.
Internals:
CFGFN
COMMAND {my $temp = ReadingsNum("inverter" ,"YieldDay", 0)}; fhem ("setreading inverter InverterTageswert $temp")
DEF *23:30:00 {my $temp = ReadingsNum("inverter" ,"YieldDay", 0)}; fhem ("setreading inverter InverterTageswert $temp")
FUUID 62c2fc64-f33f-52b2-d5dc-e03baef80e760298
NAME dailyStromerzeugungSchreiben
NR 760
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 23:30:00
TIMESPEC 23:30:00
TRIGGERTIME 1657402200
TRIGGERTIME_FMT 2022-07-09 23:30:00
TYPE at
eventCount 3
READINGS:
2022-07-08 23:30:00 state Next: 23:30:00
Attributes:
room Garten
Internals:
FUUID 62b76e64-f33f-52b2-a2eb-42c900338bf21ef1
IODev pi_mqtt
NAME inverter
NR 220
STATE ???
TYPE MQTT_DEVICE
eventCount 805655
READINGS:
2022-07-09 09:10:42 Effiency 95.490
2022-07-09 09:10:42 Freq 49.990
2022-07-03 06:17:31 IODev pi_mqtt
2022-07-09 09:10:42 I_AC 0.580
2022-07-08 21:12:13 InverterTageswert 3619.000
2022-07-09 09:10:42 P_AC 135.500
2022-07-09 09:10:42 P_DC 141.900
2022-07-09 09:10:42 Temp 23.900
2022-07-09 09:10:42 U_AC 234.700
2022-07-09 09:10:42 YieldDay 198.000
2022-07-09 09:10:42 YieldTotal 46.070
2022-07-09 09:10:42 transmission-state incoming publish received
2022-06-27 11:49:48 uptime 2624
In der def des at fehlt am Ende die }.
Zitat von: Nobbynews am 09 Juli 2022, 10:14:10
In der def des at fehlt am Ende die }.
Ich denke eher die Klammer kam schon zu früh ;)
Zitat
COMMAND {my $temp = ReadingsNum("inverter" ,"YieldDay", 0)}; fhem ("setreading inverter InverterTageswert $temp")
Die Klammer muss nach ganz hinten...
EDIT: also
{my $temp = ReadingsNum("inverter" ,"YieldDay", 0); fhem ("setreading inverter InverterTageswert $temp")}
EDIT: {Perl};irgendwas ;)
https://wiki.fhem.de/wiki/Klammerebenen
Gruß, Joachim
Ah, ok. Habe ich auf dem Smartphone übersehen.
Das at dann aber mal über
set dailyStromerzeugungSchreiben execNow
ausprobieren.
Irgendwas haut immer noch nicht hin, obwohl alle Klammern geschlossen werden. Oder bin ich blind?
define dailyStrom at *23:30:00 {my $temp = ReadingsNum("inverter" ,"YieldDay", 0); fhem ("setreading inverter InverterTageswert $temp")}
Missing right curly or square bracket at (eval 321988) line 1, at end of line
syntax error at (eval 321988) line 1, at EOF
Unknown command fhem, try help.
Wie hast du das eingeben?
Über FhemWeb?
Dann die Strichpunkte doppeln!
ODER (besser): ein "leeres" at definieren:
define atName at 00:00:10 {}
Und dann mit dem DEF-Editor bearbeiten...
Gruß, Joachim
Okay, das war mein Fehler. Jetzt funktioniert es. Danke euch!
Zitat von: DaCracker am 09 Juli 2022, 13:17:12
Okay, das war mein Fehler. Jetzt funktioniert es. Danke euch!
Gerne.
Wie wär's dann mit einem [geköst] o.ä. "vorne dran"? :)
Gruß, Joachim
Hallo Zusammen,
bis jetzt hat der Plot genau das getan, was er sollte. Leider werden die Wertr seit dem Jahreswechsel nicht mehr angezeigt. Hat jemand eine Idee woran es liegen könnte? Ich lasse mir immer die Werte der letzten 31 Tage im Tablet UI anzeigen.
<header>Monatsverlauf</header>
<div data-type="chart"
data-device="inverter"
data-logdevice="FileLog_DailyStrom"
data-logfile="CURRENT"
data-columnspec='["4:InverterTageswert"]'
data-style='["ftui l0fill"]'
data-ptype='["bars"]'
data-legend='["Gesamt"]'
data-yunit="Wh"
data-minvalue="0"
data-maxvalue="5000"
data-height="300"
data-daysago_start='31d'
data-daysago_end='now'>
</div>
Das Logile wird pro Jahr geschrieben.
logfile ,,./log/DailyStrom-%Y.log"
Damit wird es vermutlich zusammenhängen. Aber da das 2023 das Current Logfile ist, hätte ich eher erwartet, dass er die Werte aus 2022 nicht mehr anzeigt. Hat jemand eine Idee?
Zitat von: DaCracker am 07 Januar 2023, 14:59:21
Das Logile wird pro Jahr geschrieben.
logfile ,,./log/DailyStrom-%Y.log"
Damit wird es vermutlich zusammenhängen. Aber da das 2023 das Current Logfile ist,
Hast Du mal nachgeschaut, ob in dem currentlogfile tatsächlich etwas drinsteht?
Mach doch mal ein list vom FileLog device.
Und kannst Du bitte mit diesem unsinnigen "Anführungszeichen unten" aufhören? Das macht in Programmcode überhaupt keinen Sinn. Danke.
Ich mach sowas meistens in fünf freien Minuten zwischendurch und dann mit dem iPad. Und das kann offensichtlich nur die falschen. :(
Im currentlogfile steht für jeden Tag ein Wert drin, genauso wie vorher im 2022er.
Habe gerade nochmal reingeschaut, an dieser Stelle stehen gar keine Anführungszeichen. Die habe ich wohl hier im Forum eingetragen.
Zitat von: DaCracker am 07 Januar 2023, 14:59:21
Aber da das 2023 das Current Logfile ist, hätte ich eher erwartet, dass er die Werte aus 2022 nicht mehr anzeigt. Hat jemand eine Idee?
Dein FTUI-Widget geht immer 31 Tage zurück ... das Startdatum der gewünschten Daten liegt also momentan immer noch in 2022.
Da die gewünschten Daten im Normalfall aus ein- und derselben Datei kommen müssen, kriegst Du nur Daten aus 2022.
Um Daten aus mehreres Dateien zu mixen, gibt es für den TYPE FileLog ein spezielles Attribut:
ZitatcreateGluedFile
Falls gesetzt (1), und im SVG-Plot ein Zeitbereich abgefragt wird, was in mehreren Logdateien gespeichert ist, dann wird für die Anfrage eine temporäre Datei mit dem Inhalt aller Dateien erzeugt.
Zitat von: OdfFhem am 07 Januar 2023, 19:58:36
Um Daten aus mehreres Dateien zu mixen, gibt es für den TYPE FileLog ein spezielles Attribut:
Ich habe das Attribut gesetzt. Bis jetzt noch keine Änderung. Verändert sich das evtl. erst beim nächsten Schreibvorgang?
Zitat von: DaCracker am 07 Januar 2023, 20:04:57
Ich habe das Attribut gesetzt. Bis jetzt noch keine Änderung. Verändert sich das evtl. erst beim nächsten Schreibvorgang?
Die nächste Anfrage sollte das gesetzte Attribut nutzen.
Hilfreich bei der Problemsuche wäre vielleicht, dass Du eine der gesendeten Abfragen im Browser "abfängst" und hier zeigst ...
"createGluedFile" bedeutet aber, den Teufel mit dem Beelzebub auszutreiben...
Zitat von: betateilchen am 07 Januar 2023, 21:22:10
"createGluedFile" bedeutet aber, den Teufel mit dem Beelzebub auszutreiben...
Gibt es bzgl. FileLog Alternativen ?
... mal abgesehen davon, dass man immer in eine einzige Datei schreibt
Wer lieber DbLog nutzt, wäre natürlich im Vorteil
... obwohl gerade FTUI-Charts zwar auf ein Event reagieren, aber die DB den neuen Wert noch gar nicht kennt
Zitat von: OdfFhem am 07 Januar 2023, 21:39:32
Gibt es bzgl. FileLog Alternativen ?
... mal abgesehen davon, dass man immer in eine einzige Datei schreibt
Bezüglich FileLog nicht, aber wieso fängt FTUI zum Beispiel nicht mit den neuesten Werten an und lässt lieber die alten weg?
Zitat von: OdfFhem am 07 Januar 2023, 21:39:32
... obwohl gerade FTUI-Charts zwar auf ein Event reagieren, aber die DB den neuen Wert noch gar nicht kennt
Kommt vermutlich auf die Konfiguration des DbLog an.
Auch wenn ich jetzt wohl nicht die Optimallösung habe, funktioniert es auf jeden Fall wieder. Danke euch!
Vielleicht steige ich irgendwann, wenn mir furchtbar langweilig ist, auf eine DB Lösung um. Aber bis dahin, komme ich sicher auch damit klar.