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_id” naar 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
Recente reacties