Beiträge von Bogeyof im Thema „Programmatischer Lesender - UND Schreibender Zugriff auf Kostal Plenticore - z.B. MinSoC Parameter verändern um Batterieladung zu optimieren“

    Das Flowchart ist nur ein Panel, das kannst Du zusammen mit vielen anderen Panels in ein gemeinsames Dashboard packen.

    Um es z.B. in ein bestehendes Dashboard zu packen, Kopfzeile Flowchart-Panel anklicken, Inspect Panel Json, dort den gesamten Json Code markieren und kopieren. Danach im gewünschten Dashboard ein neues Panel anlegen, in diesem wieder nach Panel Json gehen, alles markieren und mit dem vorher kopierten Text überschreiben. Danach noch entsprechend Größe anpassen und die anderen Panels (drum herum) anordnen. Schon schaut es so aus wie oben (z.B.)....

    Nach inzwischen vielen einzeln überwachten Verbrauchern habe ich nun noch einen allgemeinen Verbraucher "Sonstige" eingeführt, welcher die Differenz zwischen aktuellem Hausverbrauch und allen überwachten Einzelverbrauchern anzeigt. Damit kann ich z.B. in der Nacht recht gut das Grundrauschen (StandBy Geräte, Ladegeräte, Heizung usw.) sehen, untertags zeigt es mir dann alles an, vom Kochen über Beleuchtung, Sauna und was nicht alles. Evtl. führt es mich auch dazu, weitere Verbraucher einzeln zu überwachen, denn der "Sonstige"-Verbrauch" ist noch zwischen 30-50% meines Gesamtverbrauches, obwohl ich dachte, ich überwache die großen Verbraucher schon...

    Deine Vermutung ist falsch, das Skript ist ja von kruki und es "Crashed" nicht. Der letzte Befehl ist immer der LOGMEOUT und der Befehl davor ist das Setzen eines Wertes, welcher auch erfolgt.

    Trotzdem kann ich die ID weiterverwenden, dein Fehler ist das du nach dem LOGMEOUT dich beim nächsten Aufruf wieder (mit der alten Session-ID) autorisieren musst:

    headers = { 'Content-type': 'application/json', 'Accept': 'application/json', 'authorization': "Session " + sessionId }

    url = BASE_URL + ME

    response = requests.get(url = url, headers = headers)

    response = json.loads(response.text)

    authOK = response['authenticated']


    Es bleibt definitiv die alte Session-ID gültig...

    Das Ganze ist in Solaranzeige.de eingebunden, dort wird mit PHP-Skripten gearbeitet. Die Abfrage der meisten Werte erfolgt über ModBus, nur gibt es ein paar Werte, die kann man nicht über ModBus abfragen, nur über die API. Dazu ruft das PHP-Skript dann dein Python-Skript auf (etwas abgewandelt, ich habe 25 Einzelskripte für jeweils genau einen UseCase, also z.B setzen Schattenmanagement Ost oder West oder aus, oder setzen der Batteriesteuerung auf intelligent oder aus usw.).

    Der Aufruf ist dann wohl so vergleichbar wie der Aufruf von der Kommandozeile. Also hat jedes Skript seine Authentifizierung mit jeweils neuer Session-ID durchgeführt, das ca. 4 bis 5 Mal pro Minute (4 bis 5 unterschiedliche Skript Aufrufe).

    Dein Skript ist halt so aufgebaut, dass es das komplette Login bis zum Logout durchläuft und sich dann beendet. Ihr habt wohl eine eigene Logik gebastelt, ich rufe das Skript nur jedesmal von der PHP-Steuerung aus neu auf (und erzeuge damit vermutlich ca. 7000 Anmeldungen / Session-IDs pro Tag).

    Ich habe es aber ja jetzt geändert, so dass die Session-ID gespeichert wird und getestet wird, ob die Verbindung damit noch erfolgreich ist, nur wenn nicht, wird eine neue erzeugt. Seit ca. 14:00 wird nun die selbe ID benutzt und keine neue mehr erzeugt. Damit habe ich es jetzt erst mal im Griff und kann sehen, ob das überhaupt der Grund war.

    Danke für Nachfrage und Interesse.

    Danke für die Info, das lässt mich doch hoffen, dass die Änderung etwas bringen könnte. Nachdem ich rund um die Uhr ca. 4-5 Aufrufe eines Pythonskripts pro Minute habe, wird jetzt die Session ID dauernd benutzt und damit quasi nie mehr inaktiv, sie hat sich auch seit Stunden nicht mehr geändert und ich erwarte eine Änderung nur noch bei Neustart von WR oder Raspi. Damit habe ich statt ca. 7000 Session-IDs pro Tag nur noch Eine. Irgendwie hoffe ich, dass dies vielleicht die Ursache für das "Aufhängen" des WR gewesen sein könnte... (Erfolgte trotzdem "nur" alle 3 bis 6 Wochen???)

    Ich habe mal ein wenig Google benutzt und mir die SessionID in einer Datei zwischengespeichert (da die Umgebungsvariablen nur für die lokale Shell gesetzt werden und beim nächsten Aufruf nicht mehr zur Verfügung stehen). Damit kann ich jetzt die letzte Session-ID wieder einlesen und testen, ob die Anmeldung noch funktioniert, falls nein wird wieder die bisherige LOGMEIN-Routine ausgeführt und die Session-ID in der Datei mit der neuen überschrieben.

    Mal sehen, ob es etwas bringt...

    Hallo kruki,

    ich setze Dein Skript für die REST-API des Kostal (in auf mich zugeschnittener Form) für viele Schreibzugriffe ein. Ich setze damit z.B. das Schattenmanagement, den Schaltausgang mit verschiedenen Parametern und vor allem zur Batteriesteurung diverse Werte.

    Ich nutze ansonsten Solaranzeige.de zur Visualisierung und habe die Skripte dort in meine Steuerung integriert. Dort nutzt es auch ein weiterer Anwender.

    Beide haben wir das große Problem, dass sich der Kostal Plenticore nach einiger Zeit (schätze 3-6 Wochen) immer wieder aufhängt, es beginnt mit immer langsameren Antwortzeiten der Weboberfläche bis zum Zustand, dass er quasi gar nicht mehr reagiert. Es hilft dann nur stromlos machen und dadurch einen Neustart erzwingen.

    Ein möglicher Grund könnten ja die vielen Zugriffe sein, die jedes Mal eine Websession aufbauen, evtl. schaufelt er sich mit der Zeit irgendwie voll.

    Ich habe mal getestet, was mit der Session passiert. Dabei habe ich mir die Session-ID ausgelesen und bei weiteren Aufrufen des Skripts die LOGMEIN-Routine nicht mehr durchlaufen, sondern gleich die bekannte Session-ID genommen und die ".../api/v1/auth/me" Seite aufgerufen. Das hat bisher schon seit ca. 1 Stunde funktioniert und danach konnte ich Werte auslesen und setzen. Zum Abschluss des Skriptes laufe ich immer noch über die LOGOUT-Routine. Eigentlich wäre ich der Meinung, dass damit auch die Session beendet sein sollte, ist aber nicht der Fall, beim nächsten Aufruf geht die gleiche ID weiterhin.

    Jetzt hätte ich 2 Ideen (und ich verstehe leider weder von Python noch von diesem Webhandling etwas):

    1. Zusätzlich zum Logout wird die Session wirklich beendet (in PHP z.B. durch curl_close), falls dies überhaupt möglich ist

    2. Die gültige Session-ID wird z.B. in einer Umgebungsvariablen gespeichert und solange verwendet, bis der "...auth/me" fehlschlägt, dann erst wird automatisch wieder eine neue Session erzeugt.


    Leider kann ich nicht wirklich Python, daher die Frage, kannst Du mir auf die Sprünge helfen, ob es so etwas wie einen Session-Close gibt oder wie man einen Wert in eine Umgebungsvariable speichert und wieder abruft.

    Dafür wäre ich sehr dankbar, denn es sollte unbedingt getestet werden, ob es wirklich mit den Skripten zusammenhängt, dass sich unsere WR immer wieder aufhängen...

    Eigentlich recht einfach. Du nimmst ein "Stat"-Panel und beschriftest dies, dann trägst Du unter Data Links Deinen Aufruf ein. Problem dürfte nur sein, dass danach auf die Seite des Links gewechselt wird. Bei meinem Beispiel wird ein PHP-Skript aufgerufen, welches die erforderlichen Befehle durchführt und anschließend das aufrufende Dashboard (via UID) wieder startet. Damit verhält es sich wie ein Button, der etwas ausführt...