Skip to content

Combined filter+heater units (e.g. professionel 5e 600T) never get heater/climate entities #5

Description

@sundried78

EheimDigitalHub._parse_usrdta (hub.py) dispatches each USRDTA announcement to exactly one device class based on EheimDeviceType(usrdta["version"]):

match EheimDeviceType(usrdta["version"]):
    case EheimDeviceType.VERSION_EHEIM_EXT_HEATER:
        self.devices[usrdta["from"]] = EheimDigitalHeater(self, usrdta)
    ...
    case EheimDeviceType.VERSION_EHEIM_EXT_FILTER:
        self.devices[usrdta["from"]] = EheimDigitalFilter(self, usrdta)

A professionel 5e 600T (and presumably other "T" thermo-filter models) reports itself as a single USRDTA with version: 4 (VERSION_EHEIM_EXT_FILTER) and tankconfig: "WITH_THERMO". Interestingly, EheimDigitalFilter.filter_model_name already recognizes this combination:

case 78:
    return "professionel 5e 600T" if self.usrdta["tankconfig"] == "WITH_THERMO" else "professionel 5e 700"

...but only cosmetically -- EheimDigitalFilter has no heater data/control at all, so climate.py (which needs an EheimDigitalHeater instance) never creates anything for these units. In Home Assistant this means a 600T shows full filter control but no temperature sensor and no way to set the heater's target temperature.

I confirmed the device does happily respond to GET_EHEATER_DATA / SET_EHEATER_PARAM on the same MAC as the filter -- the heater is just never queried because nothing instantiates a heater-capable object for it. Live capture from a real 600T:

// USRDTA (relevant fields)
{"title":"USRDTA","from":"F4:CF:A2:6C:37:37","name":"Filter","version":4,"tankconfig":"WITH_THERMO", ...}

// GET_EHEATER_DATA response -- works fine, unsolicited by the library today
{"title":"HEATER_DATA","from":"F4:CF:A2:6C:37:37","mUnit":0,"sollTemp":250,"isTemp":280,
 "hystLow":5,"hystHigh":5,"offset":0,"active":0,"isHeating":0,"mode":0,
 "sync":"","partnerName":"","dayStartT":0,"nightStartT":0,"nReduce":0,"alertState":0}

sollTemp/isTemp parse exactly like EheimDigitalHeater.current_temperature/target_temperature already expect (value / 10), and a SET_EHEATER_PARAM built the same way EheimDigitalHeater.set_eheater_param does works correctly.

Suggested fix: when a VERSION_EHEIM_EXT_FILTER device's USRDTA has tankconfig == "WITH_THERMO", also request GET_EHEATER_DATA for that MAC and expose the heater's read/write surface (either by giving EheimDigitalFilter a heater sub-object with the same interface as EheimDigitalHeater, or by additionally registering a heater device for the same MAC) so climate.py picks it up.

Happy to test a patch against real 600T hardware if useful.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions