SOC (Ladezustand) im Victron Node Red setzen

Moin zusammen.

Ich habe ein System in dem das Daly BMS ans Victron VenusOS angeschlossen ist. Läuft bei mir auf einem Raspberry pi. Ich habe es schnell hinbekommen, den SOC Wert auszulesen un den auch über http auslesber zumachen. So sieht's aus:

Auslesen kann man die Werte dann mit:

https://venus.local:1881/batt

Okay, nun will ich den SOC Wert aber (möglichst auch in Node Red) setzen. Also manipulieren. Das ist mir bisher nicht gelungen und ich finde da auch im Netz nichts das ich nachvollziehen könnte. Hat da jemand eine Lösung parat?

Vielen Dank vorab...

Hier die Nodes zum Importieren:

[
{
"id": "ee976dfbdb76164f",
"type": "victron-input-battery",
"z": "96cffcb4cb06b139",
"service": "com.victronenergy.battery/3",
"path": "/Soc",
"serviceObj": {
"service": "com.victronenergy.battery/3",
"name": "SerialBattery(Daly)"
},
"pathObj": {
"path": "/Soc",
"type": "float",
"name": "State of charge (%)"
},
"initial": "",
"name": "Batt Monitor",
"onlyChanges": false,
"roundValues": "no",
"x": 130,
"y": 280,
"wires": [
[
"1a032c9ca300fcde"
]
]
},
{
"id": "d5868940c9996cab",
"type": "debug",
"z": "96cffcb4cb06b139",
"name": "debug 4",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 580,
"y": 280,
"wires": []
},
{
"id": "1a032c9ca300fcde",
"type": "function",
"z": "96cffcb4cb06b139",
"name": "extractSOC",
"func": "var newbattmsg = {payload: msg.payload};\nglobal.set(\"batt.soc\",newbattmsg);\nreturn newbattmsg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 370,
"y": 280,
"wires": [
[
"d5868940c9996cab"
]
]
},
{
"id": "bc9afb993b05e874",
"type": "http in",
"z": "96cffcb4cb06b139",
"name": "",
"url": "/batt",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 120,
"y": 340,
"wires": [
[
"d6b648c7a825d369"
]
]
},
{
"id": "d6b648c7a825d369",
"type": "function",
"z": "96cffcb4cb06b139",
"name": "json",
"func": "msg.payload = {battery: global.get('batt.soc')};\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 310,
"y": 340,
"wires": [
[
"f5c6e012ca283bfa"
]
]
},
{
"id": "f5c6e012ca283bfa",
"type": "http response",
"z": "96cffcb4cb06b139",
"name": "http Response",
"statusCode": "",
"headers": {},
"x": 480,
"y": 340,
"wires": []
}
]

Was meinst Du mit manipulieren? Willst Du den minsoc (unter Settings/ESS?) setzen?

@mdkeil

Hi!

Nee, ich will einfach nur den SOC-Wert (State of Charge) setzen. Das Daly-BMS ist ja ziemlich doof. Erst bei ca 50 - 60 Watt Leistung fängt er an, etwas zu messen und seinen SOC Wert zu ändern. Gerade im Winter ziehe ich aber nicht über den WR den Strom aus dem Akku, sondern die 24V direkt. Das merkt das BMS dann über Tage hinweg nicht. Somit laufen die Zellen auf < 3.0V und SoC sagt immer noch z.B. 50%. Da will ich eingreifen und den SOC entsprechend der niedrigen (oder eben hohen) Zellspanungen selbst setzen. Das kann ich so jetzt nur manuell über die BT-Dongel machen.

Da will jemand den SOC für die Regelung benutzen. Und um das tun zu können, will er ihn setzen. Für mich steckt da eine unlogik drin.

SOC muss doch ein Messwert sein.

entweder ist er das, oder er ist das nicht. Und wenn nicht, ist es Wahrsagerei.

Den SOC setzen macht das BMS, was die Steuerung hat.. in deinem Fall einfach einen zusätzlichen Shunt einbauen, der dann die Steuerung übernimmt und gut ist.

Ich denke der SoC ist nie ein Messwert.
Das die DALYs so seltsam sind liegt an falschen und missverstandenen Parametern.
Je nach DALY Type ist DfilterCur oder Current Wave schuld an der Blindheit für kleine Ströme.
Dort stehen ab Werk (oft) extrem hohe Werte drin, 1-2,5 Ampere (!).
Ohne das ggf. abzustellen wird das nichts.
Ändern lässt sich das aber leider nur in der passenden PC-Software.
Nebenbei führt das dazu, das bei CV sofort 100% SoC gesetzt werden und der Balancer nie aktiv wird.
Der SoC im DALY ist flüchtig und geht bei Wartung bzw. Trennen verloren.
Für die Funktion des BMS ist der Wert SoC völlig irrelevant.
Ich betreibe vier/sechs DALYs in parallel und verstehe den Wunsch einen SoC ableiten und nutzen zu können.
Es ist sinnlos auch bei offensichtlich oder erklärbar falschen SoC Werten auf die nächste volle Ladung warten zu sollen.
Ich frage alle DALYs alle 2Sek. ab und kumuliere W/s Gesamt aus allen BMS.
Eine bekannte Gesamtkapazität vorausgesetzt führe ich separat Buch über den Energiefluss rein und raus in die parallelen Batterien.
Den SoC in aktuell gespeicherten W/s lege ich u.a. alle 60Sek als einen der vielen Messwerte in einer InfluxDB ab.
Das ist meine Sicherheitskopie.
Der SoC wird selbsttätig bei leer und voll gesetzt, ich kann aber jederzeit bei besserem Wissen einen Füllstand definieren.
SolarHeini

Du bist der Problematik des SOC bewusst, holst mit trickreichen Maßnahmen das beste heraus und lebst mit den nicht perfekten Ergebnissen.

Alle Achtung davor. Ich verneige mich.

Ich entschuldige mich für alle Missverständnisse, die ich mit meiner technischen Meinung zu deinen Lasten verursacht habe.

Aber eines hast du bestätigt: SOC ist nicht unbeaufsichtigt als Regelgröße bzw. Führungsgröße eines Regelkreises brauchbar.

Ja … gut.
Monokristallin schrieb nichts von steuern.
Er möchte mit NodeRed einen plausiblen SoC Wert anzeigen, ohne von komischen Dingen im DALY BMS abhängig zu sein.
Auch ohne NodeRed muss das Problem nicht so ausgeprägt sein, für nur eine Batterie sogar eher vernachlässigbar.
DfilterCur = 0.1-0.2A bzw. Current Wave = 0.2A.
Meine Lösung war:
Den originalen SoC Wert zu vergessen und mit möglichst fehlerfreien Strom- und Spannungswerten aus dem DALY einen eigenen SoC Wert zu bilden.
Nebenbei hat man dann die Möglichkeit diesen auch sinnvoll zu kalibrieren, wie und wann man mag.

Genau! Das wäre soweit auch mein Plan-B.

Also noch mal zusammengefasst: kleine (auch langfristig fließende) Ströme bekommt das BMS für die SoC-Berechnung nicht mit. Wobei, und das ist besonders absurd, es misst sie schon (kann man üner die BT-Dongle sehen), es berücksichtigt sie bloß erst ab so ca. 50W.

Den Ladezustand der Lifepo4 Akkus kann man lediglich in den unteren (ca.) 5% und den oberen 5% des SOC "messen". Dazwischen liegt die Spannung (je nach gerade entnommenem Strom) so um die 3.2 V. Deshalb kann man den SoC nur über die zwischenzeitlich entnommenden Ströme in Verbindung mit der Kapazität ermitteln.

Aber: Daly korrigiert den Wert erst, sobald die absolute Unter- /Obergrenze, also 0% oder 100% der eingestellten Werte, erreicht werden. Wenn die Spannung aber bei geringer Stromentnahme bei 3V liegt, dann könnte das BMS merken, dass keine 50% SoC mehr vorliegen sondern eher 5%, und das korrigieren. Tut es aber nicht! DAS will ich dann machen.

Alternative, wie Solarheine schon schreibt, wäre ein eigener SoC. Also einen Korrekturwert, dem ich dem Daly-SoC dann hinzurechne und dann mit diesem weiterarbeite.

In der Modbus TCP Register list steht der Wert allerdings auch als not writeable:

image.png

Meine Hoffnung ist aber, dass es über Node Red dann vielleicht doch geht, über Bluetooth geht's ja letzlich auch.

Ich hab'es eben noch mal überprüft, ich ziehe gerade so um die 30W aus dem Akku. Node Red bekommt davon nichts mit.

@monokristallin

Moin,

es gibt zu viele verschiedene DALYs z.T. auch mit verschiedenen Ladekontrollern und Firmware.
Für meine Sorte (und ich weiß noch nicht einmal wie die offiziell heißen / 8S80A ) gilt,

  • NICHT, dass der DALY SoC bei 0% gesetzt wird, er stagniert nur irgendwie
  • 100% wird gesetzt, wenn Spannung X erreicht wird und der Strom < Y wird.
  • kann der SoC auch NICHT gewollt gesetzt werden, weder APP noch PC
  • die ignorierten Ströme werden NICHT angezeigt
  • sie haben eine serielle Schnittstelle mit 3,3V Pegel und sprechen NICHT MODBUS
  • der Kontroller ist von Fa. Sinowealth, es gibt keine Untergrenze für DfilterCur und 100mA passt.
    IMHO kannst du den DALY SoC nicht irgendwie korrigieren. Lass ihn einfach WEG.
    Schau, dass du Ströme ab 0,2A oder weniger wirklich erfasst und DIY.
    Interessante Liste „… determined from different measurements
    Die Liste ist mir unbekannt.
    Wäre nett zu sehen welche und die Bedingungen die du benutzt.
    Wenn ich dir meinen Flow gäbe hilft das nicht viel?
    Zu unterschiedlich die Systeme.
    Zu erklärungsbedürftig das Ganze.

SolarHeini

P.S.
ich sehe gerade die Liste ist ein Link.
Das ist aber so garnichts von DALY? Irgendwas VICTRON?
Das ist ein Addin für NodeRed, "SerialBattery" Java Script anderer Herkunft?
Wenn BT im DALY anzeigt, dann ist das Problem in dem Addin?
Passe ...

@solarheini

Die Liste repäsentiert die über ModBus gehenden Signale im Victron-System. Damit lese ich mit Python den SOC-Wert aus. Der Daly hängt mit nem USB-Konverter-Kabel am Pi auf dem das Venus-OS läuft.

Mit dem oben gezeigten Flow geht das jetzt aber auch noch viel einfacher über http. Über Modbus kannst Du auch Werte setzen, aber den SOC Wert wohl nicht.

Solange ich im Sommer hauptsächlich mit Solar lade und über den Wechselrichter mindestens 60 Watt ziehe (darunter läuft er mir zu unwirtschaftlich), funktioniert das mit dem SOC übrigens ziemlich gut. Aber eben nicht, wenn ich im Winter hauptsächlich bei günstigen Strompreisen über AC lade, und dann langsam den DC-Strom aus dem 7kWh-Akku sauge.

Ich werde mir jetzt mal aus der Tabelle aus dieser Seite eine oder zwei schicke Kurven bastels und ggf. dazwischen interpolieren. Wenn's fertig ist, werde ich das hier mal posten. Vielleicht hilft's ja auch anderen...

@monokristallin
Dann viel Erfolg, du findest da ein Problem für eine Lösung die ich nicht brauche.
Es geht wie gesagt auf die normale Art sehr gut.
Ich kann Dir aber nicht sagen wo du da falsch abbiegst.
SolarHeini

Was du auch machen kannst, dein Daly ggfs. via serialbattery einzubinden.. in der aktuellsten BETA kann man die Berechnung vom SOC aktivieren.. speziell für BMS welche keinen SOC liefern.. könnte man mal versuchen, inwiefern der berechnete SOC besser ist..

Tjaaaaa,

never change a running system. Habe mal auf Release Candidate v3.20~41 geupdated. Jetzt findet er das Day-BMS überhaupt nicht mehr. :flushed:

Na, mal schauen, vielleicht muss ich den Treiber neu installieren...

PS: Okay, Treiber nachinstalliert und 1x das Kabel gezogen, Batterie wieder da.

Aber: wo finde ich jetzt die Funktion der SOC-Berechnung?

Ich nehme an, Du meinst diese Art der Einbindung:

Added: Possibility to count and calculate the SOC based on reference values with #868 by @cflenker
config.default.ini
; --------- SOC calculation ---------
; Description: Calculate the SOC in the driver. Do not use the SOC reported by the BMS
; SOC_CALCULATION:
;     True: Calc SOC in the driver, do not use SOC reported from BMS
;         - The SOC is calculated by integration of the current reported by the BMS
;         - The current reported from the BMS can be corrected by
;           the map (SOC_CALC_CURRENT_REPORTED_BY_BMS, SOC_CALC_CURRENT_MEASURED_BY_USER)
;         - The SOC is set to 100% if the following conditions apply for at least SOC_RESET_TIME seconds:
;             * Current is lower than SOC_RESET_CURRENT amps
;             * Sum of cell voltages >= self.max_battery_voltage - VOLTAGE_DROP
;         - The calculated SOC is stored in dbus to persist a driver restart
;     False: Use SOC reported from BMS (none of the other parameters apply)
; More info: https://github.com/Louisvdw/dbus-serialbattery/pull/868
SOC_CALCULATION = False
SOC_RESET_CURRENT = 7
SOC_RESET_TIME = 60
SOC_CALC_CURRENT_REPORTED_BY_BMS  = -300, 300
SOC_CALC_CURRENT_MEASURED_BY_USER = -300, 300
; Example to set small currents to zero
; SOC_CALC_CURRENT_REPORTED_BY_BMS  = -300, -0.5, 0.5, 300
; SOC_CALC_CURRENT_MEASURED_BY_USER = -300,    0,   0, 300

Okay,

da war ich wohl auf dem falschen Dampfer. Du meintest also die neuste Beta des Serial-Treibers, nicht des VictronOS.

Habe ich mir mal angeschaut. Hmmm, sieht mir noch nicht ganz nach dem aus, was ich soll brauche. Ich baste da heute mal noch daran herum. Sobald ich fertig bin, poste ich hier mal, wie ich die Sache gelöst habe. Dann malso, dass es möglicht jeder ohne allzu tiefgehende Vorkenntnisse nachvollzihen kann. Stay tuned...

Über diesen Ansatz denke ich schon länger nach. Mangels Zeit aber noch nicht dazu gekommen, Mal was dazu zu schreiben. Wenn ich es schaffe, bist herzlich eingeladen , mitzudiskutieren.

Ich hatte den Titel missverstanden.
Es geht hier nicht um ein native NodeRed Umsetzung oder Fragestellung.
Zum Stichwort DALY konnte ich nur wieder wiederholen:
Man darf sich nicht wundern, dass nichts erkannt wird, wenn man die untere Schwelle für den Strom nicht kennt, nicht versteht und nicht korrigiert.
Bei mir sind das 100mA anstatt die 1000-2500mA im Lieferzustand.
Und ja, da wackelt absolut nichts. Meine sind aber parallele DALY BMS mit je 50,60,80A full scale.
Das wird oft vermischt mit einem Firmware Fehler einer bestimmten(?) Version in den großen DALYs?
Jedes DALY hat einen WLAN Adapter und liefert selbsttätig Werte via MQTT für globale Variablen in NodeRed ab.
Via MQTT kommen die Daten mit der Sinowealth typischen Nomenklatur.
Z.B. alle 2 Sekunden neben Strom und Spannung I = (I + Ineu) / 2 ; U = (U + Uneu) /2
auch höchste Zellespannung aus bis zu 48Zellen und die mittlere Batterietemperatur. Daraus leiten sich andere Aktionen ab.
Global ist auch der Wert W_MIN (kumulierte Wattminuten) für den aktuellen Energieinhalt der Batterien.
Dieser wird auch in einer Datenbank im Minutentakt geführt.
Der letzte Eintrag in der Datenbank ist gleichzeitig die Sicherheitskopie des letzten bekannten SoC.
SoC kann man manuell (Schieberegler) neu besetzen und damit die W_MIN rekalibrieren.

Alle 5 Sekunden wird der SoC berechnet.
Garniert wird das ganze mit SoC Sicherung in InfluxDB und ggf. setzen des SoC in NodeRed Dashboard.
Seltsamerweise geht es am besten mit rein = raus ohne Speicherverluste ?!?
Das mag aber auch an der (empirisch ermittelten) Gesamtkapazität liegen.
Es wäre unbenommen die Temperatur mit einbeziehen zu wollen.
Es ist mir aber gerade mehr als gut genug.
SolarHeini

[/quote]

Jedes DALY hat einen WLAN Adapter und liefert selbsttätig Werte via MQTT für globale Variablen in NodeRed ab.

[/quote]

Naja, nee, dafür braucht man schon die Wifi Dongle, so wie diese hier:

Einerstanden? Bei mir war nur die BT-Dongle (ohne Wifi) dabei. Ich ziehe mir die Daten über einen UART - USB Adapter in das Venus-OS. Macht gerade Mucken, ich glaube ich muss mal nen neuen JST-Stecker anlöten. Der ewige Tausch mit dem der Dongle macht's nicht besser.

Vielen Dank für Deine Lösung, die werde ich mir noch mal näher anschauen.

In der Zwischenzeit habe ich mir den SOC mal anhand der Batteriespannung berec hnet. Im Prinzip ist das dann kein SOC, sonder eher ein SOV (State of Voltage). Wenn der Akku beslatet wird, egal in welche Richtung, dann stimmen natürlich die Werte nicht so recht. Was man machen kann ist mit Durschnittswerte zu rechnen. Leider sind die Besatungen ja unterschiedlich und man weiß eigentlich nie genau, wie weit man von entlasteten Zustand entfernt ist. Das Messen der Ströme ist da schon der richtige Ansatz. Aber eben mit einer vernünftigen Korrektur. Das sit schon ec ht eine Wissenschaft. Das merkt man, je tiefer man sich mit den "if"'s und "then"'s beschäftigt.

@monokristallin
"Jedes (von meinen) DALY hat einen WLAN Adapter."
Den BT Adapter benutze ich nicht. Der ist auf dem Foto zwar dran, aber ungenutzt.
Ich habe einen SONOFF dran für Kommunikation und Heizungsregelung.

Für mich funktioniert das gut, wenn ich über Leistung rein und raus Buch führe.
(U x I = P) / Sek. beides ist bekannt.
Die Strommessung ist aber in meinen Exemplaren im Lieferzustand unbrauchbar.

Faktor 10-25 daneben.
in den Größeren und Neueren heißt das nun Current Wave und wurde auf 200mA nach unten begrenzt.
Alles darum herum vermischt sich auch immer wieder mit einem anderen Firmware Problem:
Springende Stromwerte ( aber ein ganz anderes Thema? )
Allen gemein ist sicher, dass man Strom- und Spannungsmessung kalibrieren kann und sollte.
Man braucht dazu ein gutes Voltmeter und eine Konstantstromquelle (Labornetzteil ~ 5A).
Die Funktion Calibrate versteckt sich je nach APP oder PC Software sehr gut :no_mouth: z.T. unauffindbar ...
Nach all dem funktioniert der DALY SoC schon erstaunlich gut, ohne dies gibt es auch Nebeneffekte auf den so verunglimpften DALY Balancer.
SolarHeini