BYD Car - Battery Level as Sensor

Prerequisites:

  • Unlocked BYD Infotainment (able to Sideload)
  • DIplus app Installed (迪加服务)
  • Car connected to WiFi, and reachable by HA

Add a Sensor:

  • platform: rest
    resource: http://BYD_CAR_IP:8988/api/getVal?name=%E7%94%B5%E9%87%8F%E7%99%BE%E5%88%86%E6%AF%94&status=true
    device_class: battery
    name: BYD_CAR_BATTERY
    value_template: “{{ value_json.val | round(2) }}”
    state_class: measurement
    unit_of_measurement: “%”

You need to replace BYD_CAR_IP with your CAR address

After restart, HA will now see the battery level as Sensor

For additional sensors, here the link to the API

1 Like

Sounds much, but can you please write details as to how to add the sensor to ha?
In configuration yaml? Somewhere else? From gui is possible?

Thanks

@Lestat75 are you in or outside China? I know there are some limitations on DIplus outside China… does this work?

Funciona no Brasil, BYD SEAL DLINK 3.0

I have a question. When will Home Assistant (HA) read the battery level? Only when it’s on Wi-Fi? Only when it’s turned on? I really want to have access to the battery level to do some automations…

Here is an example for a BYD Seal, I have removed some irrelevant sensors, some things are probably still not right, needs some work, but this should get you started.
Change the IP to match your car’s IP, just make sure you set a static IP for the car in your router.

Paste into your “sensor:” section in your configuration.yaml

sensor:
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=电源状态&status=true
    device_class: battery
    name: Power State
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=车速&status=true
    device_class: speed
    name: Speed
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "km/h"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=里程&status=true
    device_class: distance
    name: Mileage
    value_template: "{{ value_json.val | float / 10}}"
    state_class: measurement
    unit_of_measurement: "km"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=刹车深度&status=true
    device_class: enum
    name: Brake Pedal
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "%"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=加速踏板深度&status=true
    device_class: enum
    name: Accelerator Pedal
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "%"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=前电机转速&status=true
    device_class: speed
    name: Front Motor Speed
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "rpm"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=后电机转速&status=true
    device_class: speed
    name: Rear Motor Speed
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "rpm"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=发动机功率&status=true
    device_class: power
    name: Engine Power
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "kW"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=前电机扭矩&status=true
    device_class: torque
    name: Front Motor Torque
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "Nm"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=充电枪插枪状态&status=true
    name: Charger Insertion Status
    value_template: "{{ value_json.val | round(2) }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=百公里电耗&status=true
    device_class: energy
    name: 100 km of Energy Consumption
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "kWh/100 km"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=最高电池温度&status=true
    device_class: temperature
    name: Maximum Battery Temp
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "°C"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=平均电池温度&status=true
    device_class: temperature
    name: Average Battery Temp
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "°C"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=最低电池温度&status=true
    device_class: temperature
    name: Minimum Battery Temp
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "°C"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=最高电池电压&status=true
    device_class: voltage
    name: Maximum Battery Voltage
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "V"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=最低电池电压&status=true
    device_class: voltage
    name: Minimum Battery Voltage
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "V"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=上次雨刮时间&status=true
    device_class: timestamp
    name: Rained Last.
    value_template: "{{ as_timestamp(value_json.val) | timestamp_local() }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=天气&status=true
    name: Weather
    value_template: "{{ value_json.val | round(2) }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=主驾驶安全带状态&status=true
    name: Driver Seat Belt Status
    value_template: "{{ value_json.val | round(2) }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=远程锁车状态&status=true
    name: Lock Status
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=车内温度&status=true
    device_class: temperature
    name: Cabin Temp
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "°C"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=车外温度&status=true
    device_class: temperature
    name: Outside Temp
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "°C"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=主驾驶空调温度&status=true
    device_class: temperature
    name: Driver A/C Temp
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "°C"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=温度单位&status=true
    device_class: enum
    name: Temperature Units
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=电池容量&status=true
    device_class: energy_storage
    name: Battery Capacity
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "kWh"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=方向盘转角&status=true
    device_class: angle
    name: Steering Wheel Angle
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement_angle
    unit_of_measurement: "°"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=方向盘转速&status=true
    device_class: speed
    name: Steering Wheel Speed
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: "rpm"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=总电耗&status=true
    device_class: energy
    name: Total Energy Consumption
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "kWh"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=电量百分比&status=true
    device_class: battery
    name: Battery State of Charge
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "%"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=左后车窗打开百分比&status=true
    device_class: percentage
    name: Window Rear Left
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "%"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=右后车窗打开百分比&status=true
    device_class: percentage
    name: Window Rear Right
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "%"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=整车运行模式&status=true
    name: Drive Mode
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=月&status=true
    device_class: enum
    name: Month
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=日&status=true
    device_class: enum
    name: Day
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=时&status=true
    device_class: enum
    name: Hour
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=分&status=true
    device_class: enum
    name: Minute
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=副驾安全带警告&status=true
    device_class: enum
    name: Driver's Seat Belt Warning
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=二排左安全带&status=true
    device_class: enum
    name: 2nd Row Left Seat Belt
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=二排右安全带&status=true
    device_class: enum
    name: 2nd Row Right Seat Belt
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=二排中安全带&status=true
    device_class: enum
    name: 2nd row Seat Belt Warning
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=空调状态&status=true
    device_class: enum
    name: A/C Powered
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=风量档位&status=true
    device_class: enum
    name: Fan Speed
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=空调循环方式&status=true
    name: A/C Air Intake
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=空调出风模式&status=true
    name: A/C Air Mode
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=主驾车门&status=true
    name: Driver Door.
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=副驾车门&status=true
    device_class: enum
    name: Passenger door
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=左后车门&status=true
    device_class: enum
    name:  Front Left Door.
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=右后车门&status=true
    device_class: enum
    name: Rear Right Door.
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=引擎盖&status=true
    name: Frunk
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=后备箱门&status=true
    name: Boot
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=油箱盖&status=true
    name: Charging Hatch
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=自动驻车&status=true
    name: Automated Parking
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=ACC巡航状态&status=true
    name: ACC Status
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=左后接近告警&status=true
    name: Close to the alarm.
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=右后接近告警&status=true
    name: Right close to the alarm.
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=车道保持状态&status=true
    name: Driveway remains in place
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=左后车门锁&status=true
    name: Door Lock Rear Left
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=副驾车门锁&status=true
    name: Door Lock Passenger
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=右后车门锁&status=true
    name: Door Lock Rear Right
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=后备箱门锁&status=true
    name: Door Lock Boot
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=左后儿童锁&status=true
    name: Child Lock Rear Left
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=右后儿童锁&status=true
    name: Child Lock Rear Right
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=小灯&status=true
    name: Small Lights
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=近光灯&status=true
    name: Low-Beams
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=远光灯&status=true
    name: High-Beams
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=前雾灯&status=true
    name: Parkers
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=后雾灯&status=true
    name: Rear Fog Lights
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=脚照灯&status=true
    name: Footlights
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=日行灯&status=true
    name: Daylight
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=双闪&status=true
    name: Double Flash
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=全景状态&status=true
    name: Panorama state
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=配置UI版本&status=true
    name: Configuring the UI version
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=哨兵状态&status=true
    name: Sentry status
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=熄火录像配置开关&status=true
    name: Turnout video configuration switch
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=熄火哨兵报警&status=true
    name: Fireout sentry to the police
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=WIFI状态&status=true
    name: State of WIFI
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=蓝牙状态&status=true
    name: Bluetooth status
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=蓝牙信号强度&status=true
    device_class: signal_strength
    name: Bluetooth signal strength
    value_template: "{{ value_json.val }}"
    state_class: measurement
    unit_of_measurement: "dBm"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=无线ADB开关&status=true
    name: Wireless ADB switch
    value_template: "{{ value_json.val }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=AI识别人可信度&status=true
    device_class: enum
    name: AI recognizes human credibility
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=AI识别车可信度&status=true
    device_class: enum
    name: AI recognizes the credibility of the car
    value_template: "{{ value_json.val | round(2) }}"
    state_class: measurement
    unit_of_measurement: ""
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=上次哨兵触发时间&status=true
    device_class: timestamp
    name: Last Sentry trigger time
    value_template: "{{ as_timestamp(value_json.val) | timestamp_local() }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=上次哨兵触发画面&status=true
    name: Last Sentry trigger screen
    value_template: "{{ value_json.val | round(2) }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=上次录像文件开始时间&status=true
    device_class: timestamp
    name: Last Video File Start Time
    value_template: "{{ as_timestamp(value_json.val) | timestamp_local() }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=上次录像文件结束时间&status=true
    device_class: timestamp
    name: Last Video File End Time
    value_template: "{{ as_timestamp(value_json.val) | timestamp_local() }}"
  - platform: rest
    resource: http://192.168.1.52:8988/api/getVal?name=上次录像路径&status=true
    name: The Last Video Path.
    value_template: "{{ value_json.val | round(2) }}"

State strings are in chinese, i think these can be translated by converting known states to set english names with dictionary template, something like this perhaps:

{% set wetter = {'sunny': 'Sonnig',
                  'windy': 'Windig',
                  'windy-variant': 'Stürmisch',
                  'clear-night': 'Klare Nacht',
                  'partlycloudy': 'Tw. bewölkt',
                  'cloudy': 'Bewölkt',
                  'overcast': 'Bedeckt',
                  'fog': 'Neblig',
                  'hail': 'Hagelig',
                  'lightning': 'Gewittrig',
                  'lightning-rainy': '?',
                  'pouring': 'Starkregen',
                  'rainy': 'Regnerisch',
                  'snowy-rainy': 'Schneeregen',
                  'snowy': 'Schnee'} %}
         {% set bedingungen = trigger.to_state.state %}