NEWS
IOBroker Anbindung an einen Kostal Plenticore
-
@Diginix U32 müsste das sein (Unsigned, also keine negativen Zahlen).
-
@StrathCole Hab alle U+S32 probiert und es kamen immer nur Fabelwerte wie zB 16500 % raus.
Aber Battery Management Mode ist ja U8 und solche Register hab ich schon korrekt dabei und da kommt eben 0. Bei gesetzter 1 oder 2, kommt wieder 0. Also wird es wohl so sein, dass Schreiben erst nach Freischaltung erlaubt ist.
Ausnahmsweise mal was was korrekt umgesetzt wurde. -
@Diginix Hast du es mal mit U32 word swap versucht? Also Unsigned 32bit Big Endian Word Swap.
-
@StrathCole Ja. Damit erhalte ich 1084227584 als MinSOC. Wollte eigentlich mal "1078 Maximum discharge power limit", was auch R32 ist, auslesen. Aber da kommen auch utopische Werte.
-
@Diginix Na toll. Müsste man also bei Kostal nachfragen und wir wissen ja, wie schwierig das ist Ich versuch es mal.
-
@Diginix Hast du Double 32 bit auch ausprobiert? "Double" nennt man manchmal auch "Real", würde zu R passen.
-
@StrathCole Ja, aber gerade noch mal wobei es nur Double Little und Big Endian gibt, kein Double 32.
Bei big kommt 0 % MinSoc und bei little -1.2250171709666063e+40. -
@Diginix Also laut Doku nutzt Kostal nur Big Endian. Ich muss wohl mal anfragen.
-
@StrathCole Bei Double Big springt die Länge zwingend auf 4, lt. Spec ist es aber 2.
Beim MaxSOC kommt dann auch nur 0.
Und bei "1078 Maximum discharge power limit" auch nur 0. Das sind alles R32 Werte, bei denen ich mit keinem Format im Modbus Adapter plausible Werte erhalte.
Gehören die evtl. nicht in die Holding Register? Gibt ja noch Ein- und Ausgangsregister im Adapter. -
@Diginix Ich muss auf Rückruf warten. Bisher leider noch nicht erfolgt.
-
Immer noch kein Rückruf erfolgt …
-
@Diginix Hab es rausgefunden. Es ist Float Big Endian Word Swap.
Außerdem kann man die externe Steuerung auch als Endnutzer aktivieren mit einem "Trick"
-
Also, zum Aktivieren der externen Steuerung:
- Login via Browser (z. B. Firefox)
- Navigation zu Servicemenü -> Batterieeinstellungen
- Rechtsklick auf die inaktive Auswahlbox, in der "Intern" steht
- Developer Konsole öffnen durch Klick auf "Element untersuchen" (oder vergleichbar in anderem Browser)
- Attribut "Disabled" bei der Selectbox entfernen (Doppelklick auf "Disabled" und löschen, dann Enter)
- Das Auswahlfeld ist nun benutzbar und man kann die Einstellung auch effektiv speichern
- Anschließend sind die Felder wie MinSoC, max. Ladestrom usw. im ModBus auch beschreibbar
-
@StrathCole Ich dachte, Du wolltest erstmal 1-2 Wochen mit der Installation der neuen Firmware warten? War die Neugier dann doch zu groß
Spaß beiseite. Besten Dank für die Informationen! -
@ak1 So ist es. Neugier war zu groß, welcher Datentyp das nun sein soll – und da Kostal mir nicht geantwortet hat, musste ich es selbst rausfinden.
-
Ich habe die Steuerung auch einmal testweise aktiviert. Es funktioniert tatsächlich. Ich hatte noch 40% Ladung in der Batterie und eine Entladung von 700W. Habe dann die externe Steuerung aktiviert und via Modbus das Register 1040 auf 50W gesetzt. Wenige Sekunden später sank die Batterieentladung auf 48W und der Rest wurde aus dem Netz bezogen.
Ich habe dann mit dem o.g. Trick wieder auf interne Steuerung gestellt und schon hat der Kostal den Registerwert wieder auf ~4750W gesetzt.
Wichtig ist wohl: Auch wenn man die Steuerung aktiviert und den Wert setzt, schwankt dieser etwas. Habe im Test auf 100W gesetzt und der ModBus Wert schwankte anschließend um ein paar W nach oben und unten.
-
Was ich noch nicht rausgefunden habe ist, was der Timeout-Wert bedeutet und bewirkt. Ich vermute einfach mal, dass er automatisch die interne Steuerung nutzt, wenn nicht via ModBus etwas ausgelesen oder geschrieben wird (vielleicht sogar nur geschrieben):
-
Interessant ist auch Register 1064. Das enthält nämlich jetzt die insgesamt bisher ins Netz eingespeiste Strommenge in Wh (bei mir etwa 6000000.0).
-
@StrathCole sagte in IOBroker Anbindung an einen Kostal Plenticore:
- Attribut "Disabled" bei der Selectbox entfernen (Doppelklick auf "Disabled" und löschen, dann Enter)
Boar wie billig umgesetzt. An so eine einfache Umgehung hab ich nicht mal gedacht, obwohl ich beruflich genau mit sowas zu tun hab.
Aber gut für uns.
Hab nun auch mal paar 1000er Register mit plausiblen Werten im Modbus Adapter mit Float.
Komisch, dass andere WR Werte schon immer Float sind, dann aber auch in der Spec als "Float". Also entw ist R32 das selbe oder die haben ihre Spec falsch.
Würdest du es denn schaffen über deinen Adapter die Umschaltung zw "interner Steuerung" (quasi automatisch) und temp. Steuerung mittels Modbus per http request umzusetzen?
Dann könnte man in einem Skript mit deinem Adapter umstellen und den Rest über den Modbus Adapter setzen.
Und später einfach wieder auf "intern" stellen und alle Werte werden ja demnach auf Standard resettet. -
@Diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:
Boar wie billig umgesetzt. An so eine einfache Umgehung hab ich nicht mal gedacht, obwohl ich beruflich genau mit sowas zu tun hab.
Hätte ich auch nicht erwartet. Aber ich wollte es ausprobieren, da es ja nur ein "disabled" Feld war in einem Bereich, den man sonst als Enduser normal nutzen kann.
@Diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:
Aber gut für uns.
Hab nun auch mal paar 1000er Register mit plausiblen Werten im Modbus Adapter mit Float.
Komisch, dass andere WR Werte schon immer Float sind, dann aber auch in der Spec als "Float". Also entw ist R32 das selbe oder die haben ihre Spec falsch.Ich vermute mal, dass sie "Float" nicht mehr nutzen wollen, sondern die Bezeichnungen vereinheitlichen, was dann bei Float "Real 32 Bit" (R32) sein müsste. Sie haben aber die alten Spec nicht bearbeitet und auch die "Legende" am Anfang nicht.
@Diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:
Würdest du es denn schaffen über deinen Adapter die Umschaltung zw "interner Steuerung" (quasi automatisch) und temp. Steuerung mittels Modbus per http request umzusetzen?
Dann könnte man in einem Skript mit deinem Adapter umstellen und den Rest über den Modbus Adapter setzen.
Und später einfach wieder auf "intern" stellen und alle Werte werden ja demnach auf Standard resettet.Das sollte "problemlos" gehen, weil ich ja nicht das Formular absende, sondern die Werte direkt an die interne Api. Muss nur schauen, wie der Wert heißt, dann müsste das möglich sein.