TL;DR: Homey Pro now runs my heat pump, home battery and EV charging on dynamic hourly prices and a solar forecast, through about 30 numbered Advanced Flows. In the first 10 days of hourly logging (19–28 October), 98% of my solar production was used at home, the heat pump heated at an average COP of 5.7, and after reimbursements my net electricity cost came out slightly below zero.
This post covers the goal, the design choices, how it is built, what I learned and the measured results. Questions and suggestions are very welcome.
1. The goal
I wanted my house to decide for itself when to heat, store and charge, so that as much energy as possible comes from my own solar panels or from cheap hours on a dynamic tariff.
The starting point was a familiar one: a heat pump, a home battery, solar panels and an EV that each had their own app and their own idea of what was smart. Every device optimised for itself, and none of them knew what the others were doing.
What I set out to achieve:
Use my own solar first: heat water, charge the battery and charge the car when the sun delivers.
Buy from the grid only when it is cheap: I am on a dynamic hourly tariff (Zonneplan), so timing is money.
Keep comfort untouched: warm floors and enough hot water, without anyone in the house noticing the automation.
Know where every kWh comes from: grid, solar or battery, and at what price.
2. The setup
| Part | What it is | How Homey talks to it |
|---|---|---|
| Brain | Homey Pro | Advanced Flows, Logic variables, HomeyScript |
| Heat pump | Panasonic Aquarea, floor heating + domestic hot water (DHW) | MQTT, with a watchdog flow |
| Home battery | Sigenergy (SigenStor) | Sigenergy app; time-of-use mode |
| Solar | PV on 3 roof planes, Tigo optimisers | Tigo for actuals, PV-Forecast app for the forecast |
| Energy contract | Zonneplan, dynamic hourly prices | Price data in flows |
| EV | VW ID.7 Tourer “Blanca” | Charging windows in the VW app; the charge point itself is not controllable |
| Logging | Google Sheets | Hourly log flow |
One constraint shaped a lot of the design: my charge point is managed by a back-office for business reimbursement, so Homey cannot start or stop charging. Everything around the car therefore works around the charger, through the home battery and the car’s own charging windows.
3. Planning: the design choices
Before building, I settled on a few principles. They turned out to matter more than any individual flow.
Price tiers instead of on/off. The heat pump does not simply switch on when power is cheap. Every hour gets a tier (Cheap, Normal or Expensive), and each tier has its own settings in Logic variables: room setpoint, operating mode, quiet mode and hot-water target. In a cheap hour the house stores a little extra heat (one degree higher setpoint, hot water to 65 °C); in an expensive hour it coasts. Changing behaviour means changing a variable, not editing a flow.
One job per flow, with a numbering scheme. Flows are prefixed by domain so the list stays readable as it grows:
WP.xx: heat pump (warmtepomp): tiers, hot-water planning, season switch, night block, safety nets
SB.xx: home battery and EV: night target, charge gate, discharge block, negative prices
UUR.xx / LOG.xx: hourly logging
Decisions in code, actions in flows. Large card-based decision trees became hard to follow. The decision logic is moving into HomeyScript, starting with the tier choice for the heat pump (WP.07). The flows stay as the readable “plumbing”: a trigger, a script that decides, cards that act.
Forecasts advise; they never switch. I compared Solcast and Forecast.Solar against actual production and now run the PV-Forecast app with my three roof planes. The forecast feeds variables such as “tomorrow sunny?”, but no forecast app is allowed to switch a device directly. A bad forecast should cost a little money, never comfort.
Protect the battery from the car. Because the charger is not controllable, the battery would happily empty itself into the EV at night. A dedicated flow blocks battery discharge while the car is charging and releases it afterwards.
One charging window at a time. The car charges through its own app windows (normally 02:00–05:30, the cheapest part of the night). Only one window is ever active, so there is never doubt about when the car will draw power.
Safety nets everywhere. Each critical path has a fallback: an MQTT watchdog for the heat pump, recovery after a Homey restart, an emergency hot-water scenario, legionella protection during holidays, and a battery-mode watchdog.
4. Realisation: how it is built
system architecture · inputs, Homey, devices
Prices, forecasts and device states flow into Homey; variables hold the settings, scripts decide and flows act. The EV is the one device Homey does not switch: it is handled indirectly through the battery.
The system consists of about 30 energy flows. The most important ones:
| Flow | What it does |
|---|---|
| WP.07 Smart winter director | Picks the price tier for the heat pump every hour |
| WP.11 Send tier settings | Pushes the tier’s setpoint, mode and quiet mode to the heat pump |
| WP.15–WP.17 Hot-water planner | Plans and runs the boiler heat-up in the best hours |
| WP.04 Midday harvest window | Uses solar surplus from 11:00 for heating and hot water |
| WP.02 Night block | Keeps the heat pump quiet and off expensive hours at night |
| WP.06 Season switch | Switches between heating season and summer automatically |
| SB.02 Night target | Calculates how full the battery should be by morning |
| SB.03 Charge gate | Opens grid charging only in the cheapest quarter-hours |
| SB.05 Discharge block | Stops the battery emptying into the EV while it charges |
| SB.12 / SB.13 Negative prices | Limits export when export pays negative; takes power when import pays you |
| UUR.01 Hourly log | Writes energy source and price per hour to Google Sheets |
Watchdogs and safety nets (WP.01, WP.03, WP.05, WP.09, WP.13, SB.09, SB.11) run alongside and only act when something goes wrong.
5. Lessons learned
A few things I wish I had known at the start:
Check which device reports the truth. The Sigenergy integration exposes several devices. Only the overall Plant device gives the correct battery level in my setup; the separate battery device does not. Build your flows on the value you have verified.
Put settings in variables, not in cards. Setpoints, thresholds and margins as Logic variables let you tune the system without opening a single flow.
Every integration that can drop out needs a watchdog. MQTT links, cloud APIs and the battery mode all failed at some point. A watchdog that notices and restores is worth more than a clever optimisation.
Plan for a Homey restart. After an update or power cut, variables and device states may not match reality. A recovery flow that puts everything back into a known state saves a cold morning.
Log from day one. Without hourly data you are guessing whether an optimisation helps. The log also showed me which assumptions were wrong.
Test changes A/B, not by feeling. For efficiency tests I alternate settings day by day and compare the logged results.
Big Advanced Flows become unreadable. Splitting them by job, numbering them and moving decision logic to HomeyScript made the system maintainable again.
6. Results
The hourly log has been running since 19 October. Over the first 10 days, 98% of the solar energy was used at home and the heat pump delivered 5 kWh of heat for every kWh of electricity.
| Measure (19–28 Oct) | Result |
|---|---|
| Solar produced / exported | 97.1 kWh / 2.3 kWh (98% used at home) |
| Heat pump COP, heating / hot water | 5.69 / 3.32 (average outdoor 10.3 °C) |
| Cost per kWh of heat | €0.053 |
| EV charged at home | 216.8 kWh at €0.268/kWh all-in |
| Battery charged / discharged | 103.3 kWh / 76.2 kWh, +€2.44 price gain |
The EV is reimbursed per kWh for business use, and I also earn ERE credits for home charging. Because the car charges in the cheapest hours, those reimbursements exceed what its electricity actually costs, and cover the heat pump and the rest of the house as well.
Ten days in October is a short, mild period. I will post an update after the first cold months.
7. What’s next
Finish moving the decision logic into HomeyScript, tier choice first.
Settle on one solar forecaster and apply a measured correction factor.
Report back with winter results, when the heat pump really has to work.
Happy to answer questions, share flow screenshots or HomeyScript snippets. What would you like to see in more detail?



