Aus Raspberry Pi Geek 06/2016

Foto-Backup mit dem RasPi (Seite 3)

Listing 9

 

#!/usr/bin/python
import sys
import socket
import os, os.path
import time
SOCKFILE = "/run/hat-server"
if len(sys.argv) == 1:
  sys.exit(3)
else:
  for _ in range(100):
    if os.path.exists(SOCKFILE):
      break
    else:
      time.sleep(0.1)
  sock = socket.socket(socket.AF_UNIX,socket.SOCK_STREAM)
  sock.connect(SOCKFILE)
  sock.sendall(sys.argv[1])

Systemintegration

Damit das alles automatisch klappt, gilt es, den HAT-Server sauber ins System einzubinden. Dank Systemd gelingt das mit wenigen Zeilen. Listing 10 zeigt die Service-Definition über die Datei /etc/systemd/system/hat-server.service. Die Zeile 9 startet via ExecStart das Server-Programm, die nachfolgende Zeile löst das “Boot-Start”-Ereignis aus. Dadurch blinkt beim Hochfahren die rote LED.

Listing 10

 

[Unit]
Description=Start HAT-server
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/hat-server.py
ExecStartPost=/usr/local/sbin/hatctl.py BS
[Install]
WantedBy=basic.target

Ein zweiter Service schaltet diese am Ende des Bootvorgangs wieder aus. Die zugehörige Service-Definition steht in /etc/systemd/system/endofboot.service (Listing 11). Der Dienst löst über die Zeile 8 in ExecStart das Ereignis “Boot-Ende” aus. Da das System Services beim Herunterfahren in umgekehrter Startreihenfolge stoppt, nutzen wir den Service auch gleich für das Ereignis “Halt-Start” – der ExecStop-Befehl aus Zeile 9 macht genau das.

Listing 11

 

[Unit]
Description=Change status of HAT-LEDs
After=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/sbin/hatctl.py BE
ExecStop=/usr/local/sbin/hatctl.py HS
[Install]
WantedBy=multi-user.target

Beide Services müssen Sie einmalig mit den Befehlen aus Listing 12 aktivieren. Nach einem Neustart lädt das System die Dienste dann automatisch, die LEDs sollten wie geplant leuchten. Alternativ schalten Sie die LEDs von der Kommandozeile aus über das Skript hatctl.py manuell nach Belieben. Die Funktion nutzt das Kopier-Skript aus Listing 6, speziell die Zeilen 5 und 9. Sie lösen die Ereignisse “Aktion-Start” und “Aktion-Ende” aus und sorgen dafür, dass während des Kopiervorgangs die gelbe LED blinkt.

Listing 12

 

$ sudo systemctl enable hat-server.service
$ sudo systemctl enable endofboot.service

Damit hat unser Foto-Tank seine Basisfunktionen erhalten. Wie erwähnt, geht das Ganze mit dem Display-O-Tron-Hat (Abbildung 3) auch ein wenig komfortabler. Auch diese Erweiterung stammt von Pimoroni, und auch dafür gibt es eine Python-Bibliothek, über die sich der RasPi-Aufsatz bequem ansteuern lässt. Allerdings bietet dieser HAT viel mehr Funktionen als der Pibrella.

Abbildung 3: Der Display-O-Tron-Aufsatz für den RasPi bietet mehr Möglichkeiten zur Ausgabe von Informationen.

Abbildung 3: Der Display-O-Tron-Aufsatz für den RasPi bietet mehr Möglichkeiten zur Ausgabe von Informationen.

Ausblick

Unser Foto-Tank ist einsatzbereit. Drei LEDs und ein Taster, mehr braucht es nicht für die Interaktion mit dem Gerät. Trotzdem bleiben Wünsche offen: Zum einen fehlt es dem Kopier-Skript noch an Intelligenz. Es kopiert zwar nur geänderte Dateien (also neue Fotos) von der SD-Karte auf die Festplatte. Nutzen Sie allerdings mehrere Kameras und erstellen diese zufällig Bilder gleichen Namens, überschreiben diese die zuerst gesicherten Bilder. Dasselbe Problem droht, sobald Sie in der Kamera die Bildnummerierung zurücksetzen.

Nützlich wäre auch ein drahtloser Zugang zum RasPi: So ließen sich auch Bilder von Smartphones oder Tablets sichern. Wünschenswert wäre auch ein schönes Webinterface, über das man schon während des Urlaubs seine Aufnahmen sichten, löschen und bewerten könnte. Auch diese Erweiterungen stellen für einen RasPi keine echte Herausforderung dar. Der zweite Teil des Artikels im nächsten Heft zeigt die notwendigen Schritte. 

Der Autor

Bernhard Bablok arbeitet bei der Allianz Managed&Operations Services SE als SAP-HR-Entwickler. Wenn er nicht Musik hört oder mit dem Radl beziehungsweise zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und neuerdings Mini-Computer. Sie erreichen ihn unter mailto:[email protected].

Infos

  1. Bausatz Berry-Clip: http://www.raspberrypi-spy.co.uk/berryclip-6-led-add-on-board/
  2. Bausatz Fish-Dish: https://www.rasppishop.de/Fish-Dish-LED-und-Buzzer-Board
  3. Projektseite des Autors: https://github.com/bablokb/pi-imgtank
  4. Python-Bibliothek für Pibrella: https://github.com/pimoroni/pibrella
  5. Raspbian-Installation automatisieren: Bernhard Bablok, “Automatisch verpackt”, RPG 01/2016, S. 76, http://raspi-geek.de/35797
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben