Je wordt er aardig mee doodgegooid, anno 2019, maar hier in huis waren ze nog niet te vinden: "smart" lampen, oftewel, lampen met een fancy manier van afstandsbediening. Als nerderig persoon was dat natuurlijk een kwestie van tijd, en intussen heb ik de eerste stapjes gezet. En dat was gelijk al ietwat bewerkelijk.

Punt is namelijk: veel van die lampen werken via wifi, en dan via de (externe) servers van de één of andere Chinese partij, iets waar ik geen zin in heb. Niet alleen omdat China, maar vooral omdat dan mijn verlichting ineens een afhankelijkheid heeft op werkend internet hier, en een werkende server aan de andere kant. Moeten we niet willen, natuurlijk.

Er is nog de keuze voor lampen die niet via wifi werken (de Hue-lampen van Philips en de TRÅDFRI-lampen van IKEA bijvoorbeeld, gebruiken het Zigbee-protocol), maar hofleverancier Action had toevallig een aanbod van relatief goedkope lampen die middels een foefje van alternatieve firmware kunnen worden voorzien.

Laat dat even bezinken. Een lampje voor naast je bed heeft tegenwoordig firmware.

Verse, vrije firmware

Normaal gesproken neem je een "smart" lamp in gebruik door hem aan te zetten, waarna hij afwacht tot je hem toevoegt in een appje op je telefoon en je er de wifi-instellingen van je eigen netwerk in vastlegt. Die hele zang-en-dansact wordt misbruikt door Tuya-Convert, die in plaats van het standaard parings-ritueel, de lamp ertoe overhaalt om een firmware-update uit te voeren, waarbij die nieuwe firmware een opensource-variant is. In mijn geval koos ik voor Tasmota, een firmwareproject dat ondersteuning biedt voor een lange lijst van IoT-apparaten, die allemaal met elkaar gemeen hebben dat ze gebaseerd zijn op de ESP8266-chipset.

Waaronder dus (een deel van) het Action-assortiment, en zo ook het E14 LSC RGB-lampje dat ik had.

Er moest alleen nog een extra horde worden genomen omdat de lamp in kwestie toevallig nog een extra chipje aan boord heeft voor het hele RGB- en dimmergebeuren - ik moest nog een nieuwe firmware bakken, iets dat met TasmotaCompiler en deze instructies vrij makkelijk ging.

En toen had ik een lampje dat op mijn netwerk te benaderen is via een simpele web-interface, en die via MQTT commando's ontvangt en statussen teruggeeft.

Brokers en controllers

Dat laatste maakt het natuurlijk allemaal een stuk interessanter, want niemand heeft tijd om in een browser met slidertjes te gaan zitten prutten om een lampje aan te zetten. Da's leuk voor één keer, maar niet bijster gebruiksvriendelijk.

Gelukkig kan het dus simpeler. De lamp is verbonden met een MQTT-broker (zeg maar een postkantoortje voor korte berichtjes, zoals "hee lamp, ga aan" of "ik ben een lamp en ik sta toevallig aan" of "ik ben een knop en ik ben net ingedrukt"). De lamp hangt daar niet als enige in, dat kantoortje is ook toegankelijk voor een door collega P. gedoneerd knopje dat op het Zigbee-protocol werkt, en met behulp van een ontvangertje en Zigbee2mqtt verbonden is met dezelfde MQTT-broker.

Het enige dat dan nog ontbreekt, is een verbinding tussen die twee, die ervoor zorgt dat een druk op de knop iets met de lamp doet. Die tussenlaag is een controller, en daar heb je er meerdere van. Ik gebruik toevallig Home Assistant, maar er zijn ook andere gratis en opensource controllers en betaalde alles-in-een-apparaten. Het is dan nog een kwestie van zorgen dat je apparatuur allemaal "bekend" is binnen je controller, en dan kun je gaan automatiseren.

Automatiseringen

Binnen Home Assistant kun je redelijk makkelijk automatiseringen van het type "als X gebeurt, doe dan Y" toevoegen. Op die manier was het redelijk goed te doen om een automatisering "als iemand op het knopje drukt, toggle dan de lamp aan of uit" te maken.

Totdat het lampje af en toe ineens vanzelf aan ging. En weer uit. En weer aan.

Het blijkt namelijk, dat die Xiaomi-knopjes ongeveer elke tien minuten een "hoi, ik leef nog" berichtje over MQTT heen gooien, en mijn automatisering was iets te simpel opgezet en werd bij elk bericht van de knop getriggerd.

Les geleerd: controleer of je triggers echt alleen maar afgaan als dat de bedoeling is.

Dat was gelukkig aan te passen, en daarna werkte het lichtknopje erg goed. Dat kwam goed uit, want na de geboorte van L. was vrouwlief niet altijd even goed in staat om in het donker naar een snoer van het nachtlampje te zoeken om daar het knopje om te klikken - een klein knopje dat binnen handbereik kon liggen, was wel een uitkomst.

Les geleerd: dat hele smart-home gebeuren is een prachtige hobby, maar het wordt pas echt interessant als het ook daadwerkelijk nut heeft.

Na een tijdje (een dag of twee) begon het toch wel weer iets te kriebelen, want dat knopje ondersteunt zowel enkel als dubbel klikken, en zou het niet mooi zijn als je dat lampje ook nog met datzelfde knopje kon dimmen? Zodat je 's nachts niet gelijk hoeft te baden in het licht, maar het wel mogelijk is? Natuurlijk! Alleen wordt zo'n automatisering binnen Home Assistant al snel erg bewerkelijk. Gelukkig zijn daar ook alternatieven voor.

Node-RED

Node-RED is een programmeertool dat speciaal bedoeld is om zonder al te veel gedoe IoT-apparaten aan elkaar te knopen, maar dan met meer toeters en bellen. Node-RED kan ook naar diezelfde MQTT-broker luisteren, en in mijn geval de berichtjes van het knopje iets uitgebreider filteren (is het een enkele of een dubbele klik geweest?), en dat te combineren met de huidige status van de lamp (staat-ie aan of uit? En als-ie aanstaat, is het op 100% of gedimd?).

Het resultaat is dan een commando naar de lamp ("ga aan, gedimd", "ga aan, 100%", "ga uit", "schakel tussen gedimd en 100%"), en nu is het knopje ineens multifunctioneel geworden. Hip! Vrouwlief heeft 's nachts een niet-te-verblindend licht om een kind terug te vinden, en wat meer licht als dat kind bijvoorbeeld ineens een luier moet. En dochter M. heeft een prachtig speelgoedje om als een razende op te drukken en het lampje erop te zien reageren.

Les geleerd: het moet een beetje leuk zijn voor het hele gezin. ;)

Wordt ongetwijfeld nog vervolgd, want eigenlijk zou dat eerste lampje een plek krijgen naast de TV, zodat ik niet iedere keer als een holenmens hoef op te staan om het ding uit te doen als we een film gaan kijken...