Christian/ Januar 24, 2019/ Betriebssysteme, Comannds

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

Share this Post