Raspberry Pi – Magic Mirror auf Basis von Arch Linux – Teil 3

Nachdem in Teil 1 die Installation des Betriebssystems und in Teil 2 die Installation der Magic Mirror-Anwendung beschrieben wurde, folgen im Anschluss noch ein paar optionale Modifikationen.

Abschaltung Powermanagement WiFi

Je nach verwendetem WiFi-Treiber kann es passieren, daß die Netzwerkverbindung des Raspberry Pi ab und an abbricht, weil der Treiber den Netzwerkchip in einen Energiesparmodus versetzt.

Um dies z.B. beim Edimax EW-7811Un zu verhindern, müssen in der Datei „/etc/modprobe.d/8192cu.conf“ mehrere Einstellungen vorgenommen werden, welche den Wechseln in den Energiesparmodus verhindern:

[mirroruser@mirror-pi ~]$ sudo vi /etc/modprobe.d/8192cu.conf
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0 rtw_ips_mode=1

Die einzelnen Parameter und deren mögliche Werte sind in dem Forenthread „Edimax Wifi adapter seems to go to sleep if not used“ im offiziellen Raspberry Pi-Forum erläutert:

rtw_power_mgnt

  1. disable power saving
  2. power saving on, minPS
  3. power saving on, maxPS

rtw_enusbss

  1. disable auto suspend
  2. enable auto suspend

rtw_ips_mode

  1. low power, IPS_NORMAL
  2. higher power, IPS_LEVEL2

Installation PIr

Sofern der Magic Mirror nicht immer von Hand ein- und ausgeschaltet werden soll, loht sich die Anschaffung eines Infrarot-Sensors, mit dessen Hilfe der Bildschirm je nach An- bzw. Abwesenheit geschaltet werden kann. Dies schont nicht nur die Hardware, sondern spart auch übers Jahr gesehen jede Menge Strom.

Für den Magic Mirror ist bereits ein entsprechendes Modul vorhanden, dessen Entwickler einen günstigen und weitverbreiteten HC-SR501 Sensor empfiehlt.

Nachdem der Sensor mit den Raspberry Pi verbunden wurde, wofür 3 Kabel für +5V, GND und die Datenleitung notwendig sind, solltezuerst mit dem „GPIO utility“ ein Funktionstest durchgeführt werden:

[mirroruser@mirror-pi ~]$ sudo pacman -S wiringpi

Da es für die Benennung der Anschlüsse am Raspberry Pi mehrere konkurrierende Schemen gibt, hilft ein Aufruf von

[mirroruser@mirror-pi ~]$ gpio readall
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
...
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
...
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+

welcher die am aktuellen Modell vorhandenen Anschlüsse inklusive deren möglichen Benennungen ausspuckt.

Die verwendete Datenleitung an Pin 16 wird im Wiring Pi-Schema mit 4, im BCM-Schema mit 23 bezeichnet.

Zum Testen und justieren des Sensors kann ein kleines Testskript verwendet werden:

[mirroruser@mirror-pi ~]$ vi testpir.sh
#!/bin/bash
while true; do
gpio read 4
done
[mirroruser@mirror-pi ~]$ chmod +x testpir.sh

Nach dem Aufruf von

[mirroruser@mirror-pi ~]$ ./testpir.sh

sollte durchgängig eine Zahl ausgegeben werden: eine „0“, falls der Sensor nichts erfasst und eine „1“ bei erfolgreicher Erfassung.

Damit das Modul erfolgreich installiert werden kann, sind vorhab noch ein paar Pakete zu installieren:

[mirroruser@mirror-pi ~]$ sudo pacman -S python2 make gcc

Zum root-freien Zugriff auf die Datenleitung sind einige Klimmzüge notwendig:

Zuerst wird eine neue Systemgruppe angelegt

[mirroruser@mirror-pi ~]$ sudo groupadd gpio

und dann der Magic Mirror-Benutzer dieser Gruppe hinzugefügt

[mirroruser@mirror-pi ~]$ sudo usermod -aG gpio mirroruser

Anschließend werden der Datei „raspberrypi.rules“ noch ein paar zusätzliche Regeln hinzugefügt, damit Mitglieder der Gruppe „gpio“ Zugriff auf die unter  „/sys/class/gpio“ erzeugten Devices haben. Für die notwendigen Einträge bedient man sich am sinnvollsten bei der Datei „/etc/udev/rules.d/99-com.rules“ des offiziellen Raspbian-Images:

SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
 chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio;\
 chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio;\
 chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
 '"

Damit die Änderungen übernommen werden können, muss ein Neustart des Systems erfolgen.

Anschließend erfolgt die Installation des Moduls:

[mirroruser@mirror-pi ~]$ cd MagicMirror/modules/
[mirroruser@mirror-pi modules]$ git clone https://github.com/paviro/MMM-PIR-Sensor.git
...
[mirroruser@mirror-pi modules]$ cd MMM-PIR-Sensor
[mirroruser@mirror-pi MMM-PIR-Sensor]$ npm install

Der Eintrag in der Konfigurationsdatei ist schnell erledigt und benötigt lediglich die Angabe des verwendeten Sensor-Pins:

[mirroruser@mirror-pi ~]$ vi MagicMirror/config/config.js

...
{
  module: 'MMM-PIR-Sensor',
    config: {
      sensorPIN: 23
    }
},
...

Die aktuelle Version des Moduls verwendet zum Ein- und Ausschalten des Bildschirms „tvservice“, das allerdings zwingend auch noch ein Umschalten der virutellen Konsole mittels sudo benötigt. Deutlich einfacher und geht es, wenn der Aufruf von „tvservice“ mit „vcgencmd“ ersetzt wird:

[mirroruser@mirror-pi ~]$ vi MagicMirror/modules/MMM-PIR-Sensor/node_helper.js
activateMonitor: function () {
...
  else if (this.config.relayPIN == false){
    exec("/opt/vc/bin/vcgencmd display_power 1", null);
  }
},

deactivateMonitor: function () {
...
  else if (this.config.relayPIN == false){
    exec("/opt/vc/bin/vcgencmd display_power 0", null);
  }
},

Kommentar schreiben