ESP32 code for SNRE inverter.

 avatar
unknown
yaml
2 hours ago
18 kB
4
Indexable
esphome:
  name: 8channel-relay-new
  friendly_name: Solar-Relay-new
  min_version: 2026.4.0
  name_add_mac_suffix: false

esp32:
  variant: esp32
  framework:
    type: esp-idf

logger:
api:
ota:
  - platform: esphome

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

# --- I2C BUS ---
i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

# --- UART BUSES ---
uart:
  - id: inverter_uart
    tx_pin: GPIO17
    rx_pin: GPIO16
    baud_rate: 9600
    stop_bits: 1
    rx_buffer_size: 1536 

# --- MODBUS & CONTROLLERS ---
modbus:
  - id: srne_inverter_modbus
    uart_id: inverter_uart

modbus_controller:
  - id: srne_inverter_controller
    modbus_id: srne_inverter_modbus
    setup_priority: -10
    update_interval: 22s
    address: 1
    command_throttle: 200ms

# --- SENSORS ---
sensor:
  # ----------------------------------
  # Local Environment Sensors
  # ----------------------------------
  - platform: bme280_i2c
    temperature:
      name: "Solar Room Temperature"
      oversampling: 16x
    pressure:
      name: "Solar Room Pressure"
    humidity:
      name: "Solar Room Humidity"
    address: 0x76

  - platform: adc
    pin: GPIO34
    name: "Solar Room Gas Sensor"
    update_interval: 10s

  # ----------------------------------
  # SRNE Inverter Modbus Registers
  # ----------------------------------
  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery State of Charge"
    register_type: holding
    address: 0x0100
    value_type: U_WORD
    unit_of_measurement: "%"
    device_class: battery
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Voltage"
    id: battery_voltage
    register_type: holding
    address: 0x0101
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Current"
    id: battery_current
    register_type: holding
    address: 0x0102
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: -0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Temperature"
    register_type: holding
    address: 0x0103
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV1 Voltage"
    register_type: holding
    address: 0x0107
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV1 Current"
    register_type: holding
    address: 0x0108
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV1 Power"
    register_type: holding
    address: 0x0109
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV Power (Total)"
    register_type: holding
    address: 0x010A
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV+AC Power"
    register_type: holding
    address: 0x010E
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV2 Voltage"
    register_type: holding
    address: 0x010F
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV2 Current"
    register_type: holding
    address: 0x0110
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "PV2 Power"
    register_type: holding
    address: 0x0111
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Grid L1 Voltage"
    id: grid_l1_voltage
    register_type: holding
    address: 0x0213
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Grid L1 Current"
    id: grid_l1_current
    register_type: holding
    address: 0x0214
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Grid Frequency"
    register_type: holding
    address: 0x0215
    value_type: U_WORD
    unit_of_measurement: "Hz"
    device_class: frequency
    state_class: measurement
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Output L1 Voltage"
    register_type: holding
    address: 0x0216
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Output L1 Current"
    register_type: holding
    address: 0x0217
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Output Frequency"
    register_type: holding
    address: 0x0218
    value_type: U_WORD
    unit_of_measurement: "Hz"
    device_class: frequency
    state_class: measurement
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Load L1 Current"
    register_type: holding
    address: 0x0219
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Load L1 Power"
    id: load_l1_power
    register_type: holding
    address: 0x021B
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Load L1 Apparent Power"
    register_type: holding
    address: 0x021C
    value_type: U_WORD
    unit_of_measurement: "VA"
    device_class: apparent_power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "DC Temperature"
    register_type: holding
    address: 0x0220
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "AC Temperature"
    register_type: holding
    address: 0x0221
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Inverter Internal Temperature"
    register_type: holding
    address: 0x0222
    value_type: S_WORD
    unit_of_measurement: "°C"
    device_class: temperature
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Grid L2 Voltage"
    id: grid_l2_voltage
    register_type: holding
    address: 0x022A
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Output L2 Voltage"
    register_type: holding
    address: 0x022C
    value_type: U_WORD
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Output L2 Current"
    register_type: holding
    address: 0x022E
    value_type: S_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Load L2 Current"
    register_type: holding
    address: 0x0230
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Load L2 Power"
    id: load_l2_power
    register_type: holding
    address: 0x0232
    value_type: U_WORD
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Load L2 Apparent Power"
    register_type: holding
    address: 0x0234
    value_type: U_WORD
    unit_of_measurement: "VA"
    device_class: apparent_power
    state_class: measurement

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Grid L2 Current"
    id: grid_l2_current
    register_type: holding
    address: 0x0238
    value_type: U_WORD
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Today Production"
    register_type: holding
    address: 0xF02F
    value_type: U_WORD
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Total Production"
    register_type: holding
    address: 0xF038
    value_type: U_DWORD_R
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Today Energy Export"
    register_type: holding
    address: 0xF02C
    value_type: U_WORD
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Total Energy Export"
    register_type: holding
    address: 0xF032
    value_type: U_DWORD_R
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Today Energy Import"
    register_type: holding
    address: 0xF03D
    value_type: U_WORD
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Total Energy Import"
    register_type: holding
    address: 0xF048
    value_type: U_DWORD_R
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Today Load Consumption"
    register_type: holding
    address: 0xF030
    value_type: U_WORD
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Total Load Consumption"
    register_type: holding
    address: 0xF03A
    value_type: U_DWORD_R
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Today Battery Charge"
    register_type: holding
    address: 0xF02D
    value_type: U_WORD
    unit_of_measurement: "Ah"
    state_class: total_increasing

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Today Battery Discharge"
    register_type: holding
    address: 0xF02E
    value_type: U_WORD
    unit_of_measurement: "Ah"
    state_class: total_increasing

  # ----------------------------------
  # CUSTOM TEMPLATE SENSORS
  # ----------------------------------
  - platform: template
    name: "Total AC Load Active Power"
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    update_interval: 10s
    lambda: |-
      return id(load_l1_power).state + id(load_l2_power).state;

  - platform: template
    name: "Battery Power"
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    update_interval: 10s
    lambda: |-
      return id(battery_voltage).state * id(battery_current).state;

  - platform: template
    name: "Total Grid Power"
    unit_of_measurement: "W"
    device_class: power
    state_class: measurement
    update_interval: 10s
    lambda: |-
      return (id(grid_l1_voltage).state * id(grid_l1_current).state) + (id(grid_l2_voltage).state * id(grid_l2_current).state);

# --- CONFIGURABLE SETTINGS ---
number:
  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Discharge Limit"
    register_type: holding
    address: 0xE00F
    value_type: U_WORD
    unit_of_measurement: "%"
    min_value: 0
    max_value: 100

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Charge Limit"
    register_type: holding
    address: 0xE01D
    value_type: U_WORD
    unit_of_measurement: "%"
    min_value: 0
    max_value: 100

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Discharge Stop"
    register_type: holding
    address: 0xE01F
    value_type: U_WORD
    unit_of_measurement: "%"
    min_value: 0
    max_value: 100

  - platform: modbus_controller
    modbus_controller_id: srne_inverter_controller
    name: "Battery Discharge Start"
    register_type: holding
    address: 0xE020
    value_type: U_WORD
    unit_of_measurement: "%"
    min_value: 0
    max_value: 100

# --- RELAYS ---
switch:
  - platform: gpio
    pin:
      number: 32
      inverted: true
    name: "Victron Solar Reset"
    id: relay_1
    icon: "mdi:restart"
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 33
      inverted: true
    name: "System EMO"
    id: relay_2
    icon: "mdi:alert-octagon"
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 25
      inverted: true
    name: "Solar Room Fans"
    id: relay_3
    icon: "mdi:fan"
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 26
      inverted: true
    name: "Inverter Power Switch"
    id: relay_4
    icon: "mdi:power"
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 27
      inverted: true
    name: "Relay 5"
    id: relay_5
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 14
      inverted: true
    name: "Relay 6"
    id: relay_6
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 12
      inverted: true
    name: "Relay 7"
    id: relay_7
    restore_mode: ALWAYS_ON

  - platform: gpio
    pin:
      number: 13
      inverted: true
    name: "Relay 8 (RS485 Power)"
    id: relay_8
    restore_mode: ALWAYS_ON 

  - platform: gpio
    pin: 23
    name: "Board Status LED"
    id: board_led
    restore_mode: ALWAYS_OFF
Editor is loading...
Leave a Comment