需要材料
esp32 x1
我這邊使用的是一片舊的ESP-WROOM-32開發板,
如果需要購買,建議買type-c頭的新版本。
主要是因為極空保護板只有藍牙,如果要有wifi功能就需要額外購買
,透過esp32的藍牙連線極空保護板,將數據推送到wifi家用網路,
最大優點是不用接線到保護板上,只要esp32有插電就可以使用。
進入HA
設定-應用程式-ESPHome Device Builder
按下安裝,安裝完畢之後,如果沒有啟動,點選一下啟動。
開啟 於啟動時開啟
開啟 側邊欄顯示
這時候這邊欄位會多出一個 ESPHome Builder的選項,如果沒有出現
可以重新載入網頁試試
正常開啟是沒有東西的,因為我已經連接了兩個電池組,所以會有兩個裝置在。
按下右下角的+ NEW DEVICE建立一個新的裝置。
接著按一下CONTINUE
這裡選New Device Setup 需要設定一個新的裝置
這裡取名稱,如果有多個電池要連接,就可以編號命名,建議使用英文名稱即可
,不見得也要跟我這邊的名稱一樣,自己取也可以
,不見得也要跟我這邊的名稱一樣,自己取也可以
選擇esp32型號,因為我這邊的板子沒有在上面的型號中,所以先選
ESP32
完成之後就會自動產生,並且建立相關的key,不過目前還沒設定好,
所以先選Skip
jk-bms3已經建立好了,不過還沒上線,所以顯示OFFLINE,
因為還沒把資料寫入esp32中。
BLE連線之前需要先取得保護板的BLE連線MAC地址,
如果是iphone可能沒辦法取得,建議用安卓手機到商店下載,
如果是iphone可能沒辦法取得,建議用安卓手機到商店下載,
BLE Scanner,附近可能會有很多藍牙裝置,記得先用極空app連線
改個好認的名稱。
掃描之後會看到電池藍牙的MAC地址,類似 C8:47:8C:E1:E2:1C
請把這組地址記錄下來。
請把這組地址記錄下來。
這裡需要進去修改一下,點選jk-bms3的EDIT進入編輯
目前產生的資料之後需要填入下面的這個範例裡面,所以可以先開個記事本複製
下來。
substitutions: name: jk-bms device_description: "Monitor and control a JK-BMS via bluetooth" external_components_source: github://syssi/esphome-jk-bms@main mac_address: C8:47:8C:E1:E2:1C # Please use "JK02_24S" if you own a old JK-BMS < hardware version 11.0 (hardware version >= 6.0 and < 11.0) # Please use "JK02_32S" if you own a new JK-BMS >= hardware version 11.0 (f.e. JK-B2A8S20P hw 11.XW, sw 11.26) # Please use "JK04" if you have some old JK-BMS <= hardware version 3.0 (f.e. JK-B2A16S hw 3.0, sw. 3.3.0) protocol_version: JK02_32S
esphome: name: jk-bms3 friendly_name: jk-bms3 comment: ${device_description} project: name: "syssi.esphome-jk-bms" version: 2.4.0
esp32: board: wemos_d1_mini32 framework: type: esp-idf
external_components: - source: ${external_components_source} refresh: 0s
wifi: ssid: "2.4g 自己的wifi" password: "自己的密碼"
ota: platform: esphome password: "f8c2103b912e6b4b57c7e643786376ef" on_begin: then: - switch.turn_off: ble_client_switch0 - logger.log: "BLE connection suspended for OTA update"
logger: level: DEBUG logs: esp32_ble_tracker: INFO esp32_ble_client: INFO
# If you don't use Home Assistant please remove this `api` section and uncomment the `mqtt` component!api: encryption: key: "E5uADYE1FAxitdHQ5mVfSWBbe8IxYKqWVXf0LTuIFgs="
# mqtt:# broker: !secret mqtt_host# username: !secret mqtt_username# password: !secret mqtt_password# id: mqtt_client
esp32_ble_tracker: scan_parameters: active: false
ble_client: - mac_address: ${mac_address} id: client0
jk_bms_ble: - ble_client_id: client0 protocol_version: ${protocol_version} throttle: 5s id: bms0
binary_sensor: - platform: jk_bms_ble balancing: name: "balancing" charging: name: "charging" discharging: name: "discharging" heating: name: "heating" online_status: name: "online status"
button: - platform: jk_bms_ble retrieve_settings: name: "retrieve settings" retrieve_device_info: name: "retrieve device info"
number: - platform: jk_bms_ble jk_bms_ble_id: bms0 balance_trigger_voltage: name: "balance trigger voltage" cell_count: name: "cell count" total_battery_capacity: name: "total battery capacity" cell_voltage_overvoltage_protection: name: "cell voltage overvoltage protection" cell_voltage_overvoltage_recovery: name: "cell voltage overvoltage recovery" cell_voltage_undervoltage_protection: name: "cell voltage undervoltage protection" cell_voltage_undervoltage_recovery: name: "cell voltage undervoltage recovery" balance_starting_voltage: name: "balance starting voltage" voltage_calibration: name: "voltage calibration" current_calibration: name: "current calibration" power_off_voltage: name: "power off voltage" max_balance_current: name: "max balance current" max_charge_current: name: "max charge current" max_discharge_current: name: "max discharge current" charge_overcurrent_protection_delay: name: "charge overcurrent protection delay" charge_overcurrent_protection_recovery_time: name: "charge overcurrent protection recovery time" discharge_overcurrent_protection_delay: name: "discharge overcurrent protection delay" discharge_overcurrent_protection_recovery_time: name: "discharge overcurrent protection recovery time" short_circuit_protection_delay: name: "short circuit protection delay" short_circuit_protection_recovery_time: name: "short circuit protection recovery time" charge_overtemperature_protection: name: "charge overtemperature protection" charge_overtemperature_protection_recovery: name: "charge overtemperature protection recovery" discharge_overtemperature_protection: name: "discharge overtemperature protection" discharge_overtemperature_protection_recovery: name: "discharge overtemperature protection recovery" charge_undertemperature_protection: name: "charge undertemperature protection" charge_undertemperature_protection_recovery: name: "charge undertemperature protection recovery" power_tube_overtemperature_protection: name: "power tube overtemperature protection" power_tube_overtemperature_protection_recovery: name: "power tube overtemperature protection recovery"
sensor: - platform: jk_bms_ble jk_bms_ble_id: bms0 min_cell_voltage: name: "min cell voltage" max_cell_voltage: name: "max cell voltage" min_voltage_cell: name: "min voltage cell" max_voltage_cell: name: "max voltage cell" delta_cell_voltage: name: "delta cell voltage" average_cell_voltage: name: "average cell voltage" cell_voltage_1: name: "cell voltage 1" cell_voltage_2: name: "cell voltage 2" cell_voltage_3: name: "cell voltage 3" cell_voltage_4: name: "cell voltage 4" cell_voltage_5: name: "cell voltage 5" cell_voltage_6: name: "cell voltage 6" cell_voltage_7: name: "cell voltage 7" cell_voltage_8: name: "cell voltage 8" cell_voltage_9: name: "cell voltage 9" cell_voltage_10: name: "cell voltage 10" cell_voltage_11: name: "cell voltage 11" cell_voltage_12: name: "cell voltage 12" cell_voltage_13: name: "cell voltage 13" cell_voltage_14: name: "cell voltage 14" cell_voltage_15: name: "cell voltage 15" cell_voltage_16: name: "cell voltage 16" cell_voltage_17: name: "cell voltage 17" cell_voltage_18: name: "cell voltage 18" cell_voltage_19: name: "cell voltage 19" cell_voltage_20: name: "cell voltage 20" cell_voltage_21: name: "cell voltage 21" cell_voltage_22: name: "cell voltage 22" cell_voltage_23: name: "cell voltage 23" cell_voltage_24: name: "cell voltage 24" cell_resistance_1: name: "cell resistance 1" cell_resistance_2: name: "cell resistance 2" cell_resistance_3: name: "cell resistance 3" cell_resistance_4: name: "cell resistance 4" cell_resistance_5: name: "cell resistance 5" cell_resistance_6: name: "cell resistance 6" cell_resistance_7: name: "cell resistance 7" cell_resistance_8: name: "cell resistance 8" cell_resistance_9: name: "cell resistance 9" cell_resistance_10: name: "cell resistance 10" cell_resistance_11: name: "cell resistance 11" cell_resistance_12: name: "cell resistance 12" cell_resistance_13: name: "cell resistance 13" cell_resistance_14: name: "cell resistance 14" cell_resistance_15: name: "cell resistance 15" cell_resistance_16: name: "cell resistance 16" cell_resistance_17: name: "cell resistance 17" cell_resistance_18: name: "cell resistance 18" cell_resistance_19: name: "cell resistance 19" cell_resistance_20: name: "cell resistance 20" cell_resistance_21: name: "cell resistance 21" cell_resistance_22: name: "cell resistance 22" cell_resistance_23: name: "cell resistance 23" cell_resistance_24: name: "cell resistance 24" total_voltage: name: "total voltage" current: name: "current" heating_current: name: "heating current" power: name: "power" charging_power: name: "charging power" discharging_power: name: "discharging power" temperature_sensor_1: name: "temperature sensor 1" temperature_sensor_2: name: "temperature sensor 2" # temperature_sensor_3: # name: "temperature sensor 3" # temperature_sensor_4: # name: "temperature sensor 4" power_tube_temperature: name: "power tube temperature" balancing: name: "balancing" state_of_charge: name: "state of charge" capacity_remaining: name: "capacity remaining" total_battery_capacity_setting: name: "total battery capacity setting" charging_cycles: name: "charging cycles" total_charging_cycle_capacity: name: "total charging cycle capacity" total_runtime: name: "total runtime" balancing_current: name: "balancing current" errors_bitmask: name: "errors bitmask"
switch: - platform: jk_bms_ble charging: name: "charging" discharging: name: "discharging" balancer: name: "balancer"
- platform: ble_client ble_client_id: client0 name: "enable bluetooth connection" id: ble_client_switch0
text_sensor: - platform: jk_bms_ble errors: name: "errors" total_runtime_formatted: name: "total runtime formatted" software_version: name: "software version" hardware_version:
name: "hardware version"需要修改的地方
mac_address: 填入保護板的藍牙地址
protocol_version: JK02_32S (新版本使用32S,舊版本24S)
esphome:
name: jk-bms3
friendly_name: jk-bms3 (這裡設定為自己建立的名稱)
將產生的api key填入
api:
encryption:
key: "E5uADYE1FAxitdHQ5mVfSWBbe8IxYKqWVXf0LTuIFgs="
ota:
- platform: esphome
password: "f8c2103b912e6b4b57c7e643786376ef"
wifi:
ssid: "自己要連接的2.4g網路"
password: "網路的密碼"
資訊都填寫完成後,點選右上角的SAVE
按下Close
按一下左上角X,關閉編輯
按一下三個小點點,選install
選Plug into this computer
選2.Open ESPHome Web
選Connect
電腦USB插線連接ESP32板子,如果無法出現,可能是驅動沒有安裝,
需要先安裝
點INSTALL
選擇剛剛下載回來的Bin韌體,點選INSTALL
之後就會開始安裝了,等跑到100%就是完成寫入了。
如果設定欓都是正常,之後就會自動連接wifi,並且取得保護板的資訊,
可以點選一下LOGS,就會看到取得的資訊。
可以點選一下LOGS,就會看到取得的資訊。
重新回到HA
設定-裝置與服務
只要有連接網路,就會看到多一個ESPHome的裝置
新增就會看到保護板狀態
設定正常,資訊就跟極空app顯示的一樣
顯示頁面我自己設計成這個樣子
量表式面板
- 即時功率 sensor.jk_bms3_power
- 即時電流 sensor.jk_bms3_current
- 總電壓 sensor.jk_bms3_total_voltage
- 剩餘容量 sensor.jk_bms3_capacity_remaining
面板卡片格式
type: gaugeentity: sensor.jk_bms3_powername: 即時功率max: 3720needle: trueseverity: green: 0 yellow: 0 red: 0grid_options: columns: 6 rows: automin: -3720開關共有四個,這個樣式使用的是Bubble按鈕,之前有介紹過怎樣安裝,
如果不想這樣設置,也可以使用預設的按鈕即可
- 藍牙開關
- 充電
- 放電
- 均衡
上面這些就是基礎顯示,這裡比較不同的是圖表
需要到HACS安裝apexcharts-card
主要是簡單的顯示一下充電跟放電的紀錄,發電量跟放電量都是簡單的累加,
參考用,並不是很精確。
type: custom:apexcharts-cardheader: show: true title: 充放電功率監控 show_states: true colorize_states: truegraph_span: 24hspan: start: dayupdate_interval: 1mapex_config: chart: height: 250px animations: enabled: false zoom: enabled: true type: x autoScaleYaxis: true toolbar: show: true tools: zoom: true zoomin: true zoomout: true pan: true reset: true xaxis: labels: show: true format: HH:mm yaxis: - show: true decimalsInFloat: 0 title: text: 功率series: - entity: sensor.jk_bms3_charging_power name: 今日發電 unit: " kW" transform: return x / 1000; float_precision: 0 group_by: duration: 24h func: sum show: in_chart: false in_header: true legend_value: false color: "#4caf50" - entity: sensor.jk_bms3_discharging_power name: 今日放電 unit: " kW" transform: return x / 1000; float_precision: 0 group_by: duration: 24h func: sum show: in_chart: false in_header: true legend_value: false color: "#f44336" - entity: sensor.jk_bms3_charging_power name: 充電 type: column color: "#4caf50" group_by: func: avg duration: 10m - entity: sensor.jk_bms3_discharging_power name: 放電 type: column color: "#f44336" group_by: func: avg duration: 10m

































沒有留言:
張貼留言