Yoo-bik-wi-tee

Laat niemand achter

In geval van een evacuatie moet een werkgever te allen tijde weten wie er op kantoor aanwezig was. Aanwezigheidsregistratie op het werk of bij het vertrek zal echter een ingrijpende verandering in de dagelijkse routine zijn. We verwachten dat deze niet door alle werknemers zal worden gevolgd. Daarom komen Sander, Nele en Maarten met een gebruiksvriendelijke, niet opdringerige oplossing genaamd Yoo-Bik-Wi-Tee. 

Project Yoo-Bik-Wi-Tee en team

Het project is dus gedoopt tot Yoo-Bik-Wi-Tee, wat afgeleid is van ubiquity. in het Nederlands betekent dit ‘alomtegenwoordigheid’. Het team, bestaande uit Nele Custers, Maarten Knapen en Sander Steinbusch, had slechts één hackathon-weekend om een proof-of-concept te implementeren. Nele is docent aan PXL-Digital (de IT-afdeling van de hogeschool PXL ) en deeltijds Java-consultant. Maarten Knapen is Solution Engineer met een focus op Java en Angular. Sander Steinbusch is Solution Engineer met een focus op Oracle APEX. Een groot project/team heeft een logo nodig om zich te onderscheiden. Sander ontwierp een logo dat verwijst naar de naam Yoo-Bik-Wi-Tee en de eisen van het project.

Toen Maarten met het idee voor de naam kwam, suggereerde Sander dat Japanse symbolen er goed bij pasten. Het veranderen van Yoo-bik-wi-tee naar よ – びく – ゐ – て leek een beetje te moeilijk, omdat niet veel mensen Japans kennen. We gaven het idee niet op en gebruikten de eerste letter als logo.

Het logo van Yoo-Bik-Wi-Tee

Technologie en oplossing

Het idee voor het project Yoo-Bik-Wi-Tee is om bluetooth low energy tags te gebruiken. Deze zouden worden uitgedeeld aan de medewerkers in de vorm van een sleutelhanger. Deze BLE-tags moeten klein, goedkoop en voorzien zijn van een duurzame batterij. Een kantoor dat uitgerust is met BLE-scanners maakt het mogelijk om te weten wie er allemaal aanwezig is. Elke BLE-tag heeft een unieke code die naast de gegevens van de eigenaar wordt opgeslagen in een MongoDB.

De java backend, geschreven in Spring Boot, haalt gegevens op en slaat ze op in deze MongoDB. De java backend biedt een REST-full API die door de BLE-scanners wordt gebruikt om de geobserveerde BLE-tags te registreren. Zolang een tag wordt geobserveerd, is de medewerker die de tag draagt aanwezig. Zodra de tag een tijdje niet wordt gezien, wordt de medewerker als afwezig geregistreerd.

Dit is de BLE-scanner die de BLE-tags registreert.

Wij raden aan om meerdere BLE-scanners in een kantoor te plaatsen. Onze voorkeur gaat dan ook uit naar Raspberry Pi’s voor dit doel. Gelukkig vonden we nogal wat informatie en scripts om de BLE-scanner te implementeren. Maar geen van de gevolgde tutorials leidden tot succes. Verschillende bibliotheken waren verouderd (bijv. https://www.npmjs.com/package/noble). Het installeren van één library() heeft zelfs de wifi van de Raspberry Pi verknoeid. Na het verlies van tijd om het probleem op te lossen, was de snelste oplossing om de Raspberry Pi opnieuw te installeren. Vervolgens werd besloten om over te stappen op python voor de implementatie van de BLE-scanner. En met groot succes! In een mum van tijd stuurde het pythonprogramma dat op de Raspberry Pi draait de ontdekte BLE-tag-nummers naar de backend.

Voor de uitvoering van de frontend waren we met twee dingen tegelijk bezig. Google’s Flutter aan de ene kant was een technologie die we wilden leren kennen en deze hackathon bood een kans om het uit te proberen. Een angular frontend was echter veiliger omdat we meer ervaring hebben met deze frontend taal. Uiteindelijk liet zowel de mobiele app als de webapp een aanwezigheidslijst zien.

Een aanwezigheidlijst van de gescande BLE-tags

Aan de ene kant hadden we een volledige PoC, aan de andere kant hadden we een fallback nodig voor het geval dat medewerkers hun BLE-tag vergeten (ja, we hebben nogal wat zelfkennis). Hiervoor dachten we dat het leuk zou zijn en toch niet al te opdringerig met onze dagelijkse routine om spraakcommando’s te gebruiken. Een medewerker zou een zin als “Nele is de kamer binnengekomen” of “Nele heeft het kantoor verlaten” zeggen en de aan- of afwezigheid wordt geregistreerd in het systeem.

Alexa was onze eerste keuze, maar helaas heeft ze gefaald. Sander had zijn Raspberry Pi thuis gebruikt waar Alexa op is geïnstalleerd. Maar Amazon veranderde het proces van het creëren van je eigen Alexa. Het kleine verschil dat dit bracht was genoeg om gewoon niet te functioneren, zonder veel feedback van wat er eigenlijk mis was. Vanwege de beperkte tijd hebben we besloten om het terzijde te schuiven en ons eerst op iets anders te richten. Nadat onze belangrijkste doelen waren bereikt, namen we een andere wending aan voor onze spraakcommando’s back-upplan. Deze keer hebben we een pythonprogramma gebruikt dat een opgenomen .wav naar de Google Speech API stuurt. De teksten die we van Google ontvingen waren voldoende om de afwezigheid van de juiste persoon in ons backend systeem te registreren.

Lesje geleerd

Deze JIDOKA hackathon was een geweldige ervaring. Een hackathon is een must-do voor elke developer en het is waarschijnlijk de leukste manier om een betere developer te worden in slechts 48 uur. We hebben geprobeerd om twee hoofddoelen in gedachten te houden: het uitproberen van een nieuwe technologie die op de bucketlist van onze developer stond en jezelf te verbeteren en uit te dagen met nieuwe dingen, in een technologie die je al kent. Probeer verschillende mogelijke uitkomsten voor het project te bepalen, kies duidelijke doelen en speel op veilig zodat je een aantal leuke dingen aan de jury kunt laten zien. Maar daag jezelf uit om wat verbazingwekkende extra’s toe te voegen als de basis eenmaal is gelegd.

Bedenkingen en alternatieven

Idealiter zouden we hebben gekozen voor een technologie die gebruik maakt van passieve tag, om problemen met de batterij te voorkomen en de omvang en indringendheid verder te minimaliseren. Er bestaan verschillende oplossingen, maar deze zijn iets duurder dan de goedkope technologie die we nu gebruiken. In plaats van BLE zouden we UHF RFID kunnen gebruiken. Ultra high frequent RFID heeft een veel groter bereik wanneer het gekoppeld wordt aan een geschikte antenne en heeft de mogelijkheid om meerdere tags tegelijk te scannen. De tags kunnen ook zo klein zijn als een sticker of zelfs in kledingstukken worden genaaid. SparkFun heeft een geweldige kit waarmee we graag hadden willen experimenteren.

Kijk op hun website voor meer informatie: https://www.sparkfun.com/products/14066

Deze video demonstreert de mogelijkheid om gelijktijdig tracking en afstandsmetingen uit te voeren: https://www.youtube.com/watch?v=OS7qQGUgWSw&t=133s

Mogelijke uitbreiding of upgrade van Yoo-Bik-Wi-Tee

Een mogelijke uitbreiding van dit project is het implementeren van basictracking. Dit zou kunnen worden bereikt door het inzetten van meerdere scanners in hal A en de aangrenzende gang(en). Dit kan helpen om aan te geven wanneer een onderwerp gewoon naar buiten stapt om naar de toilet of de lunchruimte te gaan in plaats van naar huis. Natuurlijk zijn er hier privacy en GDPR-zaken te bespreken, maar er was jammer genoeg geen tijd om dit te onderzoeken.

Conclusie

Er is nog veel te doen. We hebben niet aan moeilijkheden gedacht, maar aan het uitvoeren van de “happy path”. Er was geen tijd meer om de beveiliging te onderzoeken. 🙂 Ons werk aan dit project is waarschijnlijk gedaan, maar een student die zijn bachelor project realiseert zal Yoo-Bik-Wi-Tee naar het volgende niveau brengen. En we zullen hem/haar aan de zijlijn ondersteunen.

Bronnen

https://pypi.org/project/bleak

https://flutter.dev/docs

https://cloud.google.com/speech-to-text/docs/reference/libraries

https://apps.apple.com/be/app/rl-beacon/id1191040734?l=nl

Gaan of niet gaan naar JSHeroes conferentie, dat is de vraag

Lees meer
JSHeroes

Flutter 2.8

Lees meer
Flutter 2.8

Event sourcing in een legacy systeem – Deel 1 – Context is koning

Lees meer
event-sourcing background