2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 16:05:19 +00:00

76_SolarForecast: contrib 1.34.2

git-svn-id: https://svn.fhem.de/fhem/trunk@29203 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2024-10-06 12:01:45 +00:00
parent 82174d5e5b
commit 22397fb1c8

View File

@ -483,6 +483,7 @@ my $b4coldef = 'DBDBD0';
my $b4fontcoldef = '000000'; # default Schriftfarbe Beam 4 my $b4fontcoldef = '000000'; # default Schriftfarbe Beam 4
my $fgCDdef = 130; # Abstand Verbrauchericons zueinander my $fgCDdef = 130; # Abstand Verbrauchericons zueinander
my $fgscaledef = 0.10; # Scale Normativ Icons in Flowgreafik
my $prodicondef = 'sani_garden_pump'; # default Producer-Icon my $prodicondef = 'sani_garden_pump'; # default Producer-Icon
my $cicondef = 'light_light_dim_100'; # default Consumer-Icon my $cicondef = 'light_light_dim_100'; # default Consumer-Icon
my $ciconcoldef = 'darkorange'; # default Consumer-Icon Färbung my $ciconcoldef = 'darkorange'; # default Consumer-Icon Färbung
@ -13969,7 +13970,7 @@ sub _flowGraphic {
my $soc = ReadingsNum ($name, 'Current_BatCharge', 100); my $soc = ReadingsNum ($name, 'Current_BatCharge', 100);
my $cc_dummy = $cc; my $cc_dummy = $cc;
my $scale = 0.10; # default Scale my $scale = $fgscaledef;
my $hasbat = 1; # initial Batterie vorhanden my $hasbat = 1; # initial Batterie vorhanden
my $flowgprods = 1; # Producer in der Energieflußgrafik anzeigen per default my $flowgprods = 1; # Producer in der Energieflußgrafik anzeigen per default
my $ppcurr = {}; # Hashref Producer current power my $ppcurr = {}; # Hashref Producer current power
@ -14110,8 +14111,9 @@ END0
} }
); );
$picon = FW_makeImage ($picon, ''); $picon = FW_makeImage ($picon, '');
$scale = __normIconScale ($name, $picon); ($scale, $picon) = __normIconScale ($name, $picon);
$ret .= qq{<g id="producer_$prnxnum" fill="grey" transform="translate($pos_left,0),scale($scale)">}; $ret .= qq{<g id="producer_$prnxnum" fill="grey" transform="translate($pos_left,0),scale($scale)">};
$ret .= "<title>$palias</title>".$picon; $ret .= "<title>$palias</title>".$picon;
$ret .= '</g> '; $ret .= '</g> ';
@ -14148,32 +14150,34 @@ END0
); );
$cc_dummy -= $currentPower; $cc_dummy -= $currentPower;
$cicon = FW_makeImage ($cicon, ''); $cicon = FW_makeImage ($cicon, '');
$scale = __normIconScale ($name, $cicon); ($scale, $cicon) = __normIconScale ($name, $cicon);
$ret .= qq{<g id="consumer_$c" transform="translate($pos_left,485),scale($scale)">};
$ret .= "<title>$calias</title>".$cicon; $ret .= qq{<g id="consumer_$c" transform="translate($pos_left,485),scale($scale)">};
$ret .= '</g> '; $ret .= "<title>$calias</title>".$cicon;
$ret .= '</g> ';
$pos_left += $consDist; $pos_left += $consDist;
} }
} }
## Sonne / Mond Icon ## Inverter Icon
###################### ######################
my ($smicon, $smtxt) = __substituteIcon ( { hash => $hash, my ($iicon, $smtxt) = __substituteIcon ( { hash => $hash,
name => $name, name => $name,
in => '01', in => '01',
don => NexthoursVal ($hash, 'NextHour00', 'DoN', 0), # Tag oder Nacht don => NexthoursVal ($hash, 'NextHour00', 'DoN', 0), # Tag oder Nacht
pcurr => $cpv, pcurr => $cpv,
lang => $lang lang => $lang
} }
); );
$smicon = FW_makeImage ($smicon, ''); $iicon = FW_makeImage ($iicon, '');
$scale = __normIconScale ($name, $smicon); ($scale, $iicon) = __normIconScale ($name, $iicon);
$ret .= qq{<g id="Inverter" transform="translate(360,165),scale($scale)">}; # translate(X-Koordinate,Y-Koordinate), scale(<Größe>)-> Koordinaten ändern sich bei Größenänderung
$ret .= "<title>$smtxt</title>".$smicon; $ret .= qq{<g id="Inverter" transform="translate(360,165),scale($scale)">}; # translate(X-Koordinate,Y-Koordinate), scale(<Größe>)-> Koordinaten ändern sich bei Größenänderung
$ret .= '</g> '; $ret .= "<title>$smtxt</title>".$iicon;
$ret .= '</g> ';
## Batterie Icon ## Batterie Icon
################## ##################
@ -14193,8 +14197,9 @@ END1
## Home Icon ## Home Icon
############## ##############
my $hicon = FW_makeImage ($homeicondef, ''); my $hicon = FW_makeImage ($homeicondef, '');
$scale = __normIconScale ($name, $hicon); ($scale, $hicon) = __normIconScale ($name, $hicon);
$ret .= qq{<g id="Home" transform="translate(368,360),scale($scale)">}; # translate(X-Koordinate,Y-Koordinate), scale(<Größe>)-> Koordinaten ändern sich bei Größenänderung $ret .= qq{<g id="Home" transform="translate(368,360),scale($scale)">}; # translate(X-Koordinate,Y-Koordinate), scale(<Größe>)-> Koordinaten ändern sich bei Größenänderung
$ret .= "<title>Home</title>".$hicon; $ret .= "<title>Home</title>".$hicon;
$ret .= '</g> '; $ret .= '</g> ';
@ -14202,13 +14207,14 @@ END1
## Dummy Consumer Icon ## Dummy Consumer Icon
######################## ########################
if ($flowgconX) { if ($flowgconX) {
my $dumtxt = $htitles{dumtxt}{$lang}; my $dumtxt = $htitles{dumtxt}{$lang};
my $dumcol = $cc_dummy <= 0 ? '@grey' : q{}; # Einfärbung Consumer Dummy my $dumcol = $cc_dummy <= 0 ? '@grey' : q{}; # Einfärbung Consumer Dummy
my $dicon = FW_makeImage ($cicondef.$dumcol, ''); my $dicon = FW_makeImage ($cicondef.$dumcol, '');
$scale = __normIconScale ($name, $dicon); ($scale, $dicon) = __normIconScale ($name, $dicon);
$ret .= qq{<g id="consumer_X" transform="translate(520,360),scale($scale)">};
$ret .= "<title>$dumtxt</title>".$dicon; $ret .= qq{<g id="consumer_X" transform="translate(520,360),scale($scale)">};
$ret .= '</g> '; $ret .= "<title>$dumtxt</title>".$dicon;
$ret .= '</g> ';
} }
## Laufketten PV->Home, PV->Grid, Grid->Home ## Laufketten PV->Home, PV->Grid, Grid->Home
@ -14504,28 +14510,50 @@ return ($icon, $txt);
} }
################################################################ ################################################################
# berechne Icon Scale auf Bezugsnorm # berechne Icon width, height auf Sollnormativ
# widht: 470pt # width: 470pt
# height: 470pt # height: 470pt
# scale: 0.10 # scale: 0.10 Normativ $fgscaledef
################################################################ ################################################################
sub __normIconScale { sub __normIconScale {
my $name = shift; my $name = shift;
my $icon = shift; my $icon = shift;
my $scale = 0.10; # default Scale my $hscale = $fgscaledef; # Scale Normativ
my ($height, $unit) = $icon =~ /height="(\d+\.\d+|\d+)(.*?)"/xs; my $wscale = $fgscaledef;
my ($width, $wunit) = $icon =~ /width="(\d+\.\d+|\d+)(.*?)"/xs;
my ($height, $hunit) = $icon =~ /height="(\d+\.\d+|\d+)(.*?)"/xs;
return $scale if(!$height); return ($hscale, $icon) if(!$width || !$height);
my $scale = $unit eq 'pt' ? 470 * $scale /$height : $wscale = $hunit eq 'pt' ? 470 * $wscale / $width :
$unit eq 'px' ? 470 * $scale /$height * 0.96 : $hunit eq 'px' ? 470 * $wscale / $width * 0.96 :
$unit eq 'in' ? 470 * $scale /$height * 0.0138889 : $hunit eq 'in' ? 470 * $wscale / $width * 0.0138889 :
$scale; $hunit eq 'mm' ? 470 * $wscale / $width * 0.352778 :
$hunit eq 'cm' ? 470 * $wscale / $width * 0.0352778 :
$hunit eq 'pc' ? 470 * $wscale / $width * 12 :
$wscale;
$hscale = $hunit eq 'pt' ? 470 * $hscale / $height :
$hunit eq 'px' ? 470 * $hscale / $height * 0.96 :
$hunit eq 'in' ? 470 * $hscale / $height * 0.0138889 :
$hunit eq 'mm' ? 470 * $hscale / $height * 0.352778 :
$hunit eq 'cm' ? 470 * $hscale / $height * 28.346 :
$hunit eq 'pc' ? 470 * $hscale / $height * 12 :
$hscale;
$wscale = sprintf "%.2f", $wscale;
$hscale = sprintf "%.2f", $hscale;
$scale = sprintf "%.2f", $scale; my $widthnormpt = (sprintf "%.0f", (470 * (1 + $wscale))).'pt'; # Breite auf Normativ in pt skaliert
my $heightnormpt = (sprintf "%.0f", (470 * (1 + $hscale))).'pt'; # Höhe auf Normativ in pt skaliert
return $scale;
$icon =~ s/width="(.*?)"/width="$widthnormpt"/;
$icon =~ s/height="(.*?)"/height="$heightnormpt"/;
# Log3 ($name, 2, "$name - widthnormpt: $widthnormpt, heightnormpt: $heightnormpt");
return ($fgscaledef, $icon);
} }
################################################################ ################################################################