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
- Go to Devices → + → Power Profiler → Home Battery
- Select the Homey device that monitors your battery's power
- 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.