Skip to content

Home Battery

Early access

The Home Battery device is in early access. Enable it in the app settings (battery_enabled = true) before adding it. Existing Scheduler and PV Profiler devices work without it.

The Home Battery device optimizes a home energy storage system by scheduling charging at the cheapest energy prices and discharging when prices are highest. It works with any battery that has a Homey driver reporting measure_power — the app controls the battery through flows, not directly.

How it works

Every 30 minutes the optimizer looks at the next 24 hours of day-ahead prices, your current state of charge, and the battery's capacity and power limits, then decides on one of three actions:

Action When it happens
Charge Price is low enough that storing energy now is profitable after accounting for round-trip losses
Discharge Price is high enough that releasing stored energy saves more than keeping it for later
Idle Neither charging nor discharging is economically worth it right now

The optimizer is deficit-aware: it tracks whether your household is importing from the grid and avoids discharging when there is nothing meaningful to offset.

The schedule re-runs automatically:

  • Every 30 minutes at the slot boundary
  • When new day-ahead prices arrive
  • When device settings change
  • When you call the Reoptimize flow action

What you need

  • A home battery with a Homey driver that reports measure_power
  • Day-ahead energy prices configured in App Settings
  • Two flows: one to charge, one to discharge (see Flow Examples below)

Adding a Home Battery device

  1. Go to Devices+Power ProfilerHome Battery
  2. Select the Homey device that monitors your battery's power
  3. After pairing, open the device settings and configure capacity, charge/discharge rates, and efficiency

Device settings

Battery capacity

Setting What it does
Usable capacity (kWh) The energy the battery can actually store and deliver. Use the spec sheet value; real-world usable capacity may be lower.
Max charge rate (kW) The inverter's charge power limit. Charging will never exceed this.
Max discharge rate (kW) The inverter's discharge power limit. Discharging will never exceed this.

Limits

Setting What it does
Minimum SoC (%) The optimizer will never schedule discharge below this level. Protects battery health. Default: 10%.
Maximum SoC (%) The optimizer will never schedule charge above this level. Protects battery health. Default: 95%.
Round-trip efficiency Energy lost in the charge/discharge cycle. LFP: ~0.92, NMC: ~0.90, lead-acid: ~0.80. Used to determine whether charging now is worth it given the expected discharge price.

Dashboard capabilities

Capability What it means
State of charge (%) Current SoC as reported by your battery device
State of charge (kWh) SoC converted to energy using your configured usable capacity
Power Current charge (+) or discharge (−) power in watts
Current price Energy price for the current slot (EUR/kWh)
Status Current optimizer decision: Charging, Discharging, or Idle
Next action What the optimizer plans for the next slot
Cycle count Total number of full charge/discharge cycles since pairing

Flow triggers

Use these triggers to send commands to your battery based on the optimizer's decisions.

Charging started

Fires when the optimizer determines the battery should charge in the current slot.

Tokens available:

Token Meaning
price_eur_kwh The energy price for this charging slot
soc_percent Current state of charge at the time of the trigger
charge_kw The charge power rate for this slot

Example flow:

WHEN   Charging started (Home Battery)
THEN   Set charge current to [[charge_kw]] kW (battery inverter)

Discharging started

Fires when the optimizer determines the battery should discharge in the current slot.

Tokens available:

Token Meaning
price_eur_kwh The energy price for this discharge slot
soc_percent Current state of charge at the time of the trigger
discharge_kw The discharge power rate for this slot

Example flow:

WHEN   Discharging started (Home Battery)
THEN   Set discharge current to [[discharge_kw]] kW (battery inverter)

Battery idle

Fires when the optimizer decides neither charging nor discharging is beneficial.

Tokens available:

Token Meaning
soc_percent Current state of charge

Example flow:

WHEN   Battery idle (Home Battery)
THEN   Set to standby mode (battery inverter)

Flow conditions

Use these as guards in flows that should only run when the battery is in a particular state.

Condition What it checks
Battery is charging Whether the battery is currently in a charging slot
Battery is discharging Whether the battery is currently in a discharging slot
SoC is above [threshold]% Whether the state of charge exceeds a percentage you set

Example — only run a heavy load when the battery is full enough:

WHEN   Cheapest start time reached (Dishwasher Profiler)
AND    SoC is above 50% (Home Battery)
THEN   Turn on dishwasher

Flow actions

Reoptimize battery schedule

Recalculates the optimal charge/discharge schedule immediately using current prices and SoC.

When to use: after manually overriding the battery state, or when you want to force a recalculation outside the normal 30-minute cadence.

Flow examples

Minimal setup — charge and discharge

WHEN   Charging started (Home Battery)
THEN   Enable charging (battery inverter flow card)

WHEN   Discharging started (Home Battery)
THEN   Enable discharging (battery inverter flow card)

WHEN   Battery idle (Home Battery)
THEN   Set to standby (battery inverter flow card)

The specific flow cards for your battery inverter depend on your battery brand's Homey driver. Refer to its documentation for the correct actions.

Force reoptimize after grid outage

WHEN   Homey starts
THEN   Reoptimize battery schedule (Home Battery)

Tips

  • Efficiency matters — a lower round-trip efficiency raises the bar for what price difference justifies a charge/discharge cycle. Set it accurately.
  • SoC limits protect your battery — do not set minimum SoC to 0% unless your battery's BMS handles deep discharge protection independently.
  • The optimizer does not control the battery directly — it tells you via triggers when to charge or discharge. Your flows translate that into commands for your actual battery hardware.
  • Solar integration — if you have a PV Profiler configured, the optimizer accounts for expected solar production when planning charge and discharge. It avoids discharging during hours when solar will be available.