Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Eigentlich sollte die Kommunikation zwischen Loxone und Kostal Wechselrichtern "out-of-the-box" funktionieren, ist bei mir leider nicht der Fall.

Loxone will scheinbar auch keine Energie in die Weiterentwicklung der Anbindung von Kostal stecken, daher muss man sich nach alternativen Wegen umsehen.
Ich konnte über den integrierten Webserver relativ einfach die Werte des Wechselrichters auslesen und Loxone zur Verfügung stellen, wie das funktioniert, möchte ich hier beschreiben:

Abfragen kann man die Werte über folgende Url: http://<ip des Wechselrichter>/api/dxs.json
An diese Url werden dann die Parameter angehängt, die man erfahren will, zum Beispiel die aktuelle PV Leistung: http://<ip des Wechselrichter>/api/dxs.json?dxsEntries=33556736

Hier eine Auflistung einiger Werte, die der Wechselrichter zur Verfügung stellt:

TitelUrl-ParameterEinheit
Leistungswerte

DC-Leistung33556736W
67109120W
PV Gesamtproduktion
251658753
kW
Betriebsstatus167800320 = Aus
1 = Leerlauf
2 = Anfahren
3 = Einspeisen MPP
4 = abgeregelt
5 = Einspeisen
6 = ??
7 = ??
8 = ??

Batterie

Ladezustand33556229%
Ladezyklen33556228Int
Temperatur33556227Grad °
Stromspannung33556226V
Stromstärke33556238A
Laden/Entladen33556230bool
Energieversorger

bezogene Energie
(Hausverbrauch)

83886848W
Eigenverbrauch83888128W

In der Loxone Config legt man nun einen "Virtuellen HTTP Eingang" an und fügt die zusammengebaute URL ein, will man z.B. die Werte Ausgangsleistung und Ladezustand wissen, sieht die URL wie folgt aus:

http://<ip des Wechselrichter>/api/dxs.json?dxsEntries=67109120&dxsEntries=33556229

Innerhalb des Eingangs legt man dann die entsprechenden Befehle "Virtueller HTTP Eingang Befehl" an. Die Befehlserkennung lautet dann: "dxsId":<Url-Parameter>,"value":\v:

Nun kann man den Energiemonitor entsprechend "füllen", wobei man zuvor einige Berechnungen machen muss, bevor man die passenden Werte erhält.

Energiemonitor Eingang Ps

Wir multipizieren Spannung und Stärke des Stroms der Batterie um die Leistung zu erhalten.
Im Viruellen Eingangsbefehl zum Laden/Entladen der Batterie geben wir bei den Eigenschaften im "Zielwert 1" der Korrektur -1 an.
Nun können wir die Leistung der Batterie mit dem Wert aus Laden/Entladen multiplizieren und erhalten entweder eine negative (laden) oder eine positive (entladen) Leistung.
Da das Ergebnis noch in Watt ist, müssen wir das Ganze (z.B. mit einem Skalierer) noch in kW umrechnen, danach landet der Wert dann im Ps Eingang des Energiemonitors.


  • Keine Stichwörter

12 Kommentare

  1. Bernd Thier sagt:

    Hallo in die Runde.

    Bin neu hier habe aber Loxone schon länger im einsatz und schon einiges umgesetzt.

    Jetzt wollte ich meinen Kostal Piko 5.5 ver.3.75 auslesen.

    Wie beschrieben bekomme ich beim Energie-Monitor den Port 81 fehler.

    Jetzt Wollte ich diese http Lösung umsetzten da bekomme ich aber keine Werte zurück bzw. wenn ich auf die Weboberfläche gehe folgenden Fehler:

    http://10.0.0.150/api/dxs.json  → Sorry, the requested file does not exist on this server

    Kennt jemand diesen Fehler? Muss ich vorher am Wechselrichter noch etwas aktivieren?

    Danke im Voraus

  2. Hallo Bernd,

    Was passiert, wenn Du im Browser nur  http://10.0.0.150/ aufrufst?
    Bekommst Du dann die Webseite Deines Wechselrichters zu Gesicht?
    Wenn das so ist, dann rufe die Entwicklertools Deines Browsers auf. (Meistens Taste F12 oder rechte Maustaste und dann "Element untersuchen" oder ähnliches).
    Im Reiter Netzwerk sollte kontinuierlich eine Url aufgerufen werden, eben die  http://10.0.0.150/api/dxs.json.

    Viele Grüße
    Sascha 

  3. Bernd Thier sagt:

    Hallo Sascha

    Danke für die Antwort.

    Mit der 10.0.0.150 komme ich auf die ganz normale Weboberfläche von meinem Kostal Wechselrichter.

    Im Entwicklertool kommt nicht wirklich viel daher, siehe Foto.

    Wenn ich die IP+/api/dxs.json eingebe kommt wie gesagt nur dieser Fehler daher.

    Habe Testweise ein OpenHabian Client auf einen Raspberry installiert da das ein Kollege im einsatz hat und er gemeint hat es gibt dort ein Kostal Binding → siehe da, OpenHab kann meinen Kostal auslesen.


    Hast du sonst noch eine Idee?


    MfG

    Bernd



    1. Ich denke ich weiß woran es liegt: ich habe auch noch einen alten Piko 3.0 mit Firmware 3.71 und da ist es das gleiche. Die Webseite ist noch auf fhtml nicht auf json Standard.

      Leider klappt m

      Leider klappt bei mir aktuell auch das Firmwareupdate nicht, das man bei Kostal runterladen kann, also weiß ich hier auch nicht weiter.


  4. Hallo Bernd,

    tut mir leid, dann weiß ich auch nicht weiter.
    Wenn sich auf der Webseite des WR kontinuierlich die Werte ändern, dann muss es auch eine kontinuierliche Kommunikation zwischen Browser und Wechselrichter geben, die man im Entwicklertool mitverfolgen kann.

    Was mich bei Deinem Screenshot etwas wundert, man sieht überhaupt kein Stylesheet oder Javascript, das geladen wurde.
    Ist die Weboberfläche bei deinem Screenshot bereits komplett geladen gewesen und Du konntest Werte ablesen?

    Viele Grüße
    Sascha

  5. Hallo Sascha,

    besten Dank für diese Vorlage. Funktioniert bestens, endlich wird unser Kostalspeicher auch im Energiemonitor angezeigt.


    Beste Grüße

    Marcus

  6. Hi Sascha,

    ich habe einen neuen Piko 10 BA und ich bekomme auch keine Werte.

    Aus dem Entwicklertool sehe ich alle Werte, auch welche, die du nicht geschrieben hast: http://192.168.15.132/api/dxs.json?dxsEntries=33556736

    Die URL stimmt 100%

    Wie bist du auf desen String gekommen: "dxsId":<Url-Parameter>,"value":\v:

    Kann man das irgenwo testen? Vielleicht hat Kostal was geändert.

    Gruß, Oliver

  7. Hallo Oliver,

    wo liegt nun eigentlich Dein Problem? Bekommst Du keine Werte in Loxone?

    Meine Url, wie ich sie in der Loxone Config verwende, sieht z.B. so aus:

    http://xxx.xxx.xxx.xxx/api/dxs.json?dxsEntries=33556736&dxsEntries=33556229&dxsEntries=83886592&dxsEntries=83886848&dxsEntries=67109120&dxsEntries=33556226&dxsEntries=33556238&dxsEntries=33556230&dxsEntries=83888128&dxsEntries=83886336&dxsEntries=251658753

    Rufe ich diese Url in einem Browser auf, bekomme ich folgendes JSON-Array zurück:

    {"dxsEntries":[{"dxsId":33556736,"value":355.240540},{"dxsId":33556229,"value":10.000000},{"dxsId":83886592,"value":0.000000},{"dxsId":83886848,"value":888.526367},{"dxsId":67109120,"value":298.006989},{"dxsId":33556226,"value":256.200012},{"dxsId":33556238,"value":0.000000},{"dxsId":33556230,"value":0},{"dxsId":83888128,"value":298.006989},{"dxsId":83886336,"value":298.006989},{"dxsId":251658753,"value":4287.360352}],"session":{"sessionId":0,"roleId":0},"status":{"code":0}}

    Genau diesen String bekommt auch Loxone vorgeworfen und ich denke, jetzt sollte klar sein, wie ich auf "dxsId":<Url-Parameter>,"value":\v: komme?!!

    Konnte ich Dir damit weiterhelfen?

    Viele Grüße
    Sascha


  8. Nein, alle Werte sind Null (traurig)
    wo kannst du den gesamten String sehen, den der MS an den WR schickt?

    Wenn ich meinen String von oben im Browser eingebe, bekomme ich

    {"dxsEntries":[{"dxsId":33556736,"value":81.259453}],"session":{"sessionId":0,"roleId":0},"status":{"code":0}}

    zurück.

    Scheint deinem 1:1 zu entsprechen.

    Nochmal zur Sicherheit: im HTTP Eingang steht lediglich:      http://192.168.15.132/api/dxs.json?          ←habs auch ohne fragezeichen und ohne http:// versucht

    Im Eingangsbefehl entsp.:     "dxsId":33556736,"value":\v:


    Danke schonmal

    Gruß, Oliver

  9. Hallo Oliver,

    selbstverständlich musst du im HTTP Eingang bei URL die gesamte Url eingeben, also mit Fragezeichen "?" und allem was dahinter steht.
    In Deinem Fall also http://192.168.15.132/api/dxs.json?dxsEntries=33556736

    Wenn Du alles nach dem ? wegläßt, dann bekommst Du auch keine Ergebnisse, genauso ist es auch, wenn Du die Url im Browser aufrufst.
    Deine Befehlserkennung im Eingangsbefehl sollte stimmen!

    Gruß
    Sascha

  10. Öh, ich dachte, der MS setzt quasi die Basis http://192.168.15.132/api/dxs.json?     dann mit den einzelnen http-befehlen zusammen?

    Muss man quasi einen riesigen Befehl mit allen Codes generieren und diesen beim Eingang eingeben?

    Dann wird klar, das es nicht geht, sorry, mir war die Funktionalität nicht klar.

    Vielen Dank für deine Mühe!

    Oliver

  11. Hallo Sascha,


    jetzt hab ichs!

    Der Doppelpunkt am Ende des Eingangsbefehls ist falsch! es muss

    "dxsId":33556736,"value":\v

    heißen.

    Außerdem scheint es nicht zu klappen alle Werte in einem langen Befehl auszulesen. Ich habe daher einen 2. HTTP Eingang angelegt und die Befehle entsp. gekürzt.

    Gruß