Pi magic mirror: informatie op je spiegel
Informatie op een spiegel met de Raspberry Pi
De makers noemen hun creatie een slimme of magische spiegel. Achter een speciaal glas zit een beeldscherm, zodat informatie die op het scherm verschijnt in de spiegel te zien is. Het effect is geweldig, en als zelfbouwproject is het erg leerzaam.
Al een tijdje circuleert het idee van een magische of slimme spiegel op internet. Met name Michael Teeuw is met zijn project erg bekend geworden. Het project werd nummer 1 in de MagPi top vijftig van vorig jaar en kreeg een feature-artikel in de MagPi nummer 54. Het staat op Github en is met weinig moeite op een op Raspbian draaiende Pi 2 of 3 te zetten. Om de software uit te proberen, heb je genoeg aan een Pi en een oud TFT-scherm.
Voor veel mensen zal het project MagicMirror2 kaal al prima bruikbaar zijn. Alles voor een simpel informatiescherm op je bureau zit erin. Je kunt gemeenschappelijke afspraken uit een groepsagenda via iCal opvragen en weergeven, vertrektijden van lokale bussen en treinen bij webservices ophalen en de drukte op de belangrijkste verkeerswegen in de buurt laten weergeven.
Folie in plaats van glas
Zo makkelijk als het installeren en configureren van de software is, zo lastig zijn de eisen die aan de hardware gesteld worden. Het scherm voor de slimme spiegel moet een digitale signaalingang hebben, zodat de Pi het kan aansturen en op stand-by kan zetten. Moet de spiegel niet al te dik worden, dan heb je een model nodig dat de aansluitingen aan de achterkant naar beneden of opzij gericht heeft.
Het spiegelglas moet licht van één kant doorlaten, maar van de andere kant juist niet. Dat heet een halfdoorlatende of one-way spiegel. Die ken je waarschijnlijk wel van veel supermarkten of als de bekende spiegel in de verhoorkamer in een politieserie. Dergelijke spiegels zul je niet gauw bij een gewone glashandel vinden, maar zijn wel online te bestellen – in veel verschillende kwaliteiten.
Een halfdoorlatende spiegel werkt alleen goed als er aan de ene kant veel licht is en aan de andere kant weinig. Waar veel licht is, ontstaat de indruk van een spiegel, aan de andere kant met weinig licht kun je er doorheen kijken. MagicMirror gebruikt dat effect doordat het scherm van de donkere zijde naar de lichte zijde doorschijnt.
Op fora waar liefhebbers van het project kennis uitwisselen wordt veel gesteggeld over reflectie- en transmissiegraad, maar online en offline aanbieders noemen die waarden slechts zelden. Soms worden er
collectieve bestellingen gedaan. We hebben het pragmatisch aangepakt en gewoonweg spiegelfolie voor 5 euro besteld en die op de glasplaat van een randloze fotolijst (8 euro) geplakt. Die oplossing ligt qua prijs een stuk onder die van glashandels.
Het aanbrengen van de folie is wel een puntje. De verkopers geven het advies om de zelfklevende folie na het verwijderen van de beschermlaag en de glasplaat royaal met zeepsop te besproeien en het water en eventuele luchtbellen vervolgens met de meegeleverde rakel van binnen naar buiten weg te duwen. Het resultaat kun je zodanig monteren dat de gevoelige foliezijde aan de binnenkant komt. Dan kun je de spiegel later met een gerust hart poetsen. Het spiegelglas moet zo dicht mogelijk tegen het scherm aanliggen om een goed effect te krijgen. Het beste is om de behuizing van het scherm te verwijderen. Wat dat betreft is ook duidelijk dat het een slecht idee is om de spiegelfolie op het scherm te plakken. Dan zou de zeepsop wellicht naar binnen sijpelen. Zonder zeepsop is het recht aanbrengen van de folie en het verwijderen van de luchtbellen erg moeilijk.
Vesa in plaats van hout
De meest gangbare oplossing voor het verpakken van een slimme spiegel is een houten raamwerk. Daarin wordt het kale panel bevestigd met het spiegelglas ervoor. Een paar luchtgaten boven- en onderin voorkomen oververhitting. Met wat handigheid en de juiste hulpmiddelen kun je een profiel frezen waar de spiegel in past, of je moet hem vastzetten met houten latjes. Een andere oplossing is om een VESA-houder te gebruiken en de rest op de schermrand te monteren.
Het beste resultaat krijg je wanneer je de grootte van de spiegel overeenkomt met die van het scherm. Als je alleen achter een deel van het spiegeloppervlak een display zet, moet je er rekening mee houden dat de rand dan te zien is. De donkere achtergrond van de rand tekent zich af door het backlight. Hoe donkerder de kamer, des te duidelijker de rechthoek van het scherm te zien is. Dun zwart karton als passe-partout rond het scherm kan dan helpen.
Het geheel wordt pas echt een slimme spiegel als hij niet continu aanstaat. De gangbare, oudere 19-inch TFT-displays verbruiken ingeschakeld volgens onze metingen meer dan twintig watt. Dat wordt op den duur wel kostbaar. Als de Pi het display op stand-by zet, daalt het opgenomen vermogen tot een à twee watt. Samen met de Pi hou je dan een permanent energieverbruik van zo'n vijf watt over. Normaal gesproken kun je een via DVI of HDMI aangesloten TFT met het commando tvservice op stand-by zetten. Met dezelfde opdracht haal je hem daar weer uit. Combineer je dat met een eenvoudige PIR-sensor, die je voor een paar euro als kant-en-klaar printplaatje kunt kopen, dan gaat de spiegel aan zodra er iemand langsloopt. Het instellen daarvan vergt wat finetuning, maar softwarematig is er al een module die dat kan.
Een script doet het werk
Over software gesproken: die hoef je niet omslachtig helemaal zelf te installeren, maar dat is met een script in een oogwenk gedaan. Je kunt dat script na het installeren van Raspbian met curl downloaden en direct naar de bash-shell doorsturen. De volledige commandoregel staat op de site van MagicMirror en kun je vinden via de link hieronder. Het script roept op de noodzakelijke momenten zelf sudo op, en moet daarom zonder verdere toevoegingen als gebruiker pi uitgevoerd worden.
Daarna staat er in de home-directory van de user pi een directory MagicMirror. Dan moet je nog wat handwerk verrichten. Het bestand ~/.config/lxsession/LXDE-pi/ autostart moet aangevuld worden met de volgende regels:
@xset s noblank @xset s off @xset -dpms @unclutter
Met sudo apt-get install unclutter moet je het programma unclutter nog installeren. Verder moet in /etc/lightdm/lightdm. conf onder [SeatDefaults] de volgende regel staan:
xserver-command=X -s 0 -dpms
Die aanpassingen deactiveren de screensaver en de muiscursor.
Bovendien moet je bij gebruik van wifi voorkomen dat de Pi de energiebesparingstechniek activeert – op de lange termijn zorgt dat namelijk voor verbindingsverlies. Voor wifidongles met een Realtek-chip gaat dat met de volgende regel in het bestand /etc/modprobe.d/8192cu.conf: options 8192cu rtw_power_mgnt=0
rtw_enusbss=1 rtw_ips_mode=1
Bij de Pi 3 kun je dat in /etc/network/interfaces doen door bij de betreffende wifiinterface de volgende regel toe te voegen:
wireless-power off
Vóór het rebooten moet je absoluut de basisconfiguratie uitvoeren met raspi-config. De tijdzone- en taalinstellingen werken namelijk door op de MagicMirror-installatie. Dat is ook een mooi moment om meteen de ssh-service te activeren, zodat je alle overige dingen via het netwerk kunt regelen en het scherm waaraan de Pi hangt voor de spiegel kunt gebruiken.
Vanuit een ssh-sessie kun je met DISPLAY=:0 nohup npm start de software starten. De voorbeeldconfiguratie kun je vooraf in de MagicMirror-directory kopiëren van config/config.js.sample naar config/config.js. Wil je dat het programma automatisch start, dan raden de makers PM2 als procesmanager voor node.js-apps aan. De daarvoor benodigde configuratiedetails staan in de wiki stap voor stap beschreven.
Git in plaats van pakketbeheer
Het bestand config/config.js bepaalt op welke plaats op het scherm welke informatie moet verschijnen. Afzonderlijke modules laten de feitelijke gegevens zien. Tot het basispakket van MagicMirror behoren enkele standaard modules voor bijvoorbeeld de tijd, newsfeeds en de agenda.
Daarnaast zijn er nog enkele tientallen andere modules. Die kun je aan een MagicMirror-installatie toevoegen met het git-commando. Scripts zorgen automatisch voor de afhankelijkheden. Een van die modules voegt de bewegingssensor toe (MMM-PIR-Sensor) en een andere staat beperkte veranderingen in de configuratie toe vanuit de browser via een speciale url (MMM-Remote).
Achter MagicMirror zit alleen een Node.js-server die op de Pi draait, Electron, en een Chromium-browser in de kiosk-modus, die zijn bedieningselementen fullscreen dus verbergt. Die omgeving staat wel bekend om een flinke belasting van het systeem. Daarom heb je voor MagicMirror minstens een Raspberry Pi 2 nodig. Als je het Node.js-gedeelte naar een Linux-server verplaatst, kun je voor je spiegel ook een Pi 1 gebruiken. Dan mis je wel de mogelijkheid om de GPIO-pinnen van de Pi vanuit programma's aan te spreken voor bijvoorbeeld de PIR-sensor. (jmu)