Darstellung Sonnenbatterie

Begonnen von dennis_n, 11 März 2021, 10:33:34

Vorheriges Thema - Nächstes Thema

dennis_n

Hallo,

ich habe eine PV Anlage mit einem Sonnenspeicher. Den habe ich auch entsprechend in fhem einbinden können und habe alle Daten als Readings zur Verfügung.
Zur Steuerung von fhem nutze ich Tablet UI und ein iPad im Wohnzimmer.
Jetzt würde ich gerne diese schöne Grafik, die bei dem Sonnenspeicher angezeigt wird, in Tablet UI darstellen.

Gibt es eine Möglichkeit oder Widget, um eine Flussrichtung anzuzeigen? Wenn nicht, hat jemand eine Idee wie man das realisieren könnte?
Beispielsweise mit animated Gif's oder so?

Hier mal ein Beispiel, wie ich es in der App dargestellt bekomme:

Die Readings zur Azeige der Flussrichtung lauten:
FlowConsumptionBattery --> 0
FlowConsumptionGrid --> 0
FlowConsumptionProduction --> 1
FlowGridBattery --> 0
FlowProductionBattery --> 0
FlowProductionGrid --> 1

Je nach Wert soll dann die Flussrichtung angezeigt werden.

Danke
Gruss
Dennis

papa

Habe sowas mal angefangen mit SVG umzusetzen. Sieht dann in etwa so aus wie im angehängten Example-HTML. Die Energieströme werden abhängig von Readingswerten per SVG-Animation animiert.
Könnte heute Abend mal den Widget-Stand zur Verfügung stellen. Vielleicht hat ja jemand mehr Zeit, das mal richtig fertig zu machen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

dennis_n

Oh das sieht schonmal sehr interessant aus.

papa

#3
Wie versprochen der aktuelle Stand. Wie gesagt, habe leider keine Zeit, um da schnell vorwärts zu kommen.

fhem-tablet-ui-user.css muss ins css-Verzeichnis. widget_pvvis.js ins Widget-Verzeichnis. Folgende Attribute werden unterstützt:


data-device - Gerät, das den Refresh triggert
data-get - Verbrauch Haus
data-feed - Einspeisungs in Netz
data-produce - Production PV-Anlage
data-charge - Ladung Akku
data-discharge - Entladung Akku
data-soc - Ladezustand Battery
data-pv-max - Maxiamle Leistung PV
data-width - Breite des Widget
data-height - Höhe des Widget


Meine Definition ist:

<div data-type="pvvis" data-device="SB25MBus"
              data-get="PowerMeter:power_consumption" data-feed="PowerMeter:power_feed"
              data-produce="SB25MBus:SPOT_PACTOT" data-pv-max="1700"
              data-width="340" data-height="340" class="centered">
         </div>


Akku kommt erst nächste Woche :-)
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

dennis_n

Hi,

ich danke Dir schonmal und schaue mir das mal an.
Vielleicht bekomme ich es ja hin das Plugin fertig zu machen.
Habe damit aber keinerlei Erfahrung.

Vielleicht können wir uns ja mal per PN austauschen.

Gruss
Dennis

dennis_n

Also ich habe mir das alles mal angeschaut und muss leider zugeben, dass ich damit hoffnungslos überfordert bin (mit der Fertigstellung eines solchen Plugins)
Mir fehlt da einfach das nötige Grundwissen, da ich ja kein Programmierer bin.

Aber so wie ich das als absoluter Laie beurteilen kann, scheint ja wirklich nicht mehr viel zu fehlen.
Wäre echt klasse wenn das jemand gertig machen würde.
Es haben doch bestimmt noch mehr Personen Interesse an einem solchen Plugin.  ::)

Gruss
Dennis

eurofinder

Ich könnte das gut gebrauchen als Plugin:-)

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

dennis_n

Ich habe mir da jetzt mal was gebastelt. Die grünen Pfeile ändern entweder dir Richtung oder werden nicht angezeigt. Je nach Wert, der ausgelesen wird.

Ist nicht schön, aber fürs erste ok.
Vielleicht schafft es papa ja noch seine Arbeit zu vollenden  ;)

Gruss
Dennis

majestro84

Zitat von: papa am 11 März 2021, 20:19:29
Wie versprochen der aktuelle Stand. Wie gesagt, habe leider keine Zeit, um da schnell vorwärts zu kommen.

fhem-tablet-ui-user.css muss ins css-Verzeichnis. widget_pvvis.js ins Widget-Verzeichnis. Folgende Attribute werden unterstützt:


data-device - Gerät, das den Refresh triggert
data-get - Verbrauch Haus
data-feed - Einspeisungs in Netz
data-produce - Production PV-Anlage
data-charge - Ladung Akku
data-discharge - Entladung Akku
data-soc - Ladezustand Battery
data-pv-max - Maxiamle Leistung PV
data-width - Breite des Widget
data-height - Höhe des Widget


Meine Definition ist:

<div data-type="pvvis" data-device="SB25MBus"
              data-get="PowerMeter:power_consumption" data-feed="PowerMeter:power_feed"
              data-produce="SB25MBus:SPOT_PACTOT" data-pv-max="1700"
              data-width="340" data-height="340" class="centered">
         </div>


Akku kommt erst nächste Woche :-)

Hallo bin zufällig auf dieses Thema gestoßen. Wollte mal nachfragen ob es dazu einen aktuellen Stand gibt?
Vielen Dank
Gruß Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

caldir65

#9
Moin,

ich habe zwar keinen Speicher, aber alles andere läuft bei mir über solarforecast - da gibt es auch ein FTUI-Widget für zum "Nachrüsten" ...
Bietet allerdings deutlich mehr als nur eine reine Visualisierung ...

Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.

majestro84

Hallo

Vielen Dank für den Tipp. Ich habe mir Papa seinen Stand für mein Kostal WR angepasst.

Ich habe es wie folgt definiert.
<div data-type="pvvis" data-device="WR_1"
              data-get="SW_Home_own_consumption_from_grid" data-feed="Total_Active_P_EM"
              data-produce="SW_Total_DC_P_sumOfAllPVInputs" data-pv-max="5500" data-pvhome="SW_Home_own_consumption_from_PV"
  data-chargedischarge="Actual_Battery_charge_-minus_or_discharge_-plus_P" data-soc="Act_state_of_charge"
              data-width="220" data-height="220" class="centered">
         </div>


VG Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

Shadow3561

Hat eventuell jemand schon so ein wiegt für FTUI3 entwickelt?

Mit freundlichen Grüßen

yersinia

#12
Zitat von: Shadow3561 am 22 Juni 2022, 17:08:17Hat eventuell jemand schon so ein wiegt für FTUI3 entwickelt?
Hier ein quick'n'dirty schnellschuß basierend auf papas FTUI2 widget; allerdings ohne es getestet zu haben (hab weder Hardware noch FHEM-Devices zum testen) - den Code direkt in FTUI3 übernehmen, ggfs noch umschließen (mit einer ftui-cell o.ä.), da es nur die svg ist.

Device und die Readings müssen ersetzt werden (suchen und ersetzen vor dem Kopieren); folgende device:reading kombination ist vorhanden (den : beibehalten) - Nomenklatur analog zu papas Version.
DEVICE:SOC
DEVICE:DISCHARGE
DEVICE:FEED
DEVICE:GET
DEVICE:CHARGE
DEVICE:PVHOMEVAL <- das FTUI2 Widget berechnet dies; hier würde ich (erstmal) auf ein userReading zurückgreifen welches dann (PRODUCE - CHARGE - FEED) rechnet

Die CSS aus #3 wird weiterhin benötigt.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
  <script type="text/javascript"><![CDATA[
    function doround(value) {
      if( value === undefined ) return 0;
      return Math.round(value);
    }

  ]]></script>
    <g ftui-binding id="sun" fill="yellow" transform="translate(152,0),scale(4)" [style]="DEVICE:sunOpacity | prepend('opacity:') | append(';')">
  <path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"/>
</g>

    <g id="home" fill="grey" transform="translate(0,150),scale(4)">
  <path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
</g>

<g id="battery" opacity="0.2" fill="#090" stroke="#090" transform="translate(300,150),scale(.3)">
  <line x1="75" y1="30" x2="75" y2="280"  style="stroke-width: 12px;"></line>
  <line x1="225" y1="30" x2="225" y2="280"  style="stroke-width: 12px;"></line>
  <line x1="69" y1="30" x2="231" y2="30"  style="stroke-width: 12px;"></line>
  <line x1="69" y1="284" x2="231" y2="285"  style="stroke-width: 12px;"></line>
  <line x1="105" y1="20" x2="195" y2="20"  style="stroke-width: 25px;"></line>
  <rect ftui-binding id="bat25" x="92" y="221"  width="116" height="48" [style]="DEVICE:SOC | step('0:`stroke-width:0px;opacity:0.2;`, 25:`stroke-width:0px;opacity:1;`')"></rect>
  <rect ftui-binding id="bat50" x="92" y="163"  width="116" height="48" [style]="DEVICE:SOC | step('0:`stroke-width:0px;opacity:0.2;`, 50:`stroke-width:0px;opacity:1;`')"></rect>
  <rect ftui-binding id="bat75" x="92" y="105"  width="116" height="48" [style]="DEVICE:SOC | step('0:`stroke-width:0px;opacity:0.2;`, 75:`stroke-width:0px;opacity:1;`')"></rect>
  <rect ftui-binding id="bat100" x="92" y="47"  width="116" height="48" [style]="DEVICE:SOC | step('0:`stroke-width:0px;opacity:0.2;`, 96:`stroke-width:0px;opacity:1;`')"></rect>
</g>

<g id="grid" fill="gray" transform="translate(150,300),scale(4)">
  <path d="M20,5V4c0-0.55-0.45-1-1-1h-2c-0.55,0-1,0.45-1,1v1h-1v4c0,0.55,0.45,1,1,1h1v7c0,1.1-0.9,2-2,2s-2-0.9-2-2V7 c0-2.21-1.79-4-4-4S5,4.79,5,7v7H4c-0.55,0-1,0.45-1,1v4h1v1c0,0.55,0.45,1,1,1h2c0.55,0,1-0.45,1-1v-1h1v-4c0-0.55-0.45-1-1-1H7 V7c0-1.1,0.9-2,2-2s2,0.9,2,2v10c0,2.21,1.79,4,4,4s4-1.79,4-4v-7h1c0.55,0,1-0.45,1-1V5H20z"/>
</g>

    <g transform="translate(50,50),scale(0.5)" stroke-width="40" fill="none">
      <path ftui-binding id="pv-home" d="M255,100 L255,180 C255,255,255,255,180,255 L100,255" stroke="yellow" [class]="DEVICE:PVHOMEVAL | step('0:`inactive`, 1:`active1`, 1000:`active2`, 2000:`active3`')" />
      <path ftui-binding id="bat-home" d="M500,300 L100,300" stroke="green" [class]="DEVICE:DISCHARGE | step('0:`inactive`, 1:`active1`, 1000:`active2`, 2000:`active3`')" />
      <path ftui-binding id="pv-grid" d="M300,100 L300,500" stroke="yellow" [class]="DEVICE:FEED | step('0:`inactive`, 1:`active1`, 1000:`active2`, 2000:`active3`')" />
      <path ftui-binding id="pv-bat" d="M345,100 L345,180 C345,255,345,255,420,255 L500,255" stroke="yellow" [class]="DEVICE:CHARGE | step('0:`inactive`, 1:`active1`, 1000:`active2`, 2000:`active3`')" />
      <path ftui-binding id="grid-home" d="M255,500 L255,420 C255,345,255,345,180,345 L100,345" stroke="red" [class]="DEVICE:GET | step('0:`inactive`, 1:`active1`, 1000:`active2`, 2000:`active3`')" />
      <text id="pv-home-txt" x="210" y="230" style="fill: #ccc; font-size: 38px; text-anchor: end;"><ftui-label [text]="DEVICE:PVHOMEVAL | round()"></ftui-label></text>
      <text id="grid-home-txt" x="210" y="400" style="fill: #ccc; font-size: 38px; text-anchor: end;"><ftui-label [text]="DEVICE:GET | round()"></ftui-label></text>
      <text id="pv-bat-txt" x="390" y="230" style="fill: #ccc; font-size: 38px; text-anchor: start;"><ftui-label [text]="DEVICE:CHARGE | round()"></ftui-label></text>
      <text id="bat-home-txt" x="390" y="355" style="fill: #ccc; font-size: 38px; text-anchor: start;"><ftui-label [text]="DEVICE:DISCHARGE | round()"></ftui-label></text>
      <text id="pv-grid-txt" x="330" y="451" style="fill: #ccc; font-size: 38px; text-anchor: start;"><ftui-label [text]="DEVICE:FEED | round()"></ftui-label></text>
    </g>
</svg>

Animation der Sonne fehlt noch da mir noch nicht ganz klar ist, wie man das elegant im SVG berechnet - könnte man über ein userReading FTUI3 zur Verfügung stellen. Berechnung aus dem Widget ist (0.2 + (0.8 * (PRODUCE / PV-MAX))).

Wie gesagt, komplett ungetestet, keine Ahnung ob dies funkltioniert.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Shadow3561

Moin,

und danke für deine Mühe.

Leider funktioniert es so nicht.
Ftui3 arbeitet anders als ftui2.

irgendwann wird jemand ein PV-Widget erstellen und es hier hoffentlich zur Verfügung stellen. Es werden ja täglich mehr PV-Anlagen und somit stirbt meine Hoffnung zu letzt.

Vielleicht steigt papa ja auch irgendwann mal zu FTUI3 um und passt sein Widget entsprechend an.

Mit freundlichen Grüßen

yersinia

#14
Zitat von: Shadow3561 am 23 Juni 2022, 17:44:00Leider funktioniert es so nicht.
Also bei mir hat es, bis auf die Werte/Texte, gut funktioniert. ich habe aber auch nur einen Dummy zum testen.

Zitat von: Shadow3561 am 23 Juni 2022, 17:44:00Ftui3 arbeitet anders als ftui2.
Ja, und vor allem benötigt man nicht für alles ein Widget da sich vieles schon mit den FTUI3-Basifunktionen realisieren lässt.

Zitat von: Shadow3561 am 23 Juni 2022, 17:44:00irgendwann wird jemand ein PV-Widget erstellen und es hier hoffentlich zur Verfügung stellen. Es werden ja täglich mehr PV-Anlagen und somit stirbt meine Hoffnung zu letzt.

Vielleicht steigt papa ja auch irgendwann mal zu FTUI3 um und passt sein Widget entsprechend an.
Aber da es mit den Texten irgendwie doof ist und ich schon immer mal wissen wollte, wie man eine FTUI3 component baut, hab ich basierend auf papas grandioser Vorarbeit (Danke!) etwas gefrickelt.

Das anhängende Archiv entpacken und den Ordner pvvis unter components in ablegen. Einbinden der component in FTUI3 dann über:
        <ftui-pvvis
                [charge]="DEVICE:CHARGE"
                [discharge]="DEVICE:DISCHARGE"
                [feed]="DEVICE:FEED"
                [produce]="DEVICE:PRODUCE"
                [pvmax]="DEVICE:PVMAX"
                [receive]="DEVICE:GET"
                [soc]="DEVICE:SOC">
        </ftui-pvvis>

Einfach entsprechend DEVICE und die readings ersetzen, analog zu:
Zitat von: papa am 11 März 2021, 20:19:29data-get - Verbrauch Haus
data-feed - Einspeisungs in Netz
data-produce - Production PV-Anlage
data-charge - Ladung Akku
data-discharge - Entladung Akku
data-soc - Ladezustand Battery
data-pv-max - Maxiamle Leistung PV

Nur zur Info: zum Testen (mangels Hardware) nutze ich einen Dummy, die Werte sind wahrscheinlich Schwachsinn:
Internals:
   NAME       SolarTest
   TYPE       dummy
   READINGS:
     2022-06-24 07:27:19   CHARGE          320
     2022-06-24 07:41:38   DISCHARGE       25
     2022-06-24 13:46:39   FEED            150
     2022-06-24 13:46:39   GET             250
     2022-06-24 14:03:22   PRODUCE         2850
     2022-06-24 07:31:57   PVMAX           3200
     2022-06-24 12:53:34   SOC             48
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl