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

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... :slight_smile:

1 „Gefällt mir“

@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...

@riogrande75 Alles klar - dann passt's... {green}:wink:

1 „Gefällt mir“

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?

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) {green}: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

Du benötigst Mosquitto-PHP

Leider habe ich das nur Quick-n-Dirty ins Github gepostet und die Abhängigkeiten nicht erwähnt - sorry.

Hey Rio,

herzlichen Dank für deinen Tip.

BMS wird jetzt ausgelesen. {green}:wink:

Jetzt den rest noch und dann sehen wir obs am FSP15 auch klappt.

@ Riogrande

Hallo Rio, ich brauche da offenbar noch einen Tip.

Ich hab readmqttbms und infinipoll10k_bms in der reihenfolge gestartet und bekomme das:

2023-07-15 08:34:00: DEBUG: PV_GES: 82.92
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACV1: 234.3
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACV2: 234.8
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACV3: 236.5
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACC1: 0
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACC2: 0
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACC3: 0
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert ACF: 50
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert INTEMP: 032
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert BOOT: 032
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert DCINV1: 349.9
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert DCINV2: 534.3
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert DCINC1: 0.69
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert DCINC2: 0.87
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert DCPOW1: 00242
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert DCPOW2: 00471
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert BATTV: 52
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert BATTCHAMP: -6.3
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert BATTCAP: 066
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert BATTPOWER: -327.6
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Wert POWERDIR: input
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: ges. PV in KWh: 82.92
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: akt. Leistung in Watt: 713
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: Batterie Status: Entladen
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: daypower_old: 000920
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: daypower: 000920
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: daybase: 82
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: EMINFO 1:1 ACT:00713 FEED:01238 RES:08762 5:1
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: RTCP ^D0600 1 00000 00000 00000 0060 1 0000 00000 100 00000 000 000
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: INGS ^D0560023 0023 0023 0004 0004 0003 3939 3939 3935 3938 000
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: BMS ^D0520519 066 1 0004 00 0 0552 0552 1500 0 0 0504 0150
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: DC:713 BATT:-327.6
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:00: DEBUG: storage_dat: 20230715-08:34.00 -327.6 066
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:02: ================================================
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
2023-07-15 08:34:02: DEBUG: Modus: Hybrid (Line mode, Grid mode)
PHP Warning: fwrite() expects parameter 1 to be resource, bool given in /etc/infinipoll10/infinipoll10k_bms.php on line 791
BMS Commando:
BMS Battery Voltage: 0519
BMS Battery Percent: 066
BMS Battery Current: 1
BMS Warning Code : 0004
BMS Froce Charge : 00
BMS CV Voltage : 0
BMS Float Voltage : 0552
BMS Max.Charge Amps: 0552
BMS BatStopDiscFlag: 1500
BMS BatStopChgFlag : 0
BMS ButCutoffVolt : 0
BMS BatMaxDisChAmps: 0504
BMS 12: 0150
INGS Commando:
R_Inv_Curr 0023
S_Inv_Curr 0023
T_Inv_Curr 0023
R_Out_Curr 0004
S_Out_Curr 0005
T_Out_Curr 0003
PBus_Volt 3940
NBus_Volt 3939
PBusAvg_V 3938
NBusAvg_V 3938
NLine_Cur 000
RTCP: ^D0600 1 00000 00000 00000 0060 1 0000 00000 100 00000 000 000
EMINFO Commando:
EMFirst: 1
DefFeed-InPow: 15000
ActPvPow: 00719
ActFeedPow: 01245
ReservPow: 08755
EMLast: 1

Ich hab jetzt schon ein paar Tage drüber gebrütet, aber ich steck etwas fest.

Eventuell hast du oder ein anderer Softwarekönner einen Tip für mich.

Besten Dank

Dirk

Hi, ich habe einen Sunstonepower 10kw Inverter. der sollte baugleich zu deinem sein, und ich habe das selbe vor wie du, kannst du mir da evt etwas helfen? Ich lese den akku schon aus und habe die werte in ner temporären datei die ich weiterverwende. Ich Nutze auch solaranzeige.de was den inverter erkennt uhnd die werte ausließt. jetzt muss ich quasi nur noch die befehle senden, damit er weiß das da ein schaluer akku ist. `Dein Skript hab ich gesehen, geht das auch mit dem usb Anschluss? Sollte eigentlich!!

Gruss und dank

@DWL
Das Logging funktioniert nicht, weil wahrscheinlich das Verzeichnis für die Logfiles nicht exisitiert oder keine Schreibberechtigung vorhanden ist.
Einzustellen ist das Verzeichnis in Codezeile 29:

$logfilename = "/daten/log/infinipoll_10k_A_";     //Debugging Logfile

Das musst du deinen Gegebenheiten anpassen (z.b. einfach ein "log" Verzeichnis im Programmverzeichnis von infinipoll10k.php anlegen).

@ Rio. Top! Besten Dank! Ich hab die ganze Zeit an der Datumsangabe in Zeile 791 rumgemacht.
Kommt von mangelnder Fachkenntnis.
Herzlichen Dank für deine Hilfe.

Du bist ja International vertreten. Letztens hab ich einen Beitrag in einen Forum aus SA von dir gelesen. Wahnsinn!!

?

@ Rio

Soo, die nächste Frage:

Vom InfPoll_BMS bekomme ich das

2023-08-11 11:30:59: DEBUG: Modus: Hybrid (Line mode, Grid mode)
BMS Commando:
BMS Battery Voltage: 0499
BMS Battery Percent: 001
BMS Battery Current: 0
BMS Warning Code : 0000
BMS Froce Charge : 00
BMS CV Voltage : 0
BMS Float Voltage : 0538
BMS Max.Charge Amps: 0536
BMS BatStopDiscFlag: 0750
BMS BatStopChgFlag : 0
BMS ButCutoffVolt : 0
BMS BatMaxDisChAmps: 0461
BMS 12: 0130

angezeigt.

mein ReadBMS gibt das:

D054BMS0499,001,0,0000,00,0,0538,0536,0750,0,0,0461,130

aus.

Ich denke da ist irgendwo die Zeile oder einZeiche zu viel.

Hast du eine Idee?

Stimmt, da war noch was nicht ganz richtig zugeordnet. Stammt noch aus meiner BMS Reverse-Engineering Zeit, wo ich die Werte noch nicht ganz zuordnen konnte.

Ändere den Part so um, dann sollten die Ausgabe auch stimmen:

        $bms_batvolt = $antw[0];
$bms_batperc = $antw[1];
$bms_direction = $antw[2];
$bms_batcurr = $antw[3];
$bms_warn = $antw[4];
$bms_forcechg = $antw[5];
$bms_cvvolt = $antw[6];
$bms_floatvolt = $antw[7];
$bms_maxchamps = ($antw[8] / 10);
$bms_batstopdisflag = $antw[9];
$bms_batstopchaflag = $antw[10];
$bms_batcutoffvol = $antw[11];
$bms_maxdischamps = $antw[12];
$bmsc = "";
for($i = 0; $i <= 12; $i++) $bmsc = $bmsc.$antw[$i]." ";
if($debug2){ //Print BMS Command output
echo "BMS Commando:\n";
echo "BMS Battery Voltage: $bms_batvolt\n";
echo "BMS Battery Percent: $bms_batperc\n";
echo "BMS Battery Current: $bms_batcurr\n";
echo "BMS Warning Code   : $bms_warn\n";
echo "BMS Force Charge   : $bms_forcechg\n";
echo "BMS CV Voltage     : $bms_cvvolt\n";
echo "BMS Float Voltage  : $bms_floatvolt\n";
echo "BMS Max.Charge Amps: $bms_maxchamps\n";
echo "BMS BatStopDiscFlag: $bms_batstopdisflag\n";
echo "BMS BatStopChgFlag : $bms_batstopchaflag\n";
echo "BMS ButCutoffVolt  : $bms_batcutoffvol\n";
echo "BMS BatMaxDisChAmps: $bms_maxdischamps\n";

Hi Rio!
Ändere das doch gleich im git, sonst hat jeder dasselbe Problem.

lg lichtimc

Super, besten Dank!!

Kann mir hierzu bitte jemand einen Gedankenanstoß geben?
Ich nutze NodeRed und steuere/monitore darüber meinen WR.
Aus ^D054BMS0531,090,1,0011,00,0,0554,0544,1200,0,0,0470,2000 + CRC erzeuge ich: "^D054BMS0531090100110000554054412000004702000077".

Daraus wird ein Puffer erzeugt, welchen ich an den WR per RS232 sende.
Der WR kann damit nichts anfangen und schickt ein NOK zurück.
Was mache ich falsch?

Warum entfernst du die Kommas?

@riogrande75 Ich hatte dies auch schon ohne die Kommas versucht: "^D054BMS0531,090,1,0011,00,0,0554,0544,1200,0,0,0470,2000093" (inkl. CRC).

In beiden Fällen bisher erfolglos. Muss ich im WR auch die BMS Funktion aktivieren?

Ja, ich hab das dem WR schon gesagt: Mit SolarPower habe ich "Battery-Type LiFe" und "BMS aktiviert". Bin mir aber gar nicht sicher, ob er das überhaupt braucht.

Kann es sein, dass deine CRC falsch berechnet wird? Welchen Code nimmst du dafür her?
Die CRC für das BMS Kommando musst du (untypischerweise) nach CRC16/XMODEM berechnen (siehe ersten Post) und nicht wie sonst üblich bei den Infini-Kommandos.