Selbstbau-PV / Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM

Ein Python-Skript, das den aktuellen Hausverbrauch aus einem Shelly 3EM ausliest, die Nulleinspeisung berechnet und die Ausgangsleistung eines Hoymiles-Wechselrichters mit Hilfe der OpenDTU entsprechend anpasst. Somit wird kein unnötiger Strom ins Betreibernetz abgegeben.
61 stars 24 forks source link

Error im Script? #4

Closed flensi1 closed 1 year ago

flensi1 commented 1 year ago

Hallo,

super begeistert habe ich seit nun drei Tagen versucht, das Skriot ans laufen zu bekommen. Von AhoyDTU auf OpenDTU etc...

Doch bekomme ich vom Python-Skript nur den Fehler:

simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Beim Start kommt folgendes:

====================== RESTART: /home/sense/Desktop/ne.py ====================== Traceback (most recent call last): File "/home/sense/Desktop/ne.py", line 18, in r = requests.get(url = f'http://{dtuIP}/api/livedata/status/inverters' ).json() File "/usr/lib/python3/dist-packages/requests/models.py", line 900, in json return complexjson.loads(self.text, **kwargs) File "/usr/lib/python3/dist-packages/simplejson/init.py", line 525, in loads return _default_decoder.decode(s) File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Der DTU sieht folgendermaßen aus:

Hostname OpenDTU

v4.4.4 0.1.24 d508b41 New version available! Show changes! Vbat power on reset for APP CPU, reset by PRO CPU 18 0 days 20:58:33

Hostname OpenDTU SDK Version v4.4.4 Config Version 0.1.24 Firmware Version / Git Hash d508b41 Firmware Update New version available! Show changes! Reset Reason CPU 0 Vbat power on reset Reset Reason CPU 1 for APP CPU, reset by PRO CPU Config save count 18 Uptime 0 days 20:58:33

Muss der DTU die neuste FW bekommen? Oder finde ich irgendwo das alte Skript?

Dankesehr.

LG, Holger

Selbstbau-PV commented 1 year ago

Hallo @flensi1 ,

Das Script wurde erst kürzlich für die neuste OpenDTU Version angepasst. Versuche bitte einmal deine OpenDTU Firmware zu updaten.

LG SBPV

flensi1 commented 1 year ago
            Hallo,Danke!Gibt es eine bestimmte Version, die sicher funktioniert?Dankesehr. Liebe GrüßeHolger Gesendet mit der mobilen Mail AppAm 31.03.23 um 08:41 schrieb Selbstbau-PV

                Von: "Selbstbau-PV" ***@***.***>Datum: 31. März 2023An: "Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM" ***@***.***>Cc: "Mention" ***@***.***>,"flensi1" ***@***.***>Betreff: Re: [Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM] Error im Script? (Issue #4)

Hallo @flensi1 , Das Script wurde erst kürzlich für die neuste OpenDTU Version angepasst. Versuche bitte einmal deine OpenDTU Firmware zu updaten. LG SBPV

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

Selbstbau-PV commented 1 year ago

Hallo @flensi1,

folgende Version wurde von uns getestet.

https://github.com/tbnobody/OpenDTU/suites/11835792014/artifacts/618329704

LG

flensi1 commented 1 year ago
            Huhu. Ich habs mal drauf geflasht… die config restored. Das Flashtool, dass ich von diamex.de habe (dort habe ich den fertigen dtu bestellt), ließ nur 3 Datein zu. Boot_app0 fehlt nun. Aber: Booten tut der dtu… nur das Display bleibt schwarz. Haste einen Tipp, wie ich das Display mit der neuen Firmware ans laufen bekomme?Dankesehr. Liebe Grüße, Holger Gesendet mit der mobilen Mail AppAm 31.03.23 um 10:45 schrieb Selbstbau-PV

                Von: "Selbstbau-PV" ***@***.***>Datum: 31. März 2023An: "Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM" ***@***.***>Cc: "Mention" ***@***.***>,"flensi1" ***@***.***>Betreff: Re: [Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM] Error im Script? (Issue #4)

Hallo, folgende Version wurde von uns getestet. https://github.com/tbnobody/OpenDTU/suites/11835792014/artifacts/618329704 LG

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

flensi1 commented 1 year ago

Hallo,

alles ist up2date. Skript,DTU (display geht nun auch wieder), aber Fehler im Skript:

Traceback (most recent call last): File "/home/sense/Desktop/Pi/ne.py", line 17, in r = requests.get(url = f'http://{dtuIP}/api/livedata/status/inverters' ).json() File "/usr/lib/python3/dist-packages/requests/models.py", line 900, in json return complexjson.loads(self.text, kwargs) File "/usr/lib/python3/dist-packages/simplejson/init.py", line 525, in loads return _default_decoder.decode(s) File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)**

Woran kann das liegen?

Danksehr.

flensi1 commented 1 year ago

Problem gelöst, zack nächstes. Inzwischen vom RaspberryPi auf einen Windows´-Client umgezogen, da der Pi zum recherchieren zu langsam ist.

Nach dem kopieren der "Nulleinspeichung.py" in das (Windows-)Verzeichnis: C:\Program Files\Python311\Scripts Und dem nachinstallieren der Pakete:

python -m pip install --upgrade pip (Dem vom System) empfohlenem Update: python.exe -m pip install --upgrade pip und pip install requests

Lief das Skript erstmals an. Es kam dann zum alten Fehler: "requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"

Laut Google: "The error message "JSONDecodeError: Expecting value: line 1 column 1 (char 0)" typically occurs when you are trying to parse a string as JSON, but the string is not in a valid JSON format."

--> Ergo passt das Format nicht.

Einfach ausprobiert: die URL ausgeschrieben mit ".json" am Ende und es läuft durch.

# Nimmt Daten von der openDTU Rest-API und übersetzt sie in ein json-Format
r = requests.get (url = f'http://192.168.188.240/api/livedata/status/inverters.**json**' ).json()

Und nun? Nichts. Das Skript funktioniert nicht. Shelly meldet 350W Netzbezug, Inverter gammelt bei 48W rum. Manuell auf 400 gesetzt... zeigt der Shelly -4 an.

Wer hat das Skript ursprünglich geschrieben? LG

Peacock2908 commented 1 year ago

Ein Fehler ist bei der Datenverarbeitung aufgetreten Vorhergehenden Werte werden verwendet Reseting..... Traceback (most recent call last): File "/home/nulleinspeisung.py", line 49, in print("aktueller Bezug - Haus: ",grid_sum) NameError: name 'grid_sum' is not defined Script und openDTU Software ist aktuell ...hat jemand eine Lösung für mich

Rayn0r commented 1 year ago

Das Problem ist die Zeile:

 print("aktueller Bezug - Haus:   ",grid_sum)

Wenn einer der Befehle innerhalb des try/except fehlschlägt, dann ist grid_sum nicht definiert. Verschieb die Zeile einfach hinter:

if reachable:

, dann ist der Fehler weg.

Peacock2908 commented 1 year ago

Jetzt kommt der fehler in den folgenden Zeilen. Ich habe das Script Copy Paste in vi kopiert .....Liegt es daran?? Ich habe jetzt alle Zeilen korrigiert und das Script manuel gestartet: Apr 24 19:17:02 raspberrypi python3[246050]: Vorhergehenden Werte werden verwendet Apr 24 19:17:02 raspberrypi python3[246050]: Reseting..... Apr 24 19:17:02 raspberrypi python3[246050]: Ein Fehler ist bei der Datenverarbeitung aufgetreten Apr 24 19:17:02 raspberrypi python3[246050]: Vorhergehenden Werte werden verwendet Apr 24 19:17:02 raspberrypi python3[246050]: Reseting..... Apr 24 19:17:02 raspberrypi python3[246050]: Ein Fehler ist bei der Datenverarbeitung aufgetreten Apr 24 19:17:02 raspberrypi python3[246050]: Vorhergehenden Werte werden verwendet Apr 24 19:17:02 raspberrypi python3[246050]: Reseting..... Apr 24 19:17:02 raspberrypi python3[246050]: Ein Fehler ist bei der Datenverarbeitung aufgetreten Apr 24 19:17:02 raspberrypi python3[246050]: Vorhergehenden Werte werden verwendet wiederholt sich durchlaufend ???? Noch ein Lösungsansatz für mich vielen Dank im voraus

Rayn0r commented 1 year ago

Wenn man ein Script einfach per Shift+Einf ins vim kopiert, kann es durchaus passieren, dass die Tabs Schaden nehmen. Da das korrekte Einrücken bei Python besonders wichtig ist, würde ich vorschlagen das Script direkt herunterzuladen.

Das geht ganz einfach mittels:

wget https://raw.githubusercontent.com/Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM/main/nulleinspeisung.py

Nach einem

chmod u+x nulleinspeisung.py

sollte es ausführbar sein. Wichtig wäre vielleicht noch in die erste Zeile folgendes einzufügen:

#!/usr/bin/env python3

Jetzt zur Fehlermeldung... Das Script läuft bei Dir im try/except Block auf einen Fehler. Vermutlich schlägt einer der 4 requests.get(...) Aufrufe fehl. Der Grund ist höchstwahrscheinlich, dass die IPs vom ESP32 oder vom Shelly nicht korrekt gesetzt sind. Schau doch mal, ob Du die beiden Geräte auf der Kommandozeile abfragen kannst. Ersetz in den folgenden Beispielen die DTU-IP und SHELLY-IP durch die IPs der Geräte in Deinem Netz.

curl http://DTU-IP/api/livedata/status/inverters | jq .
curl http://SHELLY-IP/emeter/1 -H "Accept: application/json" | jq .

Wenn beide einen schick formatierten JSON Block ausgeben, sollte es mit den korrekten IPs auch im Script klappen.

PS: Sollte jq nicht installiert sein auf Deiner Maschine, dann kannst Du das | jq . aus den beiden obigen Aufrufen auch einfach weglassen.

Peacock2908 commented 1 year ago

Curlhttp://192.168.1.56/api/livedata/statusBekomme ich lauter Nullen angezeigt Wenn ich die adresse im Browser eingebe ..wird das  admin und das Passwort verlangt Das wird im Script aber erst später abgefragt Bei newlimit ?!?Von meinem iPhone gesendetAm 24.04.2023 um 23:04 schrieb Rayn0r @.***>: Wenn man ein Script einfach per Shift+Einf ins vim kopiert, kann es durchaus passieren, dass die Tabs Schaden nehmen. Da das korrekte Einrücken bei Python besonders wichtig ist, würde ich vorschlagen das Script direkt herunterzuladen. Das geht ganz einfach mittels: wget https://raw.githubusercontent.com/Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM/main/nulleinspeisung.py

Nach einem chmod u+x nulleinspeisung.py

sollte es ausführbar sein. Wichtig wäre vielleicht noch in die erste Zeile folgendes einzufügen:

!/usr/bin/env python3

Jetzt zur Fehlermeldung... Das Script läuft bei Dir im try/except Block auf einen Fehler. Vermutlich schlägt einer der 4 requests.get(...) Aufrufe fehl. Der Grund ist höchstwahrscheinlich, dass die IPs vom ESP32 oder vom Shelly nicht korrekt gesetzt sind. Schau doch mal, ob Du die beiden Geräte auf der Kommandozeile abfragen kannst. Ersetz in den folgenden Beispielen die DTU-IP und SHELLY-IP durch die IPs der Geräte in Deinem Netz. curl http://DTU-IP/api/livedata/status | jq . curl http://SHELLY-IP/emeter/1 -H "Accept: application/json" | jq .

Wenn beide einen schick formatierten JSON Block ausgeben, sollte es mit den korrekten IPs auch im Script klappen. PS: Sollte jq nicht installiert sein auf Deiner Maschine, dann kannst Du das | jq . aus den beiden obigen Aufrufen auch einfach weglassen.

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>

Rayn0r commented 1 year ago

Also für die Abfrage des Status sollte laut OpenDTU Web-API kein Passwort nötig sein. Zeig doch mal kurz, was genau der curl Befehl ausgibt (die ersten 25 Zeilen genügen), sobald Du wieder am Rechner bist:

curl http://192.168.1.56/api/livedata/status | jq | head -n 25 | awk '/serial/{print "      "$1" ..."} ; !/serial/{print $0}'
Peacock2908 commented 1 year ago

curl http://192.168.1.56/api/livedata/status | jq | head -n 25 | awk '/serial/{print " "$1" ..."} ; !/serial/{print $0}' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--

Von meinem iPhone gesendet

Am 25.04.2023 um 12:29 schrieb Rayn0r @.***>:

curl http://192.168.1.56/api/livedata/status | jq | head -n 25 | awk '/serial/{print " "$1" ..."} ; !/serial/{print $0}'

Rayn0r commented 1 year ago

Das ist nur die Statistik vom Curl... Da fehlt jegliche Ausgabe vom OpenDTU. Was liefert denn das curl ohne irgend was dahinter?

curl --no-progress-meter http://192.168.1.56/api/livedata/status
Peacock2908 commented 1 year ago

Nichts … Im Browser dagegen , werden mir einige Werte angezeigt !!!

Von meinem iPhone gesendet

Am 25.04.2023 um 15:55 schrieb Rayn0r @.***>:

curl --no-progress-meter http://192.168.1.56/api/livedata/status

flensi1 commented 1 year ago

Moin :-) Ja, die Problematik habe ich ganz ähnlich hier. Habe inzwischen einiges über python gelernt inzwischen und ich glaube, ich mache da mal einen richtigen Einsteigerkurs, damit man da richtig reinkommt. Bildungsurlaub und so ;)

Mal ganz blöd gefragt: Rayn0r.. magst Du dänisches Bier? Ich würde Dir gerne ein 24er-Pack Bier oder Softdrinks nach Wahl versandfrei zukommen lassen, falls es Dir möglich wäre, 5-10 Minuten Deiner kostbaren Zeit für eine kleine Teamviewer-Session zu opfern. Vielleicht finden wir gemeinsam die Lösung und können so auch den anderen helfen?

Danke & Liebe Grüße, Holger

Rayn0r commented 1 year ago

@flensi1 Danke für das Angebot, aber Bier ist nicht so mein Fall. Ich bin gerade selber beim Aufbau einer Anlage. Ein paar Teile fehlen mir noch, deswegen kann ich hier noch nicht alles nachstellen. Wenn es läuft, schaue ich mal, ob ich herausfinden kann, warum bei euch nichts angezeigt wird. Meine Vermutung ist das Funktmodul. Wird es denn vom OpenDTU erkannt?

Im ahoy Wiki steht auch, dass man am Besten 2 Kondis zwischen VCC und GND lötet um zum einen den erhöhten Stromverbrauch beim Senden zu kompensieren und um die Spannung zu glätten.

Welchen ESP und welches NRF24L01+ Modul setzt Du denn ein?

karrenbauer commented 1 year ago

Hallo, ich benutze 2 x Open-DTU (mit ESP32), eine DTU (CMT2300A) mit 1 x HMT2250-6T und eine weitere DTU (NRF24L01+) mit 1 x HM700 + 1 x HM 800. Den Skript hatte ich erst mal mit dem HMT2250 ausprobiert, der läuft bei mir so original, ich hatte lediglich zu bemängeln, dass sich das Limit bis max_WR hochgeschaukelt wenn Bezug > power war und dann kam wieder Setpoint=0. Werte unter 10 Watt werden von der DTU übrigens nicht akzeptiert.

Den Skript kann ich unter Linux und unter Windows laufen lassen, ohne Fehlermeldungen... siehe auch: https://github.com/Selbstbau-PV/Selbstbau-PV-Hoymiles-nulleinspeisung-mit-OpenDTU-und-Shelly3EM/issues/5

ich habe die dort "empfohlene" Änderung gemacht, läuft jetzt gut, aber Nachts (wenn der WR aus ist) hängt sich mein Skript irgendwie auf und bleibt "stehen"...andere Baustelle....

Ich wollte eigentlich damit nur sagen, dass der Skript an sich eigentlich laufen sollte...auch wenn ich noch nicht zufrieden bin..;-)) 2023-04-26 10_12_48-Nulleinspeisung

karrenbauer commented 1 year ago

bei einer DTU mit 2 Wechselrichter zeigt es immer nur den ersten Inverter

Nimmt Daten von der openDTU Rest-API und übersetzt sie in ein json-Format r = requests.get(url = f'http://{dtuIP2}/api/livedata/status/inverters' ).json()

wie bekomme ich Daten von WR2? Ist das in der Rest-API nicht vorgesehen? Dann muss man für jeden WR eine separate DTU laufen lassen?

Rayn0r commented 1 year ago

@karrenbauer Das passt nicht wirklich hier ins Ticket. Lass uns das in einem separaten Ticket besprechen. Schau bitte mal nach #6 .

flensi1 commented 1 year ago

Issue solved.

Raynor hatte recht. Der Zugriff auf die Daten des DTU funktionierten nicht, bei mir war per Default "Nur-Lese-Zugriff auf die Weboberfläche ohne Passwort zulassen" aktiviert.

Ich habe mich täuschen lassen von den Eingaben des dtuNutzer & dtuPasswort, denn ich nahm an, dass Python sich damit anmelden kann...

Nun schaue ich, dass ich die anderen beiden Inverter wieder in die DTU einpflege, dafür ist der Lösungsansatz ja auch schon da. Und das Skript soll nur Abends laufen, wenn die anderen Inverter nichts liefern bzw. erst, wenn ein Shelly den Inverter einschaltet, der per Batterie die Nachteinspeisung startet.

Bildschirm­foto 2023-04-30 um 12 54 24
Selbstbau-PV commented 1 year ago

Danke für die vielen Hilfestellungen an @flensi1.

Da der ursprüngliche Fehler in a065eb46312c8ebb2604c5654ca9971a2f5e462d behoben wurde, schließe ich das Ticket mal der Übersicht halber.

Wenn ein anderes Problem auftritt könnt ihr gerne ein neues Issue öffnen.

LG, SBPV