Skip to content

UltraTemp ETi Dual heat mode reports as raw HEAT_MODE 5 #72

Description

@patrickehughes

Summary

Pentair UltraTemp ETi hybrid heaters can report and accept a ScreenLogic heat mode value of 5 for the app's Dual mode. screenlogicpy currently only defines HEAT_MODE values 0..4 and validates heat modes with 0 <= mode < 5, so callers cannot set Dual and consumers such as Home Assistant fail when they read mode 5.

Observed behavior

On a Pentair ScreenLogic system with an UltraTemp ETi Hybrid Heater:

  • Gas Only reports as raw heat mode 2
  • H.Pump Only reports as raw heat mode 3
  • Dual reports as raw heat mode 5
  • The Pentair app's Hybrid option fell back to H.Pump Only on this system, so I am not proposing a separate Hybrid value here

When the heater is in Dual mode, Home Assistant's ScreenLogic climate entity raises:

ValueError: 5 is not a valid HEAT_MODE

The exception happens when Home Assistant calls:

HEAT_MODE(self.entity_data[VALUE.HEAT_MODE][ATTR.VALUE]).name.lower()

Packet capture evidence

I captured traffic while setting Dual from the official Pentair app. The app sent a normal SetHeatMode request for spa body 1 with heat mode 5.

The relevant payload was:

6c00fa300c000000000000000100000005000000

Decoded:

  • 0x30fa little-endian = 12538, matching the SetHeatMode - 1 action used by ScreenLogic clients
  • payload length 12
  • controller id 0
  • body 1
  • heat mode 5

Local validation

I added a small local Home Assistant custom service that bypasses only the screenlogicpy heat-mode validator for mode 5 and calls the existing low-level async_request_set_heat_mode with body=1, mode=5.

With that local workaround:

  • the controller accepts the command
  • the heater switches to Dual
  • once HEAT_MODE is patched locally to include DUAL = 5, Home Assistant reads the climate preset as dual

Suggested fix

In screenlogicpy.device_const.heat.HEAT_MODE, add:

DUAL = 5

And allow mode 5 in ScreenLogicGateway._is_valid_heatmode.

If you prefer to gate this on equipment flags, the system reports EQUIPMENT_FLAG.HYBRID_HEATER, but the raw mode itself appears to be a normal ScreenLogic heat mode value for UltraTemp ETi systems.

Downstream impact

Home Assistant currently pins screenlogicpy==0.10.2 for its ScreenLogic integration. Once screenlogicpy supports HEAT_MODE.DUAL, Home Assistant can expose Dual as a climate preset for systems with EQUIPMENT_FLAG.HYBRID_HEATER and avoid crashing when the controller reports mode 5.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinghome assistantChanges required in Home Assistant

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions