Inledning
Många har gjort detta innan men kan känna att det kanske behövs en bra guide till på svenska. Så här kommer min guide till den magiska spegeln.
Det du kommer behöva är:
En Raspberry Pi
En skärm
Glas
En ram
Spegelfilm
Spegelfilmen är köpt på MDP i Mölndal. Praktiskt då jag bor nära. Glaset fick jag av en vän som är glasmästare. Skärmen är från Elgiganten och kostade 800:- på Black Friday (Acer K242HLbd 24″). Virket är hyvlat och kan köpas lite varstans.
Förutom detta behövs grundläggande kunskaper i Linux och finsnickeri.
Mjukvara
Börja med att sätta ihop din PI. Koppla den till en TV och anslut via SSH till den. Nedan finns detaljerade intruktioner exakt hur man med ett kommando installerar allt så jag tänker inte skriva detta här med.
https://github.com/MichMich/MagicMirror/blob/master/README.md
Är allt på plats nu kan du logga in via ssh och starta den med:
DISPLAY=:0 nohup npm start &
Du bör nu se default layouten på skärmen. Nu vill vi fixa till lite egna moduler. Det finns en del att välja mellan men vi kommer installera:
ResRobot
För att kunna se avgångar för Västtrafik. Fungerar med en del andra med.
https://github.com/Alvinger/MMM-ResRobot
Wunderlist
För att kunna skriva in to do saker på spegeln
RSS – SVT Nyheter
För att se nyheter
Kalender
För att kunna lägga till *.ics kalendrar
Just kalendern gör att man kan få lite roliga funktioner. Nedan ser man tex att man kan hämta:
Alla Sveriges (nästan) skolmatsedlar – http://skolmaten.se/
Träningstider för barnen från Laget.se
Jag hade lite problem med dokumentationen om hur man startar automatiskt med pm2 som finns dokumenterat på sidan. Det man även behöver göra är att skriva “pm2 autostart”. Detta genererar en kodsträng som måste köras som root med.
Bygga ramen
Då var det dags att bygga ramen. Den nya fina 24″ skärmen ser ut så här.
Och det första man gör efter att ha packat upp den är att göra sönder den. Det är inte helt enkelt att få loss den. Ta en stor skruvmejsel och bryt upp i ett hörnet. Det kommer klicka till och man kan sen efter hand lossa hela ramen. Man kan ju ta bort resten med men tror det räcker att ha det så här.
Glasskivan kan kapas lite större än skärmen om man vill. Jag har byggt ramen med 43*20 mm. Såga med geringslåda. Limma. Ungefär som i bilderna ovan. Filmen är inte helt lätt att få på plats. Börja med att göra rent glasen. Gör detta väldigt noga. Ett litet dammkorn gör en bubbla. Ta sen en tejpbit och dra loss skyddsplasten. Spray med såpvatten på filmen och glaset. Lägg på filmen och press ut bubblorna med en gummi fönsterskrapa. Om den kommer helt fel dra INTE upp den igen. Det kommer skapas små fula bubblor.
Skärmen kommer komma kloss an mot väggen och man kan tänka sig att det kommer bli för varmt. Tog en bild med värmekameran och man ser att det är min Raspberry som är det som är varmast. Den syns längst ner på bilden.
El och annat
Vanligtvis hade man kanske placerat Raspberryn i ramen och dragit en sladd från ramen. Nu var det så att jag kunde borra rakt igenom väggen och ta strömmen från andra sidan. Och kom på att datorn fick stå på den sidan med. Hur man än gör kommer alltså ramen bygga ut ca 40mm om man inte bygger in hela spegeln i väggen. Så här ser det färdiga resultatet ut. Jag har inte satt in några hål för ventilation vilket kanske kommer behövas sen.
Bonus
När allt är klart finns det lite extra saker man kan göra. Tex att koppla ihop den med sin Synology Surveillance station. Man kan installera Remote Control som ger ett GUI för att starta/stoppa osv. Denna kan sen användas för att automatisera spegeln och spara ström. Börja med att lägga in denna nedan.
https://github.com/Jopyth/MMM-Remote-Control
http://192.168.xxx.xxx:8080/remote?action=MONITORON http://192.168.xxx.xxx:8080/remote?action=MONITOROFF
Jag kommer använda dessa kommandon ovan i åtgärdsregler i SSS. Jag har alltså en webbkamera kopplad till denna som jag använder som larm hemma för att upptäcka rörelser. Denna är alltså på då jag inte är hemma och av då jag är hemma. Så effekten är alltså att skärmen stänger av sig då man aktiverar kameran och slår på då man kommer hem.
Man kanske även vill att spegeln (skärmen) skall släckas på kvällen och tändas på morgonen. Man behöver då schemalägga detta. Detta kan skilja sig lite beroende på om man använder HDMI, VGA osv. Jag har skrivit
chrontab -e
00 22 * * */opt/vc/bin/tvservice -o 30 6 * * * /opt/vc/bin/tvservice -p
Starta sedan om. Detta gör att skärmen går av vid 22:00 och på vid 06:30.
Slutsatser och lärdommar
Lite saker man kan tänka på och några saker jag märkt.
- Beställ ett glas istället för film om du har råd. Filmen blir bubblig hur man än gör.
- Köp en ny skärm. Använder du en begagnad några år gammal skärm bygger den ut bra mycket mer.
- Gör du spegeln större än skärmen så kan man se igenom den på sidorna.
- Det är svårt att få ramen rak. Ha många tvingar redo.
Min config.js fil nedan. Jag har tagit bort saker som api id.
/* Magic Mirror Config Sample * * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ var config = { port: 8080, ipWhitelist: ["192.168.0.0/24", "::ffff:192.168.0.0/24", "::1"], language: 'sv', timeFormat: 24, units: 'metric', modules: [ // ------------------------------------------------------- { module: 'alert', }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'clock', position: 'top_left', config: { displayType: 'both', analogFace: 'face-003', secondsColor: '#880000', } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: "updatenotification", position: "top_bar" }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'MMM-Matsedel', header: 'Skolan', position: 'bottom_left', config: { url: 'http://skolmaten.se/minskola/rss/' } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'MMM-Remote-Control', }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'calendar', header: 'Min Kalender', position: 'bottom_right', config: { maxTitleLength :50, calendars: [ { symbol: 'fa-soccer-ball-o', url: 'webcal://cal.laget.se/XXXXXX.ics' }, { symbol: 'fa-soccer-ball-o ', url: 'webcal://cal.laget.se/XXXXXX.ics' }, { symbol: 'calendar', url: 'https://calendar.google.com/calendar/ical/mylink.ics' }, { symbol: 'glass ', url: 'https://calendar.google.com/calendar/ical/sv.swedish%23holiday%40group.v.calendar.google.com/public/basic.ics' } ], timeFormat: 'absolute', getRelative: "3000" } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'MMM-Wunderlist', position: 'top_left', // This can be any of the regions. Best results in left or right regions. header: 'ATT GÖRA LISTA', // This is optional config: { accessToken:"f9856f45adafcc70fa31df830138e733eb20d4be37de23f4b4b26b2440ed", clientID:"e3f564de0ace6331981b", // See 'Configuration options' for more information. } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'currentweather', position: 'top_right', config: { location: 'Mölnlycke,Sweden', locationID: '', //ID from http://www.openweathermap.org appid: '443249c4f4f1sdfsdfsdrwerwe354a15f236e9bf31e423d65cdc8ad8bbf' } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'MMM-Globe', position: 'middle_center', config: { style: 'natColor', imageSize: 600, ownImagePath:'', updateInterval: 10*60*1000 } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: "MMM-ResRobot", position: "left", header: "Buss från Sommarhemsvägen", config: { from: "740061214", // ResRobot Station ID (or a comma-separated string of IDs) to: "740015578", // ResRobot Station ID of destination (or a comma-separated string of IDs) maximumEntries: 6, // Number of departures to show on screen truncateAfter: 5, // A value > 0 will truncate direction name at first space after <value> characters. 0 = no truncation apiKey: "werwerwerwefsdfsdffsdfsdrwerwer" // Your ResRobot apiKey } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'weatherforecast', position: 'top_right', header: 'Väder', config: { location: 'Mölnlycke,Sweden', maxNumberOfDays: 15, locationID: '', //ID from http://www.openweathermap.org appid: 'gsdfsdfwewerw3rwerte9bf31ed65cdc8ad8bbf' } }, // ------------------------------------------------------- // ------------------------------------------------------- { module: 'newsfeed', position: 'bottom_bar', config: { showDescription: "true", updateInterval: "300000", maxNewsItems: "0", feeds: [ { title: "SVT Nyheter", url: "http://www.svt.se/nyheter/rss.xml" } ], showSourceTitle: true, showPublishDate: true } }, ] }; // ------------------------------------------------------- /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== 'undefined') {module.exports = config;}
Uppdaterad config fil Oktober 2018. Detta är den jag använder nu.
var config = { address: "0.0.0.0", // Address to listen on, can be: // - "localhost", "127.0.0.1", "::1" to listen on loopback interface // - another specific IPv4/6 to listen on a specific interface // - "", "0.0.0.0", "::" to listen on any interface // Default, when address config is left out, is "localhost" port: 8080, ipWhitelist: [], // Set [] to allow all IP addresses // or add a specific IPv4 of 192.168.1.5 : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], language: "sv", timeFormat: 24, units: "metric", modules: [ { module: "alert", }, { module: "updatenotification", position: "top_bar" }, { module: "clock", position: "top_left" }, { module: "MMM-Skolmaten", header: "Hogadalskolan", position: "bottom_left", config: { url: "http://skolmaten.se/minskola/rss/" } }, { module: 'MMM-SystemStats', position: 'top_center', // This can be any of the regions. classes: 'small dimmed', // Add your own styling. Optional. config: { updateInterval: 10000, animationSpeed: 0, align: 'right', // align labels //header: 'System Stats', // This is optional } }, { module: "calendar", header: "Allas Kalender", position: "bottom_right", config: { maxTitleLength: 50, dateFormat: "dd D/M, H:mm", fullDayEventDateFormat: "dd D/M", urgency: 0, timeFormat: "absolute", getRelative: "0", calendars: [ { symbol: "male", url: "kalenderlänk/basic.ics" }, { symbol: "calendar", url: "kalenderlänk/basic.ics" }, { symbol: "female", url: "kalenderlänk/basic.ics" }, { symbol: "glass", url: "kalenderlänk/basic.ics" }, ], titleReplace: { "De verjaardag van ": "", "'s birthday": "" }, excludedEvents: [ ] } }, { module: "MMM-Remote-Control", config: { } }, { module: 'MMM-YrThen', position: 'top_left', config: { location: 'X-XXXXXXX', } }, ] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") {module.exports = config;}
finns det ingen möjlighet att få ta del av din configfil
Det gör det. Jag la till den nu. Med vissa små ändringar. Hittade inte den sista då spegeln var av nu men tror denna är ganska rätt.
jag kopierade hela kitte på gittet och kopierade mich mich config. sample till en config .js ändrade lite angående vädret fick det att fungera men inte nyheterna vad kan det vara för fel har du någon aning
Testa en annan rss feed kanske? Typ http://svt.se/nyheter/rss.xml Sen kan jag verkligen rekomendera att installera modulen Remote. Den har i senaste uppdateringem funktion så du kan lägga till moduler direkt i guit. Även editera configfilen via webb.
Har testat det mesta men inget fungerar står bara loding är det någon annanstans man ska ändra mer än adressen. Tänkte mer för feeden att hämta på nätet det verkar som inte den hämtar även om jag har rätt adress inget ip nummer man skall skriva in eller instalera något annan har en helt ren kopia av jessi
om jag bara ändrar fil namnet på michmich config.js.samle så fungerar vädret efter rätt api men inte rss eller kalender
Verkar som jag fått igång det mmm module skall dom vara i modulse mappen inte i modulse default där de andra modulerna är typ calender ,väder
Alla externa moduler skall vara i modules mappen. Inte de interna. Det är nog bara och testa sig fram lite. För mig fungerar allt nu med min konfig.
modulen skolmaten finns den ?
Den har jag gjort. Jag tog utgångspunkt i MMM-RSS-FEED och har lagt till så att den uppdateras en gång i timmen och dragit ihop texten lite. Har inte lagt upp den på github eftersom det kanske hade varit bättre att modifiera MMM-RSS-FEED istället… men jag har inte haft tid med det.
Du kan ladda ner den här:
https://www.dropbox.com/s/31jmqdahrwwnu97/MMM-Matsedel.zip?dl=0
Det är med en config-fil också så ser du hur den används.
Hej, Har installerat MM enligt guide och får den att funka .Men sen när jag ändrar config.js till ovanstående du skrivit ihop så får jag enbart en svart bakrund och står följande “The device is not allowed to access your mirror.Please check your config.js or config.js.sample to change this. Och även i Terminal får jag “access denied to ip adress : 127.0.0.1 ” . Hur ska jag gå tillväga ? 🙂 Mvh Fredrik
Hej! Det kan vara så att de ändrat lite efter en uppgradering och att de ändrat detta med whitelist. Jag har detta nu i början av min konfig. 127.0.0.1 är den lokala adressen dvs att spegeln får lov att accessa sig själv. Så i mitt fall så får alla komma åt den vilken kanske är enklast. Vill du ha hela konfigfilen så maila mig på fredrik@planet4.se
var config = {
address: “0.0.0.0”, // Address to listen on, can be:
// – “localhost”, “127.0.0.1”, “::1” to listen on loopback interface
// – another specific IPv4/6 to listen on a specific interface
// – “”, “0.0.0.0”, “::” to listen on any interface
// Default, when address config is left out, is “localhost”
port: 8000,
ipWhitelist: [ ], // Set [ ] to allow all IP addresses
// or add a specific IPv4 of 192.168.1.5 :
// [“127.0.0.1”, “::ffff:127.0.0.1”, “::1”, “::ffff:192.168.1.5”],
// or IPv4 range of 192.168.3.0 –> 192.168.3.15 use CIDR format :
// [“127.0.0.1”, “::ffff:127.0.0.1”, “::1”, “::ffff:192.168.3.0/28”],
language: “sv”,
timeFormat: 24,
units: “metric”,
Skulle du vilja göra en sådan här om du fick betalt?
Nja, Det är liksom så mycket jobb så det är svårt att få ekonomi med detta. Och sen så kanske något händer så behöver man support. Men har du lite tid så är det inte alls svårt. Gör en ram, köp ett glas. Och redan innan skaffa en Raspberry och koppla in den på din TV så ser du hur det kommer se ut. Annars skulle jag testat att kika på svenska hemautomatiseringsforumet på FB om någon vill sälja sin eller göra en.
Om man vill ha en riktigt stor, kan man inte använda en LCD TV ?
Jo det kan du men glaset kommer att bli dyrt