MODBUS data from SMA Inverter

modbus:
  - name: SMA
    type: tcp
    host: YOUR_INVERTER_IP_HERE
    port: 502
    sensors:
      - name: SMA_Power_AC
        state_class: measurement
        unit_of_measurement: W
        slave: 3
        address: 30775
        count: 2
        data_type: uint32
        scan_interval: 60
      - name: PV_Daily_Yield
        unit_of_measurement: kWh
        state_class: measurement
        slave: 3
        address: 30517
        scan_interval: 60
        scale: 0.001
        precision: 3
        count: 4
        data_type: int64    
      - name: PV_Total_Production
        unit_of_measurement: MWh
        state_class: measurement
        slave: 3
        address: 30513
        scan_interval: 60
        scale: 0.000001
        precision: 3
        count: 4
        data_type: int64
      - name: Grid Voltage
        unit_of_measurement: V
        slave: 3 
        address: 30783
        scan_interval: 60
        count: 2
        scale: 0.01
        precision: 2
        data_type: int32
      - name: Grid frequency
        unit_of_measurement: Hz
        slave: 3 
        address: 30803
        scan_interval: 60
        count: 2
        scale: 0.01
        precision: 2
        data_type: uint32
      - name: SMA_temp
        unit_of_measurement: °C
        slave: 3
        address: 30953
        scan_interval: 60
        count: 2
        scale: 0.1
        precision: 1
        data_type: int32
      - name: SMA_status
        slave: 3
        address: 30201
        scan_interval: 60
        count: 2
        data_type: int32
      - name: SMA_grid
        slave: 3
        address: 30217
        scan_interval: 60
        count: 2
        data_type: uint32
      - name: Insulation
        slave: 3
        address: 30225
        scan_interval: 60
        count: 2
        scale: 0.001
        unit_of_measurement: kOhms
        data_type: int32
      - name: SMA_Residual_current
        slave: 3
        address: 31247
        scan_interval: 60
        count: 2
        scale: 1
        unit_of_measurement: mA
        data_type: int32
      - name: Apparent Power
        unit_of_measurement: VA
        slave: 3
        address: 30813
        scan_interval: 60
        scale: 1
        precision: 0
        count: 2
        data_type: int32
      - name: Reactive Power
        unit_of_measurement: VAr
        slave: 3
        address: 30805
        scan_interval: 60
        scale: 1
        precision: 0
        count: 2
        data_type: int32
sensor:
  - platform: template
    sensors:
      modbus_sma_pv_power:
        friendly_name: 'Power Output'
        value_template: >-
            {% if states('sensor.sma_power_ac')|float < 0 or states('sensor.sma_power_ac')|float > 10000 %}
              0
            {% else %}
              {{ states('sensor.sma_power_ac') }}
            {% endif %}
        unit_of_measurement: "W"
        icon_template: mdi:flash-circle
      modbus_sma_pv_power_kw:
        friendly_name: 'Power Output kW'
        value_template: >-
            {% if states('sensor.sma_power_ac')|float < 0 or states('sensor.sma_power_ac')|float > 10000 %}
              0
            {% else %}
              {{ states('sensor.sma_power_ac')|float / 1000 }}
            {% endif %}
        unit_of_measurement: "kW"
        icon_template: mdi:flash-circle
      modbus_sma_pv_apparent_power:
        friendly_name: 'Apparent Power'
        value_template: >-
            {% if states('sensor.apparent_power')|float < 0 or states('sensor.apparent_power')|float > 10000 %}
              0
            {% else %}
              {{ states('sensor.apparent_power') }}
            {% endif %}
        unit_of_measurement: "VA"
        icon_template: mdi:flash-circle
      modbus_sma_pv_reactive_power:
        
        friendly_name: 'Reactive Power'
        value_template: >-
            {% if states('sensor.reactive_power')|float < 0 or states('sensor.reactive_power')|float > 10000 %}
              0
            {% else %}
              {{ states('sensor.reactive_power') }}
            {% endif %}
        unit_of_measurement: "VAr"
        icon_template: mdi:flash-circle
      modbus_sma_pv_residual:
        
        friendly_name: 'Residual Current'
        value_template: >-
            {% if states('sensor.sma_residual_current')|float < 0 or states('sensor.sma_residual_current')|float > 10000 %}
              0
            {% else %}
              {{ states('sensor.sma_residual_current') }}
            {% endif %}
        unit_of_measurement: "mA"
        icon_template: mdi:flash-circle
      modbus_sma_temperature:
        
        friendly_name: 'Inverter Temp'
        value_template: >-
            {% if states('sensor.sma_temp')|float < 0 or states('sensor.sma_temp')|float > 100 %}
              0
            {% else %}
              {{ states('sensor.sma_temp') }}
            {% endif %}
        unit_of_measurement: "°C"
      modbus_grid_frequency:
        
        friendly_name: 'Grid Frequency'
        value_template: >-
            {% if states('sensor.grid_frequency')|float < 30 or states('sensor.grid_frequency')|float > 100 %}
              Not Measured
            {% else %}
              {{ states('sensor.grid_frequency') }}
            {% endif %}
        unit_of_measurement: "Hz"
      modbus_grid_voltage:
        
        friendly_name: 'Grid Voltage'
        value_template: >-
            {% if states('sensor.grid_voltage')|float < 180 or states('sensor.grid_voltage')|float > 300 %}
              Not Measured
            {% else %}
              {{ states('sensor.grid_voltage') }}
            {% endif %}
        unit_of_measurement: "V"
      modbus_inverter_status:
        
        friendly_name: 'Inverter Status'
        value_template: >-
            {% if is_state('sensor.sma_status', '307' ) %}
              OK
            {% elif is_state('sensor.sma_status', '303' ) %}
              Off
            {% elif is_state('sensor.sma_status', '455' ) %}
              Warning
            {% elif is_state('sensor.sma_status', '35' ) %}
              Fault
            {% endif %}
      modbus_grid_contactor:
        
        friendly_name: 'Grid contactor'
        value_template: >-
            {% if is_state('sensor.sma_grid', '51' ) %}
              Closed
            {% else %}
              Open
            {% endif %}    
  - platform: integration
    source: sensor.modbus_sma_pv_power_kw
    name: Panneaux_Solaires
    unit_time: h
    round: 2
    method: left
homeassistant:
    customize: !include customize.yaml

And in the customize.yaml

sensor.Panneaux_Solaires:
  state_class: total_increasing
  device_class: energy
  unit_of_measurement: kWh
  last_reset: '2022-11-02T11:35:23.862268+00:00'

Once done in the Energy Panel configuration, you can choose the Panneaux_Solaires sensor
Settings - Dashoards - Energy

2 Likes