Skip to content

EASUN ISOLAR SMG II 5.6KW WIFI

papi111 edited this page Dec 14, 2022 · 1 revision

Work on EASUN ISOLAR-SMG-II-5,6KW-WIFI maybe on others EASUN inveters with Modbus communication. Used with RS232/ttl converter prepared from OEM Wifi modul delivered with inverter + 12V to 3.3V converter.

Foto RS232/ttl + 12V/3.3V + ESP32

easun-modbus-1.yaml

esphome:
  name: easun-modbus-1

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ""

ota:
  password: ""

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Easun-Modbus-1 Fallback Hotspot"
    password: ""

captive_portal:
    
uart:
  id: mod_bus
  tx_pin: 17
  rx_pin: 16
  baud_rate: 9600
  stop_bits: 1


modbus:
  id: modbus1
  
    
modbus_controller:
  - id: easun
    ## the Modbus device addr
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 1s
    
packages:
  easun_sensors: !include easun/easun_sensors.yaml
  easun_read_setting: !include easun/easun_read_setting.yaml
  easun_read_textsetting: !include easun/easun_read_textsetting.yaml

sensor:

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Mains Power"
    id: mains_power
    register_type: holding
    value_type: S_WORD
    address: 0xCC
    unit_of_measurement: "W"
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Average Power"
    id: inverter_average_power
    value_type: S_WORD
    register_type: holding
    address: 0xD0
    unit_of_measurement: "W"
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Charging Power"
    id: inverter_charging_power
    register_type: holding
    address: 0xD1
    unit_of_measurement: "W"
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Output Active Power"
    id: output_active_power
    register_type: holding
    address: 0xD5
    unit_of_measurement: "W"
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Battery Average Voltage"
    id: battery_average_voltage
    register_type: holding
    address: 0xD7
    unit_of_measurement: "V"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Battery Average Current"
    id: battery_average_current
    register_type: holding
    address: 0xD8
    unit_of_measurement: "A"
    value_type: S_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Battery Average Power"
    id: battery_average_power
    register_type: holding
    address: 0xD9
    value_type: S_WORD
    unit_of_measurement: "W"
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "PV Average Power"
    id: pv_average_power
    register_type: holding
    address: 0xDF
    unit_of_measurement: "W"
  
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "PV Charging Average Power"
    id: pv_charging_average_power
    register_type: holding
    address: 0xE0
    unit_of_measurement: "W"
  
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Battery Average Current +-"
    id: battery_average_current2
    register_type: holding
    address: 0xE8
    value_type: S_WORD
    unit_of_measurement: "A"
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

easun_sensors.yaml stored on folder easun

sensor:
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Mains Voltage"
    id: mains_voltage
    register_type: holding
    address: 0xCA
    unit_of_measurement: "V"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
  
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Mains Frequency"
    id: mains_frequency
    register_type: holding
    address: 0xCB
    unit_of_measurement: "Hz"
    skip_updates: 5
    accuracy_decimals: 2
    filters:
      - multiply: 0.01
      
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Voltage"
    id: inverter_voltage
    register_type: holding
    address: 0xCD
    unit_of_measurement: "V"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Current"
    id: inverter_current
    register_type: holding
    address: 0xCE
    unit_of_measurement: "A"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
    
  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Frequency"
    id: inverter_frequency
    register_type: holding
    address: 0xCF
    unit_of_measurement: "Hz"
    skip_updates: 5
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Output Effective Voltage"
    id: output_effective_voltage
    register_type: holding
    address: 0xD2
    unit_of_measurement: "V"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Output Effective Current"
    id: output_effective_current
    register_type: holding
    address: 0xD3
    unit_of_measurement: "A"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Output Frequency"
    id: output_frequency
    register_type: holding
    address: 0xD4
    unit_of_measurement: "Hz"
    skip_updates: 5
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "PV Average Voltage"
    id: pv_average_voltage
    register_type: holding
    address: 0xDB
    unit_of_measurement: "V"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "PV Average Current"
    id: pv_average_current
    register_type: holding
    address: 0xDC
    unit_of_measurement: "A"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Load Percentage"
    id: load_percentage
    register_type: holding
    address: 0xE1
    unit_of_measurement: "%"
    skip_updates: 5

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "DCDC Temperature"
    id: dcdc_temperature
    register_type: holding
    address: 0xE2
    skip_updates: 5
    unit_of_measurement: ""

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Temperature"
    id: inverter_temperature
    register_type: holding
    address: 0xE3
    skip_updates: 5
    unit_of_measurement: ""

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Battery Percentage"
    id: battery_percentage
    register_type: holding
    address: 0xE5
    skip_updates: 5
    unit_of_measurement: "%"
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Output Apparent Power"
    id: output_apparent_power
    register_type: holding
    address: 0xD6
    skip_updates: 5
    unit_of_measurement: "VA"

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Inverter Charging Average Current"
    id: inverter_charging_average_current
    register_type: holding
    address: 0xE9
    unit_of_measurement: "A"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "PV Charging Average Current"
    id: pv_charging_average_current
    register_type: holding
    address: 0xEA
    unit_of_measurement: "A"
    skip_updates: 5
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

easun_read_setting.yaml stored on folder easun

sensor:
  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Output Voltage
    id: set_output_voltage
    register_type: holding
    address: 0x140
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: "Set Output Frequency"
    id: set_output_frequency
    register_type: holding
    address: 0x141
    skip_updates: 30
    unit_of_measurement: "Hz"
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Bat Overvoltage Protection
    id: set_bat_overvoltage
    register_type: holding
    address: 0x143
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Max Charging Voltage
    id: set_max_charging_voltage
    register_type: holding
    address: 0x144
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Floating Charging Voltage
    id: set_floating_charging_voltage
    register_type: holding
    address: 0x145
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Bat Recovery Voltage
    id: set_bat_recovery_voltage
    register_type: holding
    address: 0x146
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Bat Low Voltage Protection Grid
    id: set_bat_low_voltage_grid
    register_type: holding
    address: 0x147
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Bat Low Voltage Protection Off-Grid
    id: set_bat_low_voltage_offgrid
    register_type: holding
    address: 0x149
    skip_updates: 30
    unit_of_measurement: "V"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Max Charging Current
    id: set_max_charging_current
    register_type: holding
    address: 0x14C
    skip_updates: 30
    unit_of_measurement: "A"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Max Charging Current Grid
    id: set_max_charging_current_grid
    register_type: holding
    address: 0x14D
    skip_updates: 30
    unit_of_measurement: "A"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

easun_read_textsetting.yaml stored on folder easun

text_sensor:
  - platform: modbus_controller
    modbus_controller_id: easun
    id: output_mode_text
    register_type: holding
    address: 0x12C
    raw_encode: HEXBYTES
    name: Set Output Mode
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("Parallel");
        case 2: return std::string("3 Phase L1");
        case 3: return std::string("3 Phase L2");
        case 4: return std::string("3 Phase L3");
        default: return std::string("Single");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    id: output_priority_text
    register_type: holding
    address: 0x12D
    raw_encode: HEXBYTES
    name: Set Output Priority
    skip_updates: 5
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("PV-Utility-Battery");
        case 2: return std::string("PV-Battery-Utility");
        default: return std::string("Utility-PV-Battery");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Input Voltage Range
    id: input_voltage_range
    register_type: holding
    address: 0x12E
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("Narrow range");
        default: return {"Wide range"};
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Buzzer Mode
    id: buzzer_mode
    register_type: holding
    address: 0x12F
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("Change-Warning-Fault");
        case 2: return std::string("Warning-Fault");
        case 3: return std::string("Only Fault");
        default: return std::string("Mute");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set LCD Backlight
    id: lcd_backlight
    register_type: holding
    address: 0x131
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("Always ON");
        default: return std::string("Timed OFF");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set LCD Homepage Autoreturns
    id: lcd_homepage_autoreturns
    register_type: holding
    address: 0x132
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("1 minute return");
        default: return std::string("Do not return");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Energy-Saving Mode
    id: energysaving_mode
    register_type: holding
    address: 0x133
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("ON");
        default: return std::string("OFF");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Overload Automatic Restart
    id: overload_automatic_restart
    register_type: holding
    address: 0x134
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("ON");
        default: return std::string("OFF");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Overtemperature Automatic Restart
    id: overtemp_automatic_restart
    register_type: holding
    address: 0x135
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("ON");
        default: return std::string("OFF");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Overload Transfer to Bypass
    id: overload_bypass
    register_type: holding
    address: 0x136
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("ON");
        default: return std::string("OFF");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Battery Eq Mode
    id: battery_eq_mode
    register_type: holding
    address: 0x139
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("Enable");
        default: return std::string("Disable");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Battery Charg Priority
    id: battery_charg_priority
    register_type: holding
    address: 0x14B
    raw_encode: HEXBYTES
    skip_updates: 5
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("PV Priority");
        case 2: return std::string("PV=Utility");
        case 3: return std::string("PV Only");        
        default: return std::string("Utility");
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: easun
    name: Set Turn on Mode
    id: turn_on_mode
    register_type: holding
    address: 0x1A4
    raw_encode: HEXBYTES
    skip_updates: 60
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 1: return std::string("Only Lokal");
        case 2: return std::string("Only Remote");       
        default: return std::string("Lokal or Remote");
      }
      return x;
Clone this wiki locally