ESP32 - JK-BMS - MQTT

Die Verbindung zum Smart Home und Internet der Dinge (IoT)

Moderator: Ulrich

Antworten
Benutzeravatar
sralus
Beiträge: 47
Registriert: Mi 21. Sep 2022, 00:04
Hat sich bedankt: 6 Mal

ESP32 - JK-BMS - MQTT

Beitrag von sralus »

Hallo

Ich habe mir ein ESP32 gekauft dieses verbindet sich per Bluetooth mit meinem JK-BMS.
Liest dort die Daten aus und sendet diese an meinem RaspberryPI.
die Settings vom ESP32 habe ich so gesetzt

Code: Alles auswählen

//OTA Setting
#define OTA_Hostname "JKBMS"  // -> hier ändern wenn OTA Name anders sein soll
#define OTA_Passwort ""     // -> hier ändern wenn OTA Passwort anders sein soll

// MQTT Setting
const char* mqtt_server = "192.168.0.69";     // -> hier die IP des MQTT Server eingeben  
const int mqtt_port = 1883;                     // -> hier den Port einstellen für den MQTT Server 
const char* mqtt_username = "";            // -> hier MQTT Benutzername eintragen
const char* mqtt_passwort = "";  // -> hier MQTT Passwort eingeben       
String mqttname = "BMS_16P";          // -> hier wird der MQTT Gerätename festgelegt
const int mqttpublishtime_offset = 10000;        //-> hier einstellen wie oft Danten gesnedet werden sollen 1000 = jede Sekunde
Die Ausgabe von mosquitto_sub -h localhost -v -t "#" auf meinem Raspberry zeigt dann:

Code: Alles auswählen

BMS_Watchdog/status offline
BMS_16P/status offline
BMS_16P/Data/Zelle_01 3.294
BMS_16P/Data/Zelle_02 3.297
BMS_16P/Data/Zelle_03 3.297
BMS_16P/Data/Zelle_04 3.299
BMS_16P/Data/Zelle_05 3.297
BMS_16P/Data/Zelle_06 3.295
BMS_16P/Data/Zelle_07 3.295
BMS_16P/Data/Zelle_08 3.298
BMS_16P/Data/Zelle_09 3.294
BMS_16P/Data/Zelle_10 3.297
BMS_16P/Data/Zelle_11 3.295
BMS_16P/Data/Zelle_12 3.297
BMS_16P/Data/Zelle_13 3.298
BMS_16P/Data/Zelle_14 3.299
BMS_16P/Data/Zelle_15 3.297
BMS_16P/Data/Zelle_16 3.294
BMS_16P/Data/Battery_Voltage 52.747
BMS_16P/Data/Delta_Cell_Voltage 0.008
BMS_16P/Data/MOS_Temp 21.600
BMS_16P/Data/Battery_T1 22.100
BMS_16P/Data/Battery_T2 22.200
BMS_16P/Data/Battery_Power 692.246
BMS_16P/Data/Charge_Current -13.317
BMS_16P/Data/Percent_Remain 83
BMS_16P/Data/Cycle_Count 30
BMS_16P/Data/Balance_Current 0.000
BMS_16P/Uptime/Sekunde 46
BMS_16P/Uptime/Minuten 50
BMS_16P/Uptime/Stunden 17
BMS_16P/Uptime/Tage 152
BMS_16P/Data/Charge on
BMS_16P/Data/Discharge on
BMS_16P/BLEconnection connected
BMS_16P/status online
Soweit so gut ..

Jetzt möchte ich diese daten gerne in InfluxDB schreiben...

Ich nutze Solaranzeige multiregler Version,,,

Was muss ich machen damit ich die Daten vom ESP32 in Influx schreiben kann damit ich diese dann in Grafana nutzen kann und für die automatisierung von Solaranzeige den SOC Wert aus den Daten des ESP32/JK-BMS nutzen kann...

Danke vorab
Sralus

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

Re: ESP32 - JK-BMS - MQTT

Beitrag von Ulrich »

sralus hat geschrieben:
Do 20. Apr 2023, 02:50
Hallo

Ich habe mir ein ESP32 gekauft dieses verbindet sich per Bluetooth mit meinem JK-BMS.
Liest dort die Daten aus und sendet diese an meinem RaspberryPI.
die Settings vom ESP32 habe ich so gesetzt
Das einfachste ist es, sie mit der API in die Datenbank zu schreiben.
download/API.pdf
Dazu sind aber ein paar Zeilen Code nötig. Das muss nicht PHP sein, sondern kann in jeder Programmiersprache gemacht werden.
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

Benutzeravatar
sralus
Beiträge: 47
Registriert: Mi 21. Sep 2022, 00:04
Hat sich bedankt: 6 Mal

Re: ESP32 - JK-BMS - MQTT

Beitrag von sralus »

Hallo Ulrich
habe das api.test.xml so angelegt

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" ?>
<solaranzeige>
    <version>1.0</version>
    <in_out>in</in_out>
    <database name="jkbms">
      <measurement name="Data">
        <fieldname name="*"></fieldname>
      </measurement>
    </database>
    <database name="jkbms">
        <measurement name="Uptime">
        <fieldname name="*"></fieldname>
      </measurement>
    </database>
</solaranzeige>
bei ./send.sh api_test.xml
kommt:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<solaranzeige><version>1.0</version><in_out>in</in_out><error_code>1</error_code><error>Datenbank Eintrag nicht erfolgt. Bitte LOG Datei prüfen.</error></s
im Log steht:

Code: Alles auswählen

20.04. 15:05:28 ENDE ---------------------------------------------------------
20.04. 15:07:54 |--> - - - - - - - - -    Start API Steuerung   - - - - - - - -
20.04. 15:07:58 ERRO Query:  Data  *=
20.04. 15:07:58 ERRO In die Datenbank: [ jkbms ] konnte nicht geschrieben werden. Ist sie angelegt?
20.04. 15:07:58 INFO <?xml version="1.0" encoding="UTF-8"?>
<solaranzeige>
  <version>1.0</version>
  <in_out>in</in_out>
  <error_code>1</error_code>
  <error>Datenbank Eintrag nicht erfolgt. Bitte LOG Datei prüfen.</error>
</solaranzeige>

20.04. 15:07:58 ENDE ---------------------------------------------------------
influx db:

Code: Alles auswählen

influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> show databases
name: databases
name
----
_internal
solaranzeige
steuerung
telegraf
skymax
solaranzeige2
ivt
boiler
jkbms
> use jkbms
Using database jkbms
> show measurements
>
mosquitto_sub -h localhost -v -t "#"

Code: Alles auswählen

tele/Boiler/LWT Offline
tele/boiler/LWT Online
tasmota/discovery/48551946F0B0/config {"ip":"192.168.0.121","dn":"boiler","fn":["Tasmota",null,null,null,null,null,null,null],"hn":"boiler","mac":"48551946F0B0","md":"Sonoff Basic","ty":0,"if":0,"ofln":"Offline","onln":"Online","state":["OFF","ON","TOGGLE","HOLD"],"sw":"12.4.0","t":"boiler","ft":"%prefix%/%topic%/","tp":["cmnd","stat","tele"],"rl":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"swc":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],"swn":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"btn":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"so":{"4":0,"11":0,"13":0,"17":0,"20":0,"30":0,"68":0,"73":0,"82":0,"114":0,"117":0},"lk":0,"lt_st":0,"sho":[0,0,0,0],"sht":[[0,0,0],[0,0,0],[0,0,0],[0,0,0]],"ver":1}
tasmota/discovery/48551946F0B0/sensors {"sn":{"Time":"2023-04-20T12:28:45"},"ver":1}
wasser/LWT Offline
boiler/LWT Offline
sonoff/LWT Offline
BMS_Watchdog/status offline
BMS_16P/status offline
jkbms/status offline
jkbms/Data/Zelle_01 3.351
jkbms/Data/Zelle_02 3.349
jkbms/Data/Zelle_03 3.349
jkbms/Data/Zelle_04 3.348
jkbms/Data/Zelle_05 3.348
jkbms/Data/Zelle_06 3.351
jkbms/Data/Zelle_07 3.351
jkbms/Data/Zelle_08 3.349
jkbms/Data/Zelle_09 3.349
jkbms/Data/Zelle_10 3.349
jkbms/Data/Zelle_11 3.351
jkbms/Data/Zelle_12 3.347
jkbms/Data/Zelle_13 3.349
jkbms/Data/Zelle_14 3.346
jkbms/Data/Zelle_15 3.349
jkbms/Data/Zelle_16 3.349
jkbms/Data/Battery_Voltage 53.584
jkbms/Data/Delta_Cell_Voltage 0.004
jkbms/Data/MOS_Temp 22.300
jkbms/Data/Battery_T1 24.200
jkbms/Data/Battery_T2 24.700
jkbms/Data/Battery_Power 444.690
jkbms/Data/Charge_Current 8.299
jkbms/Data/Percent_Remain 81
jkbms/Data/Cycle_Count 30
jkbms/Data/Balance_Current 0.000
jkbms/Uptime/Sekunde 28
jkbms/Uptime/Minuten 55
jkbms/Uptime/Stunden 8
jkbms/Uptime/Tage 153
jkbms/Data/Charge on
jkbms/Data/Discharge on
jkbms/BLEconnection connected
jkbms/status online
Wie muss die xml datei denn nun aussehen damit ich die werte in Influx schreiben kann.
zudem wenn alles gehen sollte wie kann ich dann in der automatisierung den soc wert"- denke mal hier
jkbms/Data/Percent_Remain 81" schalten ? habe dann zwar eine Datenbank aber was nimm ich als Regler und ID ?

Ich komme leider nicht wirklich weiter....
MFG
Sralus

Antworten

Zurück zu „MQTT und der Rest der Welt“