Daly BMS kann nicht gelesen werden
Moderator: Ulrich
- Ulrich
- Administrator
- Beiträge: 5890
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 150 Mal
- Danksagung erhalten: 824 Mal
- Kontaktdaten:
Re: Daly BMS kann nicht gelesen werden
Ich bin mittlerweile selber verwirrt. Könntest du es einmal ausprobieren, was richtig ist?
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
- simon.s
- Beiträge: 50
- Registriert: Sa 27. Feb 2021, 19:30
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Daly BMS kann nicht gelesen werden
Hallo
so jetzt bin ich weiter gekommen aber noch nicht ganz am Ende.
Das Daly-Bms lässt sich über den mitgelieferten Usb-RS232 lesen!!!
Ich vermute mal daß es egal ist, ob dies ein Usb-RS232 oder ein Usb-RS485 angestöppselt wird, da das Protokoll von Daly für beide Schnittstellen ident zu scheinen ist.
Der Fehler der in der Log angezeigt wurde war folgender:
Da ich noch nie was mit PHP (SPSler +Arduino) am Hut hatte versuchte ich es trotzdem, und bin fündig geworden. Habe den Code in der Datei "Daly_bms.php" dahingehend geändert um zu sehen bis wo Daten kommen. Der Fehler tritt ab dem Aufruf von den Zellspannungen auf.
Achtung in dem Codeschnipsel sind Daten geändert bzw ausgeklammert!!!!!!
Habe mir die Abfrage "$funktionen->log_schreiben( "String 95 ".$Datenstring.$CRC, "!! ", 6 );" erstellt und die Daten mittels HTerm vom
Win-Rechner anzeigen lassen, normalerweise kommt pro Anfrage eine Antwort zurück. Bei dieser jedoch 6 und da wird der Fehler liegen?
-----Datenstrings in Hex !!!!!!
Sende: A5 40 94 08 00 00 00 00 00 00 00 00 81
Antwort: A5 01 94 08 10 01 00 00 00 00 05 E0 38 ---- 16 Zellen, 1 Tempsensor, .... past!
Sende: A5 40 95 08 00 00 00 00 00 00 00 00 81
Antwort:
A5 01 95 08 01 0C CB 0C C6 0C CF E0 A8 ---- fortlaufende NR 01 Zellspannungen je 3x in mV
A5 01 95 08 02 0C C5 0C CB 0C C9 E0 A2 ---- fortlaufende NR 02 Zellspannungen je 3x in mV
A5 01 95 08 03 0C CF 0C C6 0C CC E0 AB ---- fortlaufende NR 03 Zellspannungen je 3x in mV
A5 01 95 08 04 0C C7 0C CF 0C C7 E0 A8 ---- fortlaufende NR 04 Zellspannungen je 3x in mV
A5 01 95 08 05 0C CD 0C C9 0C CD E0 AF ---- fortlaufende NR 05 Zellspannungen je 3x in mV
A5 01 95 08 06 0C C5 0C C9 0C CD E0 A8 ---- fortlaufende NR 06 Zellspannungen je 3x in mV
so, der Fehler bricht jedoch in dieser Funktion ab
Jetzt wären die PHP Experten bzw @Ulrich gefragt? womöglich war das damalige Protokoll anders??
Für Tests stehe ich nach Arbeit und Kids gerne bereit.
Grüße
so jetzt bin ich weiter gekommen aber noch nicht ganz am Ende.
Das Daly-Bms lässt sich über den mitgelieferten Usb-RS232 lesen!!!
Ich vermute mal daß es egal ist, ob dies ein Usb-RS232 oder ein Usb-RS485 angestöppselt wird, da das Protokoll von Daly für beide Schnittstellen ident zu scheinen ist.
Der Fehler der in der Log angezeigt wurde war folgender:
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 ----------------------------
Achtung in dem Codeschnipsel sind Daten geändert bzw ausgeklammert!!!!!!
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);
//**************************************************************************/
Win-Rechner anzeigen lassen, normalerweise kommt pro Anfrage eine Antwort zurück. Bei dieser jedoch 6 und da wird der Fehler liegen?
-----Datenstrings in Hex !!!!!!
Sende: A5 40 94 08 00 00 00 00 00 00 00 00 81
Antwort: A5 01 94 08 10 01 00 00 00 00 05 E0 38 ---- 16 Zellen, 1 Tempsensor, .... past!
Sende: A5 40 95 08 00 00 00 00 00 00 00 00 81
Antwort:
A5 01 95 08 01 0C CB 0C C6 0C CF E0 A8 ---- fortlaufende NR 01 Zellspannungen je 3x in mV
A5 01 95 08 02 0C C5 0C CB 0C C9 E0 A2 ---- fortlaufende NR 02 Zellspannungen je 3x in mV
A5 01 95 08 03 0C CF 0C C6 0C CC E0 AB ---- fortlaufende NR 03 Zellspannungen je 3x in mV
A5 01 95 08 04 0C C7 0C CF 0C C7 E0 A8 ---- fortlaufende NR 04 Zellspannungen je 3x in mV
A5 01 95 08 05 0C CD 0C C9 0C CD E0 AF ---- fortlaufende NR 05 Zellspannungen je 3x in mV
A5 01 95 08 06 0C C5 0C C9 0C CD E0 A8 ---- fortlaufende NR 06 Zellspannungen je 3x in mV
so, der Fehler bricht jedoch in dieser Funktion ab
Code: Alles auswählen
if ($rc === false) {
$funktionen->log_schreiben( "Datenfehler, nochmal... ".$Datenstring, "!! ", 7 );
continue;
}
Für Tests stehe ich nach Arbeit und Kids gerne bereit.
Grüße
Ich wohne da wo Ihr Urlaub macht
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
-
- Beiträge: 43
- Registriert: Do 9. Apr 2020, 21:10
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: Daly BMS kann nicht gelesen werden
Nochmal Danke!!
Ich stehe auch zum Testen bereit. Gerne kann sich auch jemand über eine remote Software auf meinen Rechner aufschalten um sich auf meinen test System austoben zu können.
Ich stehe auch zum Testen bereit. Gerne kann sich auch jemand über eine remote Software auf meinen Rechner aufschalten um sich auf meinen test System austoben zu können.
-
- Beiträge: 43
- Registriert: Do 9. Apr 2020, 21:10
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: Daly BMS kann nicht gelesen werden
Ich habe noch etwas gesucht und einige Sachen gefunden.
Es scheint zwei Versionen des Daly Smart BMY zu geben. https://www.dalyelec.cn/newsshow.php?ci ... =77&lang=1
Hier hat sich jemand die mühe gemacht und einiges übersetzt.
https://diysolarforum.com/threads/decod ... col.21898/
Direkt von Daly an Dokument über das Protokoll
https://github.com/jblance/mpp-solar/bl ... otocol.pdf
Auf GitHub existiert ein Python Scrip um das Daly über BT oder serielle (egal ob BmsMonitor oder Sinowealth) auslesen zu können.
Ggf. können hier weitere Informationen für Solaranzeige entnommen werden?
https://github.com/dreadnought/python-daly-bms
Leider kann ich selbst wenig damit anfangen - ich hoffe ihr könnt es verwenden!
Es scheint zwei Versionen des Daly Smart BMY zu geben. https://www.dalyelec.cn/newsshow.php?ci ... =77&lang=1
Hier hat sich jemand die mühe gemacht und einiges übersetzt.
https://diysolarforum.com/threads/decod ... col.21898/
Direkt von Daly an Dokument über das Protokoll
https://github.com/jblance/mpp-solar/bl ... otocol.pdf
Auf GitHub existiert ein Python Scrip um das Daly über BT oder serielle (egal ob BmsMonitor oder Sinowealth) auslesen zu können.
Ggf. können hier weitere Informationen für Solaranzeige entnommen werden?
https://github.com/dreadnought/python-daly-bms
Leider kann ich selbst wenig damit anfangen - ich hoffe ihr könnt es verwenden!
-
- Beiträge: 43
- Registriert: Do 9. Apr 2020, 21:10
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: Daly BMS kann nicht gelesen werden
Ich habe das Python Scrip getestet.
Und ich konnte sofort Daten von meinem Daly BMS abgreifen.
Und ich konnte sofort Daten von meinem Daly BMS abgreifen.
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"
]
}
Re: Daly BMS kann nicht gelesen werden
Hallo e-l-k-e,
das ist ein Datenstring.
Wenn Du diesen um eine Kleinigkeit erweiterst, und ein bash-script anlegst
/solaranzeige/mein_daly.sh
wird diese txt-Datei erzeugt.
Schreibst Du diesen Befehl in den crontab -e
* * * * * /solaranzeige/mein_daly.sh
so wird diese Datei im Minutentakt ausgeführt und die txt-Datei ständig erneuert.
Ab diesem Zeitpunkt, brauchst Du das Programm von solaranzeige.de für Daly-BMS nicht mehr, sondern nur Influx und Grafana.
Aber Du würdest nun einen Programmierer benötigen, der Dir diesen String in eine InfluxDB schreibt.
Mit Sicherheit geht es auch einfacher, wenn man die mein_daly.sh gleich so schreibt, daß der Umweg über die txt nicht nötig ist, aber dafür fehlt mir auch noch das nötige Wissen.
Ich löse auf diese Art jedenfalls mein Thema, verschiede Werte aus der InfluxDB in eine MYSQL-MariaDB zu schreiben.
Vielleicht hilft jemand anderes weiter.
Enrico
das ist ein Datenstring.
Wenn Du diesen um eine Kleinigkeit erweiterst, und ein bash-script anlegst
/solaranzeige/mein_daly.sh
Code: Alles auswählen
#!/bin/bash
sudo daly-bms-cli -d /dev/ttyUSB0 --all > /var/www/html/daly_bms.txt
Schreibst Du diesen Befehl in den crontab -e
* * * * * /solaranzeige/mein_daly.sh
so wird diese Datei im Minutentakt ausgeführt und die txt-Datei ständig erneuert.
Ab diesem Zeitpunkt, brauchst Du das Programm von solaranzeige.de für Daly-BMS nicht mehr, sondern nur Influx und Grafana.
Aber Du würdest nun einen Programmierer benötigen, der Dir diesen String in eine InfluxDB schreibt.
Mit Sicherheit geht es auch einfacher, wenn man die mein_daly.sh gleich so schreibt, daß der Umweg über die txt nicht nötig ist, aber dafür fehlt mir auch noch das nötige Wissen.
Ich löse auf diese Art jedenfalls mein Thema, verschiede Werte aus der InfluxDB in eine MYSQL-MariaDB zu schreiben.
Vielleicht hilft jemand anderes weiter.
Enrico
- simon.s
- Beiträge: 50
- Registriert: Sa 27. Feb 2021, 19:30
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Daly BMS kann nicht gelesen werden
Hallo
@ e-i-k-e Hier ein Bild meines Daly BMS 16S, Angebunden über USB-RS232.
Weiters bin ich noch dabei in der Funktion
die Prüfung der Rückgabewerte zu kontrollieren. Dies holt ja die Daten vom Usb in das Daly_bms.php.
Gruß
@ e-i-k-e Hier ein Bild meines Daly BMS 16S, Angebunden über USB-RS232.
Weiters bin ich noch dabei in der Funktion
Code: Alles auswählen
$rc = $funktionen->eSmart3_auslesen( $USB1, $Datenstring.$CRC );
Gruß
Ich wohne da wo Ihr Urlaub macht
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
- simon.s
- Beiträge: 50
- Registriert: Sa 27. Feb 2021, 19:30
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Daly BMS kann nicht gelesen werden
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
Gruß
Ich wohne da wo Ihr Urlaub macht
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
- simon.s
- Beiträge: 50
- Registriert: Sa 27. Feb 2021, 19:30
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 5 Mal
Re: Daly BMS kann nicht gelesen werden
Hallo
so, hab dies nun zum Laufen bekommen, Kleinigkeiten sind noch einzustellen (Grafana).
Habe in der Datei "\www\html\phpinc\funktionen.inc.php" die Funktion "eSmart3_auslesen" um folgenden Code erweitert:
Jetzt bekomme ich auch die Zellspannungen und die Fehlermeldung ist weg.
Gruß
so, hab dies nun zum Laufen bekommen, Kleinigkeiten sind noch einzustellen (Grafana).
Habe in der Datei "\www\html\phpinc\funktionen.inc.php" die Funktion "eSmart3_auslesen" um folgenden Code erweitert:
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;
}
Gruß
Ich wohne da wo Ihr Urlaub macht
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4
16x Amerisolar 320 FullBlack - 5,12KWp
Axpert III 5048 + 16S DalyBMS
16x Winston 160Ah + 16x 240Ah China LiFePo4