From 4afa0fea1400239550779aa8edb61e1a03f78eae Mon Sep 17 00:00:00 2001 From: buliwyf42 Date: Wed, 24 Jun 2026 08:02:45 +0200 Subject: [PATCH 1/2] Vaillant VR_71: add keepValveOperable (4) to Mc{1,2,3}Operation status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The room controller writes status=4 in a short daily burst (~5 min) on otherwise-off mixer circuits — a valve anti-seize / keep-valve-operable maintenance run. The shared onoff type (0=off;1=on) doesn't cover it, so HA's enum sensor rejected the value. Add a dedicated Values_McStatus enum (off=0, on=1, keepValveOperable=4) for the three Mc status fields; pump stays onoff. Verified: tsp compile --warn-as-error passes, emitted CSV = 0=off;1=on;4=keepValveOperable, tsp format clean. Refs #620 --- src/vaillant/26.vr_71.tsp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/vaillant/26.vr_71.tsp b/src/vaillant/26.vr_71.tsp index 3c6513d7c..e7945eef8 100644 --- a/src/vaillant/26.vr_71.tsp +++ b/src/vaillant/26.vr_71.tsp @@ -67,7 +67,9 @@ namespace Vr_71 { @inherit(w_1) @ext(0x2, 0) model Mc1Operation { - status: onoff; + @values(Values_McStatus) + status: UCH; + flowtempdesired: temp1; @in @@ -80,7 +82,9 @@ namespace Vr_71 { @inherit(w_1) @ext(0x2, 1) model Mc2Operation { - status: onoff; + @values(Values_McStatus) + status: UCH; + flowtempdesired: temp1; @in @@ -93,7 +97,9 @@ namespace Vr_71 { @inherit(w_1) @ext(0x2, 0x2) model Mc3Operation { - status: onoff; + @values(Values_McStatus) + status: UCH; + flowtempdesired: temp1; @in @@ -137,6 +143,17 @@ namespace Vr_71 { on: 20, } + /** + * Mixer-circuit operation status. Value 4 is written by the controller in a + * short daily burst (~5 min) on otherwise-off circuits — a "keep valve + * operable" maintenance run (anti-seize). See issue #620. + */ + enum Values_McStatus { + off: 0, + on: 1, + keepValveOperable: 4, + } + /** included parts */ union _includes { Errors_inc, From a80c82c8beeffe81be9430ac5a13420a55e257dd Mon Sep 17 00:00:00 2001 From: Dominik Sennfelder Date: Mon, 10 Aug 2026 12:05:53 +0200 Subject: [PATCH 2/2] Vaillant VR_71: add cooling (2) to Mc status enum Reported in #620 for a cooling-capable VR 71 (VRC 700, aroVAIR convectors): status 2 is sent while the circuit is cooling (flow target 10 C), versus 1 while heating (flow target 42.5-44 C). Without it, cooling installations keep hitting the original problem of this issue - a value outside the enum. Value 1 keeps the label 'on' on purpose: the field used the shared 'onoff' type before this branch, so renaming it to 'heating' would change the reported state on every existing installation. --- src/vaillant/26.vr_71.tsp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/vaillant/26.vr_71.tsp b/src/vaillant/26.vr_71.tsp index e7945eef8..764552fe3 100644 --- a/src/vaillant/26.vr_71.tsp +++ b/src/vaillant/26.vr_71.tsp @@ -144,13 +144,23 @@ namespace Vr_71 { } /** - * Mixer-circuit operation status. Value 4 is written by the controller in a - * short daily burst (~5 min) on otherwise-off circuits — a "keep valve - * operable" maintenance run (anti-seize). See issue #620. + * Mixer-circuit operation status. See issue #620. + * + * Value 4 is written by the controller in a short daily burst (~5 min) on + * otherwise-off circuits — a "keep valve operable" maintenance run + * (anti-seize). + * + * Value 2 occurs on cooling-capable systems while the circuit is cooling + * (reported for a VR 71 + VRC 700 driving aroVAIR convectors: flow target + * 10 °C at 2 versus 42.5-44 °C at 1). On those systems 1 therefore means + * "heating" rather than a generic "on"; the label is kept as `on` because + * this field used the shared `onoff` type before, and renaming it would + * change the reported state for every existing installation. */ enum Values_McStatus { off: 0, on: 1, + cooling: 2, keepValveOperable: 4, }