Skip to content

Heat pump: COP that follows the outside temperature, and a learned COP (#1081) - #1366

Merged
traktore-org merged 6 commits into
developfrom
feature/1081-cost-of-heat
Nov 14, 2026
Merged

traktore-org merged 6 commits into
developfrom
feature/1081-cost-of-heat

Conversation

@traktore-org

Copy link
Copy Markdown
Owner
  • A heat pump can get a COP curve of 2–3 points (outside °C → COP). The cost of heat uses the COP now; the plan and tomorrow's preview put the heat pump in the hours where heat is cheapest (rank only — kWh and cost stay electricity).

  • The crawler finds a heat meter; SEM learns COP per outside temperature from it. Used only when you pick "learned" for the heat pump.

  • Without a curve or that choice, nothing changes.

  • Simulated winter: learned 2.43 / 3.18 / 3.82 against true 2.43 / 3.20 / 3.83 at −7 / 2 / 12 °C

  • Full suite green, replay unchanged

  • Review, CI, live run on the test server

https://claude.ai/code/session_01UikL7PL23jjzZtjyqe4P8w

…lan ranks its hours by the price of heat

A curve of 2-3 points (outdoor °C : COP) is a per-device goal
(update_device_config property cop_curve). With it, the cost-of-heat
sensor uses the COP at the outdoor reading now (attributes cop_used,
cop_source, outdoor_c) and the night plan ranks the heat pump's grid
slots by price / COP. Rank only: kWh and cost stay electricity. The
plan's why says cheapest_heat with the mean COP. No curve = no change.

Classic load card: COP row and three-point editor under More.

Claude-Session: https://claude.ai/code/session_01UikL7PL23jjzZtjyqe4P8w
The crawler finds the heat meter (a kWh total of heat delivered). Each hour
gives heat / electricity at that hour's outdoor temperature; 2 °C bands,
median, trusted after 6 hours. Standby, short runs, resets and unread or
estimated hours are left out. Nothing acts until the user sets the COP
source to "learned"; outside the learned range the user's curve answers.
Tomorrow's preview now ranks by the price of heat too. The option surface
grows by the heat meter field (#1081, declared in the .loosen file).

Claude-Session: https://claude.ai/code/session_01UikL7PL23jjzZtjyqe4P8w
…ken thermometer

Review findings: hour ids are whole hours since the epoch (no DST double
hour); a gap drops the hour before it; another meter starts fresh; outdoor
readings outside -40..50 °C are no reading; hours under 0.3 kWh are standby
(the ledger rounds to 0.01 kWh). The role leaves out yesterday/last/session
counters and solar, boiler or biomass heat. The plan's COP helper is a
module function, so plan fakes need nothing new. Tests use AST contracts.

Claude-Session: https://claude.ai/code/session_01UikL7PL23jjzZtjyqe4P8w
A meter at COP ~1 is named and learns nothing; a counter too coarse
for an hour, and the hour after a stalled one, are dropped; a bad
store starts fresh; the dead hot-water flag is gone.

Claude-Session: https://claude.ai/code/session_01UikL7PL23jjzZtjyqe4P8w
A stall is caught before the short-run check and ends at a gap; a
counter reset learns the meter's step again; a meter just under COP 1
is named as electric.

Claude-Session: https://claude.ai/code/session_01UikL7PL23jjzZtjyqe4P8w
@traktore-org
traktore-org merged commit 5e6b50c into develop Nov 14, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant