Is it possible to bind to multiple endpoints?

Following from the resounding success of my last question, here's another!

Same thermostat system as before, and the receiver (which attaches to the boiler) is available in a heating-only or a heating-and-hot-water variant. I have both to hand and they operate each channel by simply having heating on endpoint 5 and water on endpoint 6. Control and reporting is identical between the two endpoints, except the setpoint for water isn't used.

However, while I can bind to and receive reports from endpoint 5, this doesn't work for endpoint 6. Here's what I'm doing in the configure() method.

	String modelCheck = "${getDeviceDataByName('model')}"
	device.name = "Hive Receiver ${modelCheck}"
	setThermostatDateAndTime()

	// Reporting
	//  These had to be constructed manually as configureReporting seemed to ignore the [destEndpoint:0x06] additional parameter.
	//  NOTE! Though the water (endpoint 0x06) configuration is reported as successful, the behaviour doesn't match heating (endpoint 0x05).
	//        On early firmware some values were reported correctly, but on the latest firmware this doesn't appear to be the case.
	sendZigbeeCommands([
		"zdo bind 0x${device.deviceNetworkId} 0x05 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x05 0x0201 0x0012 0x29 1 43200 {} {}, delay 8000",				// OccupiedHeatingSetpoint

		"zdo bind 0x${device.deviceNetworkId} 0x05 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x05 0x0201 0x001C 0x30 1 43200 {} {}, delay 2000",				// SystemMode (Heating)
		"zdo bind 0x${device.deviceNetworkId} 0x05 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x05 0x0201 0x0023 0x30 1 43200 {} {}, delay 2000",				// TemperatureSetpointHold (Heating)
		"zdo bind 0x${device.deviceNetworkId} 0x05 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x05 0x0201 0x0024 0x21 1 43200 {} {}, delay 2000",				// TemperatureSetpointHoldDuration (Heating)
		"zdo bind 0x${device.deviceNetworkId} 0x05 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x05 0x0201 0x0029 0x19 1 43200 {} {}, delay 8000",				// ThermostatRunningState (Heating)

		"zdo bind 0x${device.deviceNetworkId} 0x06 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x06 0x0201 0x001C 0x30 1 43200 {} {}, delay 2000",				// SystemMode (Water)
		"zdo bind 0x${device.deviceNetworkId} 0x06 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x06 0x0201 0x0023 0x30 1 43200 {} {}, delay 2000",				// TemperatureSetpointHold (Water)
		"zdo bind 0x${device.deviceNetworkId} 0x06 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x06 0x0201 0x0024 0x21 1 43200 {} {}, delay 2000",				// TemperatureSetpointHoldDuration (Water)
		"zdo bind 0x${device.deviceNetworkId} 0x06 0x01 0x0201 {${device.zigbeeId}} {}, delay 2000",
		"he cr 0x${device.deviceNetworkId} 0x06 0x0201 0x0029 0x19 1 43200 {} {}, delay 2000"				// ThermostatRunningState (Water)
	])

	ArrayList<String> cmds = []
	cmds += zigbee.configureReporting(0x0201, 0x0000, 0x29, 1, 60)		// Temperature Reporting
	sendZigbeeCommands(cmds)

After that I'm merrily receiving heating reports on 5, but nothing on 6. I haven't tried resetting things and just requesting binds on 6, basically because that's more of a faff than asking this question. :slight_smile:

Is there any reason from a Hubitat perspective that this shouldn't be working? Or is it something I just have to live with, as I can poll for values if necessary. I just don't really want to, as it's much nicer for it to report in itself.

Sorry, I've just whipped this straight out of code I was messing about with, seeing if a longer delay after the last endpoint 5 message would do anthing. Clutching at straws. It was the same deal with the normal delay value.

1 Like

Never done this myself, but I have seen code like this which apparently binds to multiple endpoints. The raw command doesn't look different from yours though.

Another thing to try might be to stick a mfg code in there and see if it makes a difference.

"zdo bind 0x${device.deviceNetworkId} 0x06 0x01 0x0201 {${device.zigbeeId}} {MFG_CODE_HERE}, delay 2000",

(a different kind of straw to grasp as 0x0201 is obvs a std cluster... no doubt apparent I've been doing a little bit of this kind of trial and error last couple of days :slight_smile: )

1 Like

Cheers, but no beans... switched it to report every 60s and endpoint 5 respects it, but nothing from endpoint 6 - even though it sent back the same 0000 "success" response to the bind. :confused:

1 Like

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.