Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Microcontroller
    5. JK-BMS über RS485 mit ESPHome auslesen

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    JK-BMS über RS485 mit ESPHome auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Marco 3 @syssi last edited by

      @syssi
      Danke, daß werde ich heute abend probieren.

      Jetzt noch die Frage mit dem

      Piep, Piep login bei Handy -App

      und

      dem Piep,........1-4sekunden, Piep --> bei esphome login.

      Kann dies mit dem SU - 123456 login und die damit zur Verfügung stehenden "Buttons" zu tuen haben?

      Ist es möglich, die SU Rechte zu entkoppeln, um eine eventuelle Fehlbedienung (Ladeschlussspannugng), BMS Balancer Startspannung BMS off, ) zu vermeiden. Quasie nur kucken, aber nix anfassen.

      Wenn ich die Zeit heute finde werde ich noch mal einen neuen ESP D1 Mini ESP32 heute flaschen.

      Was kann man alles raus hauen, um diesen ESP performant zu machen, das Web Interface eventuell zu lassen, um gleich zu sehen, ob noch Daten kommen. HomeAssistant ist erst mal nicht gewünscht, da ich iobroker bevorzuge, aber die homeassistant Umgbung nutzen möchte, um den ESP zu flashen, ist um einigiges komfortabler, als mit Arduino IDE. (oh man diese Schachtelsätze) 🙂

      syssi 1 Reply Last reply Reply Quote 0
      • syssi
        syssi @Marco 3 last edited by

        @marco-3

        Piep, Piep login bei Handy -App

        Das BMS piept pro empfangenem Befehl. Ich würde nicht am piepen festmachen, ob etwas nicht funktioniert. Das Logbuch ist aussagekräftiger. Wenn etwas nicht wie erwartet funktioniert, bitte das Logbuch posten!

        Kann dies mit dem SU - 123456 login und die damit zur Verfügung stehenden "Buttons" zu tuen haben?

        Die JK-BMS-App behauptet zwar ein Passwort zu benötigen und zwar jenes, was im BMS hinterlegt ist. Das BMS sendet dieses Passwort aber in der Willkommensnachricht und die App vergleicht den Wert mit deiner Eingabe. Die ESPHome-Implementierung verzichtet auf diese vorgegaukelte Sicherheit. Man kann immer in das BMS schreiben. Auch ohne Passwort.

        Ist es möglich, die SU Rechte zu entkoppeln, um eine eventuelle Fehlbedienung (Ladeschlussspannugng), BMS Balancer Startspannung BMS off, ) zu vermeiden. Quasie nur kucken, aber nix anfassen.

        Du kannst alle Entitäten/Zeilen aus der YAML-Datei löschen, welche du nicht willst. Zum Beispiel löschst du den gesamten switch-Block und den number-Block. Dann bleiben nur noch Lese-Operationen (sensor, binary_sensor) übrig.

        Was kann man alles raus hauen, um diesen ESP performant zu machen, das Web Interface eventuell zu lassen, um gleich zu sehen, ob noch Daten kommen. HomeAssistant ist erst mal nicht gewünscht, da ich iobroker bevorzuge, aber die homeassistant Umgbung nutzen möchte, um den ESP zu flashen, ist um einigiges komfortabler, als mit Arduino IDE. (oh man diese Schachtelsätze)

        Der Webserver ist das größte Schwergewicht für welches du dich nur entscheiden konntest. Die api-Komponente ist die leichtgewichtigste Implementierung. Danach kommt mqtt. Dann kommt lange lange nichts und dann der Webserver. Trenn dich lieber vom Webserver und prüfe die Werte immer via MQTT.

        1 Reply Last reply Reply Quote 0
        • M
          Marco 3 last edited by Marco 3

          Der Webserver ist das größte Schwergewicht für welches du dich nur entscheiden konntest. Die api-Komponente ist die leichtgewichtigste Implementierung. Danach kommt mqtt. Dann kommt lange lange nichts und dann der Webserver. Trenn dich lieber vom Webserver und prüfe die Werte immer via MQTT.

          wird gemacht, Danke noch mal für die immer nett bleibende und ausfühlichen Erklärungen!

          Eine Frage, noch... wie entscheident ist diese Angabe im .yaml

          esp32:
            board: wemos_d1_mini32
            framework:
              type: esp-idf
          

          dies habe ich auf diese Werte, bei der der manuellen ESP Auswahl geändert.
          Ich glaube es war so, das habe ich hier gerade nicht vorliegen

          esp32:
            board: ESP32dev
            framework:
              type: adruino
          
          syssi 1 Reply Last reply Reply Quote 0
          • syssi
            syssi @Marco 3 last edited by

            @marco-3 In der Vergangenheit war der Bluetooth-Stack aus dem Arduino-Framework kaputt/instabiler, als wenn man unmittelbar auf ESP-IDF setzt. Konkreter gesprochen: Das JK-BMS sendet 150 Bytes lange Notifications, welche wenn ich mich richtig erinnere so im BLE-Spec nicht vorgesehen sind. Das Arduino-Framework crasht beim Empfang einer solchen Nachricht. Der Kern unten drunter (ESP-IDF) steckt diese große Nachricht einfach weg. Es ist aber möglich, dass es sich um eine Problematik aus der Vergangenheit handelt, da es mittlerweile auch Nutzer gibt die aktiv das Arduino-Framework nutzen. Wenn du mich fragst, dann ist ESP-IDF der puristischere und stabilere Weg.

            M 1 Reply Last reply Reply Quote 0
            • M
              Marco 3 @syssi last edited by Marco 3

              @syssi
              Danke, sehr viel herraus genommen.
              nur bei number meckert es beim komplieren
              immer wenn ich den

              number:

              Bereich lösche.

              |-- ArduinoJson @ 6.18.5
              *** [.pioenvs/bms1/src/esphome/components/jk_bms_ble/number/jk_number.o] Source `src/esphome/components/jk_bms_ble/number/jk_number.cpp' not found, needed by target `.pioenvs/bms1/src/esphome/components/jk_bms_ble/number/jk_number.o'.
              
              syssi 1 Reply Last reply Reply Quote 0
              • syssi
                syssi @Marco 3 last edited by

                Ein Clean-Build wird das Problem lösen:

                ~/.local/bin/esphome clean esp32-ble-example.yaml
                ~/.local/bin/esphome run esp32-ble-example.yaml
                
                M 1 Reply Last reply Reply Quote 0
                • M
                  Marco 3 @syssi last edited by Marco 3

                  @syssi
                  Danke, hat es!!
                  Zum Glück gibt es den Klick Button beim Home Assistant.

                  1 Reply Last reply Reply Quote 0
                  • M
                    Marco 3 last edited by

                    Kleine Rückmeldung. ESP liefert seit gestern Abend erfolgreich die Daten des JKBMS.

                    Und natürlich wieder eine Frage.

                    Kann man den Update Intervall irgend wo einstellen? Gefühlt kommen aller 2sekunden Daten rein.

                    syssi 1 Reply Last reply Reply Quote 0
                    • syssi
                      syssi @Marco 3 last edited by

                      Das JK-BMS publiziert seine Messwerte einmal pro Sekunde. Man kann sich daraufhin entscheiden, wieviel man davon verwirft:

                      jk_bms_ble:
                        - ble_client_id: client0
                          protocol_version: ${protocol_version}
                          throttle: 30s
                          id: bms0
                      

                      Per throttle: 60s wird nun ein Schwung Nachrichten pro Minute decodiert und per MQTT weitergereicht. Sobald alles läuft, solltest du das Log-Level herunterstellen damit der ESP nicht so sehr damit beschaeftigt ist Logs zu schreiben:

                      logger:
                        level: INFO
                      
                      N M 2 Replies Last reply Reply Quote 0
                      • N
                        nettworker @syssi last edited by nettworker

                        Ich weis ja nicht ob sie es schon wußten 🙂
                        Man kann das JKBMS mittlerweile mit der openDTU onbattery ( per Draht ) auslesen und es gibt eine openDTU Fusion Platine fertig bestückt die nach Einrichtung fast out of the box läuft.
                        Software ist OpenSource, Platine liegt je nach gewünschter Ausführung bei ca. 35 -45@. Und NEIN, ich bin weder Entwickler noch verdiene ich was dran. Ich denke der eine oder andere sucht eine einfache funktionierende Lösung ohne selbst Software kompilieren zu müssen oder zu löten. Bei Fragen könnt ihr mich gerne fragen oder direkt auf die Github Seite der Entwickler gehen.
                        Hab ich jetzt seit 2 Monaten problemlos im Einsatz. Derzeit wird die Software vom Entwickler bei Github noch erweitert um grundlegende Befehle zu senden ( Charge on/off etc. ).

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          Marco 3 @nettworker last edited by

                          @nettworker
                          Klingt grundsätzlich interessant. Auch wenn bei meinem System die RS485 mit einem galvanisch getrennten Umwandler die Daten an Victron cerbo gehen.
                          Möchten ich den Cerbo nicht noch mehr belasten mit MQTT, mit Modbus sendet er schon die Ladekontroller Zustände.... Aber leider vom JK, sieht es spärlich mit Daten für Modbus aus.

                          Daher nehme ich gern die Daten die vom JK kommen über BT ab. Das Victron System soll seine Arbeit machen.

                          Aber die Open DTU Fusion Lösung ist auch wieder ein Weg der nach Rom führt.
                          Danke für die Info.

                          1 Reply Last reply Reply Quote 0
                          • M
                            Marco 3 @syssi last edited by

                            @syssi
                            Da klingt sehr interessant. Heißt das jetzt, daß die Messwerte aktuell mit 30sec oder 60sec versetzt an den iobroker kommen

                            syssi 1 Reply Last reply Reply Quote 0
                            • syssi
                              syssi @Marco 3 last edited by

                              Da klingt sehr interessant. Heißt das jetzt, daß die Messwerte aktuell mit 30sec oder 60sec versetzt an den iobroker kommen

                              Schau Mal in deiner YAML, was dort aktuell eingestellt ist. Ich gehe von 5s aus. Von einem Versatz würde ich nicht sprechen. Eine Nachricht vom BMS enthält alle Messwerte. Pro Sekunde wird eine Nachricht übertragen. Bei eine 5 Sekunden-Drosselung, werden 4 Nachrichten verworfen und jede 5. Nachricht verarbeitet. Das hat zur Folge, dass es alle 5 Sekunden (die gerade aktuelle Nachricht) auf dem MQTT-Broker ankommt. Im Fall der 60s werden 59 Nachrichten verworfen und die 60. propagiert.

                              M 1 Reply Last reply Reply Quote 0
                              • M
                                Marco 3 @syssi last edited by

                                @syssi
                                O.k. ja, es stehen die 5 darin könnte ich da auch 1s eintragen?

                                jk_bms_ble:
                                  - ble_client_id: client0
                                    protocol_version: ${protocol_version}
                                    throttle: 5s // Abrufintervall der BMS Datensätze
                                    id: bms0
                                

                                Darf man im yaml File Kommentare mit // eintragen, sie he wie im Beispiel

                                syssi 1 Reply Last reply Reply Quote 0
                                • syssi
                                  syssi @Marco 3 last edited by

                                  @marco-3 said in JK-BMS über RS485 mit ESPHome auslesen:

                                  jk_bms_ble:

                                  • ble_client_id: client0
                                    protocol_version: ${protocol_version}
                                    throttle: 5s // Abrufintervall der BMS Datensätze
                                    id: bms0

                                  Ja, das Zeichen dafür ist aber ein #:

                                  jk_bms_ble:
                                    - ble_client_id: client0
                                      protocol_version: ${protocol_version}
                                      throttle: 5s # Abrufintervall der BMS Datensätze
                                      id: bms0
                                  

                                  Auch möglich ist:

                                  jk_bms_ble:
                                    - ble_client_id: client0
                                      protocol_version: ${protocol_version}
                                      # Abrufintervall der BMS Datensätze
                                      throttle: 5s
                                      id: bms0
                                  
                                  S 1 Reply Last reply Reply Quote 0
                                  • M
                                    Marco 3 last edited by

                                    Es läuft immer besser! Daten im 1s Takt kommen sehr zuverlässig.

                                    Und schon ist die nächste Frage da.
                                    Ich verwende w verschiedene ESP32 Boards. Ein normales und eine D1 Mini Version. Das normal hat eine Status LED, welche Blinkzeichen von sich gibt, sieht so aus, als ob es immer der MQTT Sendebefehl ist. Das D1 Board hat 2 Led, die erste ist für die Power ON. Bei der 2. Led steht ein L, diese gibt aber keine Status von sich. Kann man dies noch aktivieren, oder muss ich am Pinout noch eine irgend wo anbauen.

                                    17047067095591944740669806496167.jpg

                                    syssi 1 Reply Last reply Reply Quote 0
                                    • syssi
                                      syssi @Marco 3 last edited by syssi

                                      In der YAML ist keine Anweisung enthalten, dass die LED gesteuert werden soll. Die Erklärung wird vielmehr sein: Eines der Boards besitzt eine TX-LED, welche leuchtet sobald Daten auf der seriellen Schnittstelle (GPIO1?) rausgeschrieben werden. Wenn du das Board über das Kabel flashst sollte sie flackern. Da der logger von ESPHome periodisch die Nachrichten auf die serielle Schnittstelle schreibt, leuchtet die LED im gleichen Takt.

                                      Wir können die YAML-Konfiguration beliebig erweitern und mit einer Anweisung versehen, was mit der LED (an GPIO2 des D1 Mini ESP32) passieren soll.

                                      M 1 Reply Last reply Reply Quote 0
                                      • M
                                        Marco 3 @syssi last edited by Marco 3

                                        @syssi
                                        Danke, was wäre, die sinnvollste Lösung beim D1?

                                        Ich möchte eigentlich bei einem Blick drauf nur erkennen, daß es läuft und nicht fest gefahren ist.

                                        Oder kann man daß so weiter stricken...
                                        Kein W-Lan --> 2x blinken 5sec Pause
                                        Keine BT Verbindung --> 5x blinken 5sec Pause.

                                        Am Ende wäre es Klasse, wenn man mit einem Blick sieht ESP ist o.k. Fehler liegt bei Iobroker ...

                                        Durch die andere ESP Version für das JKBMS, hab es in 1-30Tagen Abständen Aufhänger des ESP. Wobei ich nicht gleich wusste was los war. Vermutung lang bei, fest gefahren.

                                        Daher hab ich mich hier für dies Lösung entschieden, weil diese weiter entwickelt wird. Und nun erst Recht, da die ganzen Tips und Vorschläge von dir, meine Probierfreude fördern und ich nicht gefrustet hinwerfe... Noch mal ganz großes Lob für die Hilfe und die JKBMS Implementierung auf esphome Basis hier.

                                        syssi 1 Reply Last reply Reply Quote 0
                                        • syssi
                                          syssi @Marco 3 last edited by syssi

                                          @marco-3 Für WiFi/MQTT kannst du diesen Schnippsel nutzen:

                                          status_led:
                                            pin:
                                              number: GPIO2
                                              inverted: true
                                          

                                          Hier findest du eine Beschreibung, was er tut: https://esphome.io/components/status_led.html

                                          Für Bluetooth solltest du dir einen Lötkolben schnappen und eine weitere LED an einen freien GPIO löten. Vorzugsweise eine Blaue. 😉 Daraufhin werde ich dir zeigen, wie man sich an den on_connect und on_disconnect-Callback des ble_client haengt, so dass man die LED an bzw. ausschaltet, sobald die Verbindung zum BMS steht/abbricht. (https://esphome.io/components/ble_client.html#on-connect)

                                          M 2 Replies Last reply Reply Quote 0
                                          • M
                                            Marco 3 @syssi last edited by Marco 3

                                            @syssi
                                            Moin, eigentlich schwebt mir GPIO0 vor, da er gleich neben GND liegt. Aber laut Legende soll dieser nicht benutz werden.

                                            Screenshot_20240108_160033_Chrome.jpg

                                            syssi 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            947
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            arduino esphome iobroker jk-bms
                                            11
                                            94
                                            11574
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo