slipx06 / Sunsynk-Home-Assistant-Dash

Home Assistant Dashboard to display Inverter information. ESPHome configuration to collect inverter sensor data via modbus
66 stars 18 forks source link

Control board & Comms board firmware #14

Closed ameran closed 2 months ago

ameran commented 2 months ago

Not so much an issue, but can you look into the code for reading the firmware versions for the Controller board and the communications board's firmware? Address 013 & 014

I've tried the below, but it doesn't work:

slipx06 commented 2 months ago

@ameran Try this and share the output

platform: modbus_controller # 013 Control board firmware
modbus_controller_id: deye
name: "Controller Board Firmware"
id: deye_controlboard_firmware
icon: "mdi:text"
register_type: holding
raw_encode: HEXBYTES
address: 013
internal: false

platform: modbus_controller # 014 Comms board firmware
modbus_controller_id: deye
name: "Communications Board Firmware"
id: deye_communicationboard_firmware
icon: "mdi:text"
register_type: holding
raw_encode: HEXBYTES
address: 014
internal: false
ameran commented 2 months ago

Works, but it looks like there's some data missing. For the comms board, it looks like it's reading the first 4 digits only. for the controller board it looks like it's reading the last 4. IMG_8627

slipx06 commented 2 months ago

I'm not sure. The docs only give one 16 bit register to read so I don't know where the rest of the data is stored

slipx06 commented 2 months ago

You can try read the adjacent registers (12-13) and (14-15) and see what you get

platform: modbus_controller # 013 Control board firmware
modbus_controller_id: deye
name: "Controller Board Firmware"
id: deye_controlboard_firmware
icon: "mdi:text"
register_type: holding
raw_encode: HEXBYTES
address: 012
internal: false
register_count: 2
response_size: 4

platform: modbus_controller # 014 Comms board firmware
modbus_controller_id: deye
name: "Communications Board Firmware"
id: deye_communicationboard_firmware
icon: "mdi:text"
register_type: holding
raw_encode: HEXBYTES
address: 014
internal: false
register_count: 2
response_size: 4
ameran commented 2 months ago

Thanks,

I tried that, modified it a bit as it wasn't pulling much more. Used this:

now I get this:

image image

which isn't too wrong, its just looks like its in the wrong order IMG_8627

slipx06 commented 2 months ago

Maybe I'm understanding this wrong but according to your output.

register 13 = 1515
register 14 = 0000
Register 15 = 3373
Register 16 = c356
Register 17 = 0000
1   2  3  4  5  6  7  8
15  15 00 00 33 73 c3 56
00  00 33 73 c3 56 00 00

So

Comms board firmware: registers 14 16 Control board firmware: registers 15 13

ameran commented 2 months ago

I would assume so. So how would you code it? Sorry, i'm useless at coding!

slipx06 commented 2 months ago

Try this

- platform: modbus_controller
  modbus_controller_id: deye
  id: deye_communicationboard_firmware_14
  register_type: holding
  raw_encode: HEXBYTES
  address: 014
  internal: true

- platform: modbus_controller
  modbus_controller_id: deye
  id: deye_communicationboard_firmware_16
  register_type: holding
  raw_encode: HEXBYTES
  address: 016
  internal: true

- platform: template
  name: "Communications Board Firmware"
  id: inverter_esphome_comms_firmware
  icon: "mdi:text"
  lambda: |-
    return id(deye_communicationboard_firmware_14).state + "-" + id(deye_communicationboard_firmware_16).state;

- platform: modbus_controller
  modbus_controller_id: deye
  id: deye_controlboard_firmware_15
  register_type: holding
  raw_encode: HEXBYTES
  address: 015
  internal: true

- platform: modbus_controller
  modbus_controller_id: deye
  id: deye_controlboard_firmware_13
  register_type: holding
  raw_encode: HEXBYTES
  address: 013
  internal: true

- platform: template
  name: "Controller Board Firmware"
  id: inverter_esphome_controller_firmware
  icon: "mdi:text"
  lambda: |-
    return id(deye_controlboard_firmware_15).state + "-" + id(deye_controlboard_firmware_13).state;
slipx06 commented 2 months ago

For the sunsynk

  - platform: modbus_controller            # 013 S Inverter Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_soft_version_13
    name: "${friendly_name} SMCU Version"
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    icon: "mdi:text"
    address: 013

  - platform: modbus_controller            # 015 C Inverter Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_mcu_inverter_firmware_15
    name: "${friendly_name} MCU Version"
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    icon: "mdi:text"
    address: 015

  - platform: modbus_controller            # 016 Inverter LCD Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_comm_lcd_firmware_16
    name: "${friendly_name} COMM Version"
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    icon: "mdi:text"
    address: 016
slipx06 commented 2 months ago

Finally settled on

  - platform: modbus_controller            # 013 Inverter MCU Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_MCU_version_13
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    address: 013
    internal: true

  - platform: modbus_controller            # 015 Inverter MCU Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_MCU_version_15
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    address: 015
    internal: true

  - platform: template                      # 015-013 Inverter MCU version
    name: "${friendly_name} MCU Version"
    id: inverter_esphome_main_version
    icon: "mdi:text"
    lambda: |-
      return id( inverter_esphome_MCU_version_15).state + "-" + id(inverter_esphome_MCU_version_13).state;

  - platform: modbus_controller            # 016 Inverter LCD Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_comm_lcd_firmware_16
    name: "${friendly_name} COMM Version"
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    icon: "mdi:text"
    address: 016
ameran commented 2 months ago

Finally settled on

  - platform: modbus_controller            # 013 Inverter MCU Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_MCU_version_13
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    address: 013
    internal: true

  - platform: modbus_controller            # 015 Inverter MCU Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_MCU_version_15
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    address: 015
    internal: true

  - platform: template                      # 015-013 Inverter MCU version
    name: "${friendly_name} MCU Version"
    id: inverter_esphome_main_version
    icon: "mdi:text"
    lambda: |-
      return id( inverter_esphome_MCU_version_15).state + "-" + id(inverter_esphome_MCU_version_13).state;

  - platform: modbus_controller            # 016 Inverter LCD Firmware Version
    modbus_controller_id: inverter
    id: inverter_esphome_comm_lcd_firmware_16
    name: "${friendly_name} COMM Version"
    register_type: holding
    skip_updates: ${settings_skipped_updates}
    raw_encode: HEXBYTES
    icon: "mdi:text"
    address: 016

PERFECT! See the results below:

image