Magic Mirror: Nederlands knutselproject verovert de wereld
De Magic Mirror is een spiegel die onder andere het weer en het nieuws in realtime toont, wat aangedreven wordt door een Raspberry Pi. Een Nederlandse uitvinding die nu over de hele wereld wordt omarmd. PCM sprak de bedenker ervan, Michael Teeuw.
Lees ook: Zo komt een connected IoT-kampeerbus tot stand
De spiegel hangt boven een kastje in Teeuws gang: een spiegel waarop te zien is hoe laat het is, wat voor weer het buiten is en wat er in Teeuws agenda staat. Sinds kort staat er ook op hoe druk het op de weg is, handig als Teeuw de weg op wil. De Magic Mirror is een doorkijkspiegel met daarachter een monitor die wordt aangestuurd door een Raspberry Pi.
Het maken van de spiegel begon drie jaar geleden als hobbyproject, maar is inmiddels zo populair dat duizenden knutselaars van over de hele wereld hun eigen versie in elkaar hebben gezet. Daaruit is zelfs een hele community aan ontwikkelaars ontstaan, die hun eigen onderdelen van de dynamische interface hebben gebouwd.
“Het idee begon met een complimentje. Toen ik voor het eerst begon na te denken over zo’n slimme spiegel, bedacht ik me dat het leuk zou zijn om elke dag een complimentje te zien. Dat je wakker wordt en leest: ‘Wat zie je er leuk uit vandaag’.” Vanaf dat moment stroomden de ideeën naar buiten. Een agenda, waarmee je meteen ziet wat er die dag op de planning staat. Een rss-feed van de NOS zodat je meteen het nieuws kunt zien.
En, misschien wel het belangrijkste voor Teeuw, het weerbericht. “De spiegel hangt in de gang, dus dan is het wel handig om meteen te zien of ik een jas aan moet als ik naar buiten ga.”
Het beeld
Met een Raspberry Pi, wat hout en een doorkijkspiegel, ging hij aan de slag. Dat laatste was nog best lastig te vinden, want het kopen van zo’n spiegel leverde heel wat vragen op. “Doorkijkglas beschadigt al snel, dus zijn veel verkopers huiverig het te verkopen omdat ze bang zijn dat iedereen er na een tijdje weer mee terugkomt.” Toen hij het frame eenmaal in elkaar had gezet, zette hij een monitor achter de spiegel. Dat moest wel de juiste zijn. De zoektocht naar het juiste beeldscherm was ook nog een hele klus. In de Media Markt zocht hij een beeldscherm uit waar de stroom- en hdmi-aansluiting niet aan de achterkant zaten, maar aan de zijkanten, zodat de kabels ‘plat’ zouden liggen.
©PXimport
“Ik zocht ook wel bewust een goedkope monitor uit, want het voelt toch eng om een gloednieuwe monitor uit elkaar te halen en alleen de binnenkant ervan te gebruiken. Teeuws spiegel staat nu al bijna drie jaar zonder onderbreking aan, en dat merk je aan het beeld. Dat is inmiddels een stuk minder fel dan in het begin en sommige teksten zijn moeilijker te lezen dan eerst. “Dat krijg je met led-schermen”, zegt Teeuw. “Er komt een moment dat die monitor vervangen moet worden.”
De stroomvoorziening
Het was nog een heel probleem om het apparaat van stroom te voorzien. Teeuw had zich namelijk verkeken bij het kopen van de monitor. “Ik ging er vanuit dat iedere monitor wel een geïntegreerde usb-aansluiting had,” vertelt hij, “maar dat bleek niet het geval te zijn.” Hij kon de Raspberry Pi daarom niet van stroom voorzien, tenzij hij er zelf iets op verzon.
Dat deed hij uiteindelijk met een beetje creatief solderen. Hij pakte een oude usb-adapter. Die maakte hij open en hij verbond er met wat soldeerwerk en isolatietape een standaard stroomkabel aan. Zo had hij een soort hybride adapter die de monitor gewoon van stroom kon voorzien, maar in het midden ook een usb-oplaadpunt voor de Raspberry Pi had. De constructie werkte echter niet helemaal zoals de bedoeling was, want 10 minuten na de installatie sloegen de stoppen in Teeuws huis door. “Dat kwam waarschijnlijk omdat ik één of andere Chinese lader gebruikte. Ik heb na die fout een degelijke merklader gebruikt en dat ging goed.”
Koppeling met Raspberry Pi
“Het instellen van de Raspberry Pi was het proces dat het langst duurde”, aldus Teeuw. “Ik gebruikte gewoon Raspbian omdat dat het meest flexibel is, en een goede opensource-community heeft.” Hoewel de nieuwe installer een fullscreen-interface heeft, moesten er nog een paar dingen worden geconfigureerd aan de Pi zelf. Het beeldscherm moest een kwartslag worden gedraaid (“een simpele edit aan de boot-files van de Pi”), en de cursor moest verdwijnen van het scherm.
Aanvankelijk draaide hij de interface op Chromium (een opensource browser), en het geheel werkte met een lokale webserver via Apache. Er is nu wel een nieuwe interface beschikbaar die makkelijker te installeren is én over een geïntegreerde webserver en browser beschikt. “Dat was voor veel gebruikers ook nog erg lastig.”
In het dagelijks leven bouwt Teeuw met zijn bureau Xonay Media ‘creatieve technische innovaties’, en webapplicaties maken is hem daarbij niet vreemd. Hij moest wel eerst bedenken wat hij precies wilde dat zijn spiegel deed. “Daarom heb ik er een website van gebouwd. Zo kon ik html, css en javascript gebruiken om de interface in elkaar te zetten.”
©PXimport
Teeuw gebruikte een paar open api’s om bepaalde applicaties te tonen. Voor het weerbericht gebruikte hij de api van openweathermap.org, en voor zijn agenda kon hij iCloud gebruiken, dat van iCal gebruikmaakt. Voor het nieuws gebruikte hij een rss-feed van de NOS. En hij zette zelf een tiental complimenten onder elkaar die om de zoveel tijd op het scherm werden getoond.
Magic Mirror: Reddit-succes
De Magic Mirror bleek veel populairder dan Teeuw aanvankelijk had durven dromen. Zeker nadat hij een post over de spiegel op Reddit plaatste én nadat de Raspberry Pi Foundation erover had geblogd, stroomden de reacties binnen. Dat was deels omdat Teeuw de broncode van zijn spiegel op GitHub had gezet, zodat iedereen die alleen maar hoefde te downloaden en een paar parameters moest veranderen om de interface te personaliseren.
Zijn blog werd gedurende de eerste twee jaar ruim 2,5 miljoen keer gelezen, en van over de hele wereld kreeg hij honderden foto’s opgestuurd van gebruikers die hun eigen Magic Mirror hadden gemaakt. Dat motiveerde hem om ermee door te gaan.
“Ik had de spiegel wel op GitHub gezet zodat anderen ermee aan de slag konden, maar ik had nooit gedacht dat het zo populair zou worden. Toen ik achteraf naar de code keek, merkte ik dat die er niet heel professioneel uitzag, omdat het voor mij gewoon werkte en ik dat voldoende vond. Eigenlijk wil je niet dat fans met zulke code aan de slag gaan, dus moest dat anders.” Doordat honderden mensen hem mailden over hun eigen spiegel, wilde Teeuw er eigenlijk verder mee gaan. Daar had hij echter helemaal geen tijd voor.
©PXimport
“Ik vond het heel leuk om te doen en werkte er in de avonduren aan als gebruikers eens een vraag hadden – maar alleen als ik weet dat ze van tevoren hun huiswerk hebben gedaan!” Het was te veel werk om het project kosteloos uit te bouwen, terwijl Teeuw dat wel graag wilde. “Ik had toen al in m’n hoofd zitten dat het allemaal beter kon, makkelijker, gestructureerder, want dan zou iedereen er makkelijker mee aan de slag kunnen.”
Dat kon nadat hij ineens de kans kreeg om betaald aan de spiegel te werken. “Ik kreeg een opdracht van een klant, die graag zijn eigen spiegel in zijn huiskamer wilde met een uniek ontwerp. Om dat voor hem te kunnen bouwen, moest ik de hele onderliggende infrastructuur aanpassen … zoals ik al langer wilde. Alleen dit keer kreeg ik ervoor betaald.”
Magic Mirror 2
Wat volgde was MagicMirror 2, een verbeterde versie van de interface van de spiegel die ook nu voor iedereen opensource te gebruiken is. Het bestaat uit verschillende modules, bestaande uit blokken en extensies die gebruikers zelf bij elkaar kunnen zetten. De interface heeft standaard dezelfde modules die Teeuw aanvankelijk in zijn spiegel verwerkte, zoals een kalender en het weer, maar er zijn inmiddels ruim honderd andere modules die gemaakt zijn door externe ontwikkelaars.
Zo is er een module om de huidige koers van de Bitcoin te bekijken, de nieuwste XKCD-comic te zien, je eigen Fitbit-statistieken en nog heel veel meer. Gebruikers kunnen die modules downloaden en apart van elkaar in een eigen interface zetten. De modules zijn geschreven in javascript, html en css, de talen die Teeuw ook gebruikte voor zijn eerste interface.
Er zijn tientallen fans van het project die op de één of andere manier bijdragen aan de Magic Mirror. Zo heeft iemand in samenwerking met Teeuw een forum opgezet waar iedere spiegelmaker kan discussiëren, troubleshooten en zijn eigen project kan tonen. Ook is er iemand die een groot deel van de api-documentatie heeft geschreven, en een voor Teeuw onbekende jongen van 14 is dagelijks bezig met de ‘code quality’. “Het is schitterend om te zien hoe zo iemand dat helemaal vrijwillig doet.”
Hoewel de Magic Mirror een hobbyproject is, blijft Teeuw er nog wel aan werken. “Ik faciliteer het ecosysteem en ik ben moderator van het changelog. Maar het bijhouden van de modules zelf, dat is grotendeels aan de community. En die doen het geweldig!”