Skip to content

Instantly share code, notes, and snippets.

@IngmarStein
Created August 2, 2025 20:30
Show Gist options
  • Save IngmarStein/e9c52519fba50190e6b02af43b8f6354 to your computer and use it in GitHub Desktop.
Save IngmarStein/e9c52519fba50190e6b02af43b8f6354 to your computer and use it in GitHub Desktop.
Dynamically control River 3 Plus based on solar surplus and grid import with Home Assistant
alias: EcoFlow River 3 Plus - Dynamic Control
description: Dynamically control River 3 Plus based on solar surplus and grid import.
triggers:
- value_template: >-
{{ states('sensor.solaredge_m1_ac_power') | float(0) >
(states('number.ef_r30187_ac_charging_speed') | float(0) + 50) }}
for:
minutes: 3
id: solar_surplus
trigger: template
alias: If solar surplus
- entity_id: sensor.power_grid_import
above: 120
for:
minutes: 3
id: grid_import
trigger: numeric_state
alias: If grid import
- value_template: >-
{{ not (states('sensor.solaredge_m1_ac_power') | float(0) >
(states('number.ef_r30187_ac_charging_speed') | float(0) + 50)) and
not (states('sensor.power_grid_import') | float(0) > 120) }}
for:
minutes: 3
id: hold_soc
trigger: template
alias: Else
conditions:
- condition: template
value_template: |-
{{
states('sensor.solaredge_m1_ac_power') | is_number and
states('number.ef_r30187_ac_charging_speed') | is_number and
states('sensor.power_grid_import') | is_number and
states('sensor.ef_r30187_battery_level') | is_number
}}
actions:
- choose:
- conditions:
- condition: trigger
id: solar_surplus
sequence:
- data:
value: 80
target:
entity_id: number.ef_r30187_charge_limit
action: number.set_value
- data:
value: 80
target:
entity_id: number.ef_r30187_backup_reserve
action: number.set_value
- conditions:
- condition: trigger
id: grid_import
sequence:
- data:
value: 50
target:
entity_id: number.ef_r30187_backup_reserve
action: number.set_value
- data:
value: 50
target:
entity_id: number.ef_r30187_charge_limit
action: number.set_value
- conditions:
- condition: trigger
id: hold_soc
sequence:
- data:
value: >-
{{ [states('sensor.ef_r30187_battery_level') | int(50), 50] |
max }}
target:
entity_id: number.ef_r30187_backup_reserve
action: number.set_value
- data:
value: 80
target:
entity_id: number.ef_r30187_charge_limit
action: number.set_value
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment