Leistungsprognose für Wechselrichter

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

Vorheriges Thema - Nächstes Thema

DS_Starter

Zitat
Ja, zusätzliche Readings, die die Stundenwerte jeweils enthalten wären sehr praktisch für Plots und würden es einfacher gestalten.
Sinnvoll wäre dann aber auch gleich Readings für PVreal, PVforecast und GridConsumption.
Dafür hab ich die zusätzlichen Events eingebaut.  ;)
Ich wollte nur die Anzahl Readings insgesamt geringer halten. Allein schon für diese drei (PVreal, PVforecast und GridConsumption) wären das 72 Readings (3 x 24 Stunden) .... und es kommt ja auch nochwas hinzu, wie Verbrauchsvorhersage.  :)

Aber einzelne wie für die aktuelle Stunde oder so, wäre sicher gut machbar.
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

Was aber auch ginge, wäre ein Attribut über welches der User auswählen kann welche Readings er generieren lassen möchte.
Das wäre hier sicherlich auch keine schlechte Variante. Für die Funktion notwendige Readings kommen wie jetzt natürlich immer.
Wie würde euch das gefallen ?
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

eurofinder

Optional einstellbare zusätzliche Readings? Ich könnte auch mit den drei zusätzlichen Readings leben. Wenn ich das mal realistisch betrachte, dann schaut man später in die Devices und Readings eh nur noch selten rein, sondern konzentriert sich eher auf die Darstellungen - da stören mich einige mehr oder weniger eh nicht. Wenn ich mir da anschaue was ein Wettermodul z.B. DWD_OpenDaten aleine für einen Tag an Daten liefert, dann sind die paar von SolarForecast noch wenig:-)

Gruß
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

DS_Starter

Stimmt auch wieder.  :)
Dann schaue ich mal aus den drei zusätzlichen Events Readings zu machen.
Aus technischen Gründen wären es wie jetzt auch die Werte für die letzte abgeschlossene Stunde die dann auch den entspechenden Timestamp hätten.
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

dk3572

Zitat von: DS_Starter am 02 April 2021, 16:01:23
Hallo Dieter, ja ich hatte einige Readings entfernt um die Gesamtzahl zu reduzieren.
Meinst du NextHour00 ?
Könnte ich wiederbeleben wenn es gern genutzt wird.

LG

Hallo Heiko,
wenn NextHour00 die nächste kommende Stunde ist dann meine ich genau diese.
Also aktuell (17:20 Uhr) wäre es dann PV für 18 Uhr.
VG Dieter

DS_Starter

Ok  dann baue ich dieses Reading auch wieder mit ein.
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

Wzut

#486
Ich bin heute Morgen endlich mal mit dem Modul von meinem Testsystem auf das Hauptsystem umgezogen und fummle nun mal wieder an der Grafik ....
Was mich z.Z. ein bissel stört : Ganz unabhängig vom verwendeten FHEM Style kann man irgendwelche Farben für die Balken völlig frei wählen.
beamColor1 & beamColor2 -> gut
Bei der Beschriftung schaut das aber schon ganz anderes aus, z.B. beim Dark Style ist die Schriftfarbe immer weiß, ok wenn man dunkle Balken hat,
aber unschön sobald man z.b. ein helles grau benutzt.
Ist bei einem hellen Style genau so, nur ist dann halt die Schrift immer dunkel.
Lange Rede , kurzer Sinn : wenn ich schon beamColor wählen kann warum nicht auch fontColor ?
Der Screenshot zeigt ein ganz hässliches Beispiel zur Anschauung mit blauer Schrift für die grauen Balken und roter Schrift für die schwarzen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

DS_Starter

Seh schon ...  bist dabei ein neues Attribut einzubauen.   ;D
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

#488
Nun gibt es ein paar neue Readings:

LastHourPVforecast
LastHourPVreal
LastHourGridconsumptionReal
CurrentHourPVforecast

CurrentHourPVforecast entspricht dem früheren NextHour00, also dem Forecast für die aktuelle Stunde.
Die Last.* Readings bekommen auch den relevanten Timestamp damit die Events für das Logging wieder passen.

Liegt 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

eurofinder

Danke, probiere ich aus.

Gruß und frohe Ostertage
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

Wzut

#490
Zitat von: DS_Starter am 02 April 2021, 19:06:05
bist dabei ein neues Attribut einzubauen
Ähh eher zwei :) Jeder Balken kann seine eigene Schriftfarbe haben. Wenn du mir deinen Wunschnamen sagst erstelle ich einen Patch.
Z.Z. habe ich beam(1|2)FontColor
Bei der Gelgenheit habe ich im Ausgabeteil etwas aufgeräumt, da an einigen Stellen die Balkenfarben noch mit defined geprüft werden.
Da aber am Anfang der sub alle Attribute in interne Variblen kopiert und ggf. mit Defaultwerten vorbesetzt werden kann man sich später die ständige Prüfung ersparen und gibt einfach direkt aus.

Edit : hier ein Patch Vorschlag :
--- 76_SolarForecast.pm 2021-04-02 22:38:20.000000000 +0200
+++ 76_SolarForecast.eddy 2021-04-03 07:30:50.109967731 +0200
@@ -375,8 +375,10 @@ sub Initialize {
                                 "autoRefreshFW:$fwd ".
                                 "beam1Color:colorpicker,RGB ".
                                 "beam1Content:forecast,real,gridconsumption ".
+                                 "beam1FontColor:colorpicker,RGB ".
                                 "beam2Color:colorpicker,RGB ".
                                 "beam2Content:forecast,real,gridconsumption ".
+                                "beam2FontColor:colorpicker,RGB ".
                                 "beamHeight ".
                                 "beamWidth ".
                                 # "consumerList ".
@@ -2014,7 +2016,10 @@ sub forecastGraphic {
   my $hourstyle  =  AttrVal ($name, 'hourStyle',              ''  );

   my $colorfc    =  AttrVal ($name, 'beam1Color',         '000000');
-  my $colorc     =  AttrVal ($name, 'beam2Color',         'C4C4A7');               
+  my $colorc     =  AttrVal ($name, 'beam2Color',         'C4C4A7');
+  my $fcolor1    =  AttrVal ($name, 'beam1FontColor',     'C4C4A7');
+  my $fcolor2    =  AttrVal ($name, 'beam2FontColor',     '000000');
+             
   my $beam1cont  =  AttrVal ($name, 'beam1Content',     'forecast');
   my $beam2cont  =  AttrVal ($name, 'beam2Content',     'forecast'); 

@@ -2566,7 +2571,7 @@ sub forecastGraphic {

           $ret .="<table width='100%' height='100%'>";                                                  # mit width=100% etwas bessere Füllung der Balken
           $ret .="<tr class='even' style='height:".$he."px'>";
-          $ret .="<td class='smaportal' style='vertical-align:bottom'>".$val."</td></tr>";
+          $ret .="<td class='smaportal' style='vertical-align:bottom; color:#$fcolor1;'>".$val.'</td></tr>';

           if ($hfcg->{$i}{beam1} || $show_night) {                                                      # Balken nur einfärben wenn der User via Attr eine Farbe vorgibt, sonst bestimmt class odd von TR alleine die Farbe
               my $style = "style=\"padding-bottom:0px; vertical-align:top; margin-left:auto; margin-right:auto;";
@@ -2588,6 +2593,7 @@ sub forecastGraphic {
     
       if ($lotype eq 'double') {
           my ($color1, $color2, $style1, $style2, $v);
+          my $style =  "style='padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";

           $ret .="<table width='100%' height='100%'>\n";                                                         # mit width=100% etwas bessere Füllung der Balken

@@ -2597,27 +2603,23 @@ sub forecastGraphic {
           if($hfcg->{$i}{beam1} > $hfcg->{$i}{beam2}) {                                                          # wer ist oben, Beam2 oder Beam1 ? Wert und Farbe für Zone 2 & 3 vorbesetzen
               $val     = formatVal6($hfcg->{$i}{beam1},$kw,$hfcg->{$i}{weather});
               $color1  = $colorfc;
-              $style1  = "style=\"padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";
-              $style1 .= (defined($color1)) ? " background-color:#$color1\"" : '"';
-                     
+              $style1  = $style." background-color:#$color1; color:#$fcolor1;'";
+
               if($z3) {                                                                                          # die Zuweisung können wir uns sparen wenn Zone 3 nachher eh nicht ausgegeben wird
                   $v       = formatVal6($hfcg->{$i}{beam2},$kw,$hfcg->{$i}{weather});
                   $color2  = $colorc;
-                  $style2  = "style=\"padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";
-                  $style2 .= (defined($color2)) ? " background-color:#$color2\"" : '"';
+                  $style2  = $style." background-color:#$color2; color:#$fcolor2;'";
               }
           }
           else {
               $val     = formatVal6($hfcg->{$i}{beam2},$kw,$hfcg->{$i}{weather});
               $color1  = $colorc;
-              $style1  = "style=\"padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";
-              $style1 .= (defined($color1)) ? " background-color:#$color1\"" : '"';
-                     
+              $style1  = $style." background-color:#$color1; color:#$fcolor2;'";
+       
               if($z3) {
                   $v       = formatVal6($hfcg->{$i}{beam1},$kw,$hfcg->{$i}{weather});
                   $color2  = $colorfc;
-                  $style2  = "style=\"padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";
-                  $style2 .= (defined($color2)) ? " background-color:#$color2\"" : '"';
+                  $style2  = $style." background-color:#$color2; color:#$fcolor1;'";
               }
           }

@@ -2637,7 +2639,7 @@ sub forecastGraphic {
       }

       if ($lotype eq 'diff') {                                                                          # Type diff
-          my $style = "style=\"padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";
+          my $style = "style='padding-bottom:0px; padding-top:1px; vertical-align:top; margin-left:auto; margin-right:auto;";
           $ret .= "<table width='100%' border='0'>\n";                                                  # Tipp : das nachfolgende border=0 auf 1 setzen hilft sehr Ausgabefehler zu endecken

           $val = ($hfcg->{$i}{diff} > 0) ? formatVal6($hfcg->{$i}{diff},$kw,$hfcg->{$i}{weather}) : '';
@@ -2645,11 +2647,11 @@ sub forecastGraphic {

           if ($val) {
               $ret .= "<tr class='even' style='height:".$he."px'>";
-              $ret .= "<td class='smaportal' style='vertical-align:bottom'>".$val."</td></tr>";
+              $ret .= "<td class='smaportal' style='vertical-align:bottom; color:#$fcolor1;'>".$val."</td></tr>";
           }

           if ($hfcg->{$i}{diff} >= 0) {                                                                 # mit Farbe 1 colorfc füllen
-              $style .= defined $colorfc ? " background-color:#$colorfc\"" : '"';
+              $style .= " background-color:#$colorfc'";
               $z2     = 1 if ($hfcg->{$i}{diff} == 0);                                                  # Sonderfall , 1px dünnen Strich ausgeben
               $ret  .= "<tr class='odd' style='height:".$z2."px'>";
               $ret  .= "<td align='center' class='smaportal' ".$style.">";
@@ -2664,7 +2666,7 @@ sub forecastGraphic {
           }
         
           if ($hfcg->{$i}{diff} < 0) {                                                                  # Negativ Balken anzeigen ?
-              $style .= (defined($colorc)) ? " background-color:#$colorc\"" : '"';                      # mit Farbe 2 colorc füllen
+              $style .= " background-color:#$colorc'";                                                  # mit Farbe 2 colorc füllen
               $ret   .= "<tr class='odd' style='height:".$z3."px'>";
               $ret   .= "<td align='center' class='smaportal' ".$style."></td></tr>";
           }
@@ -2676,7 +2678,7 @@ sub forecastGraphic {
           if($z4) {                                                                                     # kann entfallen wenn auch z3 0 ist
               $val  = ($hfcg->{$i}{diff} < 0) ? formatVal6($hfcg->{$i}{diff},$kw,$hfcg->{$i}{weather}) : '&nbsp;';
               $ret .= "<tr class='even' style='height:".$z4."px'>";
-              $ret .= "<td class='smaportal' style='vertical-align:top'>".$val."</td></tr>";
+              $ret .= "<td class='smaportal' style='vertical-align:top; color:#$fcolor2;'>".$val."</td></tr>";
           }
       }

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

dk3572

Zitat von: DS_Starter am 02 April 2021, 22:07:46
Nun gibt es ein paar neue Readings:

LastHourPVforecast
LastHourPVreal
LastHourGridconsumptionReal
CurrentHourPVforecast

CurrentHourPVforecast entspricht dem früheren NextHour00, also dem Forecast für die aktuelle Stunde.
Die Last.* Readings bekommen auch den relevanten Timestamp damit die Events für das Logging wieder passen.

Liegt im contrib.

Hallo Heiko,
das CurrentHourPVforecast steht für die aktuelle Stunde.
Um z.B. 8:50 Uhr hätte ich demnach nur eine Vorhersage für 10 Min. Richtig?
Interessant wäre für mich die kommende Stunde.
Also was in den nächsten 60 Min od. zumindest in der Stunde ab 9 Uhr zur Verfügung steht.
Oder übersehe ich das was?
Danke und VG Dieter

DS_Starter

#492
Moin zusammen,

@Wzut, danke für den Patch. Habe ich direkt übernommen und als V 0.28.0 wieder ins contrib gestellt.

@dk3572, Hi Dieter,
Zitat
Um z.B. 8:50 Uhr hätte ich demnach nur eine Vorhersage für 10 Min. Richtig?
Nein, siehst du nicht richtig. Gerade jetzt steht darin die Vorhersage für die Stunde 09, d.h. von 8:00 - 09:00.
Da sich die Vorhersage aber anpassen kann (wenn der DWD updated) wird das Reading mit jedem interval aktualisiert und hat dementsprechend den Timestamp im Device.
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

dk3572

Zitat von: DS_Starter am 03 April 2021, 08:51:44
@dk3572, Hi Dieter, Nein, siehst du nicht richtig. Gerade jetzt steht darin die Vorhersage für die Stunde 09, d.h. von 8:00 - 09:00.
Da sich die Vorhersage aber anpassen kann (wenn der DWD updated) wird das Reading mit jedem interval aktualisiert und hat dementsprechend den Timestamp im Device.

Entweder reden wir aneinander vorbei od. ich verstehe die Readings nicht richtig.

Bsp.:
Ich möchte die Waschmaschine einschalten, die 60 Min läuft.
Hierfür bräuchte ich die Info, wie viel PV in den nächsten 60 Min zur Verfügung stehen.
Wenn ich also um 8:50 Uhr das CurrentHourPVforecast betrachte, habe ich doch nur eine Vorhersage bis 9 Uhr, also für 10 Min.

DS_Starter

Achso, jetzt verstehe ich was du meinst.
Also die Vorhersagewerte des DWD und dementsprechend im Modul beziehen sich immer auf volle Stunden, also für Stunde 09 steht der Wert für 08:00 - 09:00, für Stunde 10 von 09:00 - 10:00 usw.

Solche Zwischenwerte die du meinst, also z.B. von 08:50 bis 09:50 gibts momentan nicht (gab es auch noch nicht bisher).
Das einzige Reading ist bisher Next04Hours_PV (muss ich noch umbenennen bemerke ich gerade) was die FC für die nächsten 4 Stunden ausgibt aber auch nur volle Stunden betrachtet.

Wenn ich dich richtig verstehe, wäre es hilfreich wenn es nicht nur das Reading Next04Hours_PV gäbe sondern auch Next00Hours_PV (die aktuelle Stunde), Next01Hours_PV (kommende Stunde), Next02Hours_PV, Next03Hours_PV, ....

Meinst du so etwas ? 
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