[OBSOLETE] Fibaro KeyFob - 30 actions, Z-Wave Plus compatible, battery-powered, compact remote control

Fibaro KeyFob is a six button Z-Wave Plus remote that enables user to execute 30 action through the combination of single, double and triple presses, holding the buttons and 6 programmable 2 to 5 button sequences. The remote can also be protected against unauthorized use by 2 to 5 button sequence (check Lock Mode configuration section below).

This DTH exposes 30 buttons and 6 switches. They are assigned as follows:

  • Buttons 1-6 - “pushed” event on physical buttons 1-6 single press
  • Buttons 7-12 - “pushed” event on physical buttons 1-6 double press
  • Buttons 13-18 - “pushed” event on physical buttons 1-6 triple press
  • Buttons 19-24 - “pushed” event on physical buttons 1-6 hold
  • Buttons 25-30 - “pushed” event on execution of sequences 1 to 6
  • Switches 1-6 - “on” event on physical buttons 1-6 hold, “off” event on physical buttons 1-6 release

Steps to configure the KeyFob:

  1. Go the the settings and change them to your liking (people who used the previous version of the DTH have to go to the settings and set the button modes again)
  2. After clicking ‘Done’ the SYNC tile will change to ‘PENDING’
  3. Press Circle + Plus on the KeyFob
  4. SYNC tile will change to ‘SYNCING’ - this can take up to 30sec
  5. If the SYNC tile changes to ‘INCOMPLETE’ repeat step 3
  6. If the SYNC tile changes to ‘FAILED’ verify your settings.

if you want to force the sync of all of the settings tap the SYNC tile. It should change to ‘FORCE’ then proceed form step 3

Lock Mode configuration:
To activate it you have to:

  • Change ‘Protection State’ to ‘Protection by sequence’ in settings
  • Set the ‘Unlocking Sequence’ to value other than 0
  • Set one or both of ‘Time To Lock’ and ‘Locking Button’ to value other than 0 (if you want to lock the KeyFob only with a button, set ‘Time To Lock’ to 0 and set ‘Locking Button’ to the number of the button you want to use to lock the KeyFob etc)

[UPDATE] 2017-04-02:

  • Added new mainTile - the main menu now shows a push button instead of battery percentage. Pressing it activates the button which number can be configured in the settings menu (Button 1 by default).

[UPDATE] 2017-04-07:

DTH source link:



[UPDATE] 2017-04-02:

  • Added new mainTile - the main menu now shows a push button instead of battery percentage. Pressing it activates the button which number can be configured in the settings menu (Button 1 by default).

[UPDATE] 2017-04-07:

1 Like

Fibaro Keyfob now available in US format. Tweet below from Fibaro USA. Ordered one :slight_smile:

Yes it is! Here is the link -> Fibaro FGKF-601 ZW5 KeyFob Z-Wave Scene Controller, White https://t.co/GgpKgPlZVN

1 Like


Firstly many thanks for the device handler it works great, really appreciated.

I have been playing around using core to trigger events and no matter what I do I cant get an action to run on button held.

I have configured the DTH with each of the 6 buttons configured as 1,2,3 Click and Hold.

I have tested the core setup with button 1 using a button pushed (When Fibaro Keyfob button #1 changes to pushed) it turns on my office lights. This works great.
I have setup button 2 to do the same but turn off the office lights (again works great).

I have setup a core basic piston that checks for button 1 being held as follows (Fibaro Keyfox Button #1 Comparison is value held to turn off the office light) When I run this nothing happens and it does not turn off the office lights.

I think I must be doing something wrong here but i’m not sure what?

Can anyone help me with my understanding of how to use this device handler with core properly?

I would like to be able to setup:

Single click actions for each button
Double click actions for each button
Press and hold actions for each button

Please can you guys help?



The first post contains information on how actions on the remote are mapped.

the point you are interested in in this case is: Buttons 19-24 - “pushed” event on physical buttons 1-6 hold

So for button 1 hold Core will receive “button 19 pushed” event. So just assign your action to that button in Core :stuck_out_tongue:

Just to explain why I did this this way. Not everyone uses Core and some SmartApps don’t allow you to configure buttons pushed and hold separately. By exposing all of the remote action as separate buttons I make it possible to use all 30 of the available actions even in the simplest SmartApps.

1 Like

I knew it would be me doing something stupid.

Just changed and it works a treat. I get it now, Thanks.

I’m having trouble to set up this Keyfob in webCoRE.
If I select “button”, it works fine, apart from the fact that the Piston fires regardless of the button I press:

I’ve also tried this to use button 2 e.g., but that does not work:

Thanks in advance.

The issue can be that I set the number of buttons just during the initialization that not always executes (especially if you didn’t install DTH before you added the remote to network).

I just updated the DTH with one that sets the number of buttons every time you click ‘Done’ in settings. Try that.

Thanks for you help guys.
I installed the updated Device Handler from Github (copied code, saved and published (I have not been able to work out when a Device Handler should be published and when not.)
I went into the settings of the KeyFob in the app on my mobile and without changing anything, clicked Done. The app asked me if I wish to changes and I tabbed yes.
Went back into webCore interface on my laptop and opened the settings of the keyfob in a piston, but unfortunately still don’t get the button numbers:

Next I tried to remove / exlude the Keyfob from the hub with the idea of adding it again, but that failed - even the “remove forcefully” option. (After executing the remove command in the app, I tried the key combination which is according to the manual necessary to exclude the device.)

I took a brand new KeyFob (as keyfob 2) out of its box; added it to the hub, checked that the correct handler was assigned;

accessed the settings in the app; added the Keyfob to webCore, added keyFob 2 as a trigger and setting the command, I still get this:

Any further ideas please?

Thanks for the suggestions. I tried all, with no luck.

Updated the handler from https://raw.githubusercontent.com/ClassicGOD/SmartThingsPublic/master/devicetypes/classicgod/fibaro-keyfob.src/fibaro-keyfob.groovy again so make sure I’ve got the latest version. Still the same.


Edit: I rebooted the Smartthings hub and that solved the issue. I’m now have the option to select on of the other buttons of the keyfob.

1 Like

Good to hear! :slight_smile:


I’m having some trouble with this DTH. Any idea what the following symptoms indicate?

  1. I get this message in the logs when clicking circle/plus to sync: java.lang.NullPointerException: Cannot get property ‘value’ on null object @ line 189

  2. When trying to use a button in a routine or smart app the screen of the smartthings app just goes blank after choosing the keyfob (instead of showing a list of buttons).

I’ll try to tinker some more.

Edit: This is what is logged when the smartthings app fails to show buttons when configuring the routine:

groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.getAt() is applicable for argument types: (java.math.BigDecimal) values: [2]
Possible solutions: getAt(groovy.lang.EmptyRange), getAt(java.lang.String), getAt(int), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(int) @ line 123

Please make sure you copied the DTH code in it’s entirety and then go to settings, check if all the fields are filled and click Done.

Hi, thanks for the quick reply! Tried all of that, still no luck. Only thing I can think of is that I copied the code on cell phone, maybe it got messed up somehow. I’ll try again from my dev box later.

Just a quick update. After excluding and including the device, the config sync now works. Unfortunately the issue with using the device in any automation still lingers:

groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.getAt() is applicable for argument types: (java.math.BigDecimal) values: [2]
Possible solutions: getAt(java.lang.String), getAt(groovy.lang.EmptyRange), getAt(int), getAt(groovy.lang.Range), getAt(int), getAt(java.util.Collection) @ line 1516

Line 1516!? this DTH doesn’t have this many lines of code. Is this an error for the KeyFob DTH or some smartapp like CoRE?

So, the error pops up in the logs when I try to use the keyfob in a routine or the Smart Lighting smart app. First I choose what bulb to turn on, then I choose what should trigger it: Button -> Fibaro Key Fob -> White screen. The white screen is where I should have been able to choose a possible button for the key fob I chose in the previous screen. I don’t know what the smartthings app calls in the DTH to retrieve that list, but that is what seems to fail. Make any sense?

1 Like

You sir just found a bug in the SmartThings platform.

It’s not a bug in my DTH - it’s a bug in the way smart things lists buttons. If the device declares more than 20 buttons (and this DTH declares 30 as it can perform 30 actions) the routine menu crashes when trying to list available buttons.

I did some testing and it’s all fine up to and including 19 buttons. Once device declares 20 or more the routines menu crashes when trying to list buttons. We probably should report this :smiley:

Nice! Thanks for helping me out here. I assume I can just modify the DTH to support less buttons. I have no idea how to report a bug though. Unless you’re planning to do it, I can look into it after work on Friday.