Leistungsprognose für Wechselrichter

Begonnen von ch.eick, 18 Januar 2021, 08:35:46

Vorheriges Thema - Nächstes Thema

MadMax

Hallo Heiko,

Ja genau, ich hatte gedacht das eventuell auch über ein Attribut setzen zu können.
Das mit dem Löschen hatte ich noch nicht drin, hätte ich aber auch noch eingebaut war erstmal nur eine alpha Version.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

ch.eick

#1261
Zitat von: MadMax am 15 September 2021, 18:39:59
Hallo Heiko,

das soll quasi wie ein rollierender Speicher funktionieren.

$epiecHistCounts = 10 gibt an wie viele Durchläufe im Speicher bleiben sollen, also in dem Fall epiecHist_1 bis epiecHist_10.
Würdest du den Wert auf 20 Stellen epiecHist_1 bis epiecHist_20.

epiecHist => xx ist im Prinzip der Index des Speicherbereichs der aktuell benutzt wird.

epiecHist_xx => 1=224 2=244.5 3=175 4=35.5 ist quasi vom Aufbau genau das gleiche wie epieces =>
epiecHist_xx_hours => 4 gibt an wie viele stunden dieser durchlauf gedauert hat oder halt wie viele einträge epiecHist_xx hat.

epiecAVG => 1=203.3 2=154.3
und
epiecAVG_hours => 2
enthalten die Durchschnittlichen Werte der unter $epiecHistCounts vorgegebenen Durchläufe.

Ich habe deine Version jetzt im einsatz, wo sehe ich dann die aufgezeichneten Werte?

Hallo Christian,

ja jetzt wo ich das google, so in der Art stelle ich mir das vor.
Die Funktion die ich gebastelt habe kann auch über einen Parameter mit einer höheren Auflösung betrieben werden, also nicht Stunde, sondern eventuell auch 1/4 Stunde.

Gruß
Max
Hallo Max,

könntest Du den Code Teil mal per PN mit Erklärungen schicken, dann schau ich mir das auch mal an.
Der gleitendende Mittelwert könnte eventuell auch interessant sein.

EDIT: Ich hätte auch einen Link einer Belgischen Firma, die zum NILM ein Produkt entwickelt hat. Ich bin mir nur nicht sicher, ob ich das hier verlinken darf. Also bei Interesse bitte eine PN.
Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

MadMax

Hallo Christian,

ich würde es kurz hier schreiben.
Ist auch keine Raketenwissenschaft ;)


  ## epieces ermitteln + speichern
      ################################################################
  my $epiecHistCounts = 10; #Anzahl zu speichernder "Zyklen" (epieces)
  if($data{$type}{$name}{consumers}{$c}{OnOff} eq "on")# && $enread) #Verbraucher eingeschaltet?
{
my $epiecHist = "";
my $epiecHist_hours = "";
#neue Aufzeichnung, Werte auf Anfang setzen und epiecHist erhöhen
if($data{$type}{$name}{consumers}{$c}{epiecHour} < 0)
{
$data{$type}{$name}{consumers}{$c}{epiecHist} += 1;
$data{$type}{$name}{consumers}{$c}{epiecHist} = 1 if($data{$type}{$name}{consumers}{$c}{epiecHist} > $epiecHistCounts);

$epiecHist = "epiecHist_".$data{$type}{$name}{consumers}{$c}{epiecHist};
delete $data{$type}{$name}{consumers}{$c}{$epiecHist}; #Löschen, wird neu erfasst
}

#Naven fürs Speichern
    $epiecHist = "epiecHist_".$data{$type}{$name}{consumers}{$c}{epiecHist};
$epiecHist_hours = "epiecHist_".$data{$type}{$name}{consumers}{$c}{epiecHist}."_hours";

#Aktuelle Betriebsstunde ermitteln, ( / 60min) mögliche wäre auch durch 15min
my $epiecHour = floor(($data{$type}{$name}{consumers}{$c}{onTime}) / 60) + 1;

#Stundenwechsel? Differenz von etot noch auf die letzte Stunde abrechnen
if($data{$type}{$name}{consumers}{$c}{epiecHour} != $epiecHour)
{
my $epiecHour_last = $epiecHour - 1;

$data{$type}{$name}{consumers}{$c}{$epiecHist}{$epiecHour_last} = $etot - $data{$type}{$name}{consumers}{$c}{epiecEstart} if($epiecHour > 1);

#etot für Stundenbeginn speichern
$data{$type}{$name}{consumers}{$c}{epiecEstart} =  $etot;
}

#Wete der aktuellen Stunde speichern
$data{$type}{$name}{consumers}{$c}{$epiecHist}{$epiecHour} = $etot - $data{$type}{$name}{consumers}{$c}{epiecEstart};

$data{$type}{$name}{consumers}{$c}{epiecHour} = $epiecHour;
$data{$type}{$name}{consumers}{$c}{$epiecHist_hours} = $epiecHour;
}
else
{
#Durchschnitt ermitteln
if($data{$type}{$name}{consumers}{$c}{epiecHour} > 0)
{
#Durchschnittliche Stunden über alle epieces ermitteln und aufrunden
my $hours = 0;
for my $h (1..$epiecHistCounts) {
my $epiecHist_hours = "epiecHist_".$h."_hours";

$hours += $data{$type}{$name}{consumers}{$c}{$epiecHist_hours};
}

$hours = ceil ($hours / $epiecHistCounts);
$data{$type}{$name}{consumers}{$c}{epiecAVG_hours} = $hours;

#Durchschnitt löschen
delete $data{$type}{$name}{consumers}{$c}{epiecAVG};

#Durchschnitt für epics ermitteln
#Jdes Stunde durchlaufen
for my $hour (1..$hours) {
#Jdes epiec durchlaufen
for my $h (1..$epiecHistCounts) {
    my $epiecHist = "epiecHist_".$h;

$data{$type}{$name}{consumers}{$c}{epiecAVG}{$hour} += $data{$type}{$name}{consumers}{$c}{$epiecHist}{$hour};
}

#Durchschnitt ermittelt und in epiecAVG schreiben
$data{$type}{$name}{consumers}{$c}{epiecAVG}{$hour} = $data{$type}{$name}{consumers}{$c}{epiecAVG}{$hour} / $epiecHistCounts;
}
}

#epiecHour auf initialwert setzen für nächsten durchlauf
$data{$type}{$name}{consumers}{$c}{epiecHour} = -1;
}


Hier mal mein ursprünglicher code zum Erfassen.

Wie Heiko das dann in die PV Prognose einpasst habe ich mir noch nicht angeschaut, interessiert mich aber auch noch.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

DS_Starter

Ich habe jetzt die Abhängigkeit von gespeicherten $etot und das Löschen der Keys wenn kein $etot verfügbar ist eingebaut.
@Max, die Funktionalität ist jetzt in eine eigene sub ___csmSpecificEpieces aufgerufen in __calcEnergyPieces ausgelagert.
Das strukturiert noch besser und erhöht die Übersichtlichkeit/Lesbarkeit.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

MadMax

Hallo Heiko,

Kannst je meine Kommentare nutzen.
Ich überlege mir noch was warum das bei meiner Waschmaschine nicht funktioniert.


Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

DS_Starter

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

@Max, ich denke ich habe noch einen Fehler in der neuen epieces Berechnung entdeckt und gefixt (Zeilen 2924-2927).
Liegt als V 0.56.5 im contrib.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

ch.eick

Zitat von: MadMax am 16 September 2021, 18:30:13
Hallo Christian,

ich würde es kurz hier schreiben.
Ist auch keine Raketenwissenschaft ;)


<...>

Hallo Max,

okay, das kann ich noch überblicken ;-)

Du sammelst die Werte einfach und bildest noch den Durchschnitt.

Hier noch interessante Links für Statistiken, damit nicht alles neu geschrieben werden muss
Fhem Statistics
gleitenden Mittelwert

Was machst Du denn "gedanklich" mit dem Grundrauschen, also all den anderen Verbrauchern?
Bei mit habe ich mitlerweile eine ganze Kaskade von Leistungsmessern (in den Shellys) und kann so bereits viele Verbraucher direkt bestimmen.
Im Dashboard berechne ich daraus dann den Rest des Hauses, also alle nicht direkt gemessenen Verbraucher und komme auf ca. 230 bis 500 Watt,
je nach Tageszeit. Zu meiner Entschuldigung für den Stromverbrauch möchte ich anmerken, dass ich 100% Heimarbeite und ca. 2-4 Computer laufen.
Ich glaube ich sollte mal das Arbeitszimmer messen :-) :-)

Um mit diesem Ansatz weiter in Richtung NILM zu kommen müssten wir aus den Messwerten einzelner Verbraucher vergleichbare Funktionen (eventuell HASH)
erstellen, die dann mit einem Ähnlichkeitsvergleich gegen die Verbrauchskurve ausgewertet werden können.

Ich denke dieser Ansatz könnte zum Erfolg führen "Hierarchical Bloom Filter Trees for Approximate Matching", aber da brauchen wir einen Mathematiker.
Unsere Energieversorger haben dazu bereits für die neuen Messstellen eine Koorporation gebildet und können das ja auch nach meiner kenntnis schon einige Jahre.
Leider habe ich noch keine Library mit Funktionen im open source gefunden :-(

Hier mal die Messwerte meiner Waschmaschine mit dem movingAvarage() über die Leistung.
Das habe ich dann in der Datenbank mal versucht auszuwerten:


VALUE <= movingAvarage()
xDIFF  <= Differenz zum vorherigen VALUE
xDELTA <= Zeitdifferenz zum vorherigen Wert in Minuten

Alle TIMESTAMP wurden auf ganze Minuten geschoben, also :00 Sekunden
Der HASH über alle drei Werte wurde zum Testen mal im SELECT mit berechnet.
+--------+--------+--------+------------------------------------------------------------------+
| VALUE | xDIFF  | xDELTA | HASH                                                             |
+--------+--------+--------+------------------------------------------------------------------+
|   402 |  334.2 |      1 | f4d1c29f9f279a2c00b938757ed20dde4d87917889ec8b87f2e2385fc913faf8 |
|   749 |  346.8 |      1 | b341cbf03a18b5919368ca826afebadc754b62892f6b7173caa07ea0c3de88c8 |
|  1083 |  334.2 |      1 | 2e224d19337c297ea9640dc1ffcf4e1f29c0a7c9f71460d52bb65f8f27d11439 |
|  1413 |  329.5 |      1 | 17d50e573176bedbd86fbce66822154473e40ccd3af6c85f9568657837532c58 |
|  1780 |  366.9 |      1 | 09c1a7925b7d47bb0c1c0b5c9b6e814c753b0b45061257981de58ee9a26e0d0d |
|  2140 |  360.4 |      1 | 8e25127d591843ad73837924657175a28e85ec604405c36a42e398c04dc54799 |
|  2143 |    2.7 |      1 | 1299d6e0cede428c897b514a96cb097057f9e5b1edcd48542fd010ad0cd06717 |
|  1795 | -347.8 |      1 | 007bf7fc316bc3f4a6f4e8bcb27a536703cb320871fc61e4780acd92ebfe966e |
|  1468 | -327.2 |      1 | 5c4d8dfbeb0a1a7f5585ed80fcf9339a5a75bc1d43ee10a8d9b774926fc3eb5c |
|  1123 | -344.5 |      1 | 88209eb0135ffbaaf078419c6cf16bd9b841c27bd063264f398156487bd5c086 |
+--------+--------+--------+------------------------------------------------------------------+


Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#1268
Hallo zusammen,
ich habe nochmal einige Auswertungen gemacht und folgendes ermittelt.

Waschgang Vergleich:

Hier erkennt man eventuell welches Programm gewaschen wurde und es ergibt sich eine Kennzahl für die Waschmaschine.
Die Verwendete Leistung ist nur die gemessene Waschmaschine, also keine anderen Geräte.

Es wurde der movingAvarage() der Leistung verwendet, was bereits im Mess Devive erzeugt wurde. Daraus wurde jeweils die Differenz zum vorherigen Wert ermittelt und aus diesem Wert wieder der Durchschnitt berechnet.
Das Ergebnis ist somit nur noch eine Kennzahl und kein Leistungswert.

Hier mal drei Berechnungen aus der Datenbank.

+-----------+--------------+
| AVG       | count(xDIFF) |
+-----------+--------------+
| 118.27545 |          110 |
|  97.54231 |          104 |
| 108.65702 |          114 |
+-----------+--------------+


Nun habe ich bei der Berechnung mal eine Konstante auf den Leistungswert zugeschlagen, wobei sich die kennzahl nicht verändert hat. Dies würde dann einem Grundrauschen entsprechen.

Wendet man das dann allerdings auf den gesamt Zähler mit allen Geräten an, dann sind die Schwankungen bei gleichzeitig laufenden Verbrauchern zu hoch, um ein einzelnes Gerät zu erkennen. Hier könnte ich in meinem Fall alle bekannten geräte vorher herausrechnen, da ich ja einzel Messwerte habe. Übertragen auf einen Herd oder Kühlschrank in der Küche könnte man sich da dann annähern.
In den Grafiken kann man erkennen, dass am Ende des Waschvorgangs noch die Wärmepumpe dazu gekommen ist.

Das ganze schreit aber dann doch eher nach komplexerer mathematik mit Kurvenverläufen und Ähnlichkeitsvergleichen :-(

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

DS_Starter

Hallo zusammen,

beim letzten Update hat sich leider ein Fehler eingeschlichen der die pvHistory betrifft.
Bitte zieht unbedingt den Bug Fix V 0.56.6 aus dem contrib.

VG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

MadMax

Hallo Zusammen,

Ich werde nächste Woche noch ein par kleine Verbesserungen an der automatischen epic Erkennung einbauen und testen.
Bei meiner Waschmaschine funktioniert die noch nicht so optimal. Wie ist es bei euch so?

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

ch.eick

Zitat von: MadMax am 24 September 2021, 19:34:36
Ich werde nächste Woche noch ein par kleine Verbesserungen an der automatischen epic Erkennung einbauen und testen.
Bei meiner Waschmaschine funktioniert die noch nicht so optimal. Wie ist es bei euch so?
Hallo Max,
mein Stand steht hier
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ClausL

Hallo,

die Tage hatte ich im Log des Homemanager die folgende Meldung:

01.10.2021 00:26:57   Home Manager 2 453   Update auf Version 2.07.5.R erfolgreich

Im Log von FHEM habe ich seither viele Einträge mit

SMAEM SMA_Energymeter - Buffer length 58 is not usual. May be your meter has been updated with a new firmware.

Zunächst dachte ich ja, es läuft noch alles wie gewohnt und habe das daher ignoriert. Mittlerweile musste ich feststellen, dass dies ein Irrtum war. Eigentlich läuft in FHEM alles, was mit SMA zu tun hat, nur noch sporadisch bis gar nicht.

Im Thread zu 77_SMAEM habe ich schon gesucht, aber nichts aktuelles gefunden. Geschrieben habe ich dort auch schon, aber es hat wohl zur Zeit niemand die Zeit, da zu lesen.  ;-)

Daher frage ich mal die Spezialisten: Den Ort, wo die Fehlermeldung entsteht, habe ich schon im Modul 77_SMAEM gefunden. Leider sind meine Kenntnisse in Pearl nicht so gut, dass ich verstehe, wozu das erforderlich ist. Wo muss ich da was ändern, damit alles wieder läuft bis ein Update des Modules da ist? Oder was kann ich sonst noch machen?

Viele Grüße, Claus

ch.eick

Zitat von: ClausL am 06 Oktober 2021, 16:57:12
Im Thread zu 77_SMAEM habe ich schon gesucht, aber nichts aktuelles gefunden. Geschrieben habe ich dort auch schon, aber es hat wohl zur Zeit niemand die Zeit, da zu lesen.  ;-)

Daher frage ich mal die Spezialisten: Den Ort, wo die Fehlermeldung entsteht, habe ich schon im Modul 77_SMAEM gefunden. Leider sind meine Kenntnisse in Pearl nicht so gut, dass ich verstehe, wozu das erforderlich ist. Wo muss ich da was ändern, damit alles wieder läuft bis ein Update des Modules da ist? Oder was kann ich sonst noch machen?
Es könnte Urlaubszeit sein ;-)
Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ClausL

Hallo, Christian

deswegen mein Smiley ;-)