Met Mozilla WebThings bieden de makers van Firefox een open platform aan om via het web apparaten te monitoren en te besturen. De gateway, die alles controleert, installeer je eenvoudig op een Raspberry Pi of een OpenWrt-router. Door het open protocol is het platform ook eenvoudig uit te breiden.
Auteur: Koen Vervloesem
Mozilla werkt al twee jaar aan wat eerst Project Things heette. In april 2019 vonden de ontwikkelaars dat het project de experimentele fase ontgroeid was en kreeg het een nieuwe naam: Mozilla WebThings (https://iot.mozilla.org). Het project omschrijft zichzelf als “een open platform om apparaten via het web te monitoren en te besturen”.
We hadden hier in de experimentele fase al eens naar gekeken, maar toen was het systeem nog vrij beperkt. Deze nieuwe aankondiging was de ideale gelegenheid om nog eens te kijken of Mozilla WebThings een bruikbaar alternatief is voor open source domoticasystemen, zoals Home Assistant, Domoticz en openHAB.
We kennen allemaal het Internet of Things (IoT), maar wat is het Web of Things (WoT)? Dit is voor het Internet of Things wat het web voor internet is: een gebruiksvriendelijke applicatielaag. Het Web of Things maakt apparaten voor ons toegankelijk met gebruik van webstandaarden, zoals HTTP, REST, JSON, WebSockets, OAuth, enzovoort.
Met WebThings biedt Mozilla een open platform aan voor WoT. Het platform bestaat uit twee onderdelen. De WebThings Gateway (https://iot.mozilla.org/gateway/) installeer je op een Raspberry Pi (of op een OpenWrt-router, wat momenteel nog experimenteel is). Dit is te vergelijken met een domoticacontroller, zoals Home Assistant. Het tweede onderdeel van het platform is het WebThings Framework (https://iot.mozilla.org/framework/). Dit is een bibliotheek van herbruikbare softwarecomponenten die je helpen om zelf ‘webdingen’ te maken.
Onderliggend maken de gateway en het framework gebruik van een open standaard die Mozilla ontwikkeld heeft, de Web Thing API (https://iot.mozilla.org/wot/). Mozilla heeft de standaard ook aan het W3C (World Wide Web Consortium) voorgelegd. Ze vult andere standaarden van de Web of Things Working Group (https://www.w3.org/WoT/WG/) van het W3C aan. Deze standaardisatie moet volgens Mozilla een ‘world wide web of things’ opleveren, naar analogie met het ‘world wide web of pages’ dat we nu kennen voor websites.
Belangrijk aan dit Web of Things is dat het -net zoals het web dat we nu kennen- gedecentraliseerd is. Je kunt linken naar dingen en de dingen zijn te ontdekken volgens standaard URL’s. Wat Mozilla wil doen, is eigenlijk eenvoudig samen te vatten: elk ding op het web een URL geven.
Mozilla wordt vaak vereenzelvigd met de webbrowser Firefox, maar weinigen weten dat de organisatie een veel breder werkingsgebied heeft. De missie (https://www.mozilla.org/nl/mission/) van Mozilla is “ervoor zorgen dat het internet een wereldwijde publieke hulpbron is, open en toegankelijk voor iedereen. Een internet dat mensen echt vooropstelt, waar individuen hun eigen beleving kunnen vormgeven en bevoegd, veilig en onafhankelijk zijn.” Firefox is het belangrijkste instrument om die missie uit te dragen op het web, maar nu er meer en meer apparaten via het web toegankelijk zijn, is er meer nodig. Daarom heeft Mozilla een IoT-team dat met Mozilla WebThings die missie in het IoT-domein wil uitdragen. Zo volgen de ontwikkelaars het privacy by design framework waarbij privacy in het hele ontwikkelproces ingebakken is.
Download het nieuwste image van de WebThings Gateway (https://iot.mozilla.org/gateway/). Tijdens de redactiesluiting van dit artikel was dat versie 0.9.1. Het image ondersteunt alle modellen van de Raspberry Pi met netwerkconnectiviteit, inclusief de Raspberry Pi 4. Het nieuwste model van de Pi is voor de gateway overigens overkill: een Raspberry Pi 3 Model B(+) volstaat.
Pak het zipbestand van het image uit en schrijf het met dd naar een microSD-kaart. Of doe het met een programma, zoals balenaEtcher (https://iot.mozilla.org/gateway/), dat zelf het zipbestand uitpakt. Als dit voltooid is, steek dan de microSD-kaart in het kaartslot van je Raspberry Pi, sluit de voedingskabel aan en start de Pi op. De eerste keer kan dat enkele minuten duren, omdat de grootte van het bestandssysteem wordt aangepast aan de grootte van je microSD-kaart.
Zodra de gateway opgestart is, schakelt hij een open wifi-netwerk met de naam WebThings Gateway XXXX in met vier cijfers uit het mac-adres van je Pi. Verbind met dit netwerk. Op een Android-telefoon krijg je nu de vraag om je aan te melden bij het netwerk. Indien niet, bezoek dan http://192.168.2.1 in je webbrowser. In beide gevallen krijg je hetzelfde te zien: een lijst met je wifi-netwerken. Kies degene waarmee je je gateway wilt verbinden en vul het wachtwoord in. Uiteraard kun je ook gewoon een ethernetkabel in je Pi steken, waarna je Pi via dhcp een IP-adres aanvraagt. Zodra je Pi netwerkconnectiviteit heeft, via wifi of ethernet, is de gateway in je webbrowser bereikbaar via het IP-adres of (als mDNS/Bonjour actief is in je besturingssysteem) via http://gateway.local.
In de volgende stap krijg je de vraag om een webadres te kiezen. Hiermee creëer je een subdomein van het domein mozilla-iot.org, waarmee je jouw gateway van buiten je thuisnetwerk kunt bereiken. Kies een subdomein en vul je e-mailadres in als je dat wilt en klik op ‘Create’. Als je liever zelf de toegang van buitenaf regelt met dynamische dns en port forwarding -of als je helemaal geen toegang van buitenaf wilt- dan sla je deze stap gewoon over met ‘Skip’.
Zodra je subdomein aangemaakt is, word je er automatisch naar doorverwezen. In de laatste stap maak je nog een gebruikersaccount voor de gateway aan. Vul je naam, e-mailadres en wachtwoord in (maak dit zeker sterk genoeg als je gateway van buitenaf bereikbaar is!) en klik op ‘Next’. Extra gebruikersaccounts kun je altijd later nog maken. Als alles goed gaat, krijg je nu een leeg scherm van de gateway te zien waaraan je apparaten kunt toevoegen.
Zonder sensoren om uit te lezen of apparaten om aan te sturen, is de gateway natuurlijk niets waard. De WebThings Gateway ondersteunt onder andere Zigbee (waaronder ook de slimme verlichting van Philips Hue en IKEA TRÅDFRI), Z-Wave en HomeKit. Voor Zigbee of Z-Wave heb je wel een transceiver nodig die het protocol spreekt. Wij testten de WebThings Gateway uit met een Aeotec Z-Stick van de tweede generatie voor Z-Wave. Elke dongel die compatibel is met OpenZWave (http://openzwave.com/) zou moeten werken.
Steek de dongel in een usb-poort van je Pi, klik in het hamburgermenu links bovenaan, daarna op Settings / Add-ons en klik bij Z-Wave op ‘Disable’ en daarna op ‘Enable’. De OpenZWave-stack wordt daardoor opnieuw ingeladen en herkent normaal de aanwezigheid van je Z-Wave-dongel. Keer dan terug naar de instellingen en verifieer of je Z-Wave-adapter nu te vinden is onder Adapters. Indien niet, kijk dan in Instellingen / Developer bij ‘View Internal Logs’ in de logs voor aanwijzingen van problemen.
Daarna kun je op de hoofdpagina van de gateway (Things als je het hamburgermenu open hebt) apparaten toevoegen met een klik op het plusteken onderaan rechts. De gateway scant dan naar nieuwe apparaten en toont wat hij vindt. In het geval van Z-Wave moet je de meeste apparaten eerst in pairingmodus zetten, bijvoorbeeld door een knopje in te drukken. De instructies daarvoor vind je in de handleiding van je apparaat.
Geef de gevonden apparaten een naam (want iets als ‘zwave-184dfb9-3-Switch’ is niet echt duidelijk), verander in het uitklapmenu onder de naam eventueel het type als dat niet klopt, en klik op ‘Save’. Daarna worden je apparaten aan de hoofdpagina toegevoegd.
In het dashboard met things krijg je nu al je apparaten te zien met bijvoorbeeld hun toestand (voor een schakelaar) of hun sensorwaarde. Een schakelaar kan je met een klik op het icoontje eenvoudig in- of uitschakelen. Let op: van een multisensor die meerdere sensoren in één apparaatje combineert, is hier maar één waarde te zien, bijvoorbeeld de temperatuur.
Als je op het pictogram rechtsboven je multisensor klikt, dan krijg je ook de andere sensoren te zien. Voor een led-dimmer die bijvoorbeeld ook het verbruik meet, krijg je -als je op het pictogram klikt- de aan-uit-knop, de schuifregelaar voor het dimniveau en het huidige verbruik te zien. Klik je op die pagina onderaan rechts op de drie puntjes en dan op ‘Edit’, dan kun je nog altijd de naam en het type apparaat wijzigen.
Op de pagina ‘Regels’ krijg je een IFTTT-achtige interface te zien, waar je regels kunt instellen die de WebThings Gateway volgt om automatische acties uit te voeren. Zo kun je een regel instellen die de airco (die in je slimme stekker steekt) inschakelt bij een temperatuur hoger dan 24 graden en uitschakelt onder 23 graden.
Sleep daarvoor eerst de temperatuursensor naar de invoer links en kies in het uitklapmenu Temperatuur > 24. Sleep daarna je slimme stekker met de airco naar rechts en selecteer als eigenschap ‘On’. Geef je regel bovenaan een naam. Keer terug naar het venster met regels en maak dan een nieuwe regel aan die de airco uitschakelt.
In het overzicht met regels kan je elke regel afzonderlijk eenvoudig in- of uitschakelen. Je krijgt ook een beschrijving te zien van wat elke regel doet, zoals “If Multisensor bureau Temperature is greater than 24, turn Airco on”.
Overigens kun je ook meerdere voorwaardes naar het invoergedeelte van je regel slepen, waarna je bovenaan kunt kiezen of ze met ‘and’ of ‘or’ verbonden worden. Je kunt ook meerdere acties naar het uitvoerveld slepen. WebThings biedt ook een virtuele sensor ‘Clock’ aan om op specifieke tijdstippen regels te activeren en een actie ‘Notification’ om een notificatie te tonen. Al met al is het instellen van regels heel gebruiksvriendelijk, zij het wat beperkter dan bij andere domoticapakketten.
Kijk ook zeker eens onder ‘Settings’. Onder ‘Experiments’ vind je enkele experimentele functies. Voor versie 0.9.1 zijn dat ‘Smart Assistant’ en ‘Logs’. Vink je die eerste aan, dan komt er een slimme assistent bij aan wie je in tekstopdrachten of zelfs in spraak (met een klik op het microfoonicoontje rechtsboven) opdrachten kunt geven zoals “Turn the airco on”. Dat bleek in onze test niet te werken en bovendien spreekt de assistent voorlopig alleen Engels. Dat is wat onhandig als je al je apparaten in WebThings een Nederlandse naam gegeven hebt.
Een andere experimentele functie zijn de ‘Logs’, waarmee je de waardes van specifieke sensoren kunt loggen en in een grafiekje weergeven. Dat werkt wel al betrouwbaar en is heel handig. Verder vind je in Settings / Developer zoals we eerder al toonden niet alleen de interne logs die kunnen helpen om problemen op te lossen, maar ook een optie om toegang via ssh in te schakelen. Vanaf dan kun je met de gebruikersnaam ‘pi’ en het wachtwoord ‘raspberry’ via ssh inloggen (maar alleen via het lokale netwerk, niet via je domein bij mozilla-iot.org). Verander daarna dit standaardwachtwoord. Je hebt toegang tot de Raspbian-omgeving waarop de WebThings Gateway gebaseerd is.
Standaard ondersteunt de WebThings Gateway alleen de Web Thing API, Z-Wave en Zigbee. Maar als je in Settings / Add-ons op het plusteken rechts onderaan klikt, dan zie je dat je nog veel meer kunt integreren. Zo is er ondersteuning voor Chromecast, Google Home, LIFX, Logitech Harmony, Mi Flora, Philips Hue, Spotify, het weerstation van Netatmo, en add-ons om e-mails te sturen, om notificaties op Kodi te tonen, om te detecteren of apparaten op het netwerk aanwezig zijn, om apparaten via Waker-on-LAN te wekken, enzovoort.
Al met al is Mozilla WebThings nog lang niet zo uitgebreid als systemen, zoals Home Assistant. Er zijn minder integraties en de configuratie- en troubleshooting mogelijkheden zijn stukken beperkter. Maar Mozilla is er wél in geslaagd om een heel gebruiksvriendelijk IoT-platform te maken waar jouw privacy centraal staat. Ook de Web Thing API die bij het W3C gestandaardiseerd wordt, is een meerwaarde. Bovendien is alles ook goed gedocumenteerd, zodat eigen add-ons creëren met het WebThings Framework (https://iot.mozilla.org/docs/) niet zo moeilijk is. Als andere domoticaplatforms de Web Thing API ook zouden gaan ondersteunen, kan Mozilla WebThings wel eens een mooie toekomst hebben.
Sinds versie 0.9.0 biedt Mozilla de WebThings Gateway ook als experimentele build aan voor de Turris Omnia-router. Het image is voor die router niet gebaseerd op Raspbian, maar op het open routerbesturingssysteem OpenWrt. De router blijft daarmee zijn functie van router en wifi-toegangspunt behouden, maar werkt daarnaast ook als WebThings-gateway. Mozilla is van plan om in de nabije toekomst ondersteuning voor andere draadloze routers toe te voegen.