19.從零開始裝 Home Assistant 使用esphome 連接極空保護板

需要材料

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可能沒辦法取得,建議用安卓手機到商店下載,

BLE Scanner,附近可能會有很多藍牙裝置,記得先用極空app連線

改個好認的名稱。



掃描之後會看到電池藍牙的MAC地址,類似 C8:47:8C:E1:E2:1C

請把這組地址記錄下來。



這裡需要進去修改一下,點選jk-bms3的EDIT進入編輯


目前產生的資料之後需要填入下面的這個範例裡面,所以可以先開個記事本複製

下來。


目前內部只有一些基礎資料,所以需要到esphome-jk-bms這個專案中

https://github.com/syssi/esphome-jk-bms/blob/main/esp32-ble-example.yaml

我們參考這個ble連接方式的範例去修改。



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


接著按下INSTALL

選擇Manual download



之後就會開始編譯韌體,需要等待一下




選Factory format



會產生一個.Bin的檔案


瀏覽器可能會阻擋,記得要保留才會儲存


按下Close


按一下左上角X,關閉編輯 


按一下三個小點點,選install


選Plug into this computer


選2.Open ESPHome Web


選Connect


電腦USB插線連接ESP32板子,如果無法出現,可能是驅動沒有安裝,

需要先安裝


點INSTALL


選擇剛剛下載回來的Bin韌體,點選INSTALL


之後就會開始安裝了,等跑到100%就是完成寫入了。

如果設定欓都是正常,之後就會自動連接wifi,並且取得保護板的資訊,

可以點選一下LOGS,就會看到取得的資訊。




重新回到HA

設定-裝置與服務

只要有連接網路,就會看到多一個ESPHome的裝置

新增就會看到保護板狀態



設定正常,資訊就跟極空app顯示的一樣




顯示頁面我自己設計成這個樣子



量表式面板
  • 即時功率 sensor.jk_bms3_power
  • 即時電流 sensor.jk_bms3_current
  • 總電壓 sensor.jk_bms3_total_voltage
  • 剩餘容量 sensor.jk_bms3_capacity_remaining
面板卡片格式

type: gauge
entity: sensor.jk_bms3_power
name: 即時功率
max: 3720
needle: true
severity:
  green: 0
  yellow: 0
  red: 0
grid_options:
  columns: 6
  rows: auto
min: -3720


開關共有四個,這個樣式使用的是Bubble按鈕,之前有介紹過怎樣安裝,

如果不想這樣設置,也可以使用預設的按鈕即可
  • 藍牙開關 
  • 充電
  • 放電
  • 均衡

上面這些就是基礎顯示,這裡比較不同的是圖表

需要到HACS安裝apexcharts-card


主要是簡單的顯示一下充電跟放電的紀錄,發電量跟放電量都是簡單的累加,

參考用,並不是很精確。



type: custom:apexcharts-card
header:
  show: true
  title: 充放電功率監控
  show_states: true
  colorize_states: true
graph_span: 24h
span:
  start: day
update_interval: 1m
apex_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





15.從零開始裝 Home Assistant 接入Hitachi冷氣

16.從零開始裝 Home Assistant 接入onvif協議攝影機

17.從零開始裝 Home Assistant 熱水器自動化

18.從零開始裝 Home Assistant MAC背景自啟動

19.從零開始裝 Home Assistant 使用esphome 連接極空保護板


沒有留言:

張貼留言