Realtime Clock (RTC) am Raspberry Pi betreiben

Da ich im Moment dabei bin, ein Home Automation System auf Basis eines Raspberry Pi 21 und openHAB aufzubauen, werde ich hier im Blog hin und wieder einzelne Schritte beschreiben. V.a., wenn ich selbst im Netz gar nichts, wenig oder veraltete Infos gefunden habe. Vermutlich werde ich auch noch eine Übersichtsseite hier erstellen, die auf die Blogbeiträge verlinken. Aber eines nach dem anderen… Zur (aktuellen) Sache:

Da ich den Raspberry Pi auch verwenden werde um Stromausfall per SMS zu melden (zur USV und dem UMTS Stick beizeiten an anderer Stelle mehr) dachte ich mir, dass ein Realtime Clock (RTC) Modul nicht schaden könnte. Fällt nämlich der Strom aus und der Raspberry fährt herunter, ist die Uhrzeit weg. Beim Neustart wird die Uhrzeit aus dem Internet per NTP auf die aktuelle Zeit gesetzt. Kein Internet, keine korrekte Uhrzeit, dadurch eventuell SMS Nachrichten mit „komischem“ Inhalt.

Die Hardware, also die kleine RTC DS1307 Platine, kostet übrigens um die 2 € und ist z.B. bei Amazon1 erhältlich. Auf jeden Fall beachten, dass keine „normale“ Batterie sondern eine wiederaufladbare LIR2032 Lithium-Batterie mitgeliefert wird und es diese auch tatsächlich ist!

Bin nach folgenden beiden Anleitungen vorgegangen:

Im ersten Tutorial ist ganz gut beschrieben, wie die Hardware umzulöten ist (keine Angst, das kriegt jeder mit jedem Lötkolben hin, ist aber wichtig und unumgänglich) und wie diese an den Raspberry Pi anzuschließen ist. Hier zwei Fotos der umgelöteten Platine. Auf dem zweiten Bild sieht man, wo die beiden Widerstände entfernt werden müssen und wo die vier Pins angelötet werden müssen.

RTC DS1307 Platine

RTC DS1307 Platine

Verkabelt wird das auf dem Raspberry Pi dann so:

#--------------------#
| RPi GPIO  | RTC P1 |
|-----------|--------|
|Pin 2 5V   |   VCC  |
|Pin 3 SDA  |   SDA  |
|Pin 5 SCL  |   SCL  |
|Pin 6 GND  |   GND  |
#--------------------#

Leider sind die beiden Anleitungen nicht mehr ganz aktuell was den Softwareteil anbelangt. Hier daher kurz zusammengefasst, was ich beim Raspberry Pi 2 und dem Raspbian Image vom Februar 2015 machen musste:

In der Raspberry Config unter „Advanced Options“, „A7 I2C Enable/Disable automatic loading of I2C kernel module“ das I2C aktivieren:

sudo raspi-config

Die I2C Tools installieren:

sudo apt-get install i2c-tools

Zum Test und zur Einrichtung die noch nötigen Module laden:

sudo modprobe i2c_dev
sudo modprobe rtc_ds1307

Nun sollte hier in einer Tabelle irgendwo eine „68“ auftauchen:

i2cdetect -y 1

Hiermit kann man sich die aktuell gesetzten Stunden, Minuten und Sekunden sehen:

i2cget -y 1 0x68 0
i2cget -y 1 0x68 1
i2cget -y 1 0x68 2

Virtuelle Datei für die Uhr anlegen:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

Aktuelle Uhrzeit aus der Uhr auslesen:

sudo hwclock -r

Systemzeit in die Uhr speichern (bei mir stimmte sie bei Ersteinrichtung natürlich absolut überhaut nicht):

sudo hwclock -w

Ok, klappt also alles. Nun soll das ganze Thema ja auch dauerhaft nach Systemstart am Start sein.

Dazu in /etc/modules folgende Module hinzufügen:

i2c_dev
rtc_ds1307

In /etc/rc.local kommt vor exit 0 folgendes:

# RTC Uhr einbinden und Systemzeit aus RTC beim Start setzen
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

Zusätzlich wollen wir, dass die genaue Systemzeit (wird im Normalfall ja per NTP permanent aktualisiert) beim Shutdown in die Uhr gespeichert wird.

/etc/init.d/hwclock_w mit folgendem Inhalt erstellen:

#!/bin/sh
### BEGIN INIT INFO
# Provides: hwclock_w
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: RTC Clock mit Systemzeit setzen beim Shutdown
### END INIT INFO

hwclock -w

Das Script soll bei den entsprechenden Shutdown- und Restart-Runlevels ausgeführt werden. Das erreichen wir damit:

update-rc.d hwclock_w defaults

Fertig!

Nun kann man das Thema noch testen indem man den Raspberry Pi runterfährt, ein Weilchen ausgeschaltet lässt und ohne Internet wieder startet. Dann mit date und auch sudo hwclock -r die aktuelle Uhrzeit anzeigen lassen.

Zeitbedarf hielt sich sehr in Grenzen. Mit Löterei und Recherche, warum es nicht auf Anhieb mit o.g. Anleitungen tat, eine Stunde.

  1. Amazon Affiliate Link. Bei Bestellung erhalten wir ein paar Cent Provision. Wichtig: Am Preis auf Amazon ändert sich für Dich nichts! Es handelt sich lediglich um einen Bonus, den uns Amazon für die Empfehlung gut schreibt.