Leistungsprognose für Wechselrichter

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

Vorheriges Thema - Nächstes Thema

Wzut

Mal ein kurzer Zwischenstand : ich habe alle NextHour Readings gegen den history hash getauscht.

Bevor ich nun das Rad wieder neu erfinde frage ich lieber :
Für History Werte ( aktuelle Stunde -x ) verwende ich nun  data{$type}{$name}{pvhist}
Das geht für die drei Werte forecast, real , con  so wie es get pvHistory auch liefert.
Beim Wetter muss ich aber nach wie vor data{$type}{$name}{weather} benutzen da das Wetter ja im History hash nicht vorhanden ist ?

Der History hash hat als key ja den Tag - wieviele Tage hast du vor da frisch zu halten ? bzw. was passiert beim Monatswechsel mit den Werten,
werden sie auch als Ringpuffer überschrieben oder gelöscht ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

DS_Starter

#391
Guten Morgen,

Zitat
Der History hash hat als key ja den Tag - wieviele Tage hast du vor da frisch zu halten ? bzw. was passiert beim Monatswechsel mit den Werten,
werden sie auch als Ringpuffer überschrieben oder gelöscht ?
Gelöscht werden die Werte nicht automatisch, aber der User hat die Möglichkeit mit set <> reset pvHistory den Hash zu leeren !
Das ist wichtig falls sich dorthin mal Unsinn verirrt hat.

Beim Monatswechsel wird das Datum 01 in pvHistory einfach wieder überschrieben (als Ringpuffer). Beim Rückwärts scrollen muß man beim Monatswechsel halt nur entscheiden, ob der Vormonat 31,30,28 oder 29 Tage hatte.
Proxmox+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

Wzut

Ok, alles klar.
Noch ein Zwischenruf : Beim Umstellen von ReadingsNum auf den hash sollte man immer im Hinterkopf behalten das mit ReadingsNum oder ReadingsVal als dritter Parameter ein default Wert mitgegeben wurde. Greift man nun beim Umstellen "blind" auf den dazugehörigen hash Wert zu führt ganz schnell zu viel Gemecker im Log wenn es (warum auch immer) den Wert nicht gibt.
Ich habe da ganz viel diese exits Abfragen drin, du bist da etwas sorgloser :) daher habe ich jetzt die Rache in der sub collectSummaries
Dort hast du die Schleife von 1 bis 47 von ReadingsNum auf  $data umgestellt und ich habe einge Fehler im Log, besonders im Bereich ab Index 39.
Ich habe mir jetzt so beholfen das ich in der Schleife den Wert auch erst mit exits prüfe und ggf. ihm eine 0 verpasse falls es ihn nicht gibt.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

DS_Starter

Zitat
Ich habe da ganz viel diese exits Abfragen drin, du bist da etwas sorgloser :) daher habe ich jetzt die Rache in der sub collectSummaries
Dort hast du die Schleife von 1 bis 47 von ReadingsNum auf  $data umgestellt und ich habe einge Fehler im Log, besonders im Bereich ab Index 39.
Naja, ich habe gestern Abend nicht mehr gefunden wieso es die Keys ohne Werte in dem Hash überhaupt gibt. Das macht mir grad Kopfzerbrechen und da sitzt ich momentan drüber. Deswegen, falls Warnings außerhalb der Grafic sub kommen einfach ignorieren, das löse ich. Ich meinen Modulen werden Warnings immer eliminiert.  ;)
Proxmox+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

#394
So, jetzt habe ich die Ursache für die Keys ohne Wert in den Hashes gefunden und beseitigt.
Im Zuge dessen habe ich meine Änderungen in der Graphis sub aus #386 wieder rückgängig gemacht.
Ich hatte einen Fehler in der Logik mit einem weiteren Fehler neutralisiert ... oh man langsam bekomme ich eckige Augen und Knoten ins Hirn ::)

Liegt im contrib.
Proxmox+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

Nochmal eine Kleinigkeit angepasst und hochgeladen.
Proxmox+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

@Wzut, jetzt habe ich den Helper NextHour... eliminiert und auch aus der Graphic sub entfernt.

Dabei ist mir aufgefallen, dass diese Abfrage:


$we{$i} = $data{$hash->{TYPE}}{$name}{nexthours}{'NextHour'.$ii}{weatherid} ? $data{$hash->{TYPE}}{$name}{nexthours}{'NextHour'.$ii}{weatherid} : -1; # für Wettericons


dazu führt, dass der Schlüssel 'NextHour'.$ii leer im Hash angelegt wird wenn er nicht vorhanden ist. Das habe ich jetzt ewig gesucht.  :o

Nun habe ich es so abgeändert:


$we{$i} = $data{$hash->{TYPE}}{$name}{nexthours}{'NextHour'.$ii} ? $data{$hash->{TYPE}}{$name}{nexthours}{'NextHour'.$ii}{weatherid} // -1 : -1; # für Wettericons


Das funktioniert so wie es soll und hat nicht den beschriebenen Nebeneffekt.

Die V liegt wieder im contrib.
Proxmox+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

Wzut

Das meinte ich u.a. auch gestern mit wir müssen uns bald synchronisieren, diese Zeile gibt es bei mir schon etliche Tage nicht mehr
da steht aktuell heute :
$hfcg->{$i}{weather} = (exists($next_hour->{'NextHour'.$nh}{weatherid})) ? $next_hour->{'NextHour'.$nh}{weatherid} : undef;

und so wird halt auch verhindert das nicht vorhandene keys erzeugt werden. Da ich dieses Spiel ständig treibe und ich der einfachen Form ReadingsNum und ReadingsVal nachtrauere :
Wollen wir nicht eine mini sub HashVal / HasNum spendieren , die prüft ob es den Wert gibt und direkt ihn oder default liefert ?
Die obige Zeile würde sich dann verkürzen auf
$hfcg->{$i}{weather} = HashNum($next_hour->{'NextHour'.$nh}{weatherid} , undef);
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

DS_Starter

Alles gut, wollte dich nur auf diesen Effekt hinweisen. Sonst suchst du evtl. auch ewig. Jetzt warte ich bis du eine neue Graphic sub lieferst. Den Helper NextHor gibts jedenfalls nicht mehr.

Zitat
Wollen wir nicht eine mini sub HashVal / HasNum spendieren , die prüft ob es den Wert gibt und direkt ihn oder default liefert ?
Ja, wollen wir  :D  Magst du, oder soll ich ?
Proxmox+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

Wzut

Zitat von: DS_Starter am 21 März 2021, 16:54:32
Magst du, oder soll ich ?
eigentlich geht ja Alter vor Schönheit, aber ich bin ja nicht so und lasse dir den Vortritt :)

Ich bin eigentlich "fast" soweit dir eine neue forecast.pl geben zu können, hänge aber noch an einem Punkt :
Du schriebst ja mal den key '00' gibt es nicht, in pvhistory habe ich aber manchmal einen '00', nun bin ich mir unsicher ob er durch einen Fehler entstanden ist oder du ihn doch eingeführt hast - ich habe jetzt mal die reset Funktion genutzt und schaue wie er sich die Nacht über neu aufbaut.
In jedem Fall wird er jetzt gebraucht, da es mit Sicherheit in dieser Stunde Verbrauch gibt.

Das zurückrechnen auf den richtigen Tag nach Mitternacht wenn history_hour es nötig macht habe ich auch gelöst.
Ich bestimme über den Unix Timestamp neu den Tag.
Dazu hatte ich timelocal benutzt und habe eben erst bemerkt das es ja fhemTimeLocal gibt und ich auf das use Time:Local verzichten kann.
Da ich jetzt schon die History gelöscht habe kann ich es auch nicht mehr gegen prüfen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

Ok, ich geb auf :( Ich habe mich so im hash index Gestrüpp verirrt das ich das mit dem Wetter nicht mehr gebacken bekomme.
Kannst du biite mal drüber schauen ? Die Balken sollten alle stimmen.
Wenn du es übernimmst setze doch bitte history_hour auf max -23 statt bisher -12
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

DS_Starter

Zitat
eigentlich geht ja Alter vor Schönheit, aber ich bin ja nicht so und lasse dir den Vortritt
Ok, ich kümmer mich mal um eine sub.

Zitat
Du schriebst ja mal den key '00' gibt es nicht, in pvhistory habe ich aber manchmal einen '00', nun bin ich mir unsicher ob er durch einen Fehler entstanden ist oder du ihn doch eingeführt hast - ich habe jetzt mal die reset Funktion genutzt und schaue wie er sich die Nacht über neu aufbaut.
In jedem Fall wird er jetzt gebraucht, da es mit Sicherheit in dieser Stunde Verbrauch gibt.
Gibts auch nicht. Kann aner sein dass bei der ganzen Entwicklungstätigkeit da mal was reingerutscht ist.
Aber hier ist es ja auch so dass die Stunde des Tages gilt. Also Stunde 1 bis 24. Die Stunde 24 nutze ich bisher für Aufräumarbeiten, deswegen erscheint die nicht. Das muß ich noch ändern wegen den consumption was es nun gibt.


21 => 01 => pvreal: 0, pvforecast: 0, gridcon: 308
      02 => pvreal: 0, pvforecast: 0, gridcon: 383
      03 => pvreal: 0, pvforecast: 0, gridcon: 301
      04 => pvreal: 0, pvforecast: 0, gridcon: 400
      05 => pvreal: 0, pvforecast: 0, gridcon: 356
      06 => pvreal: 0, pvforecast: 0, gridcon: 396
      07 => pvreal: 0, pvforecast: 8, gridcon: 667
      08 => pvreal: 173, pvforecast: 42, gridcon: 310
      09 => pvreal: 422, pvforecast: 193, gridcon: 250
      10 => pvreal: 523, pvforecast: 448, gridcon: 59
      11 => pvreal: 581, pvforecast: 693, gridcon: 114
      12 => pvreal: 1134, pvforecast: 756, gridcon: 432
      13 => pvreal: 743, pvforecast: 1152, gridcon: 18
      14 => pvreal: 1297, pvforecast: 1250, gridcon: 71
      15 => pvreal: 528, pvforecast: 1115, gridcon: 57
      16 => pvreal: 983, pvforecast: 969, gridcon: 135
      17 => pvreal: 854, pvforecast: 700, gridcon: 43
      18 => pvreal: 156, pvforecast: 252, gridcon: 895
      19 => pvreal: 10, pvforecast: 36, gridcon: 756
      20 => pvreal: 0, pvforecast: 0, gridcon: 365
      21 => pvreal: 0, pvforecast: 0, gridcon: 0
      22 => pvreal: 0, pvforecast: 0, gridcon: 0
      23 => pvreal: 0, pvforecast: 0, gridcon: 0
      99 => pvreal: 7404, pvforecast: 7614, gridcon: 6316


Zitat
Ok, ich geb auf :( Ich habe mich so im hash index Gestrüpp verirrt das ich das mit dem Wetter nicht mehr gebacken bekomme.
Kannst du biite mal drüber schauen ? Die Balken sollten alle stimmen.
Wenn du es übernimmst setze doch bitte history_hour auf max -23 statt bisher -12
Danke, schau ich mir an.
Proxmox+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

@Wzut, hab deine sub implementiert und auch das Attr hochgesetzt. Die Formatierung hab ich angepasst. Irgendwie sind die Einrückungen immer futsch.
Sieht ganz gut aus. Nur bei -x Stunden ist der forecast/real Wert um 1 Stunde versetzt, das was auf 19 steht muß nach 18, 18 nach 17 usw.
Irgendwo in der sub muß in diesem Fall der timestring angepasst werden. Aber dafür war es mir jetzt zu spät zum Suchen.

Liegt im contrib.

LG
Proxmox+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

Wzut

OK, THX damit mache ich heute Nachmittag dann weiter, dieser eine Stunde Versatz sollte ich finden wenn ich immer deine pvHistory Tabelle dagegen halte.
Wegen den Einrücken :
Ich vermute wir verwenden unterschiedliche Editor Einstellungen. Ich hatte irgendwann letztes Jahr als RichardCZ hier gewirbelt hat meinen Editor umgestellt. Ich verwende als Einrückung Blanks. Die Tab Taste erzeugt pro Tastendruck vier Blanks.
Je zwei Tabs bzw acht Blanks zeigt der Editor dann an als <------> aber in einer dunkleren Farbe damit man es nicht mit einer gewollten Eingabe verwechselt. Ich versuch mich jetzt zurückzuhalten und Zeilen von dir nicht anzufassen wenn es nicht nötig ist.

Ach noch eine Kleinigkeit : in der sub formatVal6 fast am Ende
# Werte bleiben in Watt
if (!$vl)    # keine Anzeige bei Null
Warum haben wir das drin ? Vermutlich gabe es damals einen guten Grund nur fält er mir nicht mehr ein :(
egal , wenn also Balken auftauchen ohne jeden Wert und es stört zb bei Anzeige des Verbrauchs dann brauch man nur dies if entfernen und beginnt den Block mit dem ersten elsif.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

#404
Ok erledigt, passt nun. Z.Z. gibt es noch ein Lücke weil es den 00 Key nicht gibt
@@ -1807,7 +1807,7 @@ sub forecastGraphic {
   my ($val,$height);
   my ($z2,$z3,$z4);
   my $he;                                                                                  # Balkenhöhe
-  #my (%is,%di);
+
   my $hfcg      = $data{$hash->{TYPE}}{$name}{html};                                       #(hfcg = hash forecast graphic)
   my $pvhist    = $data{$hash->{TYPE}}{$name}{pvhist};
   my $next_hour = $data{$hash->{TYPE}}{$name}{nexthours};
@@ -2120,6 +2120,8 @@ sub forecastGraphic {
   #$t = (exists($next_hour->{'NextHour00'}{starttime})) ? $next_hour->{'NextHour00'}{starttime}  : '00.00.0000 24';
   ($day_str,$month,$year,$thishour) = $t =~ m/(\d{2}).(\d{2}).(\d{4})\s(\d{2})/x if (AttrVal('global', 'language', '') eq 'DE');

+   $thishour++;
+
   $hfcg->{0}{time_str} = $thishour;
   $thishour            = int($thishour); # keine führende Null

@@ -2168,7 +2170,7 @@ sub forecastGraphic {
       #$val4   = (ReadingsVal($name,"ThisHour_IsConsumptionRecommended",'no') eq 'yes' ) ? $icon : undef;
   }

-  $hfcg->{0}{time_str} .= $hourstyle;
+  $hfcg->{0}{time_str} = sprintf('%02d', $hfcg->{0}{time}-1).$hourstyle;

   $hfcg->{0}{beam1} = ($beam1cont eq 'forecast') ? $val1 : ($beam1cont eq 'real') ? $val2 : ($beam1cont eq 'consumption') ? $val3 : $val4;
   $hfcg->{0}{beam2} = ($beam2cont eq 'forecast') ? $val1 : ($beam2cont eq 'real') ? $val2 : ($beam2cont eq 'consumption') ? $val3 : $val4;
@@ -2242,8 +2244,8 @@ sub forecastGraphic {

       $hfcg->{$i}{time}  = $hfcg->{0}{time} + $i;

-      while ($hfcg->{$i}{time} > 23) {
+      while ($hfcg->{$i}{time} > 24) {

       }

       $hfcg->{$i}{time_str} = sprintf('%02d', $hfcg->{$i}{time});
@@ -2275,7 +2277,7 @@ sub forecastGraphic {
           #$val4   = (ReadingsVal($name,"NextHour".$ii."_IsConsumptionRecommended",'no') eq 'yes') ? $icon : undef;
       }

-      $hfcg->{$i}{time_str} .= $hourstyle;
+      $hfcg->{$i}{time_str} = sprintf('%02d', $hfcg->{$i}{time}-1).$hourstyle;

       $hfcg->{$i}{beam1} = ($beam1cont eq 'forecast') ? $val1 : ($beam1cont eq 'real') ? $val2 : ($beam1cont eq 'consumption') ? $val3 : $val4;
       $hfcg->{$i}{beam2} = ($beam2cont eq 'forecast') ? $val1 : ($beam2cont eq 'real') ? $val2 : ($beam2cont eq 'consumption') ? $val3 : $val4;
@@ -2325,7 +2327,7 @@ sub forecastGraphic {
         for my $i (0..($maxhours*2)-1) {

             last if (!exists($hfcg->{$i}{weather}));
-            next if (!$show_night  && ($hfcg->{$i}{weather} > 99) && !$hfcg->{$i}{beam1} && !$hfcg->{$i}{beam2});
+            next if (!$show_night  && defined($hfcg->{$i}{weather}) && ($hfcg->{$i}{weather} > 99) && !$hfcg->{$i}{beam1} && !$hfcg->{$i}{beam2});
             # Lässt Nachticons aber noch durch wenn es einen Wert gibt , ToDo : klären ob die Nacht richtig gesetzt wurde
             $ii++; # wieviele Stunden Icons haben wir bisher beechnet  ?
             last if ($ii > $maxhours); # vorzeitiger Abbruch
@@ -2378,7 +2380,7 @@ sub forecastGraphic {
     my $ii = 0;
     for my $i (0..($maxhours*2)-1) {
     # gleiche Bedingung wie oben
-    next if (!$show_night  && ($hfcg->{$i}{weather} > 99) && !$hfcg->{$i}{beam1} && !$hfcg->{$i}{beam2});
+    next if (!$show_night  && defined($hfcg->{$i}{weather}) && ($hfcg->{$i}{weather} > 99) && !$hfcg->{$i}{beam1} && !$hfcg->{$i}{beam2});
     $ii++;
     last if ($ii > $maxhours);



Edit : ich schreibe ja schon wieder Mist - es fehlt natürlich der Key 24 und nicht 00 :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher