EnergyWizard Open

Controlling a heat pump by electricity price

Heat pump

EnergyWizard doesn't talk to the heat pump by guessing at its menus. Every supported heat pump has its own driver - a small, clearly scoped code module that knows exactly how that brand accepts commands (SG Ready contacts, Modbus, or a local web API, depending on the brand).

Today there's a finished driver for Thermia/Husdata, and the architecture is built so new brands (NIBE, IVT, CTC, Mitsubishi) can be added as their own modules without touching the rest of the control logic - the same pattern already used for cars (Nissan/Tesla/generic EV) and inverters (SolarEdge).

The actual decisions - when should the pump run hard, when should it rest - are made by a shared priority engine, not by the driver. That means the whole control logic (electricity price, solar surplus, demand tariffs, the thermal battery) is identical regardless of which brand is actually sitting in the basement.

Missing a driver for your brand? That's exactly the kind of contribution this project is built to take - see the code on GitHub.

Which heat pumps are supported?

Heat pumpRouteStatus
Thermia (Diplomat and others)Husdata H66, Modbus direct✅ in daily use
Anything with a climate entity in Home AssistantHA (room temperature)✅ basic control
NIBE S series (S735, S1155, S1255, S320 …)the pump's local REST APIbuilt, not run against a pump
NIBE, Bosch, Atlantic, Daikin via myUplinkmyUplink (cloud)built, not run against a pump
Panasonic AquareaHeishaMon, localbuilt, not run against a pump

One language for every brand

Every driver translates to the same concepts, borrowed from the Matter smart home standard: mode (off, heat, cool, auto, hot water), indoor and outdoor temperature, running, power, energy and fault. Where the pump can tell more: curve offset, heat output, COP, defrost and hot water temperature.

Two controls exist for pumps that support them (today HeishaMon):

Panasonic via HeishaMon

HeishaMon is a small board on the pump's CN-CNT connector. EnergyWizard reads and controls it locally over HTTP. The curve offset works when the pump runs on its heating curve (not direct flow temperature).

heat_pump:
  enabled: true
  driver: heishamon
  host: 192.168.1.60
  base_shift: 0            # your normal shift (-5..5)
  indoor_from_z1: false    # true if zone 1 has a room sensor