NEWS
GoodWe Wechselrichter und ioBroker
-
Hallo zusammen,
da man im Netz nichts findet, wie man ein GoodWe Wechselrichter abfragen und in ioBroker verwalten kann, schreibe ich hier ein kleines HowTo, da es kein Adapter dafür gibt.
Ich gehe davon aus, dass Ihr bereits ein Account im SEMS Portal habt. Vom SEMS Portal kommen nämlich die Daten.
HowTo:
- pygoodwe installieren:
sudo pip3 install pygoodwe
- Danach holt Ihr euch den Source Code "pygoodwe" von yaleman aus Github:
wget https://github.com/yaleman/pygoodwe/archive/master.zip unzip master.zip cd pygoodwe-master
- Die Zugangsdaten vom SEMS Portal trägt Ihr nun in der config.py ein:
mv config.py.example config.py
- Werte vom GoodWe Wechselrichter abfragen:
./allinone.py
#!/usr/bin/env python3 import json from config import args from pygoodwe import SingleInverter, API #print("Single Inverter") gw = SingleInverter( system_id=args.get('gw_station_id', '1'), account=args.get('gw_account', 'thiswillnotwork'), password=args.get('gw_password', 'thiswillnotwork'), ) # print("Grabbing data") gw.getCurrentReadings() # Ausgabe PV Anlage print(json.dumps(gw.data.get('inverter').get('out_pac'), indent=2)) pvdata = gw.data.get('inverter',{}).get('out_pac',"") # Batterie in % socdata = gw.data.get('inverter',{}).get('soc',) if socdata: print("{}".format(socdata)) # Batterie Ladestatus print(json.dumps(gw.data.get('inverter').get('battery_power'), )) batterydata = gw.data.get('inverter',{}).get('battery_power',) # Stromlast vom Haus print(f"{gw.getLoadFlow()}") # Strom ins Stromnetz print(f"{gw.getPmeter()}") # Strom Produktion Heute print(json.dumps(gw.data.get('inverter').get('eday'), indent=2)) # Strom Produktion Gesamt print(json.dumps(gw.data.get('inverter').get('etotal'), indent=2))
Ihr könnt beliebig viele Werte Abfragen und ins Script rein werfen und erweitern. Für mich sind das die wichtigsten Werte.
- Die Abgefragten Werte müssen in ioBroker rein:
Dafür habe ich ein javascript Script, welches in ioBroker ausgeführt wird.
exec('/home/pi/pygoodwe-master/allinone.py', function (error, stdout, stderr) { if(error) log('Fehler Python: ' + stderr, 'warn'); else if(stdout) { let arr = stdout.split('\n'); setState('Datenpunkte.0.PV-Anlage.PV-Power', arr[0], true); setState('Datenpunkte.0.PV-Anlage.PV_Batterie_Status', arr[1], true); setState('Datenpunkte.0.PV-Anlage.PV_Batterie_Ladung', arr[2], true); setState('Datenpunkte.0.PV-Anlage.PV_Haus_Last', arr[3], true); setState('Datenpunkte.0.PV-Anlage.PV_Strom_zu_Stadtwerken', arr[4], true); setState('Datenpunkte.0.PV-Anlage.PV_Strom_Heute', arr[5], true); setState('Datenpunkte.0.PV-Anlage.PV_Strom_Gesamt', arr[6], true); } });
Die Datenpunkte müsst Ihr vorher anlegen. Bei ausführen des Scriptes müssten alle werte in den jeweiligen Datenpunkten drin sein.
Damit dies auch aktualisiert wird, habe ich mit Blockly ein Zeitplan erstellt, der das Script alle 2 Minuten ausführt.
schedule("*/2 * * * *", function () { setState("javascript.0.scriptEnabled.PV_Anlage.Skript_1"/*scriptEnabled.PV_Anlage.Skript_1*/, true); setStateDelayed("javascript.0.scriptEnabled.PV_Anlage.Skript_1"/*scriptEnabled.PV_Anlage.Skript_1*/, false, 50000, false); });
Damit habt Ihr nun alle Werte in ioBroker
Meine Visualisierung sieht dann so aus:
Viel Spaß damit!
-
@jb1985 Hallo
ich versuche mich an deiner Anleitung aber bekomme Fehlermeldungen in IoBroker.
Die config hab ich auch geändert.
in meiner allinone steht folgendes:
Der Rest ist nicht angezeigt. Hab das Teil abgetippt aber kann keinen Fehler erkennen. Habe keine Ahnung von Phyton. Wenn ich das richtig deute findet der in Zeile 3 das json nicht? Usw. IoBroker läuft in Docker.
Vielleicht kannst du mir helfen.
Danke
Uwe -
-
@jb1985 Du hast die Datenpunkte unter 'Datenpunkte.0' angelegt. Dies sollte man vermeiden, eigene Datenpunkte gehören unter die Javascript Instanz (z.B. 'javascript.0') oder unter '0_userdata.0'
-
@jb1985 Sorry, hat ein wenig länger gedauert
Das ist das ergebnis
-
@nr5lebt bei dir scheint alles in einem docker Container zu laufen.
Ist python3 bei dir überhaupt installiert? Was erscheint wenn du
python3 allinone.py
eingibst?
-
@jb1985 said in GoodWe Wechselrichter und ioBroker:
@nr5lebt bei dir scheint alles in einem docker Container zu laufen.
Ist python3 bei dir überhaupt installiert? Was erscheint wenn du
python3 allinone.py
eingibst?
Den Gedanken das Python überhaupt installiert ist hatte ich auch schon
-
@nr5lebt ja, aber bekommst du die gleiche Fehlermeldung bei:
./allinone.py
und
python3 allinone.py
?
-
@jb1985
hab noch einen Fehler gefunden aber mit python3 bekomm ich Werte. -
@nr5lebt klappt doch!
Du musst dein python richtig konfigurieren. Setzte /usr/bin/python auf /usr/bin/python3, dann sollte es auch mit ./allinone.py klappen.
-
@jb1985 sorry, bevor ich mich jetzt im netz schlau machen muss: wie mach ich das?
-
@nr5lebt wenn es ein Debian System ist, dann einfach:
update-alternatives --install /usr/bin/python python /usr/bin/python3.7
python3.7 muss du ggf. ändern in der Version die bei dir installiert ist. Mit
whereis python
Kannst du sehen welche Python Pfade du alle hast.
-
@jb1985 sorry das hat nicht geklappt, es fehlte ein argument. hab dann selber nachgesehen aber das war dann ja nicht mehr so schwierig.
-
@nr5lebt jetzt hab ich das hier
-
@nr5lebt steht im Script auch wirklich am Anfang
#!/usr/bin/env python3
Ohne irgendwelche Leerzeichen am Anfang?
Ansonsten keine Idee, warum dein System das Script nicht als Python Script erkennt.
-
@jb1985 Das wars, habs abgeändert und jetzt klappts. Hatte das weggelassen weil ich dachte die Zeile wird durch das # auskommentiert
-
@nr5lebt Sorry, jetzt hab ich in iobroker Problem
-
@nr5lebt said in GoodWe Wechselrichter und ioBroker:
@nr5lebt Sorry, jetzt hab ich in iobroker Problem
auf der konsole klappt allinone.py jetzt
-
@nr5lebt hilft das?
apt-get install python-requests
-
@jb1985 allinone.py kann ich jetzt werte herausziehen
aber jetzt hab ich problem mit iobroker
das ist meine js-datei