Solar Auswertung - Proxy

Begonnen von maxx8888, 03 Dezember 2016, 10:02:16

Vorheriges Thema - Nächstes Thema

Wernieman

Mal so als keine Infos eingeworfen:
Wenn Ihr schon Hoheit über dhcp habt und Euer gerät über DHCP im Netzwerk configuriert ist, könnte ihr auch diesem Gerät einen eigene router-Info zukommen lassen .. also den FHEM-Server. Übrigens auch wenn die IP fest eingestellt wird, per "Konfigmenü", kann man einen router definieren. Und dann seit Ihr "Man-in-the-Middle" und könnt den Verkehr auswerten.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

toxm5

Hallo,

ich habe auch eine kleine Anlage auf Basis der Envertech Geräte. Gestern habe ich einen anderen Weg gefunden wie man an die Daten kommt. So wie es aussieht benutzen viele Firmen die gleiche Portal Software. Bei Github habe ich zwei Scripte gefunden die die Daten vom Portal laden.

https://github.com/sanderjo/solarmanpv

Die URLs muss man auf das Envertech Portal anpassen und seine eigene PID angeben. Die PID steht oben in der URL wenn man sich am Portal angemeldet hat.

http://www.envertecportal.com/Terminal/TerminalMain.aspx?pid=1234

PID = 1234

Beispiel (alles in einer Zeile):

curl --silent --cookie-jar /tmp/cookies -o /dev/null 'http://www.envertecportal.com/Terminal/T
erminalMain.aspx?pid=1234' && curl --silent --cookie "ASP.NET_SessionId=`awk ' END { print \$NF }' /tmp/cookies`
"  'http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1234'

Ich hab mir ein Perl script geschrieben was die Daten bereinigt und in eine Influxdb schreibt. Die Auswertung mach ich mit Grafana. Habe kein FHEM im Einsatz dachte mir aber das dass vielleicht für den einen oder anderen hilfreich ist.

Grüße
Micha

kleineslichtHH

Da würde ich gerne wissen, wie man diese Daten in FHEM intigrieren kann.

kleineslichtHH


um mal den Anfang zu machen habe ich mir ein HTTPMOD-Device erstellt:
defmod httpmod_envertech HTTPMOD http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493 600
attr httpmod_envertech userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex requestHeader1
attr httpmod_envertech reading01Name nowpower
attr httpmod_envertech reading01Regex "nowpower":"([\d]+.[\d]+)
attr httpmod_envertech reading02Name nowpower_
attr httpmod_envertech reading02Regex "nowpower_":"([\d]+.[\d]+)
attr httpmod_envertech reading03Name power
attr httpmod_envertech reading03Regex "power":"([\d]+.[\d]+)
attr httpmod_envertech reading04Name daypower
attr httpmod_envertech reading04Regex "daypower":"([\d]+.[\d]+)
attr httpmod_envertech reading05Name monthpower
attr httpmod_envertech reading05Regex "monthpower":"([\d]+.[\d]+)
attr httpmod_envertech reading06Name yearpower
attr httpmod_envertech reading06Regex "yearpower":"([\d]+.[\d]+)
attr httpmod_envertech reading07Name allpower
attr httpmod_envertech reading07Regex "allpower":"([\d]+.[\d]+)
attr httpmod_envertech reading08Name capacity
attr httpmod_envertech reading08Regex "capacity":"([\d]+.[\d]+)
attr httpmod_envertech reading09Name peakpower
attr httpmod_envertech reading09Regex "peakpower":"([\d]+.[\d]+)
attr httpmod_envertech reading10Name efficiency
attr httpmod_envertech reading10Regex efficiency":"([\d]+.[\d]+)
attr httpmod_envertech reading11Name treesplanted
attr httpmod_envertech reading11Regex treesplanted":"([\d]+.[\d]+)
attr httpmod_envertech reading12Name co2
attr httpmod_envertech reading12Regex "co2":"([\d]+.[\d]+)
attr httpmod_envertech reading13Name income
attr httpmod_envertech reading13Regex "income":"€([\d]+.[\d]+)
attr httpmod_envertech requestHeader1 User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0
attr httpmod_envertech showBody 1



ich bekomme allerdings noch kein Inhalt geliefert (Body)


folgendes taucht im Log-File mit Verbose 5 auf:

2018.03.10 17:42:43 5: httpmod_envertech: Read starts parsing response to update with defined readings: 01,02,03,04,05,06,07,08,09,10,11,12,13
2018.03.10 17:42:43 4: httpmod_envertech: CheckAuth decided no authentication required
2018.03.10 17:42:43 5: httpmod_envertech: ExtractSid called, context reading, num
Content-Length: 0, body empty
Connection: close
Date: Sat, 10 Mar 2018 16:42:43 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=0h3q2lytjavhhge3xsp04jph; path=/; HttpOnly
Server: Microsoft-IIS/8.5
Cache-Control: private
Header: HTTP/1.1 200 OK
2018.03.10 17:42:43 4: httpmod_envertech: Read callback: request type was update retry 0,
Content-Length: 0
Connection: close
Date: Sat, 10 Mar 2018 16:42:43 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=0h3q2lytjavhhge3xsp04jph; path=/; HttpOnly
Server: Microsoft-IIS/8.5
Cache-Control: private
HTTP/1.1 200 OK
2018.03.10 17:42:43 5: HttpUtils response header:
2018.03.10 17:42:43 5: HttpUtils http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493: Got data, length: 0
2018.03.10 17:42:43 4: http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493: HTTP response code 200


Content-Type: application/x-www-form-urlencoded
Content-Length: 0
User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0
Accept-Encoding: gzip,deflate
Host: www.envertecportal.com
GET /AjaxService.ashx?ac=upTerminalMain&psid=1493 HTTP/1.0
2018.03.10 17:42:43 5: HttpUtils request header:
2018.03.10 17:42:42 5: HttpUtils url=http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493
timeout 2
header: User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0,
2018.03.10 17:42:42 4: httpmod_envertech: HandleSendQueue sends request type update to URL http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493, No Data,
2018.03.10 17:42:42 5: httpmod_envertech: HandleSendQueue called, qlen = 1
2018.03.10 17:42:42 5: httpmod_envertech: AddToQueue adds type update to URL http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493, no data, header User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0, retry 0
2018.03.10 17:42:42 4: httpmod_envertech: AddToQueue adds update, initial queue len: 0
2018.03.10 17:42:42 4: httpmod_envertech: update timer modified: will call GetUpdate in 60.0 seconds at 2018-03-10 17:43:42
2018.03.10 17:42:42 4: httpmod_envertech: GetUpdate called (update)



ich teste jetzt mal weiter mit den Einstellungen für die Anmeldung an der Seite

peewag

Hallo Kollegen,

ich habe mir da etwas zusammen gebastelt:

Ich habe zwei dummys angelegt:
define nowPVPower dummy
attr nowPVPower room PV
define dayPVPower dummy
attr dayPVPower room PV


diese werden von einem Python-Script befüllt (/opt/fhem/scripts/getPV.py):
import os
import urllib2
import subprocess

proc = subprocess.Popen("curl --silent --cookie-jar /tmp/cookies -o /dev/null 'http://www.envertecportal.com/Terminal/TerminalMain.aspx?pid=1457' && curl --silent --cookie \"ASP.NET_SessionId=`awk ' END { print \$NF }' /tmp/cookies`\"  'http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1457'", stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()

# out looks like this:
#[{"nowpower":"0.25 kW"
#"nowpower_":"0.25 kW"
#"power":"0.25"
#"daypower":"1.44 kWh"
#"monthpower":"37.95 kWh"
#"yearpower":"175.52 kWh"
#"allpower":"580.98 kWh"
#"lasttime":"May.19 19:21
#GMT +1
#2018"
#"commissioned":"Mar.16
#2017"
#"capacity":"0.25 kW"
#"installer":"Peter"
#"peakpower":"0.00 kW"
#"efficiency":"5.40 kWh/kW/day"
#"treesplanted":"1.59 <em style='font-size:16px'>trees</em>"
#"co2":"0.58 <em style='font-size:16px'>ton</em>"
#"income":"33.63"}]




output = out.split(",")

nowPower = output[1].split(":")[1].split(" ")[0].replace("\"","")
dayPower = output[3].split(":")[1].split(" ")[0].replace("\"","")

#print "NowPower: " + str(nowPower) + " kW"
#print "DayPower: " + str(dayPower) + " kWh"


urllib2.urlopen("http://127.0.0.1:8083/fhem?cmd.nowPVPower=set%20nowPVPower%20"+str(nowPower))
urllib2.urlopen("http://127.0.0.1:8083/fhem?cmd.dayPVPower=set%20dayPVPower%20"+str(dayPower))


In diesem Script, wird wie von toxm5 beschrieben die Daten von der Envertec-HP heruntergeladen und via http-set an FHEM übertragen. Dieses script wird mittels crontab dann alle 5 Minuten ausgeführt:
*/5 * * * * python /opt/fhem/scripts/getPV.py

Ich denke man könnte das auch mit den Funktionen von FHEM lösen, aber da bin ich nicht so fit wie in Linux u. Python-Programmieren  ::)

und immerhin, es funktioniert  8)

kleineslichtHH


Hallo ihr hübschen,


wie kann ich mir mein "Income" vernünftig anzeigen lassen?
Ich bekomme mit unten angefügtem Code folgendes angezeigt:



€10.01}]


Zitat von: peewag am 20 Mai 2018, 10:18:36



#"income":"33.63"}]
output = out.split(",")

income = output[18].split(":")[1].split(" ")[0].replace("\"","")

#print "income: " + str(income) + " Euro"

urllib2.urlopen("http://127.0.0.1:8083/fhem?cmd.incomePVPower=setreading%20Dummy_PV%20incomePVPower%20"+str(income))

iBeSmart

#21
Hallo kleineslichtHH, vielen Dank für den Anfang!

Also nach probieren und Regex studieren, ist es mir gelungen die HTTPMOD Abfrage zum Laufen zu bekommen.

(Ist nicht sauber, nicht hübsch, funxt aber)

->

defmod sol HTTPMOD http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=XXX 600
attr sol userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex reading15Name reading15Regex reading16Name reading16Regex requestHeader1 requestHeader2 sid01Data sid01Header1 sid01IdRegex sid01IgnoreRedirects:0,1 sid01URL sid02Data sid02Header1 sid02IdRegex sid02URL sidURL
attr sol clearSIdBeforeAuth 1
attr sol disable 0
attr sol reAuthRegex (class="login_box"|Bad Request)
attr sol reading01Name nowpower
attr sol reading01Regex "nowpower":"([\d]+.[\d]+)
attr sol reading02Name nowpower_
attr sol reading02Regex "nowpower_":"([\d]+.[\d]+)
attr sol reading03Name power
attr sol reading03Regex "power":"([\d]+.[\d]+)
attr sol reading04Name daypower
attr sol reading04Regex "daypower":"([\d]+.[\d]+)
attr sol reading05Name monthpower
attr sol reading05Regex "monthpower":"([\d]+.[\d]+)
attr sol reading06Name yearpower
attr sol reading06Regex "yearpower":"([\d]+.[\d]+)
attr sol reading07Name allpower
attr sol reading07Regex "allpower":"([\d]+.[\d]+)
attr sol reading08Name lasttime
attr sol reading08Regex "lasttime":"([\w].+ [\d]+:[\d]+,[\w]+ .......)
attr sol reading09Name commissioned
attr sol reading09Regex "commissioned":"([\w].+[\d]+,[\d]+)
attr sol reading10Name capacity
attr sol reading10Regex "capacity":"([\d]+.[\d]+)
attr sol reading11Name installer
attr sol reading11Regex "installer":"([\w].[\w]+.[\w]+.[\w]+)
attr sol reading12Name peakpower
attr sol reading12Regex "peakpower":"([\d]+.[\d]+)
attr sol reading13Name efficiency
attr sol reading13Regex "efficiency":"([\d]+.[\d]+)
attr sol reading14Name treesplanted
attr sol reading14Regex treesplanted":"([\d]+.[\d]+)
attr sol reading15Name co2
attr sol reading15Regex co2":"([\d]+.[\d]+)
attr sol reading16Name income
attr sol reading16Regex "income":"€([\d]+.[\d]+)
attr sol requestHeader1 Cookie: $sid
attr sol room Solar
attr sol sid01IdRegex (ASP.NET_SessionId[^;;\n]+)
attr sol sid02Data uNam=XXXXX&uPwd=XXXXX&remPasswd=false
attr sol sid02Header1 Cookie: $sid
attr sol sid02IdRegex Cookie: ([^\n]+)
attr sol sid02URL http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=XXXX
attr sol sidURL http://www.envertecportal.com/LoginPage.aspx


evtl. beim ersten Mal die httpmod url auf http://www.envertecportal.com/LoginPage.aspx setzen und danach (wenn der cookie da ist) auf http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=XXXX umstellen.

Jetzt habe ich festgestellt, dass die genaueren aktuellen Daten ja im Real-Time Reiter versteckt sind.

Dann habe ich das auch mal mit dem HTTPMOD versucht und bin auch schon soweit gekommen, dass ich eine Ausgabe bekomme

URL: http://www.envertecportal.com/AjaxService.ashx?ac=RealData&pid=XXXX&search=false&sn=&page=1
die dann so aussieht

2018.08.17 16:57:33 5: HttpUtils response header:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 17 Aug 2018 14:57:32 GMT
Connection: close
Content-Length: 395
2018.08.17 16:57:33 4: solar1: Read callback: request type was update retry 0,
Body: <tr class='chart_list_odd' onmouseover='changeColor(1,this)' onmouseout='changeColor(2,this)'><td>1</td><td rowspan="1">9001XXXX</td><td rowspan="1">1</td><td rowspan="1">1</td><td><a href='TerminalChart.aspx?pid=XXXX&target=1114XXXX'>1114XXXX</a></td><td>21.7</td><td>0.04</td><td>230.4</td><td>0.00</td><td>50.03</td><td>0.9</td><td>1.18</td><td>32</td><td>17/08/2018 16:57:04 GMT +2</td></tr>


bzw. so : 19001XXXX111114XXXX31.80.19231.30.0350.015.81.1831.617/08/2018 15:36:39 GMT +2
Entschlüsselt ergbit das:


NR:1
EnverBridgeID: 9001XXXX
Installed No.of MI: 1
Active No.of MI: 1
MPPT S/N : 1114XXXX
DC Input Voltage(V): 31.8
DC Input Current(A): 0.19
AC Output Voltage(V) 231.3
AC Output Current(A) 0.03
AC Output Frequency(Hz): 50.01
AC Output Current(W): 5.8
Total Energy(kWh): 1.18
Temperature(C): 31.6
Time: 17/08/2018 15:36:39 GMT +2


soweit so gut. Auch das wird abgerufen, aber das Regex zerlegen fehlt noch.

Uwe_Eta20

Hallo,

so, ich habe das Ganze jetzt auch mal probiert und die Readings kommen jetzt auch (stabil!)  rüber.
Ich wollte mal etwas einfügen, also die SVG und Readings, (die Formatierung) ist wohl nicht meine Stärke.
Wenn etwas unklar ist mit den Regexen bzw. verwendeten Links der URLs, oder benötigten Attributen, bitte antworten oder melden.


Gruss
Uwe

Uwe_Eta20

#23
Hallo nochmal,

ich habe mal den aktuellen Plot und den gestrigen als kompletten Tag dran sowie die betreffenden Readings ( außer Installer ), angehängt.
Leider gibt es auch heute nochmal das Phänomen, das irgendwann die JSON Datei nicht mehr korrekt erfasst wird und die Übermittlung damit gestört.
Kann aber vllt. sein, da ich gegen 10 Uhr noch wild herumgebastelt habe, jetzt hat er wieder den Flow.

viele Grüße
Uwe

Uwe-Kaditz

Hallo,
seit dem 15.01.2019 funktioniert die Abfrage über http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=xxxx nicht mehr (EnverPortal 2.0!).

Habt Ihr schon eine Lösung?

siehe auch https://forum.fhem.de/index.php/topic,96106.0.html

toxm5

Hallo,

die neuen URLs und CURL Befehle findet Ihr auf meinem Blog.

https://www.lets-try-solar.de/index.php/2019/01/20/www-envertertecportal-com-v2-daten-auslesen/

Mein dazugehöriges Perl Script um die Daten in eine InfluxDB funktioniert wieder aber ich muss noch die Variablen Namen konvertieren da diese sich auch geändert haben.

Viele Grüße
toxm5

Uwe-Kaditz

Hallo,
danke toxm5 für die Bereitstellung der URLs und CURLs.

Ich habe meinen Python-Script getPV.py mal angehängt, mit dem man die Daten ins FHEM bekommt.

Der Script befindet sich in /opt/fhem/scripts/getPV.py und muss noch wie folgt angepasst werden:
<pvID> ersetzen durch die Envertech-StationsID (ist identisch zur ID, die man im Envertec-Portal v1.x erhalten hat)
<FHEMip> ersetzen durch die IP-Adresse der FHEM-Installation (z.B. http://192.168.1.77:8083/
<FHEMuser> ersetzen durch den LoginNamen des FHEM-User
<FHEMpwd> ersetzen durch das zugehörige FHEM-Passwort

Der Script wir über das folgende Kommando in /etc/crontab aller 2 Minuten ausgeführt:
*/2   * * * *   python  /opt/fhem/scripts/getPV.py

Zum Testen kann man den Script auch im Raspi-Terminal mit folgendem Kommando starten:
python  /opt/fhem/scripts/getPV.py

Viele Grüße
Uwe

MEitelwein

#27
Ich habe das ursprünglich Proxy script noch mal aufgegriffen und kann so nun den direkten Datenstrom von der Enverbridge mitloggen. Dazu muss aber ein lokaler DNS Server vorhanden sein, der den Traffic der Enverbridge auf den Rechner umleitet, auf dem der Python Proxy läuft.

Zum Installieren auf Ubuntu oder Debian

  • die angehängten Dateien in ein Verzeichnis packen, z.B. /opt/EnverBridge-Proxy
  • die Datei enverproxy.conf anpassen und nach /etc verschieben
  • die Pfade in der Datei enverproxy.service geg. anpassen und die Datei nach /etc/systemd/system verschieben

Der Service wird aktiviert mit
# systemctl daemon-reload
# systemctl enable enverproxy
# systemctl start enverproxy


Der Proxy schreibt sein Log in das Syslog, über die Variable DEBUG in enverproxy.conf kann ein ausführliches Logging aktiviert werden.

Ein entsprechendes Device habe ich in FHEM mit folgenden Befehlen angelegt, man benötigt pro Converter ein Device:
define slr_panel_01 dummy
attr slr_panel readingList ac dc temp power totalkwh freq
attr slr_panel alias Solarpanel
attr slr_panel {sprintf("Zählerstand %.3f kWh, aktuelle Leistung %.1f W", ReadingsVal($name,"totalkwh",0), ReadingsVal($name,"power",0))}
attr slr_panel icon measure_power_meter


In der enverproxy.conf muss im dictionary id2device die Übersetzung von converter ID zum FHEM Device eingetragen werden. Die ID entspricht der ID im Envertec Portal bzw. wird auch im Log ausgegeben.
Für das obige FHEM Device und einer Converter ID von 1234 wäre das
id2device = { '1234' : 'slr_panel_01', '5678' : 'your_other_fhem_device' }

ollibaba

#28
zu Uwe vom 21.1.2019.
Hallo Uwe, kannst DU hier helfen?
Ich bekomme das mit dem Python script zu laufen  , so dass ich die Werte
myPVstation: mein station
NowPower: 0.60797 kW
DayPower: 2.02 kWh
MonthPower: 21.19 kWh
YearPower: 45.91 kWh
AllPower: 797.27 kWh
mit dem Test ausgegeben bekomme, aber danach werden Fehler (ab Zeile 75,etc. angezeigt):

Traceback (most recent call last):
  File "/opt/fhem/scripts/getPV.py", line 75, in <module>
    opener.open("http://192.168.xxx.yy:8083/fhem?cmd=set%20nowPVPower%20"+str(nowPower)+"&fwcsrf=Me1nT3chBl0g4Th3W1n")
  File "/usr/lib/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 473, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Authorization Required

Liegt das an der Variablen: fwcsrf=Me1nT3chBl0g4Th3W1n .
Wenn ja, welchen Wert nehme ich da, ich finde bei mir nur einen CSRFTOKEN mit dem Wert csrf_3377485xxxxxxxx
Wenn ich den eingebe, gibt´s aber auch die gleichen Fehler.
Danke schon mal für Deine Response.
Oliver
P.S. ach so... und wie bekomme ich die Werte dann im FHEM zu sehen? Was muss ich da noch definieren?



ollibaba

#29
So ich habe den Fehler bei mir gefunden.
Im Python Programm getPV.py von Uwe habe ich aus Versehen in Zeile 67 vergessen die < > Zeichen um die eigene IP zu entfernen.
Es muss natürlich richtig heißen: top_level_url = "http://192.168.xxx.yy:8083"
und bei dem CSRFToken muss es in der Zeile 75 und folgende dann am Ende immer heißen:
"&fwcsrf=csrf_123456789012345"
csrf_123456789012345 ist der Wert des Attributs CSRFTOKEN des web devices in FHEM.
Trotzdem vielen Dank Uwe für der Hinweis mit dem Setzen der Variablen in FHEM, die ich dann als dummy erstellt habe. Das hat geholfen. Die Werte sind jetzt gefüllt.
Topp Script. Danke dafür :-)
Oliver
Die Ausgabe des Testlaufs ( python  /opt/fhem/scripts/getPV.py )  im pi ergibt dann:
myPVstation: Meine Station
NowPower: 0.0 kW
DayPower: 2.87 kWh
MonthPower: 22.04 kWh
YearPower: 46.76 kWh
AllPower: 798.12 kWh

Kleine Ergänzung: das Verzeichnis /opt/fhem/scripts wo das py Programm abgespeichert wird existierte bei mir noch nicht und musste erst angelegt werden.
Mit dem Linux Kdo:   sudo chown fhem:dialout /opt/fhem/scripts habe ich im Pi noch die Rechte für das Verzeichnis /scripts auf User fhem und Gruppe dialout angepasst. Ob das wichtig für die Funktion ist, weiß ich aber nicht genau.