How is fingerprint used to identify driver?

How does Hubitat identify which driver to use when a device is paired?

When I went through the pairing process, I was surprised that most of my devices did not find even a generic matching driver and instead were left as normal "Device" type and had to be manually changed to get even basic features working.

In looking back at the screenshots I took during the pairing process, it looks like the payload reported during pairing should have enough details to infer a better base driver than "Device" (which does nothing).

During pairing:

What the IDE shows now:

Shouldn't this map to something like:

0x86 = VERSION
0x26 = SWITCH_MULTILEVEL <<< Dimmable Switch <<<<

0x20 = BASIC

We do a direct string match on inClusters, the remainder of the attributes are used as weighted tie breakers. We will probably implement something a bit more sofisticated in the future.


I had the same problem. Out of my dozen or more GE switches and Zooz switches they all came up as Device. None of them were identified correctly. Most of what I have is kinda “standard” and should be identified.

Am I understanding correctly that it requires an exact match of the inClusters as a raw string/byte array? So even if two fingerprints came in with the exact same clusters but in a different order they wouldn’t necessarily be recognized with the same driver?

Parsing out the inClusters and fingerprinting based on the command classes seems like it would provide huge gains in ease-of-use for end users.

I know I’m preaching to the choir here, but in my example above, the 0x26 SWITCH_MULTILEVEL command class could be used to identify that it’s a dimmable switch and at least try to use the Generic Z-Wave Dimmer driver.

1 Like

correct, an exact match, it is trimmed of white space.
Sure, splitting it up via clusters is the obvious solution to this.
Getting into the meat of the device identification is not as simple to test as you might think.
It’s been on my rather long list of shortlisted items.