Add support for WPE-I (brine/water, no DHW) - #367
Draft
adrai wants to merge 6 commits into
Draft
Conversation
adrai
force-pushed
the
wpe-i-support
branch
2 times, most recently
from
July 9, 2026 13:33
e368c5c to
70d2cbd
Compare
Scaled numeric types passed raw sentinel words through the int16 cast:
- 0x8000 ("not available"): et_dec_val rendered -3276.8, et_double_val
rendered energy counters as 32768 (observed on a WPE-I 08 HK without
DHW: WAERMEERTRAG_WW_SUMME_MWH = 32.768 MWh,
EL_ENERGIEAUFNAHME_WW_SUMME_KWH = 32,768,000 kWh).
- 0x9000 ("AUS" for et_dec_val settings): MINTEMP raw 36864 rendered
-2867.2 while the panel shows AUS (verified on HK2, panel photo).
Return NAN for these words so ESPHome/HA report the entity as
unavailable instead of publishing impossible values.
The combined kWh sensor must scale the MWh part by 1000 and add the kWh part. The vars had it backwards (kWh part scaled by 1000, MWh part added raw), so the total was off by three orders of magnitude. Verified on a WPE-I 08 HK 230 Premium: pump returns EL_ENERGIEAUFNAHME_HEIZ_SUM_KWH (0x0920) = 623 and _SUM_MWH (0x0921) = 2; sensor showed 623,002 kWh while the panel (Leistungsaufnahme, VD HEIZEN SUMME) shows 2.623 MWh. Panel efficiency cross-check: 6.34 = 16.829 MWh yield / 2.623 MWh intake. The WAERMEERTRAG_*_SUMME_MWH sensors are not affected (their MWh part is the unscaled base, kWh part is scaled by 0.001), same for VERDICHTER_STARTS (thousands part scaled by 1000).
…ants Not every WPM-family heat pump has integrated domestic hot water: the WPE-I ... HK models are heating/cooling only, and their controller answers the WW energy properties with the 0x8000 "not available" sentinel (observed on a WPE-I 08 HK 230 Premium as 32.768 MWh / 32,768,000 kWh before the sentinel fix). Keep wpl_base.yaml model-agnostic by moving the four WW counters (WAERMEERTRAG_WW_SUMME_MWH, EL_ENERGIEAUFNAHME_WW_SUMME_KWH and both _TAG_ variants) into wpl13/wpl17/wpl23, which all have DHW. No behavior change for existing models; a WW-less variant can now simply not include them.
Panel-verified against a WPE-I 08 HK 230 Premium: the WPE-I family speaks the same WPM protocol as the WPL13 (temperatures, setpoints, heat curves, energy counters, VERDICHTER_STARTS and efficiency all match the panel exactly), so WPE_I joins the existing WPL property groups and the low-byte Betriebsart map. Differences handled here: - no Warmwasser energy counters (the model has no integrated DHW; the controller answers those properties with the 0x8000 sentinel) - 0x02e2 is WP_WASSERVOLUMENSTROM as on the WPL17, NOT the WPL13 WAERMEPUMPEN_STATUS word: it tracks the circulation flow (raw 280/285 = 28.0/28.5 l/min alongside VOLUMENSTROM = 27.7 l/min) while the panel's Status Wärmepumpe checkboxes contradict a bit decode. The WPL13 status-bit binaries are therefore omitted until the WPE-I's real status property is identified. - runtime counters exposed, panel-exact from Heizmodul: LAUFZEIT_VD_HEIZEN (6327 h, id shared with WPL17) and LAUFZEIT_NHZ1/NHZ2/NHZ1_2 (0/0/4 h, ids shared with WPL17/23). LAUFZEIT_VD_KUEHLEN answers 0x8000 (WPE-I only cools passively) and is not exposed. Note: unlike WPL_13 builds, WPE_I does not shift the Betriebsart raw value by 8 bits — the WPE-I sends PROGRAMMSCHALTER (0x4f1b) as a low byte (raw 0x02 = Programm, verified while the panel showed PROGRAMMBETRIEB).
…ants The Manager (0x480) BETRIEBS_STATUS word is not served on every WPM-family pump: a WPE-I 08 HK 230 Premium answers the read but the word stays 0 regardless of state (verified with the panel showing Heizkreispumpe 2 running while all twelve binaries read off; the WPE-I publishes its plant status in other words instead, see the WPE-I variant). Keep wpl_base model-agnostic by moving the twelve binaries and their bit decode into wpl13/wpl17/wpl23 — no behavior change for those models.
The WPE-I publishes its status in two words of its own (verified by a
controlled standby experiment with the panel videoed in each state):
- WAERMEPUMPEN_STATUS (0x4eda, Kessel): bit 4 = passive cooling active
(valve in cooling position; flips with the panel's Passivkühlventil
checkboxes), two of bits {2, 13} = Kühlbetrieb mode / Netzversorgung
Inverter. Reads 0x8000 in Bereitschaft.
- Anlagen-Status (BETRIEBS_STATUS 0x4ecd), broadcast towards the room
unit with HK2's sender id: bit 2 = Heizkreispumpe 2 (word went 4->0->4
in sync with the standby flip; panel Status Anlage confirmed).
Only panel-verified bits become binaries; both raw words are exposed as
diagnostic sensors so the remaining bits can be identified from recorded
history when the pump changes state (e.g. season change). The Manager
BETRIEBS_STATUS word — the WPL decode source — always reads 0 on this
machine.
Also adds, each panel-verified:
- EVU_SPERRE_AKTIV (0x0074, broadcast flag; panel Inbetriebnahme shows
EVU SPERRE EIN)
- REGELABWEICHUNG (0x033d, -1.7..-2.1 K matching the Analyse menu)
- WAERMEERTRAG_2WE_HEIZ_SUMME_MWH (0x0928/0x0929 = 36 kWh, matching the
panel's NHZ HEIZEN SUMME 0.036 MWh)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the WPE-I part of #363. Everything below is panel-verified on a
WPE-I 08 HK 230 Premium (video/photo evidence available on request).
What the WPE-I shares with the WPL13 (all values matched the panel
exactly): water/refrigerant temperatures, HK1/HK2 setpoints and heat curves,
energy counters (16.829 MWh), efficiency (6.34),
VERDICHTER_STARTS(2209),low-byte Betriebsart map — so
WPE_Ijoins the existing property groups.Differences handled by the variant (
yaml/wpe-i.yaml,-DWPE_I):0x02e2=WP_WASSERVOLUMENSTROM(as on WPL17), not the WPL13status word — it tracks the circulation flow (28.0/28.5 l/min alongside
VOLUMENSTROM27.7; the panel's Prozessdaten shows the same value).showed Programmbetrieb) → no
<<8shift. Select verified read andwrite (mode switch from the ESP round-trips; the pump broadcasts the new
value and the panel follows).
panel videoed in each state):
WAERMEPUMPEN_STATUS(0x4eda, Kessel): bit 4 = passive cooling active;two of bits {2,13} = Kühlbetrieb mode / Netzversorgung Inverter;
0x8000 in Bereitschaft.
BETRIEBS_STATUS0x4ecd broadcast towards the roomunit, HK2 sender id): bit 2 = Heizkreispumpe 2 (word went 4→0→4 in
sync with the standby flip).
diagnostic sensors so remaining bits can be identified from history.
LAUFZEIT_VD_HEIZEN(6327 h),LAUFZEIT_NHZ1/2/1_2(0/0/4 h),REGELABWEICHUNG(-1.7…-2.1 K),EVU_SPERRE_AKTIV,WAERMEERTRAG_2WE_HEIZ_SUMME_MWH(0.036 MWh =panel "NHZ HEIZEN SUMME").
addressable via standard indices — the RAUM* entities show the active
room reference (the ESP's own injected values), which is the intended
behavior of the FET emulation.
Tested on: WPE-I 08 HK 230 Premium via ESP32-C6-Zero (esp32_can),
ESPHome 2026.6.5, running in production since 2026-07-09.
Opened as a draft pending your answer on #363. The branch stacks on #364, #365 and the wpl_base restructure PR — the diff shrinks to just the variant once those land, and I'll rebase after each merge.