Raspberry Pi per RTC-Timer an- und ausschalten

Die RTC programmieren

Als größere Herausforderung stellt sich das Programmieren der RTC heraus. Der gewählte Baustein DS3231 ist weit verbreitet, das Standard-Raspbian unterstützt die reine Uhrfunktion gut. Üblicherweise aktivieren Sie die RTC mit zwei Zeilen in der /boot/config.txt (Listing 2), zudem laden Sie durch Eintragen der Zeile i2c-dev in der Datei /etc/modules das entsprechende Kernel-Modul.

Listing 2

 

[...]
dtparam=i2c_arm=on
#dtoverlay=i2c-rtc,ds3231

Allerdings erlaubt der Standard-DS3231-Treiber keinen Zugriff auf die Alarmregister der Uhr. Deshalb laden wir ihn für dieses Projekt gar nicht erst – deswegen haben wir die letzte Zeile in Listing 2 auch auskommentiert. Die komplette Kontrolle der Uhr liegt auf diese Weise im Userspace.

Die Kommunikation mit der RTC erfolgt über den I2C-Bus. Die Implementation gestaltet sich dank guter Python-Unterstützung unaufwendig – es geht hier im Wesentlichen darum, die Bits der entsprechenden Register richtig zu setzen. Das Wake-On-RTC-Projekt des Autors [4] stellt dafür eine Low-Level-Python-Bibliothek sowie das Anwendungsprogramm Rtcctl bereit.

Der Befehl rtcctl unterstützt eine ganze Reihe von Kommandos; die der Aufruf sudo rtcctl help komplett auflistet. Die beiden Kommandos aus Listing 3 setzen als Beispiel zum einen das Systemdatum gemäß der RTC-Uhrzeit sowie den ersten Alarm der RTC. Weitere Details liefert die Projektdokumentation.

Listing 3

 

$ sudo rtcctl set sys
$ sudo rtcctl set alarm1 "23.07.17 08:30"

Die RTC speichert für den Alarm kein volles Datum, sondern nur den Tag des Monats sowie die Stunde, Minute und Sekunde (Letzteres auch nur für den ersten Alarm). Das beschränkt den Zeithorizont für den nächsten Alarm auf maximal 30 Tage. Aus diesem Grund differieren unter Umständen der angeforderte und der tatsächlich gesetzte Alarmzeitpunkt: Setzen Sie am 01.09.17 den Alarm auf den 15.10.17, stellen Sie den Alarm tatsächlich auf den 15. September.

Für den Alltag stellt diese Einschränkung meist kein Problem dar, denn in der Regel fällt – von längeren Urlauben einmal abgesehen – mindestens ein Bootvorgang pro Monat an. Außerdem weiß die Wake-On-RTC-Software mit dieser Einschränkung umzugehen.

Systemd-Automation

Ein Kommando zur Steuerung der RTC alleine reicht für das Gesamtprojekt noch nicht aus. Wie eingangs schon beschrieben, muss der Raspberry Pi beim Systemstart zumindest den Alarm zurückstellen und beim Herunterfahren den neuen Boot-Zeitpunkt setzen. Beides erledigt ein eigener Systemd-Service.

Im Github-Projekt gibt es das Installationsprogramm tools/install. Mit Sudo aufgerufen, installiert es alle notwendigen Programme und erstellt den Systemd-Service wake-on-rtc.service. Der lässt sich dann über die Datei /etc/wake-on-rtc.conf konfigurieren. Dort finden sich mit [GLOBAL], [boot] und [halt] drei Abschnitte (Listing 4).

Listing 4

 

[GLOBAL]
debug: 0
alarm: 1
i2c: 1
utc: 1
[boot]
hook_cmd: rtc_boot_hook
auto_halt: 0
[halt]
next_boot: next_boot.sh
lead_time: 2
set_hwclock: 1

Im globalen Abschnitt sollten Sie nur die debug-Variable ändern. Interessanter sind die beiden anderen Bereiche: [boot] steuert das Verhalten beim Systemstart. Über die Variable hook_cmd (Zeile 8) hinterlegen Sie optional ein Kommando, das der aktuelle Startmodus als Parameter erhält. Der Service ruft das Programm dann entweder mit alarm oder normal auf – je nachdem, ob Sie das System per Taster manuell hochgefahren haben oder es aufgrund eines RTC-Alarms startete. Damit reagiert der RasPi bei Bedarf auf den Boot-Modus unterschiedlich.

Der Parameter auto_halt in Zeile 9 dient als Workaround für den beschränkten Zeithorizont. Steht hier ein Wert größer als null (interpretiert als Minuten) und das System fährt per RTC-Alarm hoch, dann löst der Service sofort wieder einen Shutdown aus, falls der nächste Boot-Zeitpunkt nicht innerhalb der konfigurierten Anzahl von Minuten liegt. Den nächsten Boot-Zeitpunkt bestimmt der Wake-on-RTC-Dienst über das im Abschnitt halt in der Variablen next_boot eingetragene Programm (Zeile 12). Das Programm darf als Ergebnis nur eine Zeile mit dem nächsten Boot-Zeitpunkt (oder einer Null) ausgeben.

Im Projektordner gibt es ein Beispielprogramm (files/usr/local/sbin/next_boot.sh), das den Zeitpunkt für das nächste Booten auf "in fünf Minuten" setzt. Das Programm lässt sich für eigene Zwecke leicht anpassen, etwa fix auf tomorrow 08:00 – das Linux-Programm date gibt sich sehr flexibel. Hängt die Schaltung an einem Linux-VDR, dann muss der Boot-Zeitpunkt aus der VDR-Datenbank kommen.

Die verbleibenden Variablen in den Zeilen 13 und 14 steuern den Vorlauf beim Booten (lead_time in Minuten) sowie den Abgleich der internen RTC-Uhr mit der Systemzeit (set_hwclock). Letzteres ergibt nur dann Sinn, wenn der RasPi seine Zeit über das Internet aktualisiert.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.