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@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JK-BMS über RS485 mit ESPHome auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                          • syssi
                            syssi @Marco 3 last edited by

                            Gut erkannt. Bitte umschiffen. Wenn du GPIO0 versehentlich (permant) auf Masse ziehst, dann bootet der ESP in Zukunft nur noch in den "Schreibe jetzt bitte neue Software drauf"-Modus anstatt die Anwendung zu starten.

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

                              @syssi
                              GPIO27 wird es werden, passt auch super, GND gleich da und rechts oben, als BT Led gut geeignet....

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

                                Bitte den (bisher nicht erwähnten) Widerstand vergessen: https://techexplorations.com/guides/esp32/begin/digitalout/

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

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

                                  @marco-3 Für WiFi/MQTT kannst du diesen Schnippsel nutzen:
                                  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)

                                  Widerstand geht klar. Kann ich alles erst heut aben zusammen basteln... 🙂 Dann wird es interessant wie ich die Zustände auf GPIO27 Ausgebe.

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

                                    Diesen Abschnitt:

                                    ble_client:
                                      - mac_address: ${mac_address}
                                        id: client0
                                    

                                    bitte ersetzen durch diesen Abschnitt:

                                    ble_client:
                                      - mac_address: ${mac_address}
                                        id: client0
                                        on_connect:
                                          then:
                                            - output.turn_on: bluetoothled
                                        on_disconnect:
                                          then:
                                            - output.turn_off: bluetoothled
                                    
                                    output:
                                      - platform: gpio
                                        pin: GPIO27
                                        id: bluetoothled
                                    
                                    syssi 1 Reply Last reply Reply Quote 0
                                    • syssi
                                      syssi @syssi last edited by

                                      Ggf. sollten wir die Bluetooth LED lieber an den Update-Event eines Sensors (z.B. total_voltage) hängen. Ich habe die Sorge, dass warum auch immer die BLE-Verbindung nicht zusammenbricht und trotzdem keine Daten vom BMS kommen. Über ein Blink per Sensor-Update hättest du einen besseren Herzschlag. Alternativ lötest du eine dritte LED an Board. 😉

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

                                        @syssi
                                        Klar warum nicht. Herzschlag klingt sogar besser...

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

                                          So sieht das Schnippsel aus, wenn man am ersten Sensor (min_cell_voltage) lauscht und pro Update einmal die LED blinken lässt:

                                          output:
                                            - platform: gpio
                                              pin: GPIO27
                                              id: bluetoothled
                                          
                                          sensor:
                                            - platform: jk_bms_ble
                                              jk_bms_ble_id: bms0
                                              min_cell_voltage:
                                                name: "${name} min cell voltage"
                                                on_value:
                                                  then:
                                                    - output.turn_on: bluetoothled
                                                    - delay: 500ms
                                                    - output.turn_off: bluetoothled
                                              max_cell_voltage:
                                                name: "${name} max cell voltage"
                                              min_voltage_cell:
                                                name: "${name} min voltage cell"
                                              max_voltage_cell:
                                                name: "${name} max voltage cell"
                                              # ...und die restlichen Sensoren...
                                          
                                          M 1 Reply Last reply Reply Quote 0
                                          • M
                                            Marco 3 @syssi last edited by Marco 3

                                            @syssi
                                            Ich bin Mega begeistert!!! Danke Danke Danke...

                                            Bin aber einen ein klein wenig anderen Weg gegangen. Als Status LED, also GPIO02 war es net so dolle, ist immer an. Aber sie ist blau 🙂 also kann sie als BT Kontroll LED verwendet werden und dein Heartbeat Vorschlag ist einfach genial.

                                            output:
                                             - platform: gpio
                                               pin: GPIO02
                                               id: bluetoothled
                                            
                                            sensor:
                                             - platform: jk_bms_ble
                                               jk_bms_ble_id: bms0
                                            .....
                                               total_voltage:
                                                 name: "${name} total voltage"
                                                 on_value:
                                                   then:
                                                     - output.turn_on: bluetoothled
                                                     - delay: 500ms
                                                     - output.turn_off: bluetoothled
                                            .....
                                            
                                            
                                            

                                            Die vorhandene blaue Status LED sagt mir nun ob Daten vom BT kommen. Ich habe auch die Gegenprüfung gemacht und den ESP abgesteckt, mit Handy auf das JK drauf verbunden..... ESP angesteckt und es geht keine blaue Status LED an! Handyverbindung zum JK abgebaut.... der ESP verbindet sich automatisch auf das JK BMS und die Blaue LED blinkt.
                                            SUPER !!!

                                            Ich habe aktuell das WEB interface aktiviert und den Update Intervall auf 1s gestellt
                                            logging: steht auf INFO

                                            
                                            00:00:11	[I]	[jk_bms_ble:467]	
                                            Cell info frame (version 2, 300 bytes) received
                                            00:00:12	[W]	[component:214]	
                                            Component esp32_ble took a long time for an operation (0.24 s).
                                            00:00:12	[W]	[component:215]	
                                            Components should block for at most 20-30ms.
                                            00:00:13	[I]	[jk_bms_ble:467]	
                                            
                                            

                                            Die Message kommt aber auch, wenn ich auf 5s den Abrufintervall stelle.

                                            Anhand der gesehenen BMS uptime, werden aller 2s neue Sekunden gezählt, dies werde ich im io broker anzeigen lassen und weiß somit, daß es lebt.

                                            Ich bin voll begeistert!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            720
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            arduino esphome iobroker jk-bms
                                            11
                                            94
                                            12272
                                            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