Skip to content

Alerts and Notifications

hilman2 edited this page Sep 1, 2026 · 1 revision

Alerts and notifications

Automations that tell you when something is wrong with the inverter, and one that tells you when something is right. The integration already puts persistent problems into the Repairs panel; these are for the phone.

Entities used on this page

Placeholder Block sunspec_key Meaning
sensor.inverter_operating_state 103 St OFF, SLEEPING, STARTING, MPPT, THROTTLED, SHUTTING_DOWN, FAULT, STANDBY
sensor.inverter_events 103 Evt1 Active event flags as a comma-separated string, and as a list in the active_flags attribute
sensor.inverter_ac_power 103 W AC output, W
sensor.inverter_cabinet_temperature 103 TmpCab Cabinet temperature
sensor.solar_energy_daily Today's production, see Energy dashboard and statistics

notify.mobile_app_your_phone stands for your notification target. The state and event sensors are tagged Diagnostic, so they sit at the bottom of the device page.

The inverter reports a fault

alias: Inverter fault
triggers:
  - trigger: state
    entity_id: sensor.inverter_operating_state
    to: FAULT
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Inverter fault
      message: >
        {{ state_attr('sensor.inverter_events', 'active_flags') | join(', ')
           or 'no event flags set' }}

The flag names come from the SunSpec definition: GROUND_FAULT, DC_OVER_VOLT, AC_DISCONNECT, GRID_DISCONNECT, OVER_TEMP, UNDER_FREQUENCY, BLOWN_STRING_FUSE and so on. The raw attribute holds the numeric bitfield if the vendor's manual lists codes.

An event flag appears, whatever the state

Some inverters keep running in THROTTLED with a flag set. This one fires when any flag has been set for two minutes, which skips the momentary ones at startup:

alias: Inverter event flag
triggers:
  - trigger: template
    value_template: >
      {{ (state_attr('sensor.inverter_events', 'active_flags') or []) | length > 0 }}
    for: "00:02:00"
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Inverter event
      message: >
        {{ states('sensor.inverter_operating_state') }}:
        {{ state_attr('sensor.inverter_events', 'active_flags') | join(', ') }}

Unreachable while the sun is up

At night the inverter is allowed to disappear. During the day it is not. The sensors go unavailable after about three minutes of failed polls; this waits ten more before it complains:

alias: Inverter unreachable by day
triggers:
  - trigger: state
    entity_id: sensor.inverter_ac_power
    to: unavailable
    for: "00:10:00"
conditions:
  - condition: state
    entity_id: sun.sun
    state: above_horizon
  - condition: numeric_state
    entity_id: sun.sun
    attribute: elevation
    above: 10
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Inverter unreachable
      message: No data from the inverter for 13 minutes in daylight.

The Repairs panel raises "Cannot reach SunSpec inverter" for the same condition; this is the version that reaches you while you are out.

Producing nothing at midday

The inverter answers, reports MPPT, and produces nothing. A tripped DC breaker, a failed string, snow on the roof. Thirty minutes below 50 W with the sun high:

alias: Inverter idle at midday
triggers:
  - trigger: numeric_state
    entity_id: sensor.inverter_ac_power
    below: 50
    for: "00:30:00"
conditions:
  - condition: numeric_state
    entity_id: sun.sun
    attribute: elevation
    above: 30
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.inverter_operating_state
        state: FAULT
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Inverter idle
      message: >
        Below 50 W for 30 minutes at {{ state_attr('sun.sun', 'elevation') | round(0) }}°
        sun elevation, state {{ states('sensor.inverter_operating_state') }}.

Adjust the elevation to your roof. A heavily shaded east roof at 30° in November is normal.

Running hot

alias: Inverter cabinet hot
triggers:
  - trigger: numeric_state
    entity_id: sensor.inverter_cabinet_temperature
    above: 65
    for: "00:10:00"
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Inverter temperature
      message: "Cabinet at {{ states('sensor.inverter_cabinet_temperature') }} °C."

The threshold is device-specific. Look at a summer's history first and set it a few degrees above the highest value you see.

An export limit that lapsed

Only on devices with block 704, which reports the remaining seconds on the sensor with sunspec_key WMaxLimPctRvrtRem. If a keepalive should be running and the counter reaches zero, the keepalive is dead:

alias: Export limit lapsed
triggers:
  - trigger: numeric_state
    entity_id: sensor.inverter_wmaxlimpctrvrtrem
    below: 1
    for: "00:01:00"
conditions:
  - condition: state
    entity_id: input_boolean.export_limit_active
    state: "on"
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Export limit lapsed
      message: The inverter dropped the limit. Check the keepalive automation.

The helper is the one from Zero export and export limiting.

The daily summary

alias: Solar daily summary
triggers:
  - trigger: sun
    event: sunset
    offset: "00:30:00"
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: Solar today
      message: >
        {{ (states('sensor.solar_energy_daily') | float(0) / 1000) | round(1) }} kWh produced.

Drop the / 1000 if you converted the lifetime counter to kWh.

Clone this wiki locally