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

06/2019
Home Improvement

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Extrem genau

    Mit einem A/D-Wandler messen Sie bei Bedarf Spannungen. Der MCP3424 macht dabei konstruktionsbedingt eine gute Figur.

  • Verbindungsaufnahme

  • Süßer Wecker

    Dem RasPi fehlen sowohl eine Echtzeituhr als auch ein BIOS, ein zeitgesteuertes Wecken erfordert also Zusatzkomponenten. Hier springt der Witty Pi Mini in die Bresche, ein µHAT von UUGear.

  • Windows to go

    Das Aufsetzen zuverlässiger und sicherer Remote-Desktop-Lösungen erfordert einiges Know-how. Die RasPi-basierte Pinbox von Pintexx reduziert den Konfigurationsaufwand auf ein Minimum.

  • Prima Klima

    In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

  • Auf einen Blick

    Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

  • Sanft berührt

    Mit einem RasPi und dem Controllermodul PiXtend lassen sich mühelos Roboterarme ansteuern und deren Bewegung automatisieren.

  • Popcorn-Kino

    Mit Kodi 18.0 unterstützt LibreELEC 9.0 jetzt die von vielen Streaming-Diensten genutzte DRM-Verschlüsselung. Die Integration von Netflix, Amazon und Co. erfordert allerdings Handarbeit.

  • So nah und doch so fern

    Der RasPi kommt häufig als Server oder Steuerrechner für spezielle Zwecke zum Einsatz. Mit Anydesk erhalten Sie dazu eine Steuersoftware mit grafischer Oberfläche.

  • Eingebettet

    Funkmodule, Displays und Analysegeräte für den Raspberry Pi: Auf der Embedded World präsentieren sich zahlreiche Unternehmen interessierten Elektronikbastlern und Entwicklern.