Kostal neue Firmware aus 11/2020

Alle Wünsche die erledigt sind oder nie verwirklicht werden.

Moderator: Ulrich

Bogeyof
Beiträge: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Bogeyof »

Haben bei mir die meisten (z.B. grafana Influxdb usw) auch, nicht alle. Habe mir darüber keine Gedanken gemacht, da ich hier nie etwas geändert habe.

Janniman
Beiträge: 129
Registriert: Mi 13. Okt 2021, 09:52
Hat sich bedankt: 12 Mal
Danksagung erhalten: 7 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Janniman »

@Bogeyof
Moin.
Diesmal im entsprechenden Forum.
Was ich bisher gemacht habe:
Alle Dateien von Seite 1 (Thread) kopiert
- in \solaranzeige abgelegt
- umbenannt (ohne .txt)
- ausführbar gemacht
- überall Zeile 41 u. 42 geändert
. - BASE_URL = "http://192.168.xxx.xxx/api/v1"
. - PASSWD = 'meinPasswort'
- byd_steuerung.php von Threadseite 2 nach /var/www/html/byd_steuerung.php , user pi , rw-r--r--
- sudo nano /etc/crontab mit der Zeile für die Steuerung ergänzt (noch mit einem " # " davor)
- Dein Skript "byd_Daten.php" sendet fleißig seit Wochen Daten zu Influx, welche ich mit Grafana auch abrufen kann.
- Ich habe von meinem Windows-Rechner mit der BYD-Connect Zugriff auf die Batterie (Passworte in der Config gelöscht), Route steht
- Modul bei Perl nachinstalliert
- python3 zeigt mir für die Version

Code: Alles auswählen

pi@solaranzeige:~ $ python3 -v
import _frozen_importlib # frozen
import _imp # builtin
import '_thread' # <class '_frozen_importlib.BuiltinImporter'>
import '_warnings' # <class '_frozen_importlib.BuiltinImporter'>
import '_weakref' # <class '_frozen_importlib.BuiltinImporter'>
# installing zipimport hook
import 'zipimport' # <class '_frozen_importlib.BuiltinImporter'>
# installed zipimport hook
import '_frozen_importlib_external' # <class '_frozen_importlib.FrozenImporter'>
import '_io' # <class '_frozen_importlib.BuiltinImporter'>
import 'marshal' # <class '_frozen_importlib.BuiltinImporter'>
import 'posix' # <class '_frozen_importlib.BuiltinImporter'>
import _thread # previously loaded ('_thread')
import '_thread' # <class '_frozen_importlib.BuiltinImporter'>
import _weakref # previously loaded ('_weakref')
import '_weakref' # <class '_frozen_importlib.BuiltinImporter'>
# /usr/lib/python3.7/encodings/__pycache__/__init__.cpython-37.pyc matches /usr/lib/python3.7/encodings/__init__.py
# code object from '/usr/lib/python3.7/encodings/__pycache__/__init__.cpython-37.pyc'
# /usr/lib/python3.7/__pycache__/codecs.cpython-37.pyc matches /usr/lib/python3.7/codecs.py
# code object from '/usr/lib/python3.7/__pycache__/codecs.cpython-37.pyc'
import '_codecs' # <class '_frozen_importlib.BuiltinImporter'>
import 'codecs' # <_frozen_importlib_external.SourceFileLoader object at 0xb66d68f0>
# /usr/lib/python3.7/encodings/__pycache__/aliases.cpython-37.pyc matches /usr/lib/python3.7/encodings/aliases.py
# code object from '/usr/lib/python3.7/encodings/__pycache__/aliases.cpython-37.pyc'
import 'encodings.aliases' # <_frozen_importlib_external.SourceFileLoader object at 0xb66e4450>
import 'encodings' # <_frozen_importlib_external.SourceFileLoader object at 0xb66d65d0>
# /usr/lib/python3.7/encodings/__pycache__/utf_8.cpython-37.pyc matches /usr/lib/python3.7/encodings/utf_8.py
# code object from '/usr/lib/python3.7/encodings/__pycache__/utf_8.cpython-37.pyc'
import 'encodings.utf_8' # <_frozen_importlib_external.SourceFileLoader object at 0xb66ecdd0>
import '_signal' # <class '_frozen_importlib.BuiltinImporter'>
# /usr/lib/python3.7/encodings/__pycache__/latin_1.cpython-37.pyc matches /usr/lib/python3.7/encodings/latin_1.py
# code object from '/usr/lib/python3.7/encodings/__pycache__/latin_1.cpython-37.pyc'
import 'encodings.latin_1' # <_frozen_importlib_external.SourceFileLoader object at 0xb66f03f0>
# /usr/lib/python3.7/__pycache__/io.cpython-37.pyc matches /usr/lib/python3.7/io.py
# code object from '/usr/lib/python3.7/__pycache__/io.cpython-37.pyc'
# /usr/lib/python3.7/__pycache__/abc.cpython-37.pyc matches /usr/lib/python3.7/abc.py
# code object from '/usr/lib/python3.7/__pycache__/abc.cpython-37.pyc'
import '_abc' # <class '_frozen_importlib.BuiltinImporter'>
import 'abc' # <_frozen_importlib_external.SourceFileLoader object at 0xb66f0670>
import 'io' # <_frozen_importlib_external.SourceFileLoader object at 0xb66f04d0>
# /usr/lib/python3.7/__pycache__/site.cpython-37.pyc matches /usr/lib/python3.7/site.py
# code object from '/usr/lib/python3.7/__pycache__/site.cpython-37.pyc'
# /usr/lib/python3.7/__pycache__/os.cpython-37.pyc matches /usr/lib/python3.7/os.py
# code object from '/usr/lib/python3.7/__pycache__/os.cpython-37.pyc'
# /usr/lib/python3.7/__pycache__/stat.cpython-37.pyc matches /usr/lib/python3.7/stat.py
# code object from '/usr/lib/python3.7/__pycache__/stat.cpython-37.pyc'
import '_stat' # <class '_frozen_importlib.BuiltinImporter'>
import 'stat' # <_frozen_importlib_external.SourceFileLoader object at 0xb6687110>
# /usr/lib/python3.7/__pycache__/posixpath.cpython-37.pyc matches /usr/lib/python3.7/posixpath.py
# code object from '/usr/lib/python3.7/__pycache__/posixpath.cpython-37.pyc'
# /usr/lib/python3.7/__pycache__/Wortzensur.cpython-37.pyc matches /usr/lib/python3.7/Wortzensur.py
# code object from '/usr/lib/python3.7/__pycache__/Wortzensur.cpython-37.pyc'
import 'Wortzensur' # <_frozen_importlib_external.SourceFileLoader object at 0xb66900b0>
import 'posixpath' # <_frozen_importlib_external.SourceFileLoader object at 0xb6687210>
# /usr/lib/python3.7/__pycache__/_collections_abc.cpython-37.pyc matches /usr/lib/python3.7/_collections_abc.py
# code object from '/usr/lib/python3.7/__pycache__/_collections_abc.cpython-37.pyc'
import '_collections_abc' # <_frozen_importlib_external.SourceFileLoader object at 0xb66904f0>
import 'os' # <_frozen_importlib_external.SourceFileLoader object at 0xb66fba90>
# /usr/lib/python3.7/__pycache__/_sitebuiltins.cpython-37.pyc matches /usr/lib/python3.7/_sitebuiltins.py
# code object from '/usr/lib/python3.7/__pycache__/_sitebuiltins.cpython-37.pyc'
import '_sitebuiltins' # <_frozen_importlib_external.SourceFileLoader object at 0xb66fbd10>
# /usr/lib/python3.7/__pycache__/sitecustomize.cpython-37.pyc matches /usr/lib/python3.7/sitecustomize.py
# code object from '/usr/lib/python3.7/__pycache__/sitecustomize.cpython-37.pyc'
import 'sitecustomize' # <_frozen_importlib_external.SourceFileLoader object at 0xb66a18b0>
import 'site' # <_frozen_importlib_external.SourceFileLoader object at 0xb66f0f10>
Python 3.7.3 (default, Jan 22 2021, 20:04:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
# extension module 'readline' loaded from '/usr/lib/python3.7/lib-dynload/readline.cpython-37m-arm-linux-gnueabihf.so'
# extension module 'readline' executed from '/usr/lib/python3.7/lib-dynload/readline.cpython-37m-arm-linux-gnueabihf.so'
import 'readline' # <_frozen_importlib_external.ExtensionFileLoader object at 0xb66b30d0>
import 'atexit' # <class '_frozen_importlib.BuiltinImporter'>
# /usr/lib/python3.7/__pycache__/rlcompleter.cpython-37.pyc matches /usr/lib/python3.7/rlcompleter.py
# code object from '/usr/lib/python3.7/__pycache__/rlcompleter.cpython-37.pyc'
import 'rlcompleter' # <_frozen_importlib_external.SourceFileLoader object at 0xb66b31b0>
>>> 
Nun zu dem, warum ich danach nicht weitergemacht habe:
1. Es gibt KEINEN direkten Zugriff auf den Speicher über LAN auf die Webseite, da "admin/admin" bei mir nicht funktioniert und alle anderen Passwortkombinationen fehlgeschlagen sind
2. Kostal-WR mit der Batteriesteuerung: Dort soll ja die externe Batteriesteuerung aktiviert werden, was allerdings einen Installateur-Code verlangt, den ich nicht besitze.

Nun wollte ich auch nichts kaputt spielen, daher hatte ich es gelassen, das Unterfangen weiterhin zu verfolgen. Irgendwann muss es jemanden geben, der mir die externe Steuerung aktiviert und ich dann die Zeit habe, das alles weiterzuprobieren.
Wenn eines deiner Skripte diese Einstellung ohne Installateur-Code umstellen kann... das wäre super.

Ich habe mich also noch nicht mit einer händischen Nutzung der Skripte auseinandergesetzt, bin also noch "jungfräulich" in dem Thema, vor allem mit der Steuerung. Deshalb kann ich meine Anforderungen kaum beschreiben.

Jan

Bogeyof
Beiträge: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Bogeyof »

Hallo Jan, lies doch bitte im Photovoltaikforum Deine PM. Ich habe Dir entsprechende Tools gemacht, um die externe Batteriesteuerung und die externe Stromquelle umzustellen. Du brauchst nur Deinen Masterkey dazu, der an der Seite Deines WR aufgedruckt ist.
Auch eine rudimentäre Steuerung für die Wallbox habe ich Dir schon mitgeliefert.
Die Byd-Steuerung muss natürlich auch auf Deine Wünsche angepasst werden, wie Du richtig bemerkt hast, läuft diese erst wenn externe Batteriesteuerung eingeschaltet wird, das kannst Du aber nun machen.
Erst mal testen und dann geht´s weiter...

Zum Zugriff auf die BYD-WLAN Konfiguration (normalerweise admin/admin), da kann ich leider nicht helfen, da hat wohl Dein Installateur das Passwort verstellt. Allerdings braucht man diesen Zugriff auch nicht, dient nur zum Einstellen der Wifi-Konfiguration. Nachdem Du Zugriff hast über LAN (vermutlich über Route) ist soweit alles in Ordnung...

Janniman
Beiträge: 129
Registriert: Mi 13. Okt 2021, 09:52
Hat sich bedankt: 12 Mal
Danksagung erhalten: 7 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Janniman »

Hallo bogeyof.

Danke für die viele Hilfe!

Ich habe auf externe Steuerung "2", also Modbus, umgestellt. Das hat funktioniert.
Dann den MaxSOC mit
python3 /solaranzeige/Kostal_BatMaxSOC.py -s 98
auf 98 Prozent
Danach habe ich die Ladestärke der Batterie mit
python3 /solaranzeige/Kostal_BatMaxChargePower.py -s 2500
auf 2500 Watt geregelt.

Es gab überall ein positives Feedback.
Allerdings sehe ich folgendes:
Screenshot 2022-05-20 at 13-46-25 KOSTAL Plenticore - Grafana.png
Volle Ladestärke und sogar Bezug aus dem Netz?
Ich hatte bisher nur diese drei Befehle angewendet, weil ich auch noch irgendwann mal arbeiten sollte.

Muss ich dazu mehr einstellen?
Bzw. habe ich ja einen Schwarm. Ist es möglich, dass der Schwarm (der weite WR) einfach ungehindert einbläst), weil der Plenticore (nur Ostseite) nur sich selbst im Griff hat? Ich habe die "externen Stromquellen" bisher nicht deaktiviert.

Nun kann ich meine Anforderungen etwas erweitern. :lol:

Jan

Bogeyof
Beiträge: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Bogeyof »

Es gibt einen wesentlichen Unterschied zwischen der Einstellung ModBus und Digital-IO. In der Einstellung Modbus muss innerhalb von 180 Sekunden die gewünschte Einstellung immer wieder gesendet werden, ansonsten stellt sie sich auf Default zurück. Bei Digital-IO gilt die einmal gesetzte Einstellung bis Du selbst den Wert wieder veränderst / zurücksetzt. Daher hatte ich auch geschrieben:
Übrigens kannst Du ohne Bedenken die externe Batteriesteuerung auf Digital-IO setzen, ohne zusätzlichen Eingriff läuft alles identisch wie im Modus intern. Nur wenn Du etwas setzt, dann sollte dieses gelten oder irgendwann von Dir auch wieder selbst zurückgesetzt werden. Benötigt wird der Modus aber eben, um z.B. MinSOC / MaxSoc oder MaxDischargeLimit zu setzen.
In Deinem Fall werden die Werte nach 180 Sekunden wieder automatisch zurückgesetzt und daher "funktioniert" es nicht. Ich vermute, 3 Minuten lang hat es funktioniert...

OK, das mit der externen Stromquelle wird möglicherweise auch mit reinspielen, evtl. wirkt so etwas wie MaxChargeLimit dann nicht, das kann ich nicht sagen, ich habe nur 1 WR.
Aber Du könntest es ja testweise mal Abschalten, gibt ja auch eine Routine dafür...

Janniman
Beiträge: 129
Registriert: Mi 13. Okt 2021, 09:52
Hat sich bedankt: 12 Mal
Danksagung erhalten: 7 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Janniman »

Es gibt einen wesentlichen Unterschied zwischen der Einstellung ModBus und Digital-IO. In der Einstellung Modbus muss innerhalb von 180 Sekunden die gewünschte Einstellung immer wieder gesendet werden,
Ok, das habe ich nun auf I/O umgestellt, nach dem success, habe ich den zweiten Befehl zum Ladelimit (diesmal 2000 W) hinterhergeschoben.
Leider war der Speicher schon wieder voll (100%). Aber dennoch habe ich den MaxSOC nochmals auf 98 Prozent gesetzt.

Ich muss das erstmal einige Zeit beobachten.

Gab es eine Möglichkeit, die "Speicherung von überschüssiger AC-Energie aus lokaler Erzeugung" abzustellen? Somit könnte ich zumindest das Energiedebakel auf den ersten WR, den Plenticore, beschränken. Bedauerlicherweise ist das ja auch durch einen Installateur-Code geschützt.

Ich befürchte, dass es im Schwarm doch einige Probleme gibt.

Jan

Bogeyof
Beiträge: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Bogeyof »

Nur nicht gleich so misstrauisch sein. ch.eick aus dem Photovoltaikforum steuert seinen Schwarm mit den gleichen Befehlen und es klappt, also wird es bei Dir auch gehen.
Für das Umschalten der "Speicherung von überschüssiger AC-Energie aus lokaler Erzeugung" habe ich Dir doch auch ein Python-Skript geliefert:
Kostal_EnergyMgmt.py Aufruf: "python3 /solaranzeige/Kostal_EnergyMgmt.py -s 0", 1 setzt externe Stromquelle zum Laden aktiv, 0 externe Stromquelle zum Laden deaktiviert
Damit kannst Du es jederzeit ein-/ausschalten...
Die anderen Befehle wirken mit Digital-IO auch, probiere es morgen noch einmal. Beim Aufruf der Skripte wird auch immer erst der aktuelle Ist-Zustand abgerufen, dann der Wert gesetzt und danach noch einmal der Zustand abgerufen und angezeigt. Damit kannst Du auch testen, ob der Wert gesetzt wurde und gesetzt geblieben ist. Wenn Du z.B. "python3 /solaranzeige/Kostal_BatMaxSOC.py -s 98" nach einiger Zeit noch einmal aufrufst, dann sollte er Dir anzeigen, dass der Zustand 98 war, er 98 erneut gesetzt hat und dass 98 aktuell gesetzt ist...

Janniman
Beiträge: 129
Registriert: Mi 13. Okt 2021, 09:52
Hat sich bedankt: 12 Mal
Danksagung erhalten: 7 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Janniman »

Ja, entschuldige bitte.
Den Befehl und das Skript hatte ich nach meiner letzten Antwort auch noch gefunden und angewendet.
Ich hatte danach nur keine Zeit mehr zu antworten. Der blöde Laden braucht mich doch manchmal…

Nun muss ich erstmal testen, wie sich die „intelligente Speichersteuerung“ zusammen mit meinen (wenigen) Vorgaben verhält.
Eine komplett geplante Selbststeuerung habe ich bisher nicht durchdacht.
Ich werde die Tage nochmals lesen lesen lesen. Zum Beispiel das mit der ini, aber auch das mit der den beiden php-Dateien. Wie ich die einsetze, darüber hatte ich mir keine Gedanken gemacht, weil ich nicht damit gerechnet habe, das es so tolle Menschen wie dich gibt, die so excellent helfen. Ich bin zwar schon ein alter Eumel, weswegen mir das dazulernen auch nicht mehr so leicht von der Hand geht, aber Herausforderungen muss man ja meistern! 😏
Die BYD-Steuerung dient wozu? <gd&r> (alte Onlineabkürzung)

Danke danke danke!

Jan

Bogeyof
Beiträge: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Bogeyof »

Ich meine, ich habe die Byd-Steuerung hier auch schon beschrieben, bitte mal suchen, wenn nicht kann ich noch mehr dazu schreiben. Letztlich kann man damit abhängig von einer Prognose (diese sollte ebenfalls eingerichtet sein) die intelligente Batteriesteuerung ein-/ausschalten, die Werte für MaxSOC setzen und MaxChargeLimit abhängig vom SOC (je höher je langsamer laden) anpassen. Dazu die Batterienutzung steuern, die Zeitsteuerung der Batterie nutzen und zeitweise die Entladung verhindern. Die Wunschgrößen für die Steuerung sind im Skript als Variablen enthalten und können natürlich individuell angepasst werden. Dazu muss man sich aber wohl etwas in das Skript hineindenken ...

Janniman
Beiträge: 129
Registriert: Mi 13. Okt 2021, 09:52
Hat sich bedankt: 12 Mal
Danksagung erhalten: 7 Mal

Re: Kostal neue Firmware aus 11/2020

Beitrag von Janniman »

Moin Bogeyof

Ich habe die "byd_steuerung.php" manuell gestartet und erhalte die folgende Fehlermeldung aus der "funktionen.inc.php:

pi@solaranzeige:~ $ /var/www/html/byd_steuerung.php
PHP Warning: fopen(/var/www/html/../log/solaranzeige.log): failed to open stream: Permission denied in /var/www/html/phpinc/funktionen.inc.php on line 7227

Es wird also nicht vorher ein Verzeichnis "hoch geklettert".

$LogDateiName = $Pfad."/../log/solaranzeige.log";

Lieber gleich den tatsächlichen Pfad angeben, oder kann man das "Verzeichnisraufklettern" aus dem aktuellen Pfad verändern?
Meine Versuche dazu waren leider vergebens.

Jan

Antworten