Daten von Photovoltaikanlage auslesen und im OSD anzeigen

  • Hi,


    als Betreiber einer PV-Anlage fände ich es praktisch wenn mein VDR mir die wichtigsten Ertragsdaten im OSD anzeigen könnte. Am Wechselrichter der PV-Anlage ist ein Datenlogger (Suntrol STL200) angeschlossen, er lässt sich im lokalen Netz unter 192.168.178.20 aufrufen und stellt die Ertragsdaten als html page dar. Nach etwas Recherche habe ich herausgefunden, dass die Daten auch als js-Objekte zur Verfügung gestellt werden, ich kann sie im Terminal wie folgt abrufen:

    Code
    root@macmini:~# curl 192.168.178.20/min_day.js
    m[mi++]="11.04.15 10:25:00|5026;3750;1407;5836;539;425;67"
    m[mi++]="11.04.15 10:20:00|5382;4028;1500;5413;535;416;66"
    m[mi++]="11.04.15 10:15:00|4761;3576;1323;4966;535;420;65"
    m[mi++]="11.04.15 10:10:00|4339;3263;1203;4565;536;423;64"
    m[mi++]="11.04.15 10:05:00|3869;2920;1073;4203;540;420;63"
    m[mi++]="11.04.15 10:00:00|3224;2443;884;3879;533;415;62"
    m[mi++]="11.04.15 09:55:00|3454;2593;953;3608;534;421;62"


    => Das sind die aktuellen Tageswerte. Interessant ist hier der Wert 5836 in Zeile 1, der (durch 1000 dividiert) die produzierten kWh anzeigt.



    => Das sind die Momentanwerte. Interessant ist hier der Wert 7228 in Zeile 3, der die Momentanleistung in Watt anzeigt.


    Zunächst müsste ich die beiden Zahlenwerte für Tagasproduktion und Momentanleistung (mittels grep?) aus den obigen curl-outputs herausfiltern können. Mein Wunsch wäre dann die Werte letztlich (wie z.B. die CPU load) in eine Datei zu schreiben, so dass skindesigner darauf zugreifen kann.


    Danke und Gruß
    maz

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Hi maz,


    das ist gar nicht notwendig, das in eine Datei zu schreiben. Du kannst die "custom tokens" vom Skindesigner benutzen. Siehe Skindesigner Wiki "2.11 Custom Tokens".


    Ciao Louis

  • OK super, ich sollte doch mal das Wiki komplett lesen :) Wäre trotzdem nett wenn mir jemand mit dem grep-Befehl helfen könnte.


    EDIT1: Die Momentanleistung in Watt bekomme ich schon mal mit

    Code
    root@macmini:/usr/lib/vdr/plugins/skindesigner/scripts# wget -qO- http://192.168.178.20/min_cur.js | awk -F "=" '{ if($1=="var Pac"){ print $2;}}'
    8171


    EDIT2: Die Tagesproduktion in kWh bekomme ich mit:

    Code
    root@macmini:/usr/lib/vdr/plugins/skindesigner/scripts# wget -qO- http://192.168.178.20/min_day.js | awk -F ";" 'NR==1{ print $4/1000;}'
    34.213

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

    4 Mal editiert, zuletzt von maz ()

  • Mach doch,


    Code
    curl 192.168.178.20/min_cur.js | grep PAC


    Dann hast Du schon mal die richtige Zeile.
    Dann noch mit cut den vorderen Teil abschneiden, und fertig.
    Den Wert kannst Du dann mittels svdrpsend an skindesigner senden.
    Einfach mal

    Code
    svdrpsend plug skindesigner help


    machen.
    Oder im WIKI gucken.

  • Danke - funktioniert soweit. Eine Frage noch: Wenn ich mit svdrpsend einen Wert setze, das OSD-Menü aufrufe und danach nochmal einen (neuen) Wert setze, wird der Wert im OSD nicht aktualisiert und erst nach erneutem Aufruf des Menüs angezeigt. Ist das "dynamische Aktualisieren" bei custom tokens nicht möglich?
    Kannst Du mir mal Dein Skript zeigen, damit ich sehe wie der Wert übergeben wird? Ich hatte mir eigtl. vorgestellt, dass die PV-Werte so alle 5 sec aktualisiert werden sollen.


    Danke,
    maz

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Danke - funktioniert soweit. Eine Frage noch: Wenn ich mit svdrpsend einen Wert setze, das OSD-Menü aufrufe und danach nochmal einen (neuen) Wert setze, wird der Wert im OSD nicht aktualisiert und erst nach erneutem Aufruf des Menüs angezeigt. Ist das "dynamische Aktualisieren" bei custom tokens nicht möglich?


    Nein das ist nicht vorgesehen. Ändern sich die Werte denn so oft? Dann müsstest du ja auch alle Nase lang dein Script laufen lassen und die Werte per svdrp übergeben...macht ja auch nur bedingt Sinn.


    Ciao Louis

  • Danke - funktioniert soweit. Eine Frage noch: Wenn ich mit svdrpsend einen Wert setze, das OSD-Menü aufrufe und danach nochmal einen (neuen) Wert setze, wird der Wert im OSD nicht aktualisiert und erst nach erneutem Aufruf des Menüs angezeigt. Ist das "dynamische Aktualisieren" bei custom tokens nicht möglich?
    Kannst Du mir mal Dein Skript zeigen, damit ich sehe wie der Wert übergeben wird? Ich hatte mir eigtl. vorgestellt, dass die PV-Werte so alle 5 sec aktualisiert werden sollen.


    Danke,
    maz

    Mein Anspruch war:
    Wenn ich das Menu hin und wieder mal aufrufe, das dort die aktuellen Werte stehen.
    Diese werden wie gesagt alle paar Minuten per CRON-Job beschafft.


    Was soll Dir das denn bringen, wenn das Menu offen ist und sich das sekundengenau aktualisiert ?
    Willst Du die KW/H mitzählen ?

  • Bei den kWh geb ich Dir Recht, die Momentanleistung sollte aber schon aktuell sein. Ich hab es jetzt hinbekommen mit einem Skript das minütlich per crontab ausgeführt wird. Ich werd mal beobachten ob das irgendwelche negativen Konsequenzen auf das "Ansprechverhalten" hat.

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Ich habe nun in der displaymenumain.xml folgendes eingefügt:

    SQL
    <customtokens>        <area x="40%" y="67%" width="59%" height="19%" layer="5">            <drawimage condition="gt({cputemp}, 80)" imagetype="skinpart" path="tachohands/pv_12000"        x="{areawidth}*0.81" y="3%" width="18%" height="98%"/>            <drawimage condition="lt({cputemp}, 81)" imagetype="skinpart" path="tachohands/pv_{pvpower}" x="{areawidth}*0.81" y="3%" width="18%" height="98%"/>        </area>        <area x="88%" y="67%" width="11%" height="24%" layer="4">            <drawtext align="center" y="80%" font="{regular}" fontsize="12%" color="{clrWhite}" text="PV power: {pvpower} W" />            <drawtext align="center" y="90%" font="{regular}" fontsize="12%" color="{clrWhite}" text="PV energy: {pvenergy} kWh" />        </area>    </customtokens>


    Die passenden tachohands (Zeiger) habe ich erstellt, und zwar in 400 Watt Schritten pro Zeiger. Maximalleistung sind 12000 Watt.
    Problem: Die Momentanleistung die ich aus dem Datenlogger auslese ist ein ganzzahliger Wert (also z.B. 4321 Watt), dafür gibt es dann keinen passenden Zeiger. Es müssten also die Werte immer in 400er Schritten auf- oder abgerundet werden. Ist das in der xml möglich oder gibt es noch einen anderen Ansatz?


    Gruß maz

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Es müssten also die Werte immer in 400er Schritten auf- oder abgerundet werden. Ist das in der xml möglich oder gibt es noch einen anderen Ansatz?

    Du kannst im Skin Werte vergleichen (sind ja nur 30 Positionen :P) oder einfach vorab in dem Skript, das die Daten ausliest, diskrete Werte errechnen - z.B. mit diesem Python-Skript



    Code
    $ python3 get_step.py 201
    400
    $ python3 get_step.py 200
    0

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Im Skin habe ich ja einereseits die Leistung in Watt als Zahl (diese sollte möglichst genau bleiben) und anderseits den "Tacho" (dieser braucht den auf 400er abgerundeten Wert). Somit wäre es wahrscheinlich besser man würde das Abrunden des {pvpower} Werts in die xml Datei einbauen, wenn möglich.

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Notfalls könnte man ja auch beide Werte in unterschiedlichen Variablen hinterlegen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Moin,

    Notfalls könnte man ja auch beide Werte in unterschiedlichen Variablen hinterlegen.


    Wieso notfalls? Das ist doch eine saubere Lösung. Im Skin würde es zwar auch gehen, wäre aber wesentlich umständlicher.


    Ciao Louis

  • Wieso notfalls?

    Weil das so klang als wäre es was ganz schlimmes da einen zusätzlichen Wert zu definieren...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Nein ist nicht schlimm :) mein Gedanke war nur dass je mehr "custom tokens" per svdrpsend Befehl übergeben werden (bei mir minütlich) vielleicht dadurch ein Performance-Problem entstehen könnte (Ruckler, Lastspitzen etc.)

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Nein ist nicht schlimm :) mein Gedanke war nur dass je mehr "custom tokens" per svdrpsend Befehl übergeben werden (bei mir minütlich) vielleicht dadurch ein Performance-Problem entstehen könnte (Ruckler, Lastspitzen etc.)


    Ein paar Bytes mehr machen das Kraut da nun wirklich nicht fett...da wäre eine aufwändige Bestimmung im Skin mit zig Conditions wesentlich performancelastiger.


    Ciao Louis

  • Hm kurz vor'm Ziel stehe ich auf dem Schlauch:
    Die Zeiger habe ich angelegt (pv_0, pv_400, pv_800 usw.) im Ordner tachohands. In meinem cron-Skript habe ich "powerrounded" ergänzt:

    Bash
    #!/bin/bash
    # please update this script to fit your needs# this script is call every time the widget will be drawn, so keep it short and fast ;)
    # if the script is executed from system_information script set the locale back for "°C"LANG=de_DE.UTF-8
    POWER=`wget -qO- http://192.168.178.20/min_cur.js | awk -F "=" '{ if($1=="var Pac"){ print $2;}}'`POWERROUNDED=`wget -qO- http://192.168.178.20/min_cur.js | awk -F "=" '{ if($1=="var Pac"){ print int($2/400)*400;}}'`ENERGY=`wget -qO- http://192.168.178.20/min_day.js | awk -F ";" 'NR==1{printf "%.1f\n",$4/1000;}'`
    svdrpsend PLUG skindesigner SCTK pvpower = ${POWER}svdrpsend PLUG skindesigner SCTK pvpowerrounded = ${POWERROUNDED}svdrpsend PLUG skindesigner SCTK pvenergy = ${ENERGY}


    Offenbar werden auch alle 3 custom tokens sauber übergeben:

    Code
    Apr 29 19:26:40 macmini vdr: [14154] connect from 127.0.0.1, port 54010 - accepted
    Apr 29 19:26:40 macmini vdr: [14154] skindesigner: custom string token "pvenergy" = "50.8"
    Apr 29 19:26:40 macmini vdr: [14154] skindesigner: custom int token "pvpower" = "907"
    Apr 29 19:26:40 macmini vdr: [14154] skindesigner: custom int token "pvpowerrounded" = "800"
    Apr 29 19:26:40 macmini vdr: [14154] closing SVDRP connection


    In dispaymenumain.xml habe ich ergänzt:

    Code
    <customtokens>        <area x="40%" y="67%" width="59%" height="19%" layer="5">            <drawimage condition="gt({pvpowerrounded}, 12000)" imagetype="skinpart" path="tachohands/pv_12000"        x="{areawidth}*0.81" y="3%" width="18%" height="98%"/>            <drawimage condition="lt({pvpowerrounded}, 12000)" imagetype="skinpart" path="tachohands/pv_{pvpowerrounded}" x="{areawidth}*0.81" y="3%" width="18%" height="98%"/>        </area>        <area x="88%" y="67%" width="11%" height="24%" layer="4">            <drawtext align="center" y="80%" font="{regular}" fontsize="12%" color="{clrWhite}" text="PV power: {pvpower} W" />            <drawtext align="center" y="90%" font="{regular}" fontsize="12%" color="{clrWhite}" text="PV energy: {pvenergy} kWh" />        </area>    </customtokens>


    Trotzdem wird der Zeiger nicht angezeigt :( Nur wenn ich testweise mal pv_{pvpowerrounded} durch z.B. pv_6000 ersetze, wird der passende Zeiger angezeigt.


    Gruß maz

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Moin,


    vectra hat neulich von einem ähnlichen Problem berichtet...ich bin aber noch nicht dazu gekommen, mir das genauer anzuschauen. Wobei ich es seltsam finde, dass diese Mimik problemlos mit der Uhr funktioniert, auch bei mamomoz scheint es ja zu klappen, wenn die Screenshots nicht gefakt sind ;)


    Ich schau mir das demnächst nochmal an...dann wird sich zeigen, ob ihr euch zu dusselig anstellt oder ob da noch ein Bug im Skindesigner ist :D


    Ciao Louis

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!