Re: Daly BMS kann nicht gelesen werden
Verfasst: Do 7. Okt 2021, 21:35
Ich bin mittlerweile selber verwirrt. Könntest du es einmal ausprobieren, was richtig ist?
Support Forum für die Anzeige von BMS, Solarreglern, Wechselrichtern, Pelletöfen, Wärmepumpen usw.
https://solaranzeige.de/phpBB3/
Code: Alles auswählen
05.10. 18:06:01 |------------ Start daly_bms.php ----------------------------
05.10. 18:06:01 -USB Port: /dev/ttyUSB0
05.10. 18:06:03 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:05 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:07 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:09 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:11 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:13 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:15 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:17 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:19 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:21 !! -Datenfehler, nochmal... a58090080000000000000000
05.10. 18:06:21 !! -Keine gültigen Daten empfangen.
05.10. 18:06:21 |------------ Stop daly_bms.php ----------------------------
Code: Alles auswählen
//**************************************************************************/
$funktionen->log_schreiben( "--------- Befehl 95 ", "|--", 6 );
$CommandID = "95";
$Datenstring = $StartByte.$Adresse.$CommandID.$Datenlaenge.$Daten;
$CRC = substr( dechex( hexdec( $StartByte ) + hexdec( $Adresse ) + hexdec( $CommandID ) + hexdec( $Datenlaenge )), - 2 );
$rc = $funktionen->eSmart3_auslesen( $USB1, $Datenstring.$CRC );
$funktionen->log_schreiben( "String 95 ".$Datenstring.$CRC, "!! ", 6 );
// if ($rc === false) {
// $funktionen->log_schreiben( "Datenfehler, nochmal... ".$Datenstring, "!! ", 7 );
// continue;
// }
$r = 1;
do {
$Teil = substr( $rc, 0, 16 );
$rc = substr( $rc, 16 );
$aktuelleDaten["FrameNr"] = hexdec( substr( $Teil, 0, 2 ));
$aktuelleDaten["Spannung_Zelle".$r] = (hexdec( substr( $Teil, 2, 4 )) / 1000);
$r++;
$aktuelleDaten["Spannung_Zelle".$r] = (hexdec( substr( $Teil, 6, 4 )) / 1000);
$r++;
$aktuelleDaten["Spannung_Zelle".$r] = (hexdec( substr( $Teil, 10, 4 )) / 1000);
$r++;
} while (strlen( $rc ) > 0);
//**************************************************************************/
Code: Alles auswählen
if ($rc === false) {
$funktionen->log_schreiben( "Datenfehler, nochmal... ".$Datenstring, "!! ", 7 );
continue;
}
Code: Alles auswählen
pi@solaranzeige:~ $ sudo daly-bms-cli -d /dev/ttyUSB0 --all
{
"soc": {
"total_voltage": 47.9,
"current": 8.1,
"soc_percent": 14.7
},
"cell_voltage_range": {
"highest_voltage": 3.004,
"highest_cell": 16,
"lowest_voltage": 2.985,
"lowest_cell": 4
},
"temperature_range": {
"highest_temperature": 15,
"highest_sensor": 1,
"lowest_temperature": 15,
"lowest_sensor": 1
},
"mosfet_status": {
"mode": "discharging",
"charging_mosfet": true,
"discharging_mosfet": true,
"capacity_ah": 16.17
},
"status": {
"cells": 16,
"temperature_sensors": 1,
"charger_running": false,
"load_running": false,
"states": {
"DI1": false,
"DI2": true
},
"cycles": 5
},
"cell_voltages": {
"1": 3.002,
"2": 3.002,
"3": 3.005,
"4": 2.992,
"5": 3.004,
"6": 3.004,
"7": 3.001,
"8": 3.006,
"9": 3.009,
"10": 3.0,
"11": 3.008,
"12": 3.008,
"13": 3.008,
"14": 3.006,
"15": 3.013,
"16": 3.007
},
"temperatures": {
"1": 15
},
"balancing_status": {
"error": "not implemented"
},
"errors": [
"SOC is too low. level one alarm"
]
}
Code: Alles auswählen
#!/bin/bash
sudo daly-bms-cli -d /dev/ttyUSB0 --all > /var/www/html/daly_bms.txt
Code: Alles auswählen
$rc = $funktionen->eSmart3_auslesen( $USB1, $Datenstring.$CRC );
Jetzt wäre interessant zu wissen ob sich die Protokolle dieser unterscheiden.e-i-k-e hat geschrieben: ↑Di 12. Okt 2021, 21:47Es scheint zwei Versionen des Daly Smart BMY zu geben. https://www.dalyelec.cn/newsshow.php?ci ... =77&lang=1
Code: Alles auswählen
elseif (strlen( $Ergebnis ) == 78) {
$Ergebnis1 = substr( $Ergebnis, 4, 8 );
$Ergebnis1 .= substr( $Ergebnis, 17, 8 );
$Ergebnis1 .= substr( $Ergebnis, 30, 8 );
$Ergebnis1 .= substr( $Ergebnis, 43, 8 );
$Ergebnis1 .= substr( $Ergebnis, 56, 8 );
$Ergebnis1 .= substr( $Ergebnis, 69, 8 );
$Ergebnis1 .= substr( $Ergebnis, 82, 8 );
$Dauer = 0; // Ausgang vorbereiten..
$OK = true;
$Ergebnis = $Ergebnis1;
}