HTMLBox Strompreischart und PV

Falls jemand Interesse hat hier mein Script für das Strompreischart. Das ganze ist noch ziemlich Hemdsärmelig in HTML und CSS zusammengeknüppelt. Es gibt da auch noch ein paar Baustellen für die ich aber gerade noch keine Lösungsidee habe.

  • Negative Strompreise können nicht abgebildet werden. (kommt in der heutigen Zeit leider kaum noch vor).
  • Was passiert mit dem Preis wenn der Balken kleiner als der Text wird? (Thema Overflow und Textfarbe)
  • Das ganze ist von der Größe auf mein Smartphone angepasst. Keine Ahnung wie sich das auf einem großen Monitor verhält.
  • und zu letzt: ich hab keinen Plan was ich da mache, mein Gebiet ist eher die grafische Umsetzung :wink:

<?php

//Tibber Grundpreis in Cent
$grundpreis = 14.96;

//Höchster Börsen-Stundenpreis
$hoechster_preis_boerse = GetValue(16765);

//Höchster Börsen-Stundenpreis inkl. Grundpreis
$hoechster_preis_gesamt = round($hoechster_preis_boerse + $grundpreis, 2);

//Preis aktuelle Stunde
$preis_jetzt = round(GetValue(29369) + $grundpreis, 2);

//Niedrigster Börsen-Stundenpreis inkl. Grundpreis
$preis_niedrig = round(GetValue(53244) + $grundpreis, 2);

//Tagesdurchschnitspreis
$preis_durchschnitt = round(GetValue(20311) + $grundpreis, 2);

// Die maximale Höhe des "teuersten" Balken in Diagramm
$max_hoehe = 200 / $hoechster_preis_gesamt;


$preise = [];
$höhen = [];

//Börsenpreise abrufen, Grundpreis addieren und runden
$preise[] =  round(GetValue(51279)+$grundpreis,1);
$preise[] =  round(GetValue(34984)+$grundpreis,1);
$preise[] =  round(GetValue(18571)+$grundpreis,1);
$preise[] =  round(GetValue(35287)+$grundpreis,1);
$preise[] =  round(GetValue(36473)+$grundpreis,1);
$preise[] =  round(GetValue(12963)+$grundpreis,1);
$preise[] =  round(GetValue(53357)+$grundpreis,1);
$preise[] =  round(GetValue(23747)+$grundpreis,1);
$preise[] =  round(GetValue(45259)+$grundpreis,1);
$preise[] =  round(GetValue(21172)+$grundpreis,1);
$preise[] =  round(GetValue(55397)+$grundpreis,1);
$preise[] =  round(GetValue(37603)+$grundpreis,1);
$preise[] =  round(GetValue(49153)+$grundpreis,1);
$preise[] =  round(GetValue(52410)+$grundpreis,1);
$preise[] =  round(GetValue(44731)+$grundpreis,1);
$preise[] =  round(GetValue(36587)+$grundpreis,1);
$preise[] =  round(GetValue(50696)+$grundpreis,1);
$preise[] =  round(GetValue(18298)+$grundpreis,1);
$preise[] =  round(GetValue(33013)+$grundpreis,1);
$preise[] =  round(GetValue(32200)+$grundpreis,1);
$preise[] =  round(GetValue(44250)+$grundpreis,1);
$preise[] =  round(GetValue(58142)+$grundpreis,1);
$preise[] =  round(GetValue(25629)+$grundpreis,1);
$preise[] =  round(GetValue(53186)+$grundpreis,1);


// Höhe der Balken berechnen
 $höhen[] = round($preise[0] * $max_hoehe,0);
 $höhen[] = round($preise[1] * $max_hoehe,0);
 $höhen[] = round($preise[2] * $max_hoehe,0);
 $höhen[] = round($preise[3] * $max_hoehe,0);
 $höhen[] = round($preise[4] * $max_hoehe,0);
 $höhen[] = round($preise[5] * $max_hoehe,0);
 $höhen[] = round($preise[6] * $max_hoehe,0);
 $höhen[] = round($preise[7] * $max_hoehe,0);
 $höhen[] = round($preise[8] * $max_hoehe,0);
 $höhen[] = round($preise[9] * $max_hoehe,0);
 $höhen[] = round($preise[10] * $max_hoehe,0);
 $höhen[] = round($preise[11] * $max_hoehe,0);
 $höhen[] = round($preise[12] * $max_hoehe,0);
 $höhen[] = round($preise[13] * $max_hoehe,0);
 $höhen[] = round($preise[14] * $max_hoehe,0);
 $höhen[] = round($preise[15] * $max_hoehe,0);
 $höhen[] = round($preise[16] * $max_hoehe,0);
 $höhen[] = round($preise[17] * $max_hoehe,0);
 $höhen[] = round($preise[18] * $max_hoehe,0);
 $höhen[] = round($preise[19] * $max_hoehe,0);
 $höhen[] = round($preise[20] * $max_hoehe,0);
 $höhen[] = round($preise[21] * $max_hoehe,0);
 $höhen[] = round($preise[22] * $max_hoehe,0);
 $höhen[] = round($preise[23] * $max_hoehe,0);



$html_tags = '';


for ($i = 0; $i < 24; $i++) {
    $html_tags .= '<div class="diag_tag" style="height: ' . $höhen[$i] . 'px;">' . number_format($preise[$i], 1) . '&nbsp;&nbsp;</div>';
}
$currentHour = (int) (new DateTime())->format('H');
$uhrzeit_class = '';

for ($i = 0; $i < 24; $i++) {
    $uhrzeit_class .= '<div class="uhrzeit2';
    if ($i == $currentHour) {
        $uhrzeit_class .= ' current';
    }
    $uhrzeit_class .= '">' . $i . '</div>';
}


$htmlstrompreis = '
<style type="text/css">
.container_strom2,
.container_uhrzeiten2,
.container_preisdetails {
  display: flex;
  justify-content: center;
  width: 100%;
  background-color: #ffffff;
}

.container_strom2 {
  align-items: flex-end;
  height: 200px;
  border: 1px solid #d2d2d2;
  border-top: none;
}

.container_uhrzeiten2,
.container_preisdetails {
  align-items: flex-start;
  height: 10px;
}

.main2 {
  width: 100%;
  height: 143px;
  background-color: #ffffff;
}

.diag_tag {
  width: 100%;
  margin-bottom: 1px;
  margin-right: 5px;
  float: left;
  background-image: linear-gradient(to top, #28cdab 5px, #1ecda3 10px, #17cd9a 20px, #17cd90 35px, #1ccd86 55px, #45cb71 80px, #5fc85c 105px, #76c546 120px, #9cbd1f 135px, #bfb100 150px, #e0a300 165px, #ff9000 180px);
  text-align: right;
  font-size: 0.5em;
  writing-mode: vertical-lr;
  color: #ffffff;
  border-top-left-radius: 5px;
  border-top-right-radius: 5px;
}

.timeline {
  display: flex;
  flex-direction: row;
  width: 100%;
  font-size: 0.6em;
  margin-left: 0px;
  margin-bottom: 5px;
  margin-top: 5px;
}

.uhrzeit2 {
  width: 100%;
  margin-right: 5px;
  text-align: center;
  padding: 0;
  box-sizing: border-box;
}

.uhrzeit2.current {
  background-color: grey;
  color: white;
  border-radius: 3px;
}

.preisdetails {
  width: 100%;
  height: 150px;
  margin: 0;
  float: left;
  background-color: #ffffff;
  font-size: 0.6em;
}


</style>


<div class="main2">
<div class="container_strom2">' . $html_tags . '</div>
  <div class="timeline">' . $uhrzeit_class . '</div>
<div class="container_preisdetails">
<div class="preisdetails">Aktuell: '.$preis_jetzt.'&nbsp;ct<font style="color: green;">&nbsp;&nbsp;&nbsp;&darr; '.$preis_niedrig.'&nbsp;ct</font><font style="color: red;">&nbsp;&nbsp;&nbsp;&uarr; '.$hoechster_preis_gesamt.'&nbsp;ct</font>&nbsp;&nbsp;&nbsp;&Oslash; '.$preis_durchschnitt.'&nbsp;ct</div>
</div>
    <script>
      const currentHour = new Date().getHours();
      const currentTimelineHour = document.querySelector(`.uhrzeit2:nth-child(${currentHour + 1})`);
      currentTimelineHour.classList.add(\'current\');
    </script>
';

//HTML in die Variable der HTML Box schreiben
Setvalue(55288, $htmlstrompreis);
3 „Gefällt mir“

und hier noch das Script für die PV Produktion etc

Da es ja vermutlich sehr individuell ist wo jeder die Werte her bekommt bzw. berechnet habe ich den ersten Teil des Scripts hier weggelassen.

Folgende Variablen müssen mit Werten gefüllt werden:

$eigenverbrauch_prozent
$eigenproduktion_prozent
$produktion_heute_round
$eigenverbrauch_kwh_round
$eigenproduktion_kwh_round
$einspeisung_heute_round
$verbrauch_heute_round
$zukauf_heute_prozent
$zukauf_heute_round
$kosten_heute

$htmlpv = '
    <style>
      .container1 {
        position: relative;
        width: 100%;
        height: 100px;
        border: 0px solid #000;
      }
        .overlay {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        color: white; /* Textfarbe anpassen */
        z-index: 2; /* Über anderen Inhalten schweben */
  }
      .container2 {
        width: 100%;
        height: 80px;
        border: 0px solid #000;
        font-size: 0.8em;
      }
      .einspeisung {
        width: auto;
        background: #15c603;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        padding-right: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenverbrauch {

        width: '.$eigenverbrauch_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
     .bezug {
        width: auto;
        background: #d00000;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenproduktion {
        width: '.$eigenproduktion_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
      .einspeisungsubtext {
        width: auto;
        height: 80px;
        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenverbrauchsubtext {
        height: 80px;
        width: 50%;
        background: #ffffff;
        float: left;
      }
     .bezugsubtext {
        width: auto;
        height: 80px;
        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenproduktionsubtext {
        height: 80px;
        width: 50%;
        background: #ffffff;
        float: left;

      }
    </style>
  </head>
  <body>
    <div class="container1">
        <div class="overlay">
        Produktion '.$produktion_heute_round.' kWh
        </div>
      <div class="eigenverbrauch">'.$eigenverbrauch_prozent.'%</div>
      <div class="einspeisung">'.$einspeisung_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenverbrauchsubtext">Eigenverbrauch '.$eigenverbrauch_kwh_round.'&nbsp;kWh</div>
      <div class="einspeisungsubtext">Einspeisung '.$einspeisung_heute_round.'&nbsp;kWh</div>
    </div>
    <div class="container1">
         <div class="overlay">
        Verbrauch '.$verbrauch_heute_round.' kWh
        </div>
      <div class="eigenproduktion">'.$eigenproduktion_prozent.'%</div>
      <div class="bezug">'.$zukauf_heute_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenproduktionsubtext">Eigenproduktion '.$eigenproduktion_kwh_round.'&nbsp;kWh</div>
      <div class="bezugsubtext">Zukauf <font style="color: red;">'.$zukauf_heute_round.'&nbsp;kWh&nbsp;</font> / '.$kosten_heute.' EUR</div>
    </div>
';


Setvalue(35609, $htmlpv);

Viele Grüße
Stephan

5 „Gefällt mir“

Ja cool, auf sowas habe ich gerade gewartet, Danke!!!

Jetzt muss der kleine Heiko nur noch die Prozente aus den Rohdaten errechnen, ob ich das schaffe …

Danke & Ciao
Heiko

Gibts bei der neuen Visu die Möglichkeit in einer Kachel eine HTML Box anzuzeigen und da drunter noch andere Elemente wie Variablen etc?

Richtig cool wären Kacheln die im Prinzip eine eigene Unterteilung hätten. Z.b. 1/3 horizontal. So das man in dem linken Drittel z.b. ein Bild platzieren könnte und in den rechten 2/3 z.b. Button oder anderes… oder halt vertikal oben eine html Box und da drunter andere Elemente… ich finde Bilder sehr wichtig um einfach optisch eine bessere Übersichtlichkeit zu gewährleisten. Wenn ich den Status meiner Waschmaschine abbilde dann möchte ich da auch ein entsprechendes Bild haben. Da sind ja nette Spielereien möglich. Bei meiner Wärmepumpe dreht sich z.b. der Ventilator wenn die läuft…

Gruß
Stephan

Danke für das Script, habe es ein wenig auf eine Kachel für den Monitor angepasst…
image
Das einzige, was ich nicht hinkriege, ist die Breite des oberen Balkens.
Obwohl der ober und untere Balken meines Erachtens nach dieselbe Einstellung haben, werden sie nicht gleichmässig dargestellt.
Hast du eine Idee?
Hier mein Code

$htmlpv = '
    <style>
      .container1 {
        position: relative;
        width: 500;
        height: 40;
        border: 0px solid #000;
        font-size: 1.2em;
      }
        .overlay {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        color: white; /* Textfarbe anpassen */
        z-index: 2; /* Über anderen Inhalten schweben */
  }
      .container2 {
        width: 500;
        height: 50;
        border: 0px solid #000;
        font-size: 1.2em;
      }
      .einspeisung {
        width: auto;
        background: #15c603;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        padding-right: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenverbrauch {

        width: '.$eigenverbrauch_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
     .bezug {
        width: auto;
        background: #d00000;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenproduktion {
        width: '.$eigenproduktion_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
      .einspeisungsubtext {
        width: auto;
        height: 50px;
        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenverbrauchsubtext {
        height: 50px;
        width: 50%;
        background: #ffffff;
        float: left;
      }
     .bezugsubtext {
        width: auto;
        height: 50px;
        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenproduktionsubtext {
        height: 50px;
        width: 50%;
        background: #ffffff;
        float: left;

      }
    </style>
  </head>
  <body>
    <div class="container1">
        <div class="overlay">
        Produktion '.$produktion_heute_round.' kWh
        </div>
      <div class="eigenverbrauch">'.$eigenverbrauch_prozent.'%</div>
      <div class="einspeisung">'.$einspeisung_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenverbrauchsubtext">Eigenverbrauch '.$eigenverbrauch_kwh_round.'&nbsp;kWh</div>
      <div class="einspeisungsubtext">Einspeisung '.$einspeisung_heute_round.'&nbsp;kWh</div>
    </div>
    <div class="container1">
         <div class="overlay">
        Verbrauch '.$verbrauch_heute_round.' kWh
        </div>
      <div class="eigenproduktion">'.$eigenproduktion_prozent.'%</div>
      <div class="bezug">'.$zukauf_heute_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenproduktionsubtext">Eigenproduktion '.$eigenproduktion_kwh_round.'&nbsp;kWh</div>
      <div class="bezugsubtext">Zukauf <font style="color: red;">'.$zukauf_heute_round.'&nbsp;kWh&nbsp;</font> / '.$kosten_heute.' Fr.</div>
    </div>
';


Setvalue(58946, $htmlpv);//Start writing your code here

ich hab es bei mir gerade getestet, da sind alle Balken gleich lang. Getestet mit dem Chrome Browser und Edge unter Windows. In der Aktuelle Beta der iOS App wird komplett zerschossen weil du eine feste Breite angegeben hast. Warum lässt du die nicht auf 100%?

Ich hab den Code noch etwas auf „Desktop“ optimiert. Das müsste so eigentlich auch im Browser auf dem Desktop vernünftig ausschauen. Die Schriftgröße muss vermutlich noch angepasst werden.

Was ich nicht verstehe warum er den Text nicht in der Schriftart anzeigt die auch im Rest der Visualisierung verwendet wird. In der iOS App schaut das alles gut aus…

$htmlpv = '
    <style>
      .container1 {
        position: relative;
        width: 100%;
        border: 0px solid #000;
        padding-bottom: 10px;
      }
        .overlay {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        color: white; /* Textfarbe anpassen */
        z-index: 2; /* Über anderen Inhalten schweben */
        border: 0px solid #000;
        padding-bottom: 10px;
  }
      .container2 {
        width: 100%;
        border: 0px solid #000;
        font-size: 0.8em;
                padding-bottom: 10px;
      }
      .einspeisung {
        width: auto;
        background: #15c603;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        padding-right: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenverbrauch {

        width: '.$eigenverbrauch_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
     .bezug {
        width: auto;
        background: #d00000;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenproduktion {
        width: '.$eigenproduktion_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
      .einspeisungsubtext {
        width: auto;

        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenverbrauchsubtext {

        width: 50%;
        background: #ffffff;
        float: left;
      }
     .bezugsubtext {
        width: auto;

        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenproduktionsubtext {

        width: 50%;
        background: #ffffff;
        float: left;

      }
    </style>
  </head>
  <body>
    <div class="container1">
        <div class="overlay">
        Produktion '.$produktion_heute_round.' kWh
        </div>
      <div class="eigenverbrauch">'.$eigenverbrauch_prozent.'%</div>
      <div class="einspeisung">'.$einspeisung_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenverbrauchsubtext">Eigenverbrauch '.$eigenverbrauch_kwh_round.'&nbsp;kWh</div>
      <div class="einspeisungsubtext">Einspeisung '.$einspeisung_heute_round.'&nbsp;kWh</div>
    </div>
    <div class="container1">
         <div class="overlay">
        Verbrauch '.$verbrauch_heute_round.' kWh
        </div>
      <div class="eigenproduktion">'.$eigenproduktion_prozent.'%</div>
      <div class="bezug">'.$zukauf_heute_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenproduktionsubtext">Eigenproduktion '.$eigenproduktion_kwh_round.'&nbsp;kWh</div>
      <div class="bezugsubtext">Zukauf <font style="color: red;">'.$zukauf_heute_round.'&nbsp;kWh&nbsp;</font> / '.$kosten_heute.' EUR</div>
    </div>
';


Setvalue(XXXXX, $htmlpv);

Das Problem mit der Unterschiedlichen Balkenbreite tritt offenbar nur auf, wenn noch keine Einspeisung stattgefunden hat. Sobald dort was angezeigt wird, ist alles gleichmässig.
Ich hatte den Code mal auf eine fixe Breite für eine ganz bestimmte Kachelgrösse angepasst. Natürlich ist dann die Dynamik futsch.

Ich komme nicht drum rum, auf dem Handy und auf dem Monitor zwei unterschiedliche Versionen Anzeigen zu lassen. Während auf dem Handy die Version von dir bereits optimal ist, muss auf dem Monitor die Schrift vergrössert werden. Die Kachel ist natürlich jetzt wieder wunderbar dynamisch in der Breite.

Wäre mir gar nicht aufgefallen, aber jetzt wo du es erwähnst :smiley:

Auf dem Monitor schauts jetzt so aus
image

Mit diesem um die Schriftgrösse angepassten Code

$htmlpv = '
    <style>
      .container1 {
        position: relative;
        width: 100%;
        border: 0px solid #000;
        font-size: 1.2em;
        padding-bottom: 10px;
      }
        .overlay {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        color: white; /* Textfarbe anpassen */
        z-index: 2; /* Über anderen Inhalten schweben */
        border: 0px solid #000;
        padding-bottom: 10px;
  }
      .container2 {
        width: 100%;
        border: 0px solid #000;
        font-size: 1.0em;
        padding-bottom: 10px;
      }
      .einspeisung {
        width: auto;
        background: #15c603;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        padding-right: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenverbrauch {

        width: '.$eigenverbrauch_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
     .bezug {
        width: auto;
        background: #d00000;
        overflow: visible;
        padding-top: 10px;
        padding-left: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
      }
      .eigenproduktion {
        width: '.$eigenproduktion_prozent.'%;
        background: #28cdab;
        float: left;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
      }
      .einspeisungsubtext {
        width: auto;

        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenverbrauchsubtext {

        width: 50%;
        background: #ffffff;
        float: left;
      }
     .bezugsubtext {
        width: auto;

        background: #ffffff;
        overflow: hidden;
        text-align: right;
      }
      .eigenproduktionsubtext {

        width: 50%;
        background: #ffffff;
        float: left;

      }
    </style>
  </head>
  <body>
    <div class="container1">
        <div class="overlay">
        Produktion '.$produktion_heute_round.' kWh
        </div>
      <div class="eigenverbrauch">'.$eigenverbrauch_prozent.'%</div>
      <div class="einspeisung">'.$einspeisung_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenverbrauchsubtext">Eigenverbrauch '.$eigenverbrauch_kwh_round.'&nbsp;kWh</div>
      <div class="einspeisungsubtext">Einspeisung '.$einspeisung_heute_round.'&nbsp;kWh</div>
    </div>
    <div class="container1">
         <div class="overlay">
        Verbrauch '.$verbrauch_heute_round.' kWh
        </div>
      <div class="eigenproduktion">'.$eigenproduktion_prozent.'%</div>
      <div class="bezug">'.$zukauf_heute_prozent.'%</div>
    </div>
    <div class="container2">
      <div class="eigenproduktionsubtext">Eigenproduktion '.$eigenproduktion_kwh_round.'&nbsp;kWh</div>
      <div class="bezugsubtext">Zukauf <font style="color: red;">'.$zukauf_heute_round.'&nbsp;kWh&nbsp;</font> / '.$kosten_heute.' EUR</div>
    </div>
';


Setvalue(25917, $htmlpv);//Start writing your code here

Das kann natürlich sein. Wenn der Wert für einen Balken 0 ist gibts natürlich Chaos. Das müsste man abfangen oder im css ein min-width: 1px; einsetzen. Dann dürfte es nicht mehr passieren. Muss ich morgen mal testen…

Leider ist CSS nicht so mein Ding, habe mit min-width: 1px; ein paar Konstellationen probiert, jedoch erfolglos.

Noch eine zusätzliche Feststellung; es wird erst ab 2% Einspeisung richtig dargestellt…

Hier mir 0 oder 1%
image

Hier mit 2%
image

Wie immer konnte ich es nicht lassen und musste etwas optimieren (hatte auch das 1% Problem).

Ergebnis:

image

Habe noch ein paar Kleinigkeiten bei der kWh Wertdarstellung gemacht.
Leider habe ich auch die Variablennamen etwas verändert :innocent:

<?php

# Prozentwerte
$eigenverbrauch_prozent = 41;
$einspeisung_prozent = 59;
# kWh-Werte
$produktion_kwh = 890.95;
$eigenverbrauch_kwh = 367.83;
$einspeisung_kwh = 523.12;

# Prozentwerte
$eigenproduktion_prozent = 99;
$zukauf_prozent = 1;
# kWh-Werte
$verbrauch_kwh = 369.84;
$eigenproduktion_kwh = 367.83;
$zukauf_kwh = 2.01;


$htmlpv = '
<style>
    .container1 {
        width: 100%;
        display: flex;
        position: relative;
    }
    .overlay {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        color: white;
        z-index: 10;
    }
    .container2 {
        width: 100%;
        display: flex;
        position: relative;
        font-size: 0.9em;
        padding-top: 5px;
        padding-bottom: 15px;
    }
    .eigenverbrauch {
        width: '.$eigenverbrauch_prozent.'%;
        background: #28cdab;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
    }
    .einspeisung {
        width: ' .$einspeisung_prozent.'%;
        background: #15c603;
        padding-top: 10px;
        padding-bottom: 10px;
        padding-right: 10px;
        direction: rtl;
        color: white;
    }
    .bezug {
        width: '.$zukauf_prozent.'%;
        background: #d00000;
        padding-top: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
    }
    .eigenproduktion {
        width: '.$eigenproduktion_prozent.'%;
        background: #28cdab;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
    }
    .einspeisungsubtext {
        width: 50%;
        direction: rtl;
    }
    .eigenverbrauchsubtext {
        width: 50%;
    }
    .bezugsubtext {
        width: 50%;
        direction: rtl;
    }
    .eigenproduktionsubtext {
        width: 50%;
    }
</style>
</head>
<body>
<div class="container1">
    <div class="overlay">Produktion: '.$produktion_kwh.' kWh</div>
    <div class="eigenverbrauch">'.$eigenverbrauch_prozent.'%</div>
    <div class="einspeisung">'.$einspeisung_prozent.'%</div>
</div>
<div class="container2">
    <div class="eigenverbrauchsubtext">Eigenverbrauch: <font style="color: #28cdab; font-weight: bold;">'.$eigenverbrauch_kwh.'&nbsp;kWh</font></div>
    <div class="einspeisungsubtext">Einspeisung: <font style="color: #15c603; font-weight: bold;">'.$einspeisung_kwh.'&nbsp;kWh</font></div>
</div>
<div class="container1">
    <div class="overlay">Verbrauch: '.$verbrauch_kwh.' kWh</div>
    <div class="eigenproduktion">'.$eigenproduktion_prozent.'%</div>
    <div class="bezug">'.$zukauf_prozent.'%</div>
</div>
<div class="container2">
    <div class="eigenproduktionsubtext">Eigenproduktion: <font style="color: #28cdab; font-weight: bold;">'.$eigenproduktion_kwh.'&nbsp;kWh</font></div>
    <div class="bezugsubtext">Zukauf: <font style="color: #d00000; font-weight: bold;">'.$zukauf_kwh.'&nbsp;kWh&nbsp;</font></div>
</div>
';


Setvalue(53971, $htmlpv);

Viel Spaß
Heiko

3 „Gefällt mir“

Mit runden Ecken auch recht schön :slight_smile:

image

3 „Gefällt mir“

So, meine Version für SolarEdge habe ich gerade veröffentlicht => [Skript] SolarEdge Monitoring

AN ALLE: Themen zur reinen HTMLBox bitte hier weiter diskutieren!!!

Danke & Ciao
Heiko

Wie bekomme ich die Ecken rund? :slightly_smiling_face:

Kann man die Darstellung bei 0kWh Produktion irgendwie schöner gestalten?

image

Schau dir mal den Beitrag über deinem an von Heiko

Mit dem Style „border-radius“ :slight_smile:

Das mit der 0 hatte ich schon in meinem Post #10 gefixt.

Hier nochmal mit runden Ecken ohne Garantie (einfach aus dem Kopf)

<?php

# Prozentwerte
$eigenverbrauch_prozent = 41;
$einspeisung_prozent = 59;
# kWh-Werte
$produktion_kwh = 890.95;
$eigenverbrauch_kwh = 367.83;
$einspeisung_kwh = 523.12;

# Prozentwerte
$eigenproduktion_prozent = 99;
$zukauf_prozent = 1;
# kWh-Werte
$verbrauch_kwh = 369.84;
$eigenproduktion_kwh = 367.83;
$zukauf_kwh = 2.01;


$htmlpv = '
<style>
    .container1 {
        width: 100%;
        display: flex;
        position: relative;
    }
    .overlay {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        color: white;
        z-index: 10;
    }
    .container2 {
        width: 100%;
        display: flex;
        position: relative;
        font-size: 0.9em;
        padding-top: 5px;
        padding-bottom: 15px;
    }
    .eigenverbrauch {
        width: '.$eigenverbrauch_prozent.'%;
        background: #28cdab;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
        border-radius:5px 0px 0px 5px;
    }
    .einspeisung {
        width: ' .$einspeisung_prozent.'%;
        background: #15c603;
        padding-top: 10px;
        padding-bottom: 10px;
        padding-right: 10px;
        direction: rtl;
        color: white;
        border-radius:0px 5px 5px 0px;        
    }
    .bezug {
        width: '.$zukauf_prozent.'%;
        background: #d00000;
        padding-top: 10px;
        padding-right: 10px;
        padding-bottom: 10px;
        white-space: nowrap;
        direction: rtl;
        color: white;
        border-radius:5px 0px 0px 5px;
    }
    .eigenproduktion {
        width: '.$eigenproduktion_prozent.'%;
        background: #28cdab;
        padding-top: 10px;
        padding-left: 10px;
        padding-bottom: 10px;
        color: white;
        border-radius:0px 5px 5px 0px;        
    }
    .einspeisungsubtext {
        width: 50%;
        direction: rtl;
    }
    .eigenverbrauchsubtext {
        width: 50%;
    }
    .bezugsubtext {
        width: 50%;
        direction: rtl;
    }
    .eigenproduktionsubtext {
        width: 50%;
    }
</style>
</head>
<body>
<div class="container1">
    <div class="overlay">Produktion: '.$produktion_kwh.' kWh</div>
    <div class="eigenverbrauch">'.$eigenverbrauch_prozent.'%</div>
    <div class="einspeisung">'.$einspeisung_prozent.'%</div>
</div>
<div class="container2">
    <div class="eigenverbrauchsubtext">Eigenverbrauch: <font style="color: #28cdab; font-weight: bold;">'.$eigenverbrauch_kwh.'&nbsp;kWh</font></div>
    <div class="einspeisungsubtext">Einspeisung: <font style="color: #15c603; font-weight: bold;">'.$einspeisung_kwh.'&nbsp;kWh</font></div>
</div>
<div class="container1">
    <div class="overlay">Verbrauch: '.$verbrauch_kwh.' kWh</div>
    <div class="eigenproduktion">'.$eigenproduktion_prozent.'%</div>
    <div class="bezug">'.$zukauf_prozent.'%</div>
</div>
<div class="container2">
    <div class="eigenproduktionsubtext">Eigenproduktion: <font style="color: #28cdab; font-weight: bold;">'.$eigenproduktion_kwh.'&nbsp;kWh</font></div>
    <div class="bezugsubtext">Zukauf: <font style="color: #d00000; font-weight: bold;">'.$zukauf_kwh.'&nbsp;kWh&nbsp;</font></div>
</div>
';


Setvalue(53971, $htmlpv);
1 „Gefällt mir“

Was machst Du mit dem Chart wenn Du nur zukaufst? Oder ist die PV-Ankage im Anmarsch :slight_smile:

Gruß Heiko

Hatte es auf Tagesbasis. Jetzt mit deiner Vorlage sieht es perfekt aus :slight_smile:
image

1 „Gefällt mir“

Ich habe den Thread mal in die neue Kategorie „Kacheln“ verschoben, hier wollen wir die Anleitungen für Kacheln sammeln. :slight_smile:

Grüße,
Kai

2 „Gefällt mir“

@da8ter: Danke für die schöne Umsetzung! Nur mit der Schriftgröße hapert es noch bei mir:


Idee, Hinweis was da bei mir noch schief läuft?

Gruß, Michael

Wahrscheinlich musst du aktuell noch den Spezialschalter „ServerSecurity“ deaktivieren, damit CORS sauber läuft.

paresy