Here is my device:
fingerprint profileId: "0104",
deviceId: "000C",
inClusters: "0000, 0005",
outClusters: "0000, 0005, 0017",
manufacturer: "欧瑞博",
model: "75d430d66c164c26ac8601c05932dc94",
deviceJoinName: "7 Button Scene Controller"
I started with a very basic handler having only a configure and refresh sections (with buttons to invoke each) that I add/remove pieces of code from/to to piecemeal test.
Here’s my config:
def configure() {
log.debug "Setting numberOfButtons to 7"
sendEvent(name: "numberOfButtons", value: 7, displayed: false)
log.debug "Configuring Reporting and Bindings."
def configCmds = [
"zcl global send-me-a-report 0 0 0x00 0 3600 {01}", "delay 500",
"send 0x${device.deviceNetworkId} ${endpointId} 1", "delay 1000",
"zcl global send-me-a-report 5 0 0x00 0 3600 {01}", "delay 500",
"send 0x${device.deviceNetworkId} ${endpointId} 1", "delay 1000",
"zdo bind 0x${device.deviceNetworkId} 1 1 0 {${device.zigbeeId}} {}", "delay 2000",
"zdo bind 0x${device.deviceNetworkId} 1 1 5 {${devicezigbeeId}} {}", "delay 2000"
]
return configCmds + refresh()
}
And my refresh:
def refresh() {
log.debug "Starting Refresh"
log.debug "Get Clusters Called"
["zdo active 0x${device.deviceNetworkId}", "delay 2000"]
}
My parse:
def parse(String description) {
log.debug "Parsing '${description}'"
def event = zigbee.parse(description)
log.debug "$event"
log.debug "EventData: '${event.data}'"
if (event) {
sendEvent(event)
}
else {
log.warn "DID NOT PARSE MESSAGE for description : $description"
log.debug zigbee.parseDescriptionAsMap(description)
}
}
This is what that returns:
Parsing 'catchall: 0000 8021 00 00 0100 00 4AB3 00 00 0000 00 00 6700'
SmartShield(
clusterId: 0x8021, command: 0x00,
data: [0x67, 0x00], //increments - see below
destinationEndpoint: 0x00, direction: 0x00,
isClusterSpecific: false, isManufacturerSpecific: false,
manufacturerId: 0x0000,
messageType: 0x00,
number: null, options: 0x0100, profileId: 0x0000,
senderShortId: 0x4ab3, sourceEndpoint: 0x00,
text: null
)
EventData: '[103, 0]' //increments by some amount each run. resets at about 126
When I try to read attributes from cluster 5:
[
"st rattr 0x${device.deviceNetworkId} 1 5 0", "delay 200",
"st rattr 0x${device.deviceNetworkId} 1 5 1", "delay 200",
"st rattr 0x${device.deviceNetworkId} 1 5 2", "delay 200",
"st rattr 0x${device.deviceNetworkId} 1 5 3", "delay 200",
"st rattr 0x${device.deviceNetworkId} 1 5 4", "delay 200",
"st rattr 0x${device.deviceNetworkId} 1 5 5", "delay 200"
]
For each attribute, I get back:
Parsing 'read attr - raw: 4AB301000506000086, dni: 4AB3, endpoint: 01, cluster: 0005, size: 06, attrId: 0000, result: unsupported attr'
I am able to read a few results back from cluster 0
I then try adding a few scenes, and reading back scene count and current scene attributes:
log.debug "Attemping to Add some Scenes"
delayBetween([
zigbee.command(0x0005, 0x00, "0000", "01", "1111", "Test1"),
zigbee.command(0x0005, 0x00, "0000", "02", "2112", "Test2"),
zigbee.command(0x0005, 0x00, "0000", "03", "3113", "Test3"),
zigbee.command(0x0005, 0x00, "0001", "04", "4114", "Test4"),
zigbee.command(0x0005, 0x00, "0001", "05", "5115", "Test5"),
zigbee.command(0x0005, 0x00, "0001", "06", "6116", "Test6")
], 1000)
log.debug "Attempting to Read Attributes"
[
"st rattr 0x${device.deviceNetworkId} 1 5 0", "delay 200", //scene count
"st rattr 0x${device.deviceNetworkId} 1 5 1", "delay 200" //current scene
]
I get no response from the add scene commands, and the same unsupported attr results as above. I can similarly send view/remove scene commands with equal success. Not sure what to try next.
If configured for buttons, I am able to log pressed/held/released events from the device. So I could use this as a plain vanilla button controller. But I want to be able to utilize the LED’s to display the active scenes. And I can only assume that is controlled solely by the device in this case.