EDIT: If the bind/unbind services would be implemented then we could send the required bind requests through the developer tools with less limitations than the current bind/unbind functionnality.
The original goal, in summary, I would like a Thermostat use the temperature sent by a separate sensor which seems to require binding and RemoteSensing configuration.
The RemoteSensing configuration could be set using the developer tools, but the binding is not currently available.
The binding of a Temperature Measurement In cluster to a Temperature Mesurement Out cluster of compatible devices should be proposed in the UI.
Discussion
As far as I understand it a HVAC device such as a Thermostat can receive the temperature from a remote sensors if attribute 0x201/0x001a RemoteSensing is correctly set.
I believe that the remote sensor has to be bound to the thermostat. TI’s sample implementation show that it accepts incoming temperature reports and uses them as the “LocalTemperature” in zclSampleThermostat_ProcessInReportCmd .
And I believe that this is possible if the Thermostat has a “TemperatureMeasurement” output cluster.
I am trying to set this up in Home Assistant, but I think it all boils down to zigpy functionnality. I’ve been able to bind a remote control to a light bulb (through a group) for instance, but I can’t bind the temperature sensor to the Thermostat.
I have a Thermostat that has the appropriate output cluster:
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=0, maximum_buffer_size=80, maximum_incoming_transfer_size=160, server_mask=10752, maximum_outgoing_transfer_size=160, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": 260,
"device_type": "0x0301",
"in_clusters": [
"0x0000",
"0x0001",
"0x0003",
"0x0201"
],
"out_clusters": [
"0x0003",
"0x0402"
]
}
},
"manufacturer": "Private",
"model": "Private",
"class": "zigpy.device.Device"
}
and a temperature sensor with input cluster:
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=0, maximum_buffer_size=80, maximum_incoming_transfer_size=160, server_mask=0, maximum_outgoing_transfer_size=160, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": 260,
"device_type": "0x0302",
"in_clusters": [
"0x0000",
"0x0001",
"0x0003",
"0x0402",
"0x0405"
],
"out_clusters": [
"0x0003"
]
}
},
"manufacturer": "eWeLink",
"model": "TH01",
"class": "zigpy.device.Device"
}
But only the coordinator shows up in the bindable devices and the Temperature Measurement cluster does not appear amongst the bindable clusters.
The use for this is when the Thermostat mounted on the valve is measuring a temperature that is too high because the radiator is in some kind of enclosure with the thermostatic valve, or - in my case - when the Thermostat is between the radiator and the wall with a gap between the radiator and the wall that is less than 10 cm with limited air flow due to a library cabinet.
So how to set this up using zigpy & Home Assistant?