Benachrichtigungen
Alles löschen

BMS Kommunikation Infini-/MPP-Solar MPI / FSP Hybrid 10k und DIY Batterie

72 Beiträge
11 Benutzer
8 Likes
6,266 Ansichten
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 276
Themenstarter  

Hab das nun auch hier schon oft genug erwähnt: Die USB/RS232(DB9) Schnittstelle ist eine serielle Punkt-zu-Punkt Verbindung. Asynchron, Terminal Modus.

Die RS485 Modbus-Schnittstelle ist auf der Modbus-Karte, welche quasi als Protokoll Umsetzer arbeitet (modbus/register-rs232/Kommandos). Auf der anderen Seite der Karte (golden Fingers) ist im WR nichts anderes als die 2. Serielle Schnittstelle, welche praktisch gleich arbeitet wie die 1.
Aber, es ist eben die Modbus-Karte dazwischen.

Les dir mal das Wiki zu Modbus durch und schau dir die beiden Schnittstellen auf dem OSI Layern an. Dann verstehst du das vielleicht.

24kWP an 2x FSP 10kW und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
(@ngt4u)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 25
 

@riogrande75 Ahhh.... ich dachte, ich kann via Modbus in die Register schreiben und dadurch den WR steuern. OK, geht nicht. Habe ich nun verstanden. 

Dann versuche ich nun die RS232 Schnittstelle über (W)Lan anzubinden und teste dann deine Kommandos.

Danke dir!


   
riogrande75 reacted
AntwortZitat
(@ngt4u)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 25
 

Worin liegt denn der Unterschied zwischen dem ^D054BMS Kommando und ^S005EDmn<cr>: Set energy distribution?

Mit dem ersten Befehl wird der Status im Display angezeigt. Mit dem zweiten nicht. Dafür habe ich hier mehr Optionen.
Mir scheint, dass D054BMS die Möglichkeiten von S005EDmn bündelt, um es auf das Wesentliche zu bringen.

Gibt es auch einen "technischen" Unterschied?


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 276
Themenstarter  

Versteh nicht ganz, auf was du da raus willst...
^S005ED ist ein Config-Setting, welches sogar in den Flash geschrieben wird. Das wird einmal eingestellt und hat rein gar nix mit dem BMS zu tun.

Das ^D054BMS... ist das Kommando, dass dem WR zyklisch die Info's von einem BMS bzw. Batterie gibt. Um diese Info (die er gerade von einem angeschlossenen BMS empfangen hat) dem WR wieder zu entlocken, kann man das mit ^P004BMS<cr> abfragen. Ist zur Diagnose recht hilfreich, um zu prüfen, ob korrekte Daten von einem BMS empfangen werden.

24kWP an 2x FSP 10kW und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
(@ngt4u)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 25
 

@riogrande75 

Ich hatte dein Topic so verstanden, dass du mit dem Befehl die Ladeelektronik des WR zum Akku beeinflusst.

Bei mir übernimmt dies der ^S005ED Befehl. Ich habe mich dann gefragt, wo genau hier der Unterschied ist.

OK, es sind unterschiedliche Befehle mit unterschiedlichen Funktionsumfang.

Für meine "Problemstellung" (die Steuerung der Ladeelektronik) macht es scheinbar keinen Unterschied.
Ich erreiche mit beiden eine Aktivierung bzw. Deaktivierung des Lade/Entladevorgangs.

Diese r Beitrag wurde geändert Vor 1 Jahr 2 mal von NGT4u

   
AntwortZitat
(@an-wi)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 10
 

Hallo zusammen,

@NTG4u:
zunächst kann ich @riogrande75 nur zustimmen: Der Hauptunterschied zw. ^S005ED und ^D054BMS liegt ganz einfach darin, dass mit ^S-Befehlen der interne Flash/EEPROM-Speicher des Wechselrichters beschrieben wird. Sie werden genutzt, um statische Parameter festzulegen. Dieser Speicher ist nicht für dauerhafte Schreibvorgänge ausgelegt. Wird darüber die Steuerung des WRs versucht "nachzubauen" und vielfach am Tag der Speicher neu beschrieben, wirst du ihn früher oder später "töten"!

^D-Kommandos sind sogenannte "Device Response", also Rückinfos von angeschlossenen Geräte (BMS, Smartmeter, usw.), auf die der WR eigenständig auf Grund seiner eingebauten Logik reagiert - je nachdem wie schlau die installierte/aktuelle Firmware ist.

 

So, nun zu meinem Problem, bei dem ich hoffe, dass ihr mir hier helfen könnt:

Ich versuche eine Regelung via "Dual ModBus Box"-Schema zu implementieren, also die ^D-Kommandos eines externen Smartmeters, der Netzbezug/Lieferung misst, über die Rs232-Schnittstelle an den Wechselrichter (FSP Hybrid 10k) zu senden.
Damit soll die interne Logik des WRs, wenn PV-Leistung anliegt, eine Null-Einspeisung (+ Überschuss zum Laden der Batterie) und anschließend  (wenn Batterie voll) eine Voll-Einspeisung realisieren.
Ist die PV-Leistung zu gering soll die Regelung den anliegenden Netzbezug über Entladen der Batterie ausgleichen, bis diese leer ist.

Kennt ihr die entsprechenden ^D-Kommandos, um dem WR die aktuelle Smartmeter-Leistung mitzuteilen?

 


   
AntwortZitat
lichtimc
(@lichtimc)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 74
 

@an-wi 

Ich hab das lt. deiner Anforderung gelöst.

Das Kommando um dem WR den aktuellen Verbrauch oder die aktuelle Erzeugung mitzuteilen lautet:

^S026EMINFO00000,00000,1,00150
^S026EMINFO00000,00000,0,00200

Der erste Befehl sagt dem WR, dass er um 150W mehr einspeisen soll.
Der zweite Befehl, dass er um 200W weniger einspeisen soll.

Ich schicke ihm das aktuell ca. 1-2 mal pro Sekunde, was perfekt funktioniert. Er muss eines der Kommandos aber mindestens einmal alle 3-5 Sekunden erhalten. Sonst hört er auf einzuspeisen.

Sollte dein Smartmeter also den Wert bspw. nur alle 10 Sekunden liefern, dann müsstest du folgende Logik implementieren:

  1. 14:00:00 - Smartmeter liefert Wert 1200W Bezug, bspw. weil sich irgendein Heizgerät eingeschalten hat.
  2. 14:00:00 - Du schickst das sofort mittels  ^S026EMINFO-Kommando an den Wechselrichter weiter: ^S026EMINFO00000,00000,1,01200
  3. 14:00:00 - Wechselrichter reagiert und speist 1200W mehr ein.
  4. 14:00:01 - Du schickst das Kommando ^S026EMINFO00000,00000,1,00000 an den Wechselrichter, damit er seine Einspeiseleistung beibehält und nicht aufhört einzuspeisen.
  5. 14:00:[02-09] - Wiederholung von Punkt 4, weil keine neuen Leistungswerte vom Smartmeter vorhanden sind.
  6. 14:00:10 - Neuer Wert vom Smartmeter kommt und der Vorgang 1-5 beginnt von vorn.

 

Je länger der Intervall ist, wo der Smartmeter die aktuelle Leistung liefert, desto mehr Watt wirst du vom Netz einspeisen und beziehen, weil die Nullausregelung ungenauer wird.
Aber keine Sorge: Auch bei einem Intervall von 10 Sekunden oder mehr wirst du wsl. nicht viel beziehen und einspeisen, außer du hast große Verbraucher, die alle paar Sekunden ein- und wieder ausschalten.

Übrigens: Falls du den seriellen Port der Modbus-Schnittstelle benutzen möchtest, könntest du meinen selbstgebastelten Adapter nachbauen:
https://www.thingiverse.com/thing:5712429

Ich hoffe das hilft dir weiter.

lg David

 


   
An Wi and riogrande75 reacted
AntwortZitat
(@al_ro)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

Hallo Riogrande,

eine weitere Frage zum ^D054BMS Kommando. In deinem Skript "readmqttbms.php" wird aus dem aktuell fließendem Strom das Richtungs-Bit extrahiert und der Strom als positiver Wert übergeben:

        if(strpos($message->topic, "Charge_Current")){
                $bmscurr = $message->payload;
                if($debug) echo "STROM: $bmscurr \n";
                $bmscurr = substr(round($bmscurr),-4);
                $bmscurr = str_replace("-","0",$bmscurr);
                if($bmscurr < 0) $bmsdir = 1;
                if($bmscurr >=0) $bmsdir = 0;
                shmop_write($sh_bms1, ",".$bmsdir.",".paddings($bmscurr,4), 16);
                }

Müsste die Zeile mit dem String-Replace nicht nach der Richtungsabfrage kommen? So dürfte das Richtungsbit immer "0" sein, oder? Hmm  

Grüße Alex


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 276
Themenstarter  

@al_ro Verstehe nicht ganz, was du mit "nach der Richtungsabfrage" meinst. Diese Codeschnippsel macht ja gerade das, weil das BMS bzw. der ESP32 dafür keinen eigenen "Parameter" vorsieht.

Hab mir das gerade nochmal angesehen, funktioniert bei mir auf jeden Fall korrekt.
Wenn Data/Charge_Current auf MQTT Seite mit einem negativen Vorzeichen daherkommt, dann scheibt das Script eine 1 (=discharge) in das SharedMemObj:

24kWP an 2x FSP 10kW und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
(@an-wi)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 10
 

@riogrande75
Was @al_ro meint (und was ich auch unlogisch finde), warum du zuerst das "-" (Minus) mit str_replace in $bmscurr ersetzt und erst danach die "< 0"-Prüfung bzw. ">= 0"-Prüfung machst, wenn doch dann gar kein "-" mehr in der Variable drin stecken kann!?!?

 


   
AntwortZitat
(@al_ro)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

Hmmm, interessant...
In der Zeile 

$bmscurr = substr(round($bmscurr),-4);

wird aus deinen "-1.270" "-1" und in der Zeile  

$bmscurr = str_replace("-","0",$bmscurr);

wird diesen "-1" nun "01".

Mit diesen $bmscurr="01" geht es in die if-Abfragen und es ergibt sich für $bmsdir immer eine "0".
Gibt es vielleicht einen Unterschied zwischen dem Code im Repository und dem von dir genutzten Code?

Danke Alex

@an-wi meint das Gleiche... 🙂


   
An Wi reacted
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 276
Themenstarter  

@al_ro Du hast da vollkommen recht 😲 
Bei mir daheim läuft dieser Code (schon ewig):

if(strpos($message->topic, "Charge_Current")){
$bmscurr = $message->payload;
if($debug) echo "STROM1: $bmscurr \n";
if($bmscurr < 0) $bmsdir = 1;
if($bmscurr >=0) $bmsdir = 0;
$bmscurr = substr(round($bmscurr),-4);
$bmscurr = str_replace("-","0",$bmscurr);
shmop_write($sh_bms1, ",".$bmsdir.",".paddings($bmscurr,4), 16);

Muss das im Github mal anpassen...

24kWP an 2x FSP 10kW und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
(@al_ro)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

@riogrande75 Alles klar - dann passt's...   Wink  


   
riogrande75 reacted
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 276
Themenstarter  

Hat schon mal jemand mit einer "echten" Pylontech Batterie am 10k die Balancing Funktion im WR bzw.SolarPower aktiviert?
Was passiert da konkret bzw. was tut die Pylontech Batterie mit dem Befehl?

Ich vermute mal, die Batterie wird am WR offline geschaltet, eine fixe Spannung auf den Batt-Ausgang gelegt und das BMS startet einen massiven Balancing Vorgang.
Kann das jemand bestätigen?

24kWP an 2x FSP 10kW und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
 DWL
(@dwl)
Vorsichtiger Stromfühler
Beigetreten: Vor 5 Jahren
Beiträge: 123
 

Hallo zusammen,

ich besitze einen FSP 15 und würde gerne men JKBMS über das Tool infinipoll10k_bms von Rio anbinden. infinipoll10k_bms läuft auch wunderbar. Allerdings bekomme ich beim Starten von readmqttbms.php immer die Fehlermeldung:

PHP Fatal error: Uncaught Error: Class 'Mosquitto\Client' not found in /etc/infinipoll10/readmqttbms.php:10
Stack trace:
#0 {main}
thrown in /etc/infinipoll10/readmqttbms.php on line 10

Ich hab jetzt schon ein paar Tage gegooglet. Leider ohne Erfolg (sonst würde ich ja auch nicht Fragen) Sweaty  

Ich hab einen Raspi mehrfach neu aufgesetzt PHP 7.x und 8 wechselnd aufgespielt. Mosquitto installiert.

Hat einer von Euch einen Tip was mir Fehlt?

Herzlichen Dank

Dirk

 

Diese r Beitrag wurde geändert Vor 10 Monaten von DWL

(4.4 kW PV, 15KWh DIY 18650 PW, MppHybrid 5K Inverter) <=== macht Glücklich 😉
(9,4 kWp PV, 45 kWh DIY 18650PW, MPPHybrid 5k Inverter) <=== macht Glücklicher :mrgreen:


   
AntwortZitat
Seite 3 / 5
Teilen: