diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index 2b20f7f96..53d37e7c8 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -1,5 +1,5 @@ ######################################################################################################################## -# $Id: 76_SolarForecast.pm 21735 2022-10-29 23:53:24Z DS_Starter $ +# $Id: 76_SolarForecast.pm 21735 2022-10-30 23:53:24Z DS_Starter $ ######################################################################################################################### # 76_SolarForecast.pm # @@ -130,6 +130,7 @@ BEGIN { # Versions History intern my %vNotesIntern = ( + "0.72.0" => "30.10.2022 rename some graphic attributes ", "0.71.4" => "29.10.2022 flowgraphic some changes (https://forum.fhem.de/index.php/topic,117864.msg1241836.html#msg1241836) ", "0.71.3" => "28.10.2022 new circular keys tdayDvtn, ydayDvtn for calculation PV forecast/generation in header ", "0.71.2" => "27.10.2022 fix 'connection lost ...' issue ", @@ -800,14 +801,6 @@ sub Initialize { # $hash->{NotifyFn} = \&Notify; # wird zur Zeit nicht genutzt/verwendet $hash->{AttrList} = "autoRefresh:selectnumbers,120,0.2,1800,0,log10 ". "autoRefreshFW:$fwd ". - "beam1Color:colorpicker,RGB ". - "beam1Content:pvForecast,pvReal,gridconsumption,consumptionForecast ". - "beam1FontColor:colorpicker,RGB ". - "beam2Color:colorpicker,RGB ". - "beam2Content:pvForecast,pvReal,gridconsumption,consumptionForecast ". - "beam2FontColor:colorpicker,RGB ". - "beamHeight ". - "beamWidth ". "cloudFactorDamping:slider,0,1,100 ". "consumerLegend:none,icon_top,icon_bottom,text_top,text_bottom ". "consumerAdviceIcon ". @@ -825,32 +818,39 @@ sub Initialize { "flowGraphicShowConsumerRemainTime:0,1 ". "flowGraphicCss:textField-long ". "follow70percentRule:1,dynamic,0 ". - "forcePageRefresh:1,0 ". - "graphicSelect:both,flow,forecast,none ". + "graphicBeamHeight ". + "graphicBeamWidth:slider,40,10,100 ". + "graphicBeam1Color:colorpicker,RGB ". + "graphicBeam2Color:colorpicker,RGB ". + "graphicBeam1Content:pvForecast,pvReal,gridconsumption,consumptionForecast ". + "graphicBeam2Content:pvForecast,pvReal,gridconsumption,consumptionForecast ". + "graphicBeam1FontColor:colorpicker,RGB ". + "graphicBeam2FontColor:colorpicker,RGB ". + "graphicBeam1MaxVal ". + "graphicHistoryHour:slider,0,1,23 ". + "graphicHourCount:slider,4,1,24 ". + "graphicHourStyle ". + "graphicLayoutType:single,double,diff ". + "graphicSelect:both,flow,forecast,none ". + "graphicShowDiff:no,top,bottom ". + "graphicShowNight:1,0 ". + "graphicShowWeather:1,0 ". + "graphicSpaceSize ". + "graphicStartHtml ". + "graphicEndHtml ". + "graphicWeatherColor:colorpicker,RGB ". + "graphicWeatherColorNight:colorpicker,RGB ". "headerDetail:all,co,pv,pvco,statusLink ". - "historyHour:slider,0,1,23 ". - "hourCount:slider,4,1,24 ". - "hourStyle ". - "htmlStart ". - "htmlEnd ". + "headerShow:1,0 ". "interval ". - "layoutType:single,double,diff ". "maxVariancePerDay ". - "maxValBeam ". "numHistDays:slider,1,1,30 ". "optimizeSolCastAPIreqInterval:1,0 ". "preferredChargeBattery:slider,0,1,100 ". "rainFactorDamping:slider,0,1,100 ". "sameWeekdaysForConsfc:1,0 ". - "showDiff:no,top,bottom ". - "showHeader:1,0 ". "showLink:1,0 ". - "showNight:1,0 ". - "showWeather:1,0 ". - "spaceSize ". "Wh_kWh:Wh,kWh ". - "weatherColor:colorpicker,RGB ". - "weatherColorNight:colorpicker,RGB ". $consumer. $readingFnAttributes; @@ -858,6 +858,30 @@ sub Initialize { # $hash->{FW_addDetailToSummary} = 1; # $hash->{FW_atPageEnd} = 1; # wenn 1 -> kein Longpoll ohne informid in HTML-Tag + + $hash->{AttrRenameMap} = { "beam1Color" => "graphicBeam1Color", + "beam1Content" => "graphicBeam1Content", + "beam1FontColor" => "graphicBeam1FontColor", + "beam2Color" => "graphicBeam2Color", + "beam2Content" => "graphicBeam2Content", + "beam2FontColor" => "graphicBeam2FontColor", + "beamHeight" => "graphicBeamHeight", + "beamWidth" => "graphicBeamWidth", + "historyHour" => "graphicHistoryHour", + "hourCount" => "graphicHourCount", + "hourStyle" => "graphicHourStyle", + "layoutType" => "graphicLayoutType", + "maxValBeam" => "graphicBeam1MaxVal", + "showDiff" => "graphicShowDiff", + "showNight" => "graphicShowNight", + "showWeather" => "graphicShowWeather", + "spaceSize" => "graphicSpaceSize", + "weatherColor" => "graphicWeatherColor", + "weatherColorNight" => "graphicWeatherColorNight", + "htmlStart" => "graphicStartHtml", + "htmlEnd" => "graphicEndHtml", + "showHeader" => "headerShow", + }; eval { FHEM::Meta::InitMod( __FILE__, $hash ) }; ## no critic 'eval' @@ -6214,18 +6238,16 @@ sub entryGraphic { # Parameter f. Anzeige extrahieren ################################### - my $width = AttrNum ($name, 'beamWidth', 6); # zu klein ist nicht problematisch - my $maxhours = AttrNum ($name, 'hourCount', 24); - - my $alias = AttrVal ($name, "alias", $name); # Linktext als Aliasname oder Devicename setzen - my $gsel = AttrVal ($name, 'graphicSelect', 'both'); # Auswahl der anzuzeigenden Grafiken - my $dlink = qq{$alias}; - - my $html_start = AttrVal ($name, 'htmlStart', undef); # beliebige HTML Strings die vor der Grafik ausgegeben werden - my $html_end = AttrVal ($name, 'htmlEnd', undef); # beliebige HTML Strings die nach der Grafik ausgegeben werden + my $width = AttrNum ($name, 'graphicBeamWidth', 20); # zu klein ist nicht problematisch + my $maxhours = AttrNum ($name, 'graphicHourCount', 24); + my $alias = AttrVal ($name, 'alias', $name); # Linktext als Aliasname oder Devicename setzen + my $gsel = AttrVal ($name, 'graphicSelect', 'both'); # Auswahl der anzuzeigenden Grafiken + my $html_start = AttrVal ($name, 'graphicStartHtml', undef); # beliebige HTML Strings die vor der Grafik ausgegeben werden + my $html_end = AttrVal ($name, 'graphicEndHtml', undef); # beliebige HTML Strings die nach der Grafik ausgegeben werden my $w = $width * $maxhours; # gesammte Breite der Ausgabe , WetterIcon braucht ca. 34px + my $offset = -1 * AttrNum ($name, 'graphicHistoryHour', $histhourdef); - my $offset = -1 * AttrNum ($name, 'historyHour', $histhourdef); + my $dlink = qq{$alias}; my $paref = { hash => $hash, @@ -6236,28 +6258,28 @@ sub entryGraphic { modulo => 1, dstyle => qq{style='padding-left: 10px; padding-right: 10px; padding-top: 3px; padding-bottom: 3px;'}, # TD-Style offset => $offset, - hourstyle => AttrVal ($name, 'hourStyle', ''), - colorb1 => AttrVal ($name, 'beam1Color', $b1coldef), - colorb2 => AttrVal ($name, 'beam2Color', $b2coldef), - fcolor1 => AttrVal ($name, 'beam1FontColor', $b1fontcoldef), - fcolor2 => AttrVal ($name, 'beam2FontColor', $b2fontcoldef), - beam1cont => AttrVal ($name, 'beam1Content', 'pvReal'), - beam2cont => AttrVal ($name, 'beam2Content', 'pvForecast'), + hourstyle => AttrVal ($name, 'graphicHourStyle', ''), + colorb1 => AttrVal ($name, 'graphicBeam1Color', $b1coldef), + colorb2 => AttrVal ($name, 'graphicBeam2Color', $b2coldef), + fcolor1 => AttrVal ($name, 'graphicBeam1FontColor', $b1fontcoldef), + fcolor2 => AttrVal ($name, 'graphicBeam2FontColor', $b2fontcoldef), + beam1cont => AttrVal ($name, 'graphicBeam1Content', 'pvReal'), + beam2cont => AttrVal ($name, 'graphicBeam2Content', 'pvForecast'), caicon => AttrVal ($name, 'consumerAdviceIcon', $caicondef), # Consumer AdviceIcon clegend => AttrVal ($name, 'consumerLegend', 'icon_top'), # Lage und Art Cunsumer Legende - lotype => AttrVal ($name, 'layoutType', 'double'), + lotype => AttrVal ($name, 'graphicLayoutType', 'double'), kw => AttrVal ($name, 'Wh_kWh', 'Wh'), - height => AttrNum ($name, 'beamHeight', 200), + height => AttrNum ($name, 'graphicBeamHeight', 200), width => $width, - fsize => AttrNum ($name, 'spaceSize', 24), - maxVal => AttrNum ($name, 'maxValBeam', 0), # dyn. Anpassung der Balkenhöhe oder statisch ? - show_night => AttrNum ($name, 'showNight', 0), # alle Balken (Spalten) anzeigen ? - show_diff => AttrVal ($name, 'showDiff', 'no'), # zusätzliche Anzeige $di{} in allen Typen - weather => AttrNum ($name, 'showWeather', 1), - colorw => AttrVal ($name, 'weatherColor', $wthcolddef), # Wetter Icon Farbe Tag - colorwn => AttrVal ($name, 'weatherColorNight', $wthcolndef), # Wetter Icon Farbe Nacht + fsize => AttrNum ($name, 'graphicSpaceSize', 24), + maxVal => AttrNum ($name, 'graphicBeam1MaxVal', 0), # dyn. Anpassung der Balkenhöhe oder statisch ? + show_night => AttrNum ($name, 'graphicShowNight', 0), # alle Balken (Spalten) anzeigen ? + show_diff => AttrVal ($name, 'graphicShowDiff', 'no'), # zusätzliche Anzeige $di{} in allen Typen + weather => AttrNum ($name, 'graphicShowWeather', 1), + colorw => AttrVal ($name, 'graphicWeatherColor', $wthcolddef), # Wetter Icon Farbe Tag + colorwn => AttrVal ($name, 'graphicWeatherColorNight', $wthcolndef), # Wetter Icon Farbe Nacht wlalias => AttrVal ($name, 'alias', $name), - sheader => AttrNum ($name, 'showHeader', 1), + sheader => AttrNum ($name, 'headerShow', 1), hdrDetail => AttrVal ($name, 'headerDetail', 'all'), # ermöglicht den Inhalt zu begrenzen, um bspw. passgenau in ftui einzubetten lang => AttrVal ("global", 'language', 'EN'), flowgsize => AttrVal ($name, 'flowGraphicSize', $flowGSizedef), # Größe Energieflußgrafik @@ -6399,8 +6421,8 @@ sub _checkSetupNotComplete { my $pv0 = NexthoursVal ($hash, "NextHour00", "pvforecast", undef); # der erste PV ForeCast Wert my $link = qq{$name}; - my $height = AttrNum ($name, 'beamHeight', 200); - my $lang = AttrVal ("global", "language", "EN"); + my $height = AttrNum ($name, 'graphicBeamHeight', 200); + my $lang = AttrVal ("global", 'language', 'EN'); if(IsDisabled($name)) { $ret .= ""; @@ -7198,10 +7220,8 @@ sub _beamGraphic { $val = formatVal6($hfcg->{$i}{diff},$kw,$hfcg->{$i}{weather}); if ($val ne ' ') { # Forum: https://forum.fhem.de/index.php/topic,117864.msg1166215.html#msg1166215 - $val = $hfcg->{$i}{diff} < 0 ? - ''.$val.'' : - $val > 0 ? - '+'.$val : + $val = $hfcg->{$i}{diff} < 0 ? ''.$val.'' : + $val > 0 ? '+'.$val : $val; # negative Zahlen in Fettschrift, 0 aber ohne + } @@ -7271,7 +7291,7 @@ sub _beamGraphic { # z4 - Zahl negativer Wert + fsize my ($px_pos,$px_neg); - my $maxValBeam = 0; # ToDo: maxValBeam noch aus Attribut maxValBeam ableiten + my $maxValBeam = 0; # ToDo: maxValBeam noch aus Attribut graphicBeam1MaxVal ableiten if ($maxValBeam) { # Feste Aufteilung +/- , jeder 50 % bei maxValBeam = 0 $px_pos = int($height/2); @@ -7441,7 +7461,7 @@ sub _beamGraphic { } $ret .= "
"; - $ret .= $hfcg->{$i}{time} == $thishour ? # wenn Hervorhebung nur bei gestztem Attr 'historyHour' ? dann hinzufügen: "&& $offset < 0" + $ret .= $hfcg->{$i}{time} == $thishour ? # wenn Hervorhebung nur bei gestztem Attr 'graphicHistoryHour' ? dann hinzufügen: "&& $offset < 0" ''.$hfcg->{$i}{time_str}.'' : $hfcg->{$i}{time_str}; @@ -7711,9 +7731,10 @@ END1 } if ($flowgconX) { # Dummy Consumer - $ret .= ''; - $ret .= "consumer_X".FW_makeImage('light_light_dim_100', ''); - $ret .= ' '; + my $dumcol = $cc_dummy <= 0 ? '@grey' : q{}; # Einfärbung Consumer Dummy + $ret .= ''; + $ret .= "consumer_X".FW_makeImage('light_light_dim_100'.$dumcol, ''); + $ret .= ' '; } $ret .= << "END2"; @@ -11086,21 +11107,21 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
- -
  • beam1Color
    + +
  • graphicBeam1Color
    Farbauswahl der primären Balken.

  • - -
  • beam1FontColor
    + +
  • graphicBeam1FontColor
    Auswahl der Schriftfarbe des primären Balken.
    (default: 0D0D0D)

  • - -
  • beam1Content
    + +
  • graphicBeam1Content
    Legt den darzustellenden Inhalt der primären Balken fest.
      @@ -11115,21 +11136,21 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
      - -
    • beam2Color
      + +
    • graphicBeam2Color
      Farbauswahl der sekundären Balken. Die zweite Farbe ist nur sinnvoll für den Anzeigedevice-Typ "pvco" und "diff".

    • - -
    • beam2FontColor
      + +
    • graphicBeam2FontColor
      Auswahl der Schriftfarbe des sekundären Balken.
      (default: 000000)

    • - -
    • beam2Content
      + +
    • graphicBeam2Content
      Legt den darzustellenden Inhalt der sekundären Balken fest.
        @@ -11144,18 +11165,18 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
        - -
      • beamHeight <value>
        + +
      • graphicBeamHeight <value>
        Höhe der Balken in px und damit Bestimmung der gesammten Höhe. - In Verbindung mit "hourCount" lassen sich damit auch recht kleine Grafikausgaben erzeugen.
        + In Verbindung mit "graphicHourCount" lassen sich damit auch recht kleine Grafikausgaben erzeugen.
        (default: 200)

      • - -
      • beamWidth <value>
        - Breite der Balken in px.
        - (default: 6 (auto)) + +
      • graphicBeamWidth <value>
        + Breite der Balken der Balkengrafik in px. Ohne gesetzen Attribut wird die Balkenbreite durch das Modul + automatisch bestimmt.

      • @@ -11451,14 +11472,6 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen

    • - - -
    • forcePageRefresh
      - Das Attribut wird durch das SMAPortal-Device ausgewertet.
      - Wenn gesetzt, wird ein Reload aller Browserseiten mit aktiven FHEMWEB-Verbindungen nach dem Update des - Eltern-SMAPortal-Devices erzwungen. -
    • -
    • graphicSelect
      @@ -11469,50 +11482,50 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
        - + - +
        both zeigt Energiefluß- und Vorhersagegrafik an (default)
        both zeigt Energiefluß- und Balkengrafik an (default)
        flow zeigt die Energieflußgrafik an
        forecast zeigt die Vorhersagegrafik an
        forecast zeigt die Balkengrafik an
        none es wird keine Grafik angezeigt

    • - -
    • historyHour
      + +
    • graphicHistoryHour
      Anzahl der vorangegangenen Stunden die in der Balkengrafik dargestellt werden.
      (default: 2)

    • - -
    • hourCount <4...24>
      - Anzahl der Balken/Stunden.
      + +
    • graphicHourCount <4...24>
      + Anzahl der Balken/Stunden in der Balkengrafk.
      (default: 24)

    • headerDetail
      - Detailiierungsgrad der Kopfzeilen.
      + Detaillierungsgrad des Kopfbereiches.
      (default: all)
        - - + + - +
        all Anzeige Erzeugung (PV), Verbrauch (CO), Link zur Device Detailanzeige + Aktualisierungszeit (default)
        all Anzeige Erzeugung (PV), Verbrauch (CO), Link zur Detailanzeige + Aktualisierungszeit (default)
        co nur Verbrauch (CO)
        pv nur Erzeugung (PV)
        pvco Erzeugung (PV) und Verbrauch (CO)
        statusLink Link zur Device Detailanzeige + Aktualisierungszeit
        statusLink Link zur Detailanzeige + Statusinformationen

    • - -
    • hourStyle
      - Format der Zeitangabe.

      + +
    • graphicHourStyle
      + Format der Zeitangabe in der Balkengrafik.

        @@ -11525,14 +11538,14 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
        - -
      • htmlStart <HTML-String>
        + +
      • graphicStartHtml <HTML-String>
        Angabe eines beliebigen HTML-Strings der vor dem Grafik-Code ausgeführt wird.

      • - -
      • htmlEnd <HTML-String>
        + +
      • graphicEndHtml <HTML-String>
        Angabe eines beliebigen HTML-Strings der nach dem Grafik-Code ausgeführt wird.

      • @@ -11545,11 +11558,11 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen (default: 70)
        - -
      • layoutType <single | double | diff>
        + +
      • graphicLayoutType <single | double | diff>
        Layout der Balkengrafik.
        - Der darzustellende Inhalt der Balken wird durch die Attribute beam1Content bzw. beam2Content - bestimmt. + Der darzustellende Inhalt der Balken wird durch die Attribute graphicBeam1Content bzw. + graphicBeam2Content bestimmt.

          @@ -11563,11 +11576,11 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
          - -
        • maxValBeam <0...val>
          + +
        • graphicBeam1MaxVal <0...val>
          Festlegung des maximalen Betrags des primären Balkens (Stundenwert) zur Berechnung der maximalen Balkenhöhe. Dadurch erfolgt eine Anpassung der zulässigen Gesamthöhe der Grafik.
          - Wenn nicht gesetzt oder 0, erfolgt eine dynamische Anpassung.
          + Mit dem Wert "0" erfolgt eine dynamische Anpassung.
          (default: 0)

        • @@ -11626,16 +11639,17 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
          - -
        • showDiff <no | top | bottom>
          - Zusätzliche Darstellung der Differenz "beam1Content - beam2Content" im Kopf- oder Fußbereich der Anzeige.
          + +
        • graphicShowDiff <no | top | bottom>
          + Zusätzliche Anzeige der Differenz "graphicBeam1Content - graphicBeam2Content" im Kopf- oder Fußbereich der + Balkengrafik.
          (default: no)

        • - -
        • showHeader
          - Anzeige der Kopfzeile mit Prognosedaten, Rest des aktuellen Tages und des nächsten Tages
          + +
        • headerShow
          + Anzeigen/Verbergen des Tabellenkopfes mit Prognosedaten sowie bestimmten aktuellen und statistischen Werten.
          (default: 1)

        • @@ -11647,16 +11661,16 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
          - -
        • showNight
          - Die Nachtstunden (ohne Ertragsprognose) werden mit angezeigt.
          + +
        • graphicShowNight
          + Anzeigen/Verbergen der Nachtstunden (ohne Ertragsprognose) in der Balkengrafik.
          (default: 0)

        • - -
        • showWeather
          - Wettericons anzeigen.
          + +
        • graphicShowWeather
          + Wettericons in der Balkengrafik anzeigen/verbergen.
          (default: 1)

        • @@ -11679,8 +11693,8 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen
          - -
        • spaceSize <value>
          + +
        • graphicSpaceSize <value>
          Legt fest wieviel Platz in px über oder unter den Balken (bei Anzeigetyp Differential (diff)) zur Anzeige der Werte freigehalten wird. Bei Styles mit große Fonts kann der default-Wert zu klein sein bzw. rutscht ein Balken u.U. über die Grundlinie. In diesen Fällen bitte den Wert erhöhen.
          @@ -11695,14 +11709,14 @@ Ein/Ausschaltzeiten sowie deren Ausführung vom SolarForecast Modul übernehmen

        • - -
        • weatherColor
          - Farbe der Wetter-Icons. + +
        • graphicWeatherColor
          + Farbe der Wetter-Icons in der Balkengrafik für die Tagesstunden.

        • - -
        • weatherColorNight
          + +
        • graphicWeatherColorNight
          Farbe der Wetter-Icons für die Nachtstunden.