[gelöst] SVG / Plot mit einem Wert pro Tag

Begonnen von DaCracker, 04 Juli 2022, 14:26:48

Vorheriges Thema - Nächstes Thema

DaCracker

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

Nobbynews

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.

DaCracker

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


Helmi55

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
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

Nobbynews

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.

Prof. Dr. Peter Henning

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


DaCracker

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.

Nobbynews

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

DaCracker

Ja ist mir auch aufgefallen, man sollte sowas nicht mit dem iPad machen :(

DaCracker

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

Nobbynews

In der def des at fehlt am Ende die }.

MadMax-FHEM

#11
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Nobbynews

#12
Ah, ok. Habe ich auf dem Smartphone übersehen.
Das at dann aber mal über
set dailyStromerzeugungSchreiben execNow
ausprobieren.

DaCracker

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.



MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)