Releases: MattieGit/qube_heatpump
v2026.2.4
Bug fixes
Fix: total_increasing sensors reporting false decreases after HA restart (#27)
Energy and working hours sensors with state_class: total_increasing could report a tiny decrease (e.g. 7353.69 → 7353.68) after a Home Assistant restart, triggering the warning "state is not strictly increasing".
Root cause (two bugs):
- Cross-cycle cache loss — The monotonic clamping cache was stored via
hass.data.get(DOMAIN, {})which silently created a temporary dict each update cycle. This meant the clamping logic was ineffective across polling intervals. - Cross-restart cache loss — The in-memory cache was lost on HA restart, so the first register reading (subject to float32 precision jitter) could round slightly below the last recorded state.
Fix:
- The monotonic cache is now stored as a coordinator instance attribute (fixes cross-cycle)
- The cache is persisted to disk every 5 minutes via HA's
Storehelper (fixes restart) - On startup, the cache is restored from disk before the first coordinator refresh
Closes #27
2026.2.3
What's new
Virtual thermostat
Control your Qube heat pump using an external room temperature sensor — no LinQ thermostat needed.
- HVAC modes: Off, Heat, Cool, and Heat/Cool (auto-switching)
- Hysteresis control: Activates
modbus_demandwhen temperature drifts outside the target ± 0.3°C tolerance - Cooling support: Automatically switches
bms_summerwinteron/off depending on the selected mode - State persistence: Target temperature and HVAC mode survive Home Assistant restarts
- Safety timeout: If the temperature sensor stops reporting for 30 minutes, demand is turned off and a problem binary sensor (
thermostat_sensor_timeout) is activated
DHW schedule
Schedule daily domestic hot water heating at a fixed time — useful when the LinQ thermostat is disabled and no longer manages DHW.
- Configure a setpoint (40–65°C), start time, and end time
- At the start time the integration writes the setpoint to the heat pump and activates DHW heating
- At the end time DHW heating is turned off
How to enable
Both features are disabled by default. To enable them:
- Go to Settings → Devices & Services → Qube Heat Pump → Configure
- Toggle Enable virtual thermostat and/or Enable DHW schedule
- Follow the additional configuration steps that appear
Other changes
- Fixed pre-existing ruff lint warnings
- Version bump to 2026.2.3
Full Changelog: v2026.2.2...2026.2.3
Full Changelog: v2026.2.2...2026.2.3
v2026.2.2
⚠️ BREAKING CHANGES (since 2026.1.4) - Please Read Before Updating
This release contains breaking changes that may affect your existing setup. Automations, dashboards, and scripts referencing entity IDs may need to be updated.
Breaking: Entity ID Changes
- Label prefix now always included: All entity IDs now include the device label prefix (e.g.,
sensor.qube_temp_supplyinstead ofsensor.temp_supply) - Removed redundant
qube_prefix: Entity IDs no longer have a redundantqube_prefix after the label (e.g.,sensor.qube_temp_supplyinstead ofsensor.qube_qube_temp_supply) - Renamed CV/SWW to CH/DHW: All entity names and IDs now use international terminology (Central Heating/Domestic Hot Water) instead of Dutch abbreviations
Breaking: Configuration Changes
- Language setting removed: The "Language for entity names" option has been removed from the options flow (it was stored but never actually used)
- Control switches moved: "Activate central heating", "Activate DHW heating", "Activate summer mode (cooling)", and "Start Anti-legionella" switches moved from Configuration to Controls section
- Removed redundant entity:
number.setpoint_dhw_setpointremoved (usenumber.tapw_timeprogram_dhwsetp_nolinq_setpointinstead)
Breaking: Architecture Overhaul
- Major refactoring for Home Assistant core compatibility
- Now uses
python-qube-heatpumplibrary instead of direct pymodbus usage
Note: Entity IDs are stored when first created. To get corrected entity IDs, reload the integration first (Settings → Integrations → Qube → Reload). For multi-device setups, you may need to remove both integrations and re-add them to get properly isolated entity registrations.
What's Changed in 2026.2.2
New Features
- Writable heating/cooling override setpoints: Registers 101 (
usr_pid_heatsetp) and 103 (usr_pid_coolsetp) can now be written via thewrite_registerservice and via the new number entities in the UI. This fixes the error "No writable entity found at address 101" for users who override the weather-dependent heating curve from Home Assistant automations. - Daily energy tracking: Added daily energy sensors for electric consumption and thermic yield (total, CH, and DHW split)
- Configurable entity ID prefix: New "Entity ID prefix" option in integration settings
Fixes
- Percentage sensors: Fixed pump/valve/demand sensors (
aout_usrpmp_val,aout_srcpmp_val,aout_srcvalve_val,dhw_regreq,comppwrreq) reporting values 100x too high (e.g. 10000% instead of 100%) - Number entity translations: New setpoint entities show descriptive friendly names ("Heat setpoint (no curve)" / "Cooling setpoint (no curve)") instead of just "Qube"
- Float32 jitter: Round values before monotonic clamp to prevent float32 jitter warnings
- Coordinator lookups: Use unscoped data keys for coordinator lookups
- Multi-device support (#25): Fixed entity corruption when adding a second heat pump
- Entity ID prefix preservation: Fixed "Recreate entity ID" removing the label prefix
- COP sensor precision: Fixed excessive decimals, added update throttling
- Byte order: Corrected Float32 decoding from little endian to big endian
- Room temperature: Returns unknown instead of -999 when sensor not installed; disabled by default
- Many translation and naming fixes: See pre-release notes for full details
Requirements
- python-qube-heatpump >= 1.5.1
Full Changelog: 2026.1.4...v2026.2.2
v2026.2.1
What's Changed
- feat: Enable writing to heating/cooling override setpoint registers (101 and 103) via the
write_registerservice. This fixes the error "No writable entity found at address 101" for users who override the weather-dependent heating curve from Home Assistant automations. - fix: Add number entity translations so the new setpoint entities show descriptive names instead of just "Qube".
- fix: Round values before monotonic clamp to prevent float32 jitter warnings.
- fix: Use unscoped data keys for coordinator lookups.
Upgrade notes
Requires python-qube-heatpump library v1.5.0+ (installed automatically).
v2026.1.14
Changes
Fixed
- Energy sensor total_increasing warning - Fixed Home Assistant recorder warning where energy sensors (
energy_total_thermic,energy_total_electric) occasionally reported a 0.01 decrease due to float32 precision jitter (Issue #26)
Technical Details
- Root cause: the monotonic clamp in the coordinator operated on raw float values, but Home Assistant saw rounded values (2 decimal places for kWh). After an HA restart (when the in-memory cache is empty), float32 jitter from the modbus hardware could produce a rounded decrease (e.g.
4781.90→4781.89) - Fix: values are now rounded to their configured precision before the monotonic clamp, so the cache and HA always operate at the same precision
- Added test reproducing both exact scenarios from the issue report
v2026.1.13
Changes
Fixed
- Multi-device entity duplication - Fixed issue where adding a second heat pump caused all entities of the first heat pump to be duplicated with
_3suffix (Issue #25)
Technical Details
- Unique IDs are now always scoped with
host_unitprefix, regardless of single or multi-device mode - Removed the code that reloaded existing entries when adding new devices (no longer needed)
- This ensures stable unique IDs when adding/removing devices
Migration
IMPORTANT: Users with existing multi-device setups who experienced duplication should:
- Remove ALL Qube Heat Pump integrations
- Restart Home Assistant
- Re-add both heat pumps fresh
Single-device users updating from v2026.1.12 or earlier will also need to remove and re-add the integration once due to the unique_id format change.
v2026.1.12
Changes
Fixed
- Alarm group entity IDs - The alarm group was being populated with stale entity IDs from the entity registry. Now constructs entity IDs directly from vendor_id to ensure consistency with the actual entity IDs.
Notes
- This fixes the "Unknown group members" error from Spook after updating to v2026.1.11
- No need to remove/reinstall the integration - just update and restart Home Assistant
v2026.1.11
Changes
Fixed
- Entity IDs now use vendor_id - Entity IDs are now stable and predictable based on
vendor_idfrom modbus.yaml (e.g.,switch.qube1_bms_summerwinterinstead ofswitch.qube1_activate_summer_mode_cooling) - Fixed entity ID generation - Changed from invalid
_attr_suggested_object_idto properself.entity_idassignment, which Home Assistant correctly processes
Notes
- Breaking change: Entity IDs will change after updating. You may need to update automations and dashboards.
- To apply new entity IDs: Remove the integration completely, restart Home Assistant, then reinstall the integration.
- Dashboard example has been updated with correct entity IDs.
v2026.1.10
What's Changed
Entity ID Naming Convention
Entity IDs now use vendor_id for stable, predictable naming that won't change when translations are updated.
Pattern: {platform}.{device_name}_{vendor_id}
Examples:
sensor.qube_temp_supplyswitch.qube_bms_summerwinterselect.qube_sg_ready_mode
Benefits
- Stable - Entity IDs won't change when translations are updated
- Predictable - Direct mapping from modbus.yaml vendor_id to entity_id
- Traceable - Easy to find modbus register documentation from entity_id
Breaking Changes
Entity IDs have changed. After updating, you need to remove and re-add the integration to get the new entity IDs.
| Old Entity ID | New Entity ID |
|---|---|
sensor.qube_heat_pump_status |
sensor.qube_status_heatpump |
sensor.qube_three_way_valve_status |
sensor.qube_drieweg_status |
sensor.qube_four_way_valve_status |
sensor.qube_vierweg_status |
sensor.qube_connect_errors |
sensor.qube_metric_errors_connect |
sensor.qube_read_errors |
sensor.qube_metric_errors_read |
sensor.qube_electric_consumption_standby |
sensor.qube_standby_energy |
sensor.qube_electric_consumption_total_incl_standby |
sensor.qube_total_energy_incl_standby |
number.qube_dhw_setpoint_manual_override |
number.qube_tapw_timeprogram_dhwsetp_nolinq |
Other Changes
- Fixed
has_entity_namehandling innumber.pyandbutton.py - Updated dashboard example with new entity IDs
- Added
CLAUDE.mddocumenting the naming convention
Full Changelog: v2026.1.9...v2026.1.10
v2026.1.9
Code cleanup
Removed redundant code after confirming the entity ID fix works correctly.
Changes
- Moved
_attr_has_entity_name = Trueto class attribute for all entity classes - Removed duplicate assignments from
__init__methods - Added class attribute to
QubeSGReadyModeSelectfor consistency
Note
If you're upgrading from a version before v2026.1.7 and entity IDs are not showing the correct qube_ prefix, you may need to remove and re-add the integration for the new entity ID format to take effect.