Daly BMS kann nicht gelesen werden

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

Moderator: Ulrich

Benutzeravatar
simon.s
Beiträge: 29
Registriert: Sa 27. Feb 2021, 19:30
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

Stell mal deine
daly_bms.php und funktionen.inc.php bereit.
Kann dann jemand nachschauen.
Gruß
8-) Ich wohne da wo Ihr Urlaub macht 8-)
5,12KWp / Axpert III 5048 / 16x Winston 160Ah LiFePo4

Psylosophius
Beiträge: 5
Registriert: Mi 29. Dez 2021, 14:32

Re: Daly BMS kann nicht gelesen werden

Beitrag von Psylosophius »

Zuerst einmal danke für die vielen Infos, die hier bereitgestellt werden. Ich versuche mich grade etwas einzuarbeiten. Eine Daly BMS liegt hier schon mal auf dem Tisch und Raspi ist auch da. Kann mir evtl. Jemand sagen welches kabel nun sicher funktioniert und wo ich es beziehen kann? Ich blicke hier leider immer noch nicht ganz durch. Danke im voraus

carverandi
Beiträge: 3
Registriert: Do 23. Dez 2021, 19:43

Re: Daly BMS kann nicht gelesen werden

Beitrag von carverandi »

Hallo,

erst mal danke von mir für das tolle Projekt hier, auch wenn es mich seit Tagen beschäftigt und zur verzweiflung bringt.
Mein Stand:
Ich habe zunächst meinen Ladregler als "Singelregler Version" zum laufen gebracht, erfolgreich auf die "Multiregler Version" umgstellt und verzweifle nun an der Einbindung des Daly BMS, bei mir eine 12S Version für 36V.
IMG_20211229_175621-1.jpg
IMG_20211229_175628.jpg


Im Log bekomme ich folgenden Fehler:
Fehler Log.jpg
Fehler Log.jpg (75.14 KiB) 532 mal betrachtet

Ich habe mit Linux eigentlich nichts am Hut, habe es aber geschafft in der Daly_bms.php die Adreasse wie beschrieben auf 40 zu ändern:

"$Adresse = "40"; // 80 = BMS Adresse 40 NEUE ADRESSE!!!"

Was ich nicht durchgeführt habe ist die Anpassung in der funktionen.inc.php:
simon.s hat geschrieben:
Do 14. Okt 2021, 12:13
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ß

Hier bin ich mir nicht sicher, da dort bereits ein Eintrag ist, der nach meiner Interpretation das 16S unterstützen würde. Muss ich den ggf. doch anpassen und falls ja wie für mein 12S ?:
funktionen.jpg
funktionen.jpg (57.66 KiB) 532 mal betrachtet

Für Untersützung wäre ich Dankbar, ich komme da slebst nicht mehr weiter.

Gruß Andreas
Gruß Andi

Psylosophius
Beiträge: 5
Registriert: Mi 29. Dez 2021, 14:32

Re: Daly BMS kann nicht gelesen werden

Beitrag von Psylosophius »

Ich habe nun noch mal einiges gelesen und hoffe, ich bin etwas schlauer. Also verstehe ich es richtig, dass ich das mitgelieferte kabel vom Bluetooth Usb adapter einfach an meinen ftdi adapter des raspi stecken kann ?

Benutzeravatar
simon.s
Beiträge: 29
Registriert: Sa 27. Feb 2021, 19:30
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

Hallo carverandi

das mitgelieferte USB <--> RS232 sollte passen! läuft bei mir jedenfalls.
Versuch mal den Code

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;
          }
mit diesem zu ersetzen:

Code: Alles auswählen

elseif (strlen( $Ergebnis ) == 52) {
            $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 );
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
            $Ergebnis = $Ergebnis1;
          }
Wie im Beitrag viewtopic.php?p=13012#p13012 geschrieben sollte der
Aufbau folgendermaßen sein: 3 Zellen pro Antwort [13]

Code: Alles auswählen

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
bei den "208" vermute ich, sollte dies dann für 48 Zellen sein.

function eSmart3_auslesen sieht bei mir so aus:

Code: Alles auswählen

  /************************************************************************/
  function eSmart3_auslesen( $Device, $Befehl = '' ) {
    $Antwort = "";
    $OK = false;
    stream_set_blocking( $Device, false ); // Es wird auf keine Daten gewartet.
    fgets( $Device, 4092 );
    $Dauer = 2; // 4 Sekunden
    // echo $Befehl."\n";
    $rc = fwrite( $Device, hex2bin( $Befehl ));
    usleep( 500000 );
    $Timestamp = time( );
    $Ergebnis = "";
    $Antwort = "";
    do {
      $Antwort = fgets( $Device, 192 );
      // echo bin2hex($Antwort)."\n";
      if (trim( $Antwort ) == "") {
        // echo "Nichts empfangen .. \n";
        usleep( 100000 );
      }
      else {
        $Ergebnis .= $Antwort;
        if (strtoupper( substr( bin2hex( $Ergebnis ), 0, 2 )) == "AA") {
          $Datenlaenge = hexdec( substr( bin2hex( $Ergebnis ), 10, 2 ));
          if (strlen( $Ergebnis ) >= ($Datenlaenge + 7)) {
            // Paket ist komplett
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
          }
        }
        elseif (strtoupper( substr( bin2hex( $Ergebnis ), 0, 4 )) == "A501") {
          // echo "Länge: ".strlen($Ergebnis)."\n";
          if (strlen( $Ergebnis ) == 13) {
            // Paket ist komplett
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
            $Ergebnis = substr( $Ergebnis, 4, 8 );
          }
          if (strlen( $Ergebnis ) == 26) {
            // Paket ist komplett
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
            $Ergebnis1 = substr( $Ergebnis, 4, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 17, 8 );
            $Ergebnis = $Ergebnis1;
          }
          elseif (strlen( $Ergebnis ) == 208) {
            $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 );
            $Ergebnis1 .= substr( $Ergebnis, 95, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 108, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 121, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 134, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 147, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 160, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 173, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 186, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 199, 8 );
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
            $Ergebnis = $Ergebnis1;
          }
	  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;
          }
        }
      }
    } while (($Timestamp + $Dauer) > time( ));
    stream_set_blocking( $Device, true );
    if ($OK == true) {
      return bin2hex( $Ergebnis );
    }
    return false;

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

carverandi
Beiträge: 3
Registriert: Do 23. Dez 2021, 19:43

Re: Daly BMS kann nicht gelesen werden

Beitrag von carverandi »

Hallo Simon,

ich bin begeistert, es funktioniert :-)

Danke!
BMS Anzeige.jpg
Gruß Andi

Eisbub
Beiträge: 2
Registriert: Do 5. Mär 2020, 21:03

Re: Daly BMS kann nicht gelesen werden

Beitrag von Eisbub »

Hallo Zusammen

ich habe alles wie hier beschrieben umgesetzt. Bekomme aber immer noch keine Daten. Das Log zeigt:

17.01. 18:47:28 -Regler: 57
17.01. 18:47:28 -Regler erkannt: /dev/ttyUSB0
17.01. 18:47:28 -Device: /dev/ttyUSB0 wird in die user.config.php eingetragen.
17.01. 18:47:28 -Zeile gefunden. USB Device kann ausgetauscht werden. Index: 610 $USBRegler = "/dev/ttyUSB0";

17.01. 18:47:28 -Zeile gefunden. Raspberry Modell kann eingetragen werden. Index: 629 $Platine = "Raspberry Pi 3 Model B Rev 1.2";

17.01. 18:48:15 |------------ Start daly_bms.php ----------------------------
17.01. 18:48:15 -USB Port: /dev/ttyUSB0
17.01. 18:48:20 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:48:25 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:48:30 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:48:35 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:48:35 !! -Keine gültigen Daten empfangen.
17.01. 18:48:35 |------------ Stop daly_bms.php ----------------------------
17.01. 18:49:01 |------------ Start daly_bms.php ----------------------------
17.01. 18:49:01 -USB Port: /dev/ttyUSB0
17.01. 18:49:06 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:49:11 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:49:16 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:49:21 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:49:21 !! -Keine gültigen Daten empfangen.
17.01. 18:49:21 |------------ Stop daly_bms.php ----------------------------
17.01. 18:50:01 |------------ Start daly_bms.php ----------------------------
17.01. 18:50:01 -USB Port: /dev/ttyUSB0
17.01. 18:50:06 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:50:11 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:50:15 |------------------- Start wetterdaten.php --------------------
17.01. 18:50:15 o---Wetterdaten ausgeschaltet.
17.01. 18:50:15 |------------------- Stop wetterdaten.php ---------------------
17.01. 18:50:16 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:50:21 !! -Datenfehler, nochmal... a58095080000000000000000
17.01. 18:50:21 !! -Keine gültigen Daten empfangen.
17.01. 18:50:21 |------------ Stop daly_bms.php ----------------------------


Ich habe ein original UART Kabel von Daly was am Windows PC auch funktioniert.

Mein Daly-BMS ist ein 8S

hat jemand eine Lösung

Grüße Eisbub

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

Re: Daly BMS kann nicht gelesen werden

Beitrag von Ulrich »

Das UART Kabel muss einen FTDI Chipsatz haben. Nur für diesen Chipsatz ist der nötige Treiber vorhanden.
--------------------------------------
Ulrich [Admin]

Eisbub
Beiträge: 2
Registriert: Do 5. Mär 2020, 21:03

Re: Daly BMS kann nicht gelesen werden

Beitrag von Eisbub »

Danke Ulrich
für die schnelle Antwort.
da werde ich mir wohl erstmal was bauen müssen wenn das Originalkabel nicht unterstüzt wird.

Gruß Eisbub

Benutzeravatar
simon.s
Beiträge: 29
Registriert: Sa 27. Feb 2021, 19:30
Hat sich bedankt: 1 Mal
Danksagung erhalten: 4 Mal

Re: Daly BMS kann nicht gelesen werden

Beitrag von simon.s »

Eisbub hat geschrieben:
Mo 17. Jan 2022, 20:04
Danke Ulrich
für die schnelle Antwort.
da werde ich mir wohl erstmal was bauen müssen wenn das Originalkabel nicht unterstüzt wird.

Gruß Eisbub
Das mitgeliferte funktioniert einwandfrei.
Vermutlich musst auch du die Software anpassen.
function eSmart3_auslesen
16-18 Zellen

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, 82, 8 );
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
            $Ergebnis = $Ergebnis1;
          }
ersetzen mit 6-8 Zellen

Code: Alles auswählen

elseif (strlen( $Ergebnis ) == 39) {
            $Ergebnis1 = substr( $Ergebnis, 4, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 17, 8 );
            $Ergebnis1 .= substr( $Ergebnis, 30, 8 );
            $Dauer = 0; // Ausgang vorbereiten..
            $OK = true;
            $Ergebnis = $Ergebnis1;
             }
            
8-) Ich wohne da wo Ihr Urlaub macht 8-)
5,12KWp / Axpert III 5048 / 16x Winston 160Ah LiFePo4

Antworten