I have reworked your SmartThings device handler code to be a Hubitat-compatible device driver, and created a Pull Request on a fork of your GitHub repository.
You can view the differences between the ST and Hubitat code here, and copy the new code from this raw text link.
Please keep in mind since I don’t have the Securifi Key Fob, I am unable to test the code. But based on my experience so far with Zigbee device drivers on Hubitat, and the all the information from the SmartThings Community Forum thread you started when you first bought the device, I’m pretty sure this reworked code should work for you.
The key information to guess what the Hubitat would receive when the buttons are pressed comes from this post:
catchall: 0104 0501 08 01 0540 00 7CC8 01 00 0000 00 00 00303030303132333400
catchall: 0104 0501 08 01 0540 00 7CC8 01 00 0000 00 00 02303030303132333400
catchall: 0104 0501 08 01 0540 00 7CC8 01 00 0000 00 00 03303030303132333400
I am not well-versed in Zigbee IAS (Intruder Alarm Systems), but here’s what all of that represents:
0104 = Zigbee Profile: Home Automation
0501 = Cluster ID: IAS ACE (Intruder Alarm Systems - Ancillary Control Equipment)
08 = Source endpoint (your fob)
01 = Destination endpoint (the hub)
0540 00 = ?? (Likely IAS ACE specific)
7CC8 = DNI (Device Network ID)
01 00 0000 00 00 =`?? (Likely IAS ACE specific)
00303030303132333400 = Data Payload, first byte corresponds to button pressed
The most important thing we need out of all of that is that messages tagged as
cluster: 0501 contain the button number information, and the first byte of the data (e.g.,
00 corresponds to which button was pressed).
With that in mind here are the changes I made to your code:
- removed the
tile definition, because the Hubitat hub does not have a mobile app user interface
valueHex objects to
parse() function, which are grabbed from the incoming zigbee report message, because Hubitat does not parse Zigbee messages in the same way, and they are received in more of a “raw” format
if (description?.startsWith('catchall:')) to
if (cluster == "0501") because the Hubitat will receive button press messages tagged as
- on button push (cluster = 0501) the first byte of the
value: portion of the message are sent to
buttonPush() to create the event map that is sent to the hub
buttonPush() now uses two list arrays to map the Securifi button numbering to their names and their respective Hubitat button numbering
buttonPush() now returns a map back to
parse() which calls
If I was wrong about the
cluster: 0501 message, it should be fairly easy to fix by looking at the debug log messages when you press the buttons.
I hope this helps!