Daly BMS kann nicht gelesen werden

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

Benutzeravatar
Ulrich
Administrator
Beiträge: 2731
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 32 Mal
Danksagung erhalten: 172 Mal
Kontaktdaten:

Re: Daly BMS kann nicht gelesen werden

Beitrag von Ulrich »

Ich bin mittlerweile selber verwirrt. Könntest du es einmal ausprobieren, was richtig ist?
--------------------------------------
Ulrich [Admin]

Benutzeravatar
simon.s
Beiträge: 15
Registriert: Sa 27. Feb 2021, 19:30
Danksagung erhalten: 3 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

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:

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    ---------------------------- 
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!!!!!!

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);

	//**************************************************************************/
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

Code: Alles auswählen

if ($rc === false) {
      $funktionen->log_schreiben( "Datenfehler, nochmal... ".$Datenstring, "!! ", 7 );
      continue;
    }
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
8-) Ich wohne da wo Ihr Urlaub macht 8-)
5,12KWp / Axpert III 5048 / 16x Winston 160Ah LiFePo4

e-i-k-e
Beiträge: 34
Registriert: Do 9. Apr 2020, 21:10
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von e-i-k-e »

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. ;)

e-i-k-e
Beiträge: 34
Registriert: Do 9. Apr 2020, 21:10
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von e-i-k-e »

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! :)

e-i-k-e
Beiträge: 34
Registriert: Do 9. Apr 2020, 21:10
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von e-i-k-e »

Ich habe das Python Scrip getestet.

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"
  ]
}

solarfanenrico
Beiträge: 513
Registriert: Mi 20. Jan 2021, 19:49
Hat sich bedankt: 27 Mal
Danksagung erhalten: 34 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von solarfanenrico »

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

Code: Alles auswählen

#!/bin/bash
sudo daly-bms-cli  -d /dev/ttyUSB0 --all  > /var/www/html/daly_bms.txt
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

Benutzeravatar
simon.s
Beiträge: 15
Registriert: Sa 27. Feb 2021, 19:30
Danksagung erhalten: 3 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

Hallo
@ 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 );
die Prüfung der Rückgabewerte zu kontrollieren. Dies holt ja die Daten vom Usb in das Daly_bms.php.

Gruß
Dateianhänge
daly16S.jpg
8-) Ich wohne da wo Ihr Urlaub macht 8-)
5,12KWp / Axpert III 5048 / 16x Winston 160Ah LiFePo4

Benutzeravatar
simon.s
Beiträge: 15
Registriert: Sa 27. Feb 2021, 19:30
Danksagung erhalten: 3 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

e-i-k-e hat geschrieben:
Di 12. Okt 2021, 21:47
Es scheint zwei Versionen des Daly Smart BMY zu geben. https://www.dalyelec.cn/newsshow.php?ci ... =77&lang=1
Jetzt wäre interessant zu wissen ob sich die Protokolle dieser unterscheiden.
Gruß
8-) Ich wohne da wo Ihr Urlaub macht 8-)
5,12KWp / Axpert III 5048 / 16x Winston 160Ah LiFePo4

Benutzeravatar
simon.s
Beiträge: 15
Registriert: Sa 27. Feb 2021, 19:30
Danksagung erhalten: 3 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

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:

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;
          }
Jetzt bekomme ich auch die Zellspannungen und die Fehlermeldung ist weg.

Gruß
Dateianhänge
gr.PNG
8-) Ich wohne da wo Ihr Urlaub macht 8-)
5,12KWp / Axpert III 5048 / 16x Winston 160Ah LiFePo4

e-i-k-e
Beiträge: 34
Registriert: Do 9. Apr 2020, 21:10
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von e-i-k-e »

Könntest du bitte deine Datei "Daly_bms.php" und "funktionen.inc.php" zur Verfügung stellen?

Antworten