Ein geniales Projekt um die wichtigsten Informationen an einem Ort für das tägliche Leben zu bringen… Wer das Projekt nicht kennt, kann sich gerne auf der Projektseite etwas näher erkundigen.
Heute möchte ich euch die technische Seite meines Projektes vorstellen und in einem späteren Post (da ich momentan noch an der Konstruktion bin) meinen Mirror vorstellen.
Voraussetzung
- Raspberry PI mit WLAN-Modul (oder vergleichbar)
- Ein installiertes Linux auf dem Raspberry Pi
- Bewegungssensor (PIR)
MagicMirror – Christian’s DokuWiki
Installieren
Wichtig ist bei der Installation, dass diese nicht via Root gemacht wird.
bash -c “$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)”
Autostart beim Booten
Damit der Mirror beim booten automatisch startet müssen wir ein Script schreien und via pm2 das Script ausführen.
PM2 installieren
sudo npm install -g pm2
pm2 startup
Start-Script
cd ~
vi mm.sh
mit Inhalt:
cd ~/MagicMirror
DISPLAY=:0 npm start
Anschließend Rechte setzen und Script in pm2 laden:
chmod +x mm.sh
pm2 startup
pm2 start mm.sh
sudo pm2 save
Allgemeine Befehle
pm2 start <Prozessname>: Startet alle Prozesse/ bzw. geziehltes Script
pm2 stop <Prozessname>: Stoppt alle Prozesse/ bzw. geziehltes Script
pm2 save: Speichern der Änderungen und aktuellen States
pm2 list: Anzeigen aller Prozesse
Anzeige Konfigurieren
Status LED deaktivieren
Als root einen Crontab anlegen:
@reboot echo 0 | sudo tee /sys/class/leds/led1/brightness @reboot echo 0 | sudo tee /sys/class/leds/led0/brightness
Bildschirm drehen
sudo vi /boot/config.txt
display_rotate=1
Optionen:
0 = normal
1 = 90°
2 = 180°
3 = 270°
0x10000 = horizontal spiegeln
0x20000 = vertikal spiegeln
Entfernen Bildschirmschoner/Sleeping deakivieren
sudo apt-get install x11-xserver-utils
vi ~/.config/lxsession/LXDE-pi/autostart
Mit Inhalt:
@xset s 0 0
@xset s noblank
@xset s noexpose
@xset dpms 0 0 0
Konfiguration MagicMirror
Nun haben wir den MagicMirror soweit installiert und wir machen uns ans Konfigurieren und anpassen des Mirror an unsere Bedürfnisse.
Installierte Plugins
Folgende Module wurden via GIT installiert:
- MMM-LocalTransport
- MMM-PublicTransportHafas
- MMM-Sonos (derzeit nicht konfigueriert)
Konfigurationsdatei
vi ~/MagicMirror/config/config.js
Mit Inhalt:
var config = {
address: "0.0.0.0",
port: 8080,
ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "192.168.101.0/24
language: "de",
timeFormat: 24,
units: "metric",
modules: [
{
module: "alert",
},
{
module: "updatenotification",
position: "top_bar"
},
{
module: "clock",
position: "top_bar",
},
{
module: "currentweather",
position: "top_right",
config: {
location: " XXXXXX ",
locationID: " XXXXXX ", //ID from http://www.openweathermap.org/help/city_list.txt
appid: " XXXXXX ",
units: "metric",
showWindDirectionAsArrow: false,
showHumidity: false,
showFeelsLike: false,
lang: "de",
useKMPHWind: true,
}
},
{
module: "weatherforecast",
position: "top_right",
// header: "Wetter",
config: {
location: " XXXXXX ",
locationID: " XXXXXX ",
appid: " XXXXXX ",
units: "metric",
lang: "de",
maxNumberOfDays: 5,
}
},
{
module: 'calendar_monthly',
position: 'top_left',
config: {
showHeader: false,
cssStyle: 'custom',
updateDelay: 5,
}
},
{
module: "calendar",
header: "Termine",
position: "top_left",
config: {
tableClass: "xsmall",
maximumNumberOfDays: "30",
maximumEntries: "8",
fullDayEventDateFormat: "DD.MM.",
dateFormat: "DD.MM. HH:mm",
dateEndFormat: "HH:mm",
timeFormat: "absolute",
colored: false,
maxTitleLength: true,
maxTitleLength: 25,
coloredSymbolOnly: false,
calendars: [
{
symbol: "user",
url: "webcal:// XXXXXX ",
color: "#FB0055"
},
{
symbol: "users",
url: "webcal XXXXXX ",
color: "#FDC209"
},
{
symbol: "building",
url: "webcal:// XXXXXX ",
color: "#55D62B"
},
]
}
},
{
module: "helloworld",
position: "bottom_bar",
config: {
text: "<br />",
}
},
{
module: "MMM-PublicTransportHafas",
position: "bottom_bar",
config: {
//https://github.com/raywo/MMM-PublicTransportHafas
stationID: " XXXXXX ",
stationName: " XXXXXX ",
timeToStation: 5,
showTableHeaders: false,
showOnlyLineNumbers: true,
updatesEvery: 60,
marqueeLongDirections: false,
}
},
{
module: "newsfeed",
disabled: true,
position: "bottom_bar",
config: {
feeds: [
{
title: "Zeit",
url: "http://newsfeed.zeit.de/indexs"
},
{
title: "Heise",
url: "http://heise.de/newsticker/heise-top-atom.xml"
},
{
title: "Golem",
url: "http://rss.golem.de/rss.php?tp=sec&feed=RSS2.0"
}
],
showSourceTitle: true,
showPublishDate: true,
showDescription: true,
updateInterval: "30000",
}
},
{
module: 'MMM-Sonos',
disabled: true,
position: 'bottom_bar',
config: {}
}
]
};
/*************** DO NOT EDIT THE LINE BELOW ***************/
if (typeof module !== "undefined") {module.exports = config;}
Hilfsscripte
Bewegungssensor
Damit der Monitor (z.B. via HDMI) sich nur anschaltet, wenn jemand im Raum sich befindet, habe ich einen Bewegungssensor (PIR) installiert und via Sript so angesteuert, dass der Monitor sich nach einigen Sekunden deaktiviert.
Start-Script
cd ~
mkdir pir
vi pir.sh
mit Inhalt:
cd ~/pir
DISPLAY=:0
npm start
Anschließend Rechte setzen und Script in pm2 laden:
chmod +x pir.sh
pm2 startup
pm2 start pir.sh
sudo pm2 save
Main-Programm (pir.py)
cd pir
vi pir.sh
#!/usr/bin/env python
import sys
import time
import RPi.GPIO as io
import subprocess
io.setmode(io.BCM)
SHUTOFF_DELAY = 10 # seconds
PIR_PIN = 17 # 11 on the board
LED_PIN = 16
def main():
io.setup(PIR_PIN, io.IN)
io.setup(LED_PIN, io.OUT)
turned_off = False
last_motion_time = time.time()
while True:
if io.input(PIR_PIN):
print ".",
last_motion_time = time.time()
io.output(LED_PIN, io.LOW)
sys.stdout.flush()
if turned_off:
turned_off = False
turn_on()
else:
if not turned_off and time.time() > (last_motion_time +
SHUTOFF_DELAY):
turned_off = True
turn_off()
if not turned_off and time.time() > (last_motion_time + 1):
io.output(LED_PIN, io.HIGH)
time.sleep(1.5)
def turn_on():
subprocess.call("sh /home/pi/PIR/monitor_on.sh", shell=True)
def turn_off():
subprocess.call("sh /home/pi/PIR/monitor_off.sh", shell=True)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
io.cleanup()
Monitor-Switch-Off (monitor_off.sh)
vi monitor_off.sh
mit Inhalt:
sudo /opt/vc/bin/tvservice -o
Monitor-Switch-On(monitor_on.sh)
vi monitor_on.sh
mit Inhalt:
sudo /opt/vc/bin/tvservice –preferred && chvt 6 && chvt 7
Anpassungen im OS
sudo chmod +x pir.py
sudo chmod +x monitor_off.sh
sudo chmod +x monitor_on.sh
sudo usermod -a -G gpio pi