Alle mogelijkheden, beslissingen en resultaten van de bouw van onze passieve energie-plus woning

Flic2 buttons koppelen aan HomeAssistant

Start

In 2019 heb ik meegedaan aan een kickstarter project; Flic2-buttons . Kleine en heel simpele knopjes met een langhoudbare knoopcel-batterij. De bedoeling is dat je zo’n knopje ergens onopvallend kan plaatsen en met indrukken iets kan laten starten.

FlicHub

De flic-button werkt met Bluetooth. De eerste versies konden alleen verbinding maken met een telefoon. Dat is wel lastig als je iets wil doen en de persoon met de telefoon is er niet. Met dit project hebben ze er nog iets aan toegevoegd; een hub. De FlicHub maakt via bluetooth verbinding met de flic-buttons en via WiFi (of een kabel) met het netwerk in het huis. Op deze manier heeft de button dus 24u/dag verbinding met het netwerk.

HomeAssistant

De knoppen zouden via Bluetooth verbinding kunnen maken met een ontvanger in de RaspberryPi (RPI) met HomeAssistant. In HomeAssistant is er een integratie  en er moet dan op de RPI een service “flicd” worden geïnstalleerd zodat er kan worden geluisterd naar binnenkomende signalen. Ondanks uitzoekwerk en pogingen is me dat niet gelukt. Het kan liggen aan de beperkte WiFi/USB/Bluetooth combinatiemogelijkheden van de Raspberry.

FlicHub-component

Daarom wilde ik graag een poging doen om met HomeAssistant de FlicHub te benaderen. Er is nog geen functionaliteit gemaakt door de community. Ook navraag bij de makers van Flic (ShotcutLabs) leverde in eerste instantie niet veel op. In september wilde ik weer heel graag de Flic-buttons gaan gebruiken voor sturing van de domotica, dus nieuwe moed verzameld om zowel bij ShortcutLabs als bij de HomeAssistant-community na te vragen wat de mogelijkheden zijn en hoe het aan te pakken. Ik begon me al voorzichtig in te lezen in Gitlab, pull-requests, forken van andere source etc. Behoorlijk complex om als nieuweling in te duiken.

FlicHub SDK Firmware

Van ShortcutLabs kreeg ik het bericht dat ik speciale firmware moest hebben om de FlicHub te benaderen. Terwijl ik me via een google-formulier inschreef en wachtte op automatische update van de firmware dook ik in JavaScript, waarmee de SDK te benaderen moest zijn. Online allemaal trainingen volgen en meteen ook Visual Source Code leren en installeren want dat is het meest gebruikelijk bij JavaScipt.

Toen ik de update kreeg, was er ook een beschrijving van hoe de SDK te benaderen, met voorbeelden in JavaScript hoe een en ander aan te pakken.

Wat bleek het geval; je kan via een speciale url de FlicHub benaderen en op het device JavaScript schrijven en draaien. Als de FlicHub een signaal van een button ontvangt kan je code laten uitvoeren. Na wat testscripts had ik snel een werkende code; bij een ‘click’, een ‘double-click’ en een ‘hold’ stuurt het script een http-bericht.

console.log("JavaScript started");
var buttonManager = require("buttons");
var http = require("http");
var baseurl = "http://192.168.xxx.xxx:8123/api/webhook/";

buttonManager.on("buttonSingleOrDoubleClickOrHold", function(obj) {
    var button = buttonManager.getButton(obj.bdaddr);
    var clickType = obj.isSingleClick ? "click" : obj.isDoubleClick ? "double_click" : "hold";
    var url = baseurl + button.name + "_" + clickType;

    http.makeRequest({
        url: url,
        method: "POST",
        headers: {"Content-Type": "application/json"},
        content: JSON.stringify({"serial-number": button.serialNumber, "click-type": clickType}),  }, function(err, res) {
        if (!err) {
          console.log("url send: " + url);
        }
        else {
            console.log("Error sending message over http about " + button.name + ": " + clickType + " - ERROR " + res.statusCode );
        }
    });
});

console.log("JavaScript running")

De Flichub stuurt via het JavaScript een http-POST-request via de url “http://192.168.xxx.xxx:8123/api/webhook/webhook_idnaar HomeAssistant. Het laatste deel, het webhook_id’ bepaald het script zodat HomeAssistant onderscheid kan maken tussen de verschillende knoppen en de manier van indrukken.

Ontvangst bericht door HomeAssistant

HomeAssistant kan het bericht van de FlicHub ontvangen door een ‘Webhook’. Elke combinatie van button en actie heeft een eigen Webhook-ID, bijvoorbeeld “Flic21_click” en “Flic23_hold”. En aangezien elke actie wat anders kan doen, is het nodig elke actie apart op te stellen; als automatisering. In de UI gaat dat tegenwoordig eenvoudig:

  • Naam: “Klik op button 1 doet de woonkamerlampen uit”

  • Modus “in de wachtrij plaatsen” (zodat als je meerdere keren drukt de actie sowieso wordt uitgevoerd)

  • Trigger: type Webhook, ID “FLic21_click”

  • Actie: Activeer scene, ‘scene.woonkamerlampen uit’

De automation ziet er in yaml als volgt uit:

– id: ‘>>automatisch<<‘
alias: Flic21_click is avondlampen uit
description: Onderneem actie als een http POST binnenkomt = webhook flic21_click
trigger:
– platform: webhook
webhook_id: Flic21_click
condition: []
action:
– scene: scene.woonkamerlampen_uit
mode: queued
max: 5

Resultaat

Als nu op een button wordt gedrukt, stuurt deze een bericht naar de FlicHub via Bluetooth.
De FlicHub draait een script en stuurt via Wifi een http-POST met een ID naar HomeAssistant.
HomeAssistant start een automation welke een gewenste actie kan uitvoeren.

Mijn ingestelde functies:

  • Alle woonkamerlampen uitdoen (bij het naar bed gaan)

  • Woonkamerlampen op een stand ideaal voor TV kijken

  • Woonkamerlampen aan als het nog te vroeg voor de automaat is (‘vroeg op’)

  • Toggle (aan of uit) de lamp in de bijkeuken terwijl je niet bij de schakelaar bent

  • Toggle (aan of uit) de keukenspots terwijl je niet bij de schakelaar bent

Kan het ook anders?

Nu ik alles wat meer begin te snappen, zie ik ook wat er nog eenvoudiger kan;

Het maken van het script is niet beslist noodzakelijk. Via de app kan je de FlicHub instellen dat bij een actie er een http-POST bericht wordt verstuurd. Dat moet dan wel voor elke actie en button opnieuw; dus drie per button. Je kan dan wel variëren per actie wat het ID is.

En het nadeel hier is dat je niet heel internet afstruint naar hoe je JavaScript moet schrijven, hoe je Visual Source Code installeert en gebruikt en hoe je changes uitvoert in integraties van HomeAssistant. Ik heb een hoop geleerd dus.

Handleiding van de Flic Hub SDK

Via http://myhub.flic.io/static/tutorial/ kom je bij de ingebakken handleiding van de FlicHub SDK. De beschikbare routines zijn uitgebreid beschreven in een open google-docs-document 

Waar te koop?

De Kickstarter en Indiego-acties zijn voorbij, tegenwoordig zijn ze direct te koop in de flic-shop: https://flic.io/shop

4 reacties

  1. Mike Powell

    I’m sorry I don’t speak Dutch, but I wanted to thank you for writing this up. As far as I can tell it’s the only reference on the entire internet for connecting Home Assistant to a Flic Hub and it was extremely helpful! My Flic buttons are now controlling my HA automations and I couldn’t be happier. (And I won’t need to return the buttons and hub, since HA was my only reason for buying them in the first place.) Thank you!

    • ZonAdministrator

      Thanks for your message. I thought about writing something in Englisch but the quality would be very poor and all other stories are in dutch also. I am glad you could still follow it (google-translate?) and worked out fine. I use some of my flic-buttons every day and are also very happy with it.

  2. Niels

    Hey,

    Ik durf het bijna niet toegeven maar ik geraak niet veel wijzer van je uitleg. Enige kans dat je nog wat extra informatie hebt? Zodat een absolute noob er weg mee kan?

    • ZonAdministrator

      Ik kan niet zo goed inschatten waar je de weg kwijtraakt;
      Het koppelen is denk ik niet geschikt voor een absolute noob, dan adviseer ik
      – koppelen van Flic-button in de Flic-app
      – stuur http-bericht bij indrukken, instellen in de app
      – in HomeAssistant een ontvangen http-bericht (=’Webhook’) verwerken als trigger in een automatisering
      Eerst twee is wel door uitproberen van de app te volgen denk ik. Laatste stap in HA zou ik dan op googlen of youtube.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

© 2021 Eco Zonnewoning

Thema gemaakt door Anders NorenBoven ↑