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.
EheimDigitalHub._parse_usrdta(hub.py) dispatches eachUSRDTAannouncement to exactly one device class based onEheimDeviceType(usrdta["version"]):A professionel 5e 600T (and presumably other "T" thermo-filter models) reports itself as a single
USRDTAwithversion: 4(VERSION_EHEIM_EXT_FILTER) andtankconfig: "WITH_THERMO". Interestingly,EheimDigitalFilter.filter_model_namealready recognizes this combination:...but only cosmetically --
EheimDigitalFilterhas no heater data/control at all, soclimate.py(which needs anEheimDigitalHeaterinstance) 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_PARAMon 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:sollTemp/isTempparse exactly likeEheimDigitalHeater.current_temperature/target_temperaturealready expect (value / 10), and aSET_EHEATER_PARAMbuilt the same wayEheimDigitalHeater.set_eheater_paramdoes works correctly.Suggested fix: when a
VERSION_EHEIM_EXT_FILTERdevice'sUSRDTAhastankconfig == "WITH_THERMO", also requestGET_EHEATER_DATAfor that MAC and expose the heater's read/write surface (either by givingEheimDigitalFilteraheatersub-object with the same interface asEheimDigitalHeater, or by additionally registering a heater device for the same MAC) soclimate.pypicks it up.Happy to test a patch against real 600T hardware if useful.