Skip to content

feat: Add full CHOICE.All device support#8

Merged
Nailik merged 9 commits into
Nailik:mainfrom
lackas:feature/choice-all-support
Jan 27, 2026
Merged

feat: Add full CHOICE.All device support#8
Nailik merged 9 commits into
Nailik:mainfrom
lackas:feature/choice-all-support

Conversation

@lackas

@lackas lackas commented Jan 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Add proper support for Blanco CHOICE.All devices (dev_type=2) with new sensors, settings, and controls. This addresses issue #6 where CHOICE.All devices connect but return limited data.

Based on version 0.0.6 with your improved connection timeout and device type detection.

New Entities

Control (Select):

  • Heating Temperature - Set boiling water temperature (60-100°C)

Sensors (Status):

  • Boiler Temperature 1 - First boiler sensor reading (°C)
  • Boiler Temperature 2 - Second boiler sensor reading (°C)
  • Cooling Compartment Temperature - Current cooling temp (°C)
  • Main Controller Status - Status code from main controller
  • Connection Controller Status - Status code from connection controller

Sensors (Settings/Diagnostic):

  • Heating Setpoint - Configured heating target temperature
  • Hot Water Calibration - Hot water calibration value (mL)
  • Medium Carbonation Ratio - Medium CO2 water ratio
  • Classic Carbonation Ratio - Classic CO2 water ratio

Files Changed

File Changes
client.py Add set_heating_temperature(), parse CHOICE.All fields from settings/status responses
coordinator.py Add set_heating_temperature() with validation
data.py Add CHOICE.All fields to BlancoUnitSettings and BlancoUnitStatus dataclasses
select.py Add HeatingTemperatureSelect (60-100°C range)
sensor.py Add 9 new sensors for CHOICE.All data
translations/en.json Add translations for all new entities

Backwards Compatibility

All new fields have defaults (0, 0.0) so drink.soda devices continue to work without changes. The HeatingTemperatureSelect only shows as available when set_point_heating > 0.

Testing

  • Tested on real CHOICE.All hardware (CHOICE.All-172)
  • Home Assistant 2026.1.3 on Raspberry Pi
  • All sensors populate correctly
  • Heating temperature control verified working

Test plan

  • Verify drink.soda devices still work (no new fields expected)
  • Verify CHOICE.All devices show all new sensors
  • Test heating temperature control changes value on device
  • Run existing test suite

Add proper support for Blanco CHOICE.All devices (dev_type=2) with new
sensors, settings, and controls. This addresses issue Nailik#6 where CHOICE.All
devices connect but return limited data.

New features:
- Heating Temperature control (60-100°C select entity)
- Boiler Temperature sensors (temp_boil_1, temp_boil_2)
- Cooling Compartment Temperature sensor
- Main/Connection Controller Status sensors
- Heating Setpoint sensor
- Hot Water Calibration sensor
- Medium/Classic Carbonation Ratio sensors

Changes:
- client.py: Add set_heating_temperature(), parse CHOICE.All fields
- coordinator.py: Add set_heating_temperature() with validation
- data.py: Add CHOICE.All fields to Settings and Status dataclasses
- select.py: Add HeatingTemperatureSelect (60-100°C)
- sensor.py: Add 9 new CHOICE.All sensors
- translations/en.json: Add translations for all new entities

All new fields have defaults for backwards compatibility with drink.soda
devices.

Tested on real CHOICE.All hardware with HA 2026.1.3.
@lackas lackas mentioned this pull request Jan 27, 2026
Comment thread custom_components/blanco_unit/select.py
Comment thread custom_components/blanco_unit/sensor.py Outdated
Comment thread custom_components/blanco_unit/sensor.py
- Add entity_registry_visible_default to hide CHOICE.All entities on drink.soda
- Restore DeviceTypeSensor and DeviceIdSensor
- Update test for split temperature params classes
- Add translations for device_type and device_id sensors
@lackas

lackas commented Jan 27, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the review! I've addressed all feedback in the latest commit:

  • Added entity_registry_visible_default to HeatingTemperatureSelect and all CHOICE.All sensors (returns True only for device_type == 2)
  • Restored DeviceTypeSensor and DeviceIdSensor
  • Fixed the test for the split temperature params classes

Ready for another look when you have time.

lackas and others added 5 commits January 27, 2026 23:12
Decode main_controller_status bitmask into meaningful binary sensors:
- Heater Active (bit 13/0x2000): Boiler heater element is running
- Compressor Active (bit 14/0x4000): Cooling compressor is running

Analysis of real device data shows:
- Bit 14 correlates with cooling cycles (~15 min intervals)
- Bit 13 correlates with heating cycles (~40 min intervals)
- Both bits are never set simultaneously (load management)

Hidden by default on drink.soda devices (only visible for CHOICE.All).
The temp_comp field measures the compressor/condenser temperature (hot side),
not the cold water compartment. It idles at ~32-34°C and spikes to ~52-55°C
when the compressor runs.

Changed icon from snowflake-thermometer to heat-wave to reflect this.
@Nailik

Nailik commented Jan 27, 2026

Copy link
Copy Markdown
Owner

I decided it's better to not add the entities at all if device_type = 1.
This works because in init in async_setup_entry the integration awaits async_config_entry_first_refresh and therefore the device_type is available once async_setup_entry is called.
I also updated the tests to cover those cases.

@Nailik Nailik merged commit 1bbdb9c into Nailik:main Jan 27, 2026
2 of 3 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.

2 participants