Flic Buttons server on a Docker container for Raspberry Pi

FLIC buttons can be integrated with home assistant thanks to the flic binary sensor component. For that you need the flic Linux SDK. There are already some topics on this forum about it.

Unfortunately, if you deploy this SDK on the same server as you deploy Home Assistant, the bluetooth device is then usable only for the flic buttons. Currently, there is now way to use Bluetooth for flic SDK AND for other purpose like bluetooth trackers.

Despite what you can read on some occasion, even if you have two USB chips (i.e. embedded and a USB dongle), it will conflict with bluetoothd. And currently, there is no possiblity to implement flic with bluetoothd. This is the reason why it is for now also impossible to run any flicd implementation on home assistant if bluetoothd is running (i.e. if you use bluetooth_tracker).

As an alternative, I have deported flicd on a dedicated Raspberry PI 3 as a container.

The Raspberry PI 3 is deployed with Raspbian Stretch raspbian-stretch-lite.

You can then install docker. DO NOT INSTALL NOR RUN BLUEZ or any kind of instance of bluetoothd

Once your RPI3 network is configured, you can get the docker on my repository by running the following command:

docker run -d --restart unless-stopped --cap-add NET_ADMIN --net=host --name="flicd" -v /home/autoadmin/flicd:/config superkikim/flicd-rpi3

The -d start the container in background
The --restart parameter ensure the container start at boot, unless it was stopped before reboot
The --cap-add NET_ADMIN allows the container run as a non-root user
The --net parameter indicate to bind the container to the host network
The --name parameter define the name of the container and can be whatever you want
The -v allows to save the flicd database to persistent storage, otherwise, the database will be deleted everytime the container is stopped

To check the docker log, and ensure it’s up and running, run the following command:

docker logs flicd

The result should be:
Available HCI devices found:
hci0

Trying hci0
Successfully bound HCI socket
Flic server is now up and running!
Initialization of Bluetooth controller done!

You can then add the following in your home assistant configuration:

binary_sensor:
  - platform: flic
    host: <ip address>

where is the IP address of your flicd RPI3.

Restart home assistant. You can then go back to the raspberry pi, and check the container log again. You should see a new line saying “Accepted new client”

Available HCI devices found:
hci0

Trying hci0
Successfully bound HCI socket
Flic server is now up and running!
Initialization of Bluetooth controller done!
Accepted new client

To pair a button for the first time, click and hold for at least 7 seconds.

Check your Home Assistant log to find the name of your new button. You should find a line saying “Found new button”

2018-01-01 06:28:01 INFO (Thread-2) [homeassistant.components.binary_sensor.flic] Found new button 80:e4:da:XX:XX:XX

The name of the button is flic_macaddress without column. i.e. flic_80e4daXXXXXX

You can then add the button in your automation. Below is an example of a series of action linked to one of my FLIC button. It turns on with single click the power switch where my three monitors and my port replicator are powered, and on double click, it switch them off:

- alias: 'Switch on Mac Desktop Zone'
  trigger:
    platform: event
    event_type: flic_click  
    event_data:
      button_name: flic_80e4daXXXXXX
      click_type: single
  action:
    - service: switch.turn_on
      entity_id: switch.bureau_1
    - service: switch.turn_on
      entity_id: switch.bureau_2
    - service: switch.turn_on
      entity_id: switch.bureau_3
    - service: switch.turn_on
      entity_id: switch.bureau_4
- alias: 'Turn off Mac monitors'
  trigger:
    platform: event
    event_type: flic_click  
    event_data:
      button_name: flic_80e4da7XXXXXX
      click_type: double
  action:
    - service: switch.turn_off
      entity_id: switch.bureau_1
    - service: switch.turn_off
      entity_id: switch.bureau_2
    - service: switch.turn_off
      entity_id: switch.bureau_3
    - service: switch.turn_off
      entity_id: switch.bureau_4

Thank you for your work!!!
worked well the last 3 monts but now the Flics wont connect to the seccond pi anymore =/ Troubleshooting ideas?

Available HCI devices found:
hci0

Trying hci0
hci0 is busy, shutting down and retrying…
Successfully bound HCI socket
Flic server is now up and running!
Initialization of Bluetooth controller done!
HCI socket was closed (EPIPE): Broken pipe
Waiting for HCI device to become available again…
Available HCI devices found:
hci0

Trying hci0
hci0 is busy, shutting down and retrying…
Successfully bound HCI socket
Flic server is now up and running!
Initialization of Bluetooth controller done!

1 Like