@msiekkinen This is great!!! So what did the final install look like? Has it held up?
-
We are today announcing a Beta release of some new features in the Hub SDK that can be used together with Flic Twist.
In order to seamlessly continue to work with the rest of your smart home devices that you might have assigned to other triggers on the Flic Twist, we introduce the concept of Virtual Devices. A Virtual Device is handled by the Flic Hub firmware just like any other supported real device, but its functionality is implemented by the user in the Hub SDK, typically by writing some kind of bridge software that sends commands and receives update events over the LAN to/from the real device. If for example the brightness of a (real) light is changed by some external means, it is possible to tell the Flic Hub firmware from javascript about the new brightness level, which the hub then forwards to the Flic Twist, so that the LED status can update accordingly. That way when you twist it, it will start from the correct position.
We are also adding a "message" action that can be used to send arbitrary strings to your scripts whenever the action is triggered. The intended use case is to be able to trigger custom code also for Push/Double Push in the Selector feature or perform some action when a specific point is reached in Advanced Dimming or Scene Blender.
The virtual devices can be created in the Flic App and be set to be controlled by a Flic Twist as follows:
IMG_9799.png
IMG_9797.png
Using this piece of code, updates are received in your javascript code after configuring a virtual device to be triggered in the Flic App for a specific Flic Twist:
const flicapp = require("flicapp"); flicapp.on("virtualDeviceUpdate", (metaData, values) => { // The values object can contain hue, saturation, brightness, colorTemperature, volume, position (for blinds) console.log(`Twist ${metaData.buttonId} updated virtual device ${metaData.virtualDeviceId} of type ${metaData.dimmableType} with these values: ${JSON.stringify(values)}`); });When a device is modified externally, we use this function to inform the system of the change:
flicapp.virtualDeviceUpdateState(dimmableType, virtualDeviceId, values);The dimmableType can be either "Light", "Speaker" or "Blind". The values is an object containing at least one of the fields mentioned above that is appropriate for the corresponding dimmableType. For example:
flicapp.virtualDeviceUpdateState("Light", "my_ceiling_light", {hue: 0.6, saturation: 0.7, brightness: 0.8});The values themselves are always floating point numbers between 0 and 1.
Configure an action message to be triggered by assigning the following action in the Flic app:
IMG_9798.png
The action messages are easy to receive, just register a listener as follows:
flicapp.on("actionMessage", message => console.log(`Got a message: ${message}`));We'd love to hear your feedback!
-
-
TL;DR: If you use Home Assistant, getting programmatic access to Flic Twist events is doable.
alt text
https://youtube.com/shorts/vk94HH6OKEI?si=wHioNnW3-7Nc5gYW
This video shows using the twist events to switch pandora radio stations. Each of the 25 clicks on the twist is a station.
These instructions are my best recollection of setting it up and not what actually happened. If you run into something that isn’t right, I’m happy to update this post or answer a question.
ALSO: If you know of a simpler way to work programmatically with the Flic Twist, please let me know! This was born from me wondering if it would take less time to do this than to keep checking this forum to see if the Twist SDK was available yet.
Have Home Assistant: I use Home Assistant OS on a Raspberry Pi 4. Add Matterbridge: Install Matterbridge to connect Flic devices with Home Assistant. Follow the setup to get a QR code and register your devices in the Flic app under “Providers -> Matter.” Matterbridge expos
https://github.com/t0bst4r/matterbridge-home-assistant-addon?tab=readme-ov-file Configure a Virtual Light: Install the Home Assistant File Editor.
https://github.com/home-assistant/addons/blob/master/configurator/DOCS.md Edit configuration.yaml to add a virtual light. Example configuration: light: - platform: template lights: album_dial: friendly_name: "Album Dial" level_template: "{{ states('input_number.album_dial_brightness') | int }}" value_template: "{{ is_state('input_boolean.album_dial_switch', 'on') }}" turn_on: - service: input_boolean.turn_on target: entity_id: input_boolean.album_dial_switch - service: input_number.set_value target: entity_id: input_number.album_dial_brightness data: value: 255 turn_off: service: input_boolean.turn_off target: entity_id: input_boolean.album_dial_switch set_level: - service: input_boolean.turn_on target: entity_id: input_boolean.album_dial_switch - service: input_number.set_value target: entity_id: input_number.album_dial_brightness data_template: value: "{{ brightness }}" 4. Restart Home Assistant. Your virtual light (album_dial) should appear in the Matterbridge logs. 5. Link Flic Twist to Virtual Light: In the Flic app, go to your Twist settings -> Brightness -> Link to album_dial. Turning the dial now adjusts the brightness.Optional: Use MQTT for Custom Events
If you want to integrate with the Flic Hub or other systems, publish MQTT events from Home Assistant:
Install Mosquitto Broker: Add the Mosquitto addon in Home Assistant. Set up Automation: Edit automations.yaml to publish events to MQTT: - id: publish_album_dial_to_mqtt alias: Publish Album Dial State to MQTT trigger: - platform: state entity_id: light.album_dial action: - service: mqtt.publish data: topic: home/album_dial/switch payload: > { "state": "{{ 'on' if state_attr('light.album_dial', 'brightness') | int > 0 else 'off' }}", "brightness": "{{ state_attr('light.album_dial', 'brightness') | int }}", "timestamp": "{{ now().timestamp() | int }}" } retain: true Restart Home Assistant: You should now see MQTT events in the logs or an MQTT client like MQTT Explorer.Flic Hub Integration Example
If you want to work with the Flic Hub, you can subscribe to these MQTT events:
var mqtt = require("./mqtt").create("HOME_ASSISTANT_IP", { port: 1883 }); mqtt.on("connected", function () { console.log("Connected"); mqtt.subscribe("home/album_dial/switch"); }); mqtt.on("publish", function (pub) { console.log("Received: ", pub.message); // Example: const message = JSON.parse(pub.message); }); mqtt.connect();
1. Start a Flic Hub Project: Use flic-hub-sdk-mqtt-js.
2. Subscribe to MQTT Events: Example main.js script:Hope this helps someone!
-
I am unable to find a way to disconnect the device that is currently connected to the hub/Flic button. I want to connect a new divide (add phone), but can't until the current one is disconnected. I get the message saying there is another device connected and it needs to be disconnected before continuing with the new device.
I tried the hard reset (pressing/holding the button for 15 sec), but that didn't do anything, and I am still unable to connect the new device.
I need this sorted asap as ATM my flic button is not working with the current setup. Help anyone?