mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 12:49:34 +00:00
76_SolarForecast: contrib 1.34.2
git-svn-id: https://svn.fhem.de/fhem/trunk@29194 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0270f202cd
commit
27ffb851cc
@ -156,6 +156,8 @@ BEGIN {
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
my %vNotesIntern = (
|
my %vNotesIntern = (
|
||||||
|
"1.34.2" => "04.10.2024 _flowGraphic: replace sun by FHEM SVG-Icon ",
|
||||||
|
"1.34.1" => "04.10.2024 _flowGraphic: replace house by FHEM SVG-Icon ",
|
||||||
"1.34.0" => "03.10.2024 implement ___areaFactorTrack for calculation of direct area factor and share of direct radiation ".
|
"1.34.0" => "03.10.2024 implement ___areaFactorTrack for calculation of direct area factor and share of direct radiation ".
|
||||||
"note in Reading pvCorrectionFactor_XX if AI prediction was used in relevant hour ".
|
"note in Reading pvCorrectionFactor_XX if AI prediction was used in relevant hour ".
|
||||||
"AI usage depending either of available number of rules or difference to api forecast ".
|
"AI usage depending either of available number of rules or difference to api forecast ".
|
||||||
@ -482,6 +484,8 @@ my $fgCDdef = 130;
|
|||||||
|
|
||||||
my $prodicondef = 'sani_garden_pump'; # default Producer-Icon
|
my $prodicondef = 'sani_garden_pump'; # default Producer-Icon
|
||||||
my $consicondef = 'light_light_dim_100'; # default Consumer-Icon
|
my $consicondef = 'light_light_dim_100'; # default Consumer-Icon
|
||||||
|
my $homeicondef = 'control_building_control@grey'; # default Home-Icon
|
||||||
|
my $sunicondef = 'weather_sun'; # default Sonne-icon
|
||||||
|
|
||||||
my $bPath = 'https://svn.fhem.de/trac/browser/trunk/fhem/contrib/SolarForecast/'; # Basispfad Abruf contrib SolarForecast Files
|
my $bPath = 'https://svn.fhem.de/trac/browser/trunk/fhem/contrib/SolarForecast/'; # Basispfad Abruf contrib SolarForecast Files
|
||||||
my $pPath = '?format=txt'; # Download Format
|
my $pPath = '?format=txt'; # Download Format
|
||||||
@ -489,8 +493,6 @@ my $cfile = 'controls_solarforecast.txt';
|
|||||||
|
|
||||||
# default CSS-Style
|
# default CSS-Style
|
||||||
my $cssdef = qq{.flowg.text { stroke: none; fill: gray; font-size: 60px; } \n}.
|
my $cssdef = qq{.flowg.text { stroke: none; fill: gray; font-size: 60px; } \n}.
|
||||||
qq{.flowg.sun_active { stroke: orange; fill: orange; } \n}.
|
|
||||||
qq{.flowg.sun_inactive { stroke: gray; fill: gray; } \n}.
|
|
||||||
qq{.flowg.bat25 { stroke: red; fill: red; } \n}.
|
qq{.flowg.bat25 { stroke: red; fill: red; } \n}.
|
||||||
qq{.flowg.bat50 { stroke: darkorange; fill: darkorange; } \n}.
|
qq{.flowg.bat50 { stroke: darkorange; fill: darkorange; } \n}.
|
||||||
qq{.flowg.bat75 { stroke: green; fill: green; } \n}.
|
qq{.flowg.bat75 { stroke: green; fill: green; } \n}.
|
||||||
@ -920,6 +922,8 @@ my %htitles = (
|
|||||||
DE => qq{nicht bewertet} },
|
DE => qq{nicht bewertet} },
|
||||||
aimstt => { EN => qq{Perl module AI::DecisionTree is missing},
|
aimstt => { EN => qq{Perl module AI::DecisionTree is missing},
|
||||||
DE => qq{Perl Modul AI::DecisionTree ist nicht vorhanden} },
|
DE => qq{Perl Modul AI::DecisionTree ist nicht vorhanden} },
|
||||||
|
dumtxt => { EN => qq{Consumption that cannot be allocated to registered consumers},
|
||||||
|
DE => qq{Verbrauch der den registrierten Verbrauchern nicht zugeordnet werden kann} },
|
||||||
pstate => { EN => qq{Planning status: <pstate>\nInfo: <supplmnt>\n\nOn: <start>\nOff: <stop>\nRemaining lock time: <RLT> seconds},
|
pstate => { EN => qq{Planning status: <pstate>\nInfo: <supplmnt>\n\nOn: <start>\nOff: <stop>\nRemaining lock time: <RLT> seconds},
|
||||||
DE => qq{Planungsstatus: <pstate>\nInfo: <supplmnt>\n\nEin: <start>\nAus: <stop>\nverbleibende Sperrzeit: <RLT> Sekunden} },
|
DE => qq{Planungsstatus: <pstate>\nInfo: <supplmnt>\n\nEin: <start>\nAus: <stop>\nverbleibende Sperrzeit: <RLT> Sekunden} },
|
||||||
ainuse => { EN => qq{AI Perl module is installed, but the AI support is not used.\nRun 'set <NAME> plantConfiguration check' for hints.},
|
ainuse => { EN => qq{AI Perl module is installed, but the AI support is not used.\nRun 'set <NAME> plantConfiguration check' for hints.},
|
||||||
@ -13904,6 +13908,7 @@ sub _flowGraphic {
|
|||||||
my $flowgconPower = $paref->{flowgconsPower};
|
my $flowgconPower = $paref->{flowgconsPower};
|
||||||
my $consDist = $paref->{flowgconsDist};
|
my $consDist = $paref->{flowgconsDist};
|
||||||
my $css = $paref->{css};
|
my $css = $paref->{css};
|
||||||
|
my $lang = $paref->{lang};
|
||||||
|
|
||||||
my $style = 'width:98%; height:'.$flowgsize.'px;';
|
my $style = 'width:98%; height:'.$flowgsize.'px;';
|
||||||
my $animation = $flowgani ? '@keyframes dash { to { stroke-dashoffset: 0; } }' : ''; # Animation Ja/Nein
|
my $animation = $flowgani ? '@keyframes dash { to { stroke-dashoffset: 0; } }' : ''; # Animation Ja/Nein
|
||||||
@ -14004,20 +14009,15 @@ sub _flowGraphic {
|
|||||||
$p2home = sprintf "%.0f", $p2home if($p2home > 10);
|
$p2home = sprintf "%.0f", $p2home if($p2home > 10);
|
||||||
$p2home = 0 if($p2home == 0); # 0.0 eliminieren wenn keine Leistung zum Haus
|
$p2home = 0 if($p2home == 0); # 0.0 eliminieren wenn keine Leistung zum Haus
|
||||||
|
|
||||||
## SVG Box initialisieren
|
## SVG Box initialisieren mit Grid-Icon
|
||||||
###########################
|
#########################################
|
||||||
my $sun_color = $cpv ? 'flowg sun_active' : 'flowg sun_inactive';
|
my $vbwidth = 800; # width and height specify the viewBox size
|
||||||
my $batin_style = $batin ? 'flowg active_in active_bat_in' : 'flowg inactive_out';
|
my $vbminx = -10 * $flowgshift; # min-x and min-y represent the smallest X and Y coordinates that the viewBox may have
|
||||||
my $csc_style = $p2home ? 'flowg active_out' : 'flowg inactive_out';
|
my $vbminy = $flowgprods ? -25 : 100;
|
||||||
my $cgfi_style = $cgfi ? 'flowg active_out' : 'flowg inactive_out';
|
|
||||||
|
|
||||||
my $vbwidth = 800; # width and height specify the viewBox size
|
my $vbhight = !$flowgcons ? 380 :
|
||||||
my $vbminx = -10 * $flowgshift; # min-x and min-y represent the smallest X and Y coordinates that the viewBox may have
|
!$flowgconTime ? 590 :
|
||||||
my $vbminy = $flowgprods ? -25 : 100;
|
610;
|
||||||
|
|
||||||
my $vbhight = !$flowgcons ? 380 :
|
|
||||||
!$flowgconTime ? 590 :
|
|
||||||
610;
|
|
||||||
|
|
||||||
$vbhight += 100 if($flowgprods);
|
$vbhight += 100 if($flowgprods);
|
||||||
|
|
||||||
@ -14031,38 +14031,6 @@ sub _flowGraphic {
|
|||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="$vbox" style="$style" id="SVGPLOT">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="$vbox" style="$style" id="SVGPLOT">
|
||||||
|
|
||||||
<g transform="translate(400,200)">
|
|
||||||
<g>
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(45)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(90)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(135)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(180)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(225)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(270)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<g transform="rotate(315)">
|
|
||||||
<line class="$sun_color" stroke-linecap="round" stroke-width="5" transform="translate(0,9)" x1="0" x2="0" y1="16" y2="24" />
|
|
||||||
</g>
|
|
||||||
<circle cx="0" cy="0" class="$sun_color" r="16" stroke-width="2"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="home" fill="grey" transform="translate(352,340),scale(4)">
|
|
||||||
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="grid" class="$grid_color" transform="translate(215,260),scale(3.0)">
|
<g id="grid" class="$grid_color" transform="translate(215,260),scale(3.0)">
|
||||||
<path d="M15.3,2H8.7L2,6.46V10H4V8H8v2.79l-4,9V22H6V20.59l6-3.27,6,3.27V22h2V19.79l-4-9V8h4v2h2V6.46ZM14,4V6H10V4ZM6.3,6,8,4.87V6Zm8,6L15,13.42,12,15,9,13.42,9.65,12ZM7.11,17.71,8.2,15.25l1.71.93Zm8.68-2.46,1.09,2.46-2.8-1.53ZM14,10H10V8h4Zm2-5.13L17.7,6H16Z"/>
|
<path d="M15.3,2H8.7L2,6.46V10H4V8H8v2.79l-4,9V22H6V20.59l6-3.27,6,3.27V22h2V19.79l-4-9V8h4v2h2V6.46ZM14,4V6H10V4ZM6.3,6,8,4.87V6Zm8,6L15,13.42,12,15,9,13.42,9.65,12ZM7.11,17.71,8.2,15.25l1.71.93Zm8.68-2.46,1.09,2.46-2.8-1.53ZM14,10H10V8h4Zm2-5.13L17.7,6H16Z"/>
|
||||||
</g>
|
</g>
|
||||||
@ -14130,11 +14098,17 @@ END0
|
|||||||
$pos_left += $consDist;
|
$pos_left += $consDist;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Sonne Icon
|
||||||
|
##############
|
||||||
|
my $suncolor = $cpv ? 'orange' : 'grey';
|
||||||
|
$ret .= '<g id="Sonne" fill="grey" transform="translate(355,165),scale(0.12)">'; # translate(X-Koordinate,Y-Koordinate), scale(<Größe>)-> Koordinaten ändern sich bei Größenänderung
|
||||||
|
$ret .= "<title>Sonne</title>".FW_makeImage($sunicondef.'@'.$suncolor, '');
|
||||||
|
$ret .= '</g> ';
|
||||||
|
|
||||||
## Batterie, PV, Netz Laufketten
|
## Batterie Icon
|
||||||
##################################
|
##################
|
||||||
|
if ($hasbat) {
|
||||||
if ($hasbat) {
|
|
||||||
$ret .= << "END1";
|
$ret .= << "END1";
|
||||||
<g class="$bat_color" transform="translate(610,245),scale(.30) rotate (90)">
|
<g class="$bat_color" transform="translate(610,245),scale(.30) rotate (90)">
|
||||||
<path d="m 134.65625,89.15625 c -6.01649,0 -11,4.983509 -11,11 l 0,180 c 0,6.01649 4.98351,11 11,11 l 95.5,0 c 6.01631,0 11,-4.9825 11,-11 l 0,-180 c 0,-6.016491 -4.98351,-11 -11,-11 l -95.5,0 z m 0,10 95.5,0 c 0.60951,0 1,0.390491 1,1 l 0,180 c 0,0.6085 -0.39231,1 -1,1 l -95.5,0 c -0.60951,0 -1,-0.39049 -1,-1 l 0,-180 c 0,-0.609509 0.39049,-1 1,-1 z"/>
|
<path d="m 134.65625,89.15625 c -6.01649,0 -11,4.983509 -11,11 l 0,180 c 0,6.01649 4.98351,11 11,11 l 95.5,0 c 6.01631,0 11,-4.9825 11,-11 l 0,-180 c 0,-6.016491 -4.98351,-11 -11,-11 l -95.5,0 z m 0,10 95.5,0 c 0.60951,0 1,0.390491 1,1 l 0,180 c 0,0.6085 -0.39231,1 -1,1 l -95.5,0 c -0.60951,0 -1,-0.39049 -1,-1 l 0,-180 c 0,-0.609509 0.39049,-1 1,-1 z"/>
|
||||||
@ -14147,23 +14121,39 @@ END1
|
|||||||
$ret .= '<path d="m 221.141,120 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -26 c 0,-3.313 2.687,-6 6,-6 h 65.5 c 3.313,0 6,2.687 6,6 v 6 z"/>' if ($soc > 88);
|
$ret .= '<path d="m 221.141,120 c 0,3.313 -2.688,6 -6,6 l -65.5,20 c -3.313,0 -6,-2.687 -6,-6 v -26 c 0,-3.313 2.687,-6 6,-6 h 65.5 c 3.313,0 6,2.687 6,6 v 6 z"/>' if ($soc > 88);
|
||||||
$ret .= '</g>';
|
$ret .= '</g>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Home Icon
|
||||||
|
##############
|
||||||
|
$ret .= '<g id="Home" fill="grey" transform="translate(368,360),scale(0.10)">'; # translate(X-Koordinate,Y-Koordinate), scale(<Größe>)-> Koordinaten ändern sich bei Größenänderung
|
||||||
|
$ret .= "<title>Home</title>".FW_makeImage($homeicondef, '');
|
||||||
|
$ret .= '</g> ';
|
||||||
|
|
||||||
if ($flowgconX) { # Dummy Consumer
|
## Dummy Consumer Icon
|
||||||
|
########################
|
||||||
|
if ($flowgconX) {
|
||||||
|
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
|
||||||
$ret .= '<g id="consumer_X" fill="grey" transform="translate(520,360),scale(0.09)">';
|
$ret .= '<g id="consumer_X" fill="grey" transform="translate(520,360),scale(0.09)">';
|
||||||
$ret .= "<title>consumer_X</title>".FW_makeImage($consicondef.$dumcol, '');
|
$ret .= "<title>$dumtxt</title>".FW_makeImage($consicondef.$dumcol, '');
|
||||||
$ret .= '</g> ';
|
$ret .= '</g> ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$ret .= << "END2";
|
## Laufketten PV->Home, PV->Grid, Grid->Home
|
||||||
|
##############################################
|
||||||
|
my $csc_style = $p2home ? 'flowg active_out' : 'flowg inactive_out';
|
||||||
|
my $cgfi_style = $cgfi ? 'flowg active_out' : 'flowg inactive_out';
|
||||||
|
$ret .= << "END2";
|
||||||
<g transform="translate(50,50),scale(0.5)" stroke-width="27" fill="none">
|
<g transform="translate(50,50),scale(0.5)" stroke-width="27" fill="none">
|
||||||
<path id="pv-home" class="$csc_style" d="M700,400 L700,580" />
|
<path id="pv-home" class="$csc_style" d="M700,400 L700,580" />
|
||||||
<path id="pv-grid" class="$cgfi_style" d="M670,400 L490,480" />
|
<path id="pv-grid" class="$cgfi_style" d="M670,400 L490,480" />
|
||||||
<path id="grid-home" class="$cgc_style" d="$cgc_direction" />
|
<path id="grid-home" class="$cgc_style" d="$cgc_direction" />
|
||||||
END2
|
END2
|
||||||
|
|
||||||
|
## Laufketten PV->Batterie, Batterie->Home
|
||||||
|
##############################################
|
||||||
if ($hasbat) {
|
if ($hasbat) {
|
||||||
$ret .= << "END3";
|
my $batin_style = $batin ? 'flowg active_in active_bat_in' : 'flowg inactive_out';
|
||||||
|
$ret .= << "END3";
|
||||||
<path id="bat-home" class="$batout_style" d="$batout_direction" />
|
<path id="bat-home" class="$batout_style" d="$batout_direction" />
|
||||||
<path id="pv-bat" class="$batin_style" d="M730,400 L910,480" />
|
<path id="pv-bat" class="$batin_style" d="M730,400 L910,480" />
|
||||||
END3
|
END3
|
||||||
@ -20054,9 +20044,9 @@ to ensure that the system configuration is correct.
|
|||||||
<tr><td> <b>fix</b> </td><td>a uniquely determined area factor is used (default) </td></tr>
|
<tr><td> <b>fix</b> </td><td>a uniquely determined area factor is used (default) </td></tr>
|
||||||
<tr><td> <b>trackFull</b> </td><td>the area factor is calculated continuously depending on the position of the sun and applied to the total global radiation </td></tr>
|
<tr><td> <b>trackFull</b> </td><td>the area factor is calculated continuously depending on the position of the sun and applied to the total global radiation </td></tr>
|
||||||
<tr><td> <b>trackShared</b> </td><td>the area factor is calculated continuously depending on the position of the sun and applied to an approximated </td></tr>
|
<tr><td> <b>trackShared</b> </td><td>the area factor is calculated continuously depending on the position of the sun and applied to an approximated </td></tr>
|
||||||
<tr><td> <b> </td><td>proportion of the direct radiation in the global radiation </td></tr>
|
<tr><td> </td><td>proportion of the direct radiation in the global radiation </td></tr>
|
||||||
<tr><td> <b>trackFlex</b> </td><td>combines the 'trackFull' and 'trackShared' methods. The system switches from 'trackFull' to 'trackShared' </td></tr>
|
<tr><td> <b>trackFlex</b> </td><td>combines the 'trackFull' and 'trackShared' methods. The system switches from 'trackFull' to 'trackShared' </td></tr>
|
||||||
<tr><td> <b> </td><td>at a cloud cover of >=80%. </td></tr>
|
<tr><td> </td><td>at a cloud cover of >=80%. </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@ -20398,8 +20388,6 @@ to ensure that the system configuration is correct.
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
.flowg.text { stroke: none; fill: gray; font-size: 60px; } <br>
|
.flowg.text { stroke: none; fill: gray; font-size: 60px; } <br>
|
||||||
.flowg.sun_active { stroke: orange; fill: orange; } <br>
|
|
||||||
.flowg.sun_inactive { stroke: gray; fill: gray; } <br>
|
|
||||||
.flowg.bat25 { stroke: red; fill: red; } <br>
|
.flowg.bat25 { stroke: red; fill: red; } <br>
|
||||||
.flowg.bat50 { stroke: darkorange; fill: darkorange; } <br>
|
.flowg.bat50 { stroke: darkorange; fill: darkorange; } <br>
|
||||||
.flowg.bat75 { stroke: green; fill: green; } <br>
|
.flowg.bat75 { stroke: green; fill: green; } <br>
|
||||||
@ -22403,9 +22391,9 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
|
|||||||
<tr><td> <b>fix</b> </td><td>es wird ein einmalig ermittelter Flächenfaktor verwendet (default) </td></tr>
|
<tr><td> <b>fix</b> </td><td>es wird ein einmalig ermittelter Flächenfaktor verwendet (default) </td></tr>
|
||||||
<tr><td> <b>trackFull</b> </td><td>der Flächenfaktor wird kontinuierlich abhängig vom Sonnenstand berechnet und auf die gesamte Globalstrahlung angewendet </td></tr>
|
<tr><td> <b>trackFull</b> </td><td>der Flächenfaktor wird kontinuierlich abhängig vom Sonnenstand berechnet und auf die gesamte Globalstrahlung angewendet </td></tr>
|
||||||
<tr><td> <b>trackShared</b> </td><td>der Flächenfaktor wird kontinuierlich abhängig vom Sonnenstand berechnet und auf einen approximierten Anteil der </td></tr>
|
<tr><td> <b>trackShared</b> </td><td>der Flächenfaktor wird kontinuierlich abhängig vom Sonnenstand berechnet und auf einen approximierten Anteil der </td></tr>
|
||||||
<tr><td> <b> </td><td>Direktstrahlung an der Globalstrahlung angewendet </td></tr>
|
<tr><td> </td><td>Direktstrahlung an der Globalstrahlung angewendet </td></tr>
|
||||||
<tr><td> <b>trackFlex</b> </td><td>kombiniert die Verfahren 'trackFull' und 'trackShared'. Es erfolgt eine Umschaltung von 'trackFull' auf 'trackShared' </td></tr>
|
<tr><td> <b>trackFlex</b> </td><td>kombiniert die Verfahren 'trackFull' und 'trackShared'. Es erfolgt eine Umschaltung von 'trackFull' auf 'trackShared' </td></tr>
|
||||||
<tr><td> <b> </td><td>bei einer Bewölkung von >=80%. </td></tr>
|
<tr><td> </td><td>bei einer Bewölkung von >=80%. </td></tr>
|
||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@ -22749,8 +22737,6 @@ die ordnungsgemäße Anlagenkonfiguration geprüft werden.
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
.flowg.text { stroke: none; fill: gray; font-size: 60px; } <br>
|
.flowg.text { stroke: none; fill: gray; font-size: 60px; } <br>
|
||||||
.flowg.sun_active { stroke: orange; fill: orange; } <br>
|
|
||||||
.flowg.sun_inactive { stroke: gray; fill: gray; } <br>
|
|
||||||
.flowg.bat25 { stroke: red; fill: red; } <br>
|
.flowg.bat25 { stroke: red; fill: red; } <br>
|
||||||
.flowg.bat50 { stroke: darkorange; fill: darkorange; } <br>
|
.flowg.bat50 { stroke: darkorange; fill: darkorange; } <br>
|
||||||
.flowg.bat75 { stroke: green; fill: green; } <br>
|
.flowg.bat75 { stroke: green; fill: green; } <br>
|
||||||
|
Loading…
Reference in New Issue
Block a user