Hallo Community,
hatte ja schon an anderer Stelle beschrieben wie “begeistert” wir davon sind seit einem Jahr eine Solaranlage von Solarwatt zu haben
…
Gestern war es mal wieder soweit: Software Update von Solarwatt auf unserem Solarwatt Manager Flex und … NICHTS(!) ging mehr
!
Zum Setup:
wir machen unser gesamtes Energie Management über Home Assistant bzw. die Ladesteuerung unseres E-Autos, sowie das thermische Management unsere Wärmepumpe über evcc, das in Home Assistant integriert ist. Um dies bewerkstelligen zu können werden die entsprechenden Werte (Einspeisung ins Netz, Produktion der PV-Anlage, …) über das REST-API von Solarwatt ausgelesen … nach besagtem Software Update kam KEINER(!) der Werte mehr in Home Assistant an
.
Analyse:
Eine etwas “emotionale” Analyse hat ergeben, dass das REST-API, das vorher public war nun eine Autorisierung (Password) benötigt. Nach einem Login wird ein Cookie mit einer “kiwisessionid” geschickt, die für 1h gültig ist.
Lösung (temporär?):
Haben nach einer kurzen, ziemlich schlaflosen Nacht … tja, so ist es eben
… folgenden Proxy erstellt:
from flask import Flask, jsonify
import requests
import time
app = Flask(__name__)
session = requests.Session()
LOGIN_URL = "http://<your ip Solarwatt Manager flex>/auth/login"
DATA_URL = "http://<your ip Solarwatt Manager flex>/rest/items"
PASSWORD = "<your password>"
USERNAME = "installer"
last_login = 0
SESSION_TTL = 900
def login():
global last_login
payload = {
"username": USERNAME,
"password": PASSWORD,
"url": "/"
}
response = session.post(LOGIN_URL, data=payload)
if response.status_code == 200:
last_login = time.time()
print("Login erfolgreich")
else:
print("Login fehlgeschlagen:", response.status_code)
def ensure_session():
if time.time() - last_login > SESSION_TTL:
print("Erneuter Login")
login()
@app.route("/item/<item_name>")
def get_item(item_name):
ensure_session()
response = session.get(DATA_URL)
if response.status_code != 200 or "application/json" not in response.headers.get("Content-Type", ""):
return "Fehler beim Abrufen der Daten", 500
try:
data = response.json()
except Exception as e:
return f"Fehler beim Parsen: {e}", 501
for item in data:
if item.get("name") == item_name:
return jsonify(item)
return f"Item '{item_name}' nicht gefunden", 404
if __name__ == "__main__":
login()
app.run(host="0.0.0.0", port=5000)
Er läuft auf einem weiteren Raspberry PI und klemmt sich zwischen unseren Solarwatt Manager Flex und Home Assistant. Was er macht ist schnell erklärt:
- Login und damit öffnen einer Session
- Request von Home Assistant annehmen und an den Solarwatt Manager routen
(alle REST Items sind nun über die URL http://:5000/item verfügbar) - überpüfen ob 15min vorbei sind … erneuerter Login so dass die Session erneuert wird
Das Ganze läuft nun schon seit über einem halben Tag stabil. Dachte ich poste die Lösung … vielleicht hat jemand dasselbe Problem … oder eine bessere Lösung ![]()
Wie geht es weiter?
Support von Solarwatt angerufen, die erklärt haben, dass sie da auf ihren “Software Hersteller” angewiesen wären und selber nichts machen können. Habe sie darum gebeten den vorherigen Stand der Software wieder zu installieren … auch hier war die Antwort, dass sie auf ihren “Software Hersteller” angewiesen sind. Verkneife mir hier jeden weiteren Kommentar …
Sollte von Seiten Solarwatt nichts kommen, wird aus der temporären Lösung eine permanente und der Proxy zu einem Demon ![]()
Was etwas “stört”, neben der Art und Weise wie die Situation entstanden ist, ist die Tatsache, dass ich einen weiteren Raspberry Pi benötige … leider kenne ich mich aber mit Home Assistant nicht so gut aus, so dass ich nicht weiß wie man den Proxy dort integrieren könnte … aber vielleicht weiß das jemand von euch ![]()