Inhaltsverzeichnis

Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111

Seite Inhalt
Startseite Übersicht
Hauptanleitung Gesamtüberblick, Begriffsklärung, Teil 1–3 (FRITZ!Box, Raspberry Pi/EmonCMS, Sensor-Boxen), Ein-/Ausschalten, Zugänge-Checkliste, SENSOR_ID-Übersicht
Sensoren in EmonCMS einbinden Wiederkehrender Ablauf für jede neue Sensor-Box: API-Key, Inputs, Feeds, Dashboard
Programmcode der Sensor-Boxen Vollständiger Arduino-Code: Testsensor, einfacher BME280-Sensor, Klimamessbox, Raummessbox
Raspberry Pi um Echtzeituhr (RTC) erweitern – HW-111 Nachrüstung eines DS1307-RTC-Moduls, Shutdown-Taster
Schaltung Platine
Gehäuse 3D-Druck oder LASER-Cutter
Schule Einsatz im Unterricht
Sonstiges dies und das….

Diese Seite beschreibt die Nachrüstung einer batteriegepufferten Echtzeituhr (RTC) am Raspberry Pi mit dem verbreiteten HW-111-Modul, siehe auch Hauptanleitung, Teil 2.

Warum das nötig ist: Der Raspberry Pi hat werksseitig keine batteriegepufferte Uhr. Im isolierten Messnetz ohne Internetzugang kann er sich zudem nicht per NTP die korrekte Uhrzeit holen. Nach jedem Neustart oder Stromausfall fällt die Systemzeit daher auf einen falschen Wert zurück – neue EmonCMS-Feed-Daten bekommen dann falsche Zeitstempel und erscheinen in Diagrammen/CSV-Exports als fehlend, obwohl sie eigentlich geschrieben wurden.


Das HW-111-Modul

Das HW-111 ist eine verbreitete, günstige RTC-Platine mit zwei separaten I²C-Bausteinen:

Sicherheitshinweis zu HW-111-Modulen: Manche Platinenversionen
besitzen einen (unbestückten oder bestückten) Ladewiderstand für
wiederaufladbare Akkus. Eine normale CR2032-Knopfzelle ist NICHT
wiederaufladbar - wird sie dauerhaft "geladen", besteht Überhitzungs-
und Explosionsgefahr! Vor Erstinbetriebnahme das Modul auf einen
Ladewiderstand (meist mit "R" beschriftet, in der Nähe der Batterie)
prüfen. Falls vorhanden und eine normale CR2032 verwendet wird,
diesen Widerstand auslöten oder ein Modul ohne Ladeschaltung nutzen.
Im Zweifel beim Platinenhersteller/Datenblatt nachsehen.

Schritt 1: Verkabelung

HW-111-Pin Verbunden mit (Raspberry Pi)
VCC 5V (Pin 2 oder 4)
GND GND (z. B. Pin 6)
SDA Pin 3 (GPIO2 / SDA1)
SCL Pin 5 (GPIO3 / SCL1)

Schritt 2: I²C aktivieren

Falls am Pi noch nicht geschehen, zuerst per SSH mit dem Pi verbinden.

So erreichen Sie den Pi

Der Pi hängt im isolierten Arduino-Messnetz der FRITZ!Box (siehe Hauptanleitung, Teil 1 & 2). Der eigene Rechner muss dafür nicht im selben WLAN wie der Pi sein – ein per LAN-Kabel an dieselbe FRITZ!Box angeschlossener Rechner reicht, da LAN und WLAN der FRITZ!Box intern ein gemeinsames Netz bilden.

  1. LAN-Kabel vom eigenen Rechner zur FRITZ!Box stecken
  2. In der FRITZ!Box-Oberfläche (z. B. http://192.168.1.1) unter Heimnetz → Netzwerk → Netzwerkverbindungen die IP-Adresse des Pi ablesen (Eintrag „emonpi„, z. B. 192.168.1.2 – bei fester IP-Vergabe immer dieselbe Adresse)
  3. Terminal öffnen und per SSH verbinden:
ssh pi@192.168.1.2
  (Adresse ggf. anpassen; Passwort wie in der Hauptanleitung/Zugänge-Checkliste hinterlegt)
Häufiger Stolperstein: "ssh: connect to host ... port 22:
No route to host" bzw. die Verbindung kommt gar nicht erst zustande,
obwohl das LAN-Kabel korrekt steckt. Ursache ist fast immer, dass
der eigene Laptop keine automatische DHCP-Adresse von der FRITZ!Box
bekommen hat und stattdessen bei einer Ersatzadresse im Bereich
169.254.x.x hängengeblieben ist (Linux vergibt diese automatisch,
wenn kein DHCP-Server antwortet). Prüfen mit:

ip addr show eth0

Steht dort "inet 169.254.x.x" statt einer 192.168.1.x-Adresse, hilft
eine manuell gesetzte Adresse im richtigen Bereich:

sudo ip addr add 192.168.1.21/24 dev eth0
ping -c 3 192.168.1.1

(Adresse ggf. anpassen, falls 192.168.1.21 schon von einem anderen
Gerät belegt ist. Danach das FRITZ!Box-Webinterface bzw. die
SSH-Verbindung erneut versuchen.)

Sobald die SSH-Sitzung steht, die folgenden Befehle direkt darin ausführen:

sudo raspi-config

→ „Interface Options“ → „I2C„ → aktivieren, dann das Menü verlassen und neu starten:

sudo reboot

Schritt 3: RTC-Treiber in der Boot-Konfiguration eintragen

sudo nano /boot/firmware/config.txt

Am Ende folgende Zeilen ergänzen:

# 5. Zeitmodule
dtoverlay=i2c-rtc,ds1307
Tipp zum Einfügen: In vielen Linux-Terminals lässt sich Text aus der
Zwischenablage mit Umschalt+Strg+V direkt in nano einfügen (statt der
sonst in grafischen Anwendungen üblichen Strg+V-Kombination, die in
Terminals oft anders belegt ist). Das funktioniert auch für mehrzeilige
Blöcke wie den obigen in einem Rutsch.

Speichern (Strg+O, Enter) und Editor verlassen (Strg+X), dann neu starten:

sudo reboot

Schritt 4: Erkennung prüfen

Nach dem Neustart:

sudo i2cdetect -y 1

Es sollten zwei Einträge erscheinen:

Zusätzlicher Bestätigungstest:

ls -la /dev/rtc*
sudo hwclock -r

Der erste Befehl sollte /dev/rtc0 anzeigen, der zweite die aktuell auf der RTC gespeicherte Zeit ausgeben (an dieser Stelle, vor Schritt 6, ist ein noch falsches/altes Datum normal).

Taucht weder 50 noch UU/68 auf, siehe Stolpersteine unten.

Schritt 5: Software-Ersatzuhr entfernen (falls vorhanden)

Die vorinstallierte Software-Ersatzuhr würde sonst mit der echten RTC kollidieren:

sudo apt-get -y remove fake-hwclock
sudo systemctl disable fake-hwclock
Hinweis: Bei neueren, Debian-"trixie"-basierten emonSD-Images ist
"fake-hwclock" teils gar nicht erst installiert - dann meldet der
Befehl "Package 'fake-hwclock' is not installed, so not removed"
und "Failed to disable unit: ... does not exist". Das ist unkritisch
und kein Fehler: Ohne fake-hwclock gibt es schlicht nichts, was mit
der echten RTC kollidieren könnte - dieser Schritt kann dann einfach
übersprungen werden.

Schritt 6: Uhrzeit einmalig setzen

Voraussetzung: Das Kommando "hwclock" wird ab hier gebraucht. Bei
aktuellen emonSD-Images (Debian "trixie") fehlt es oft standardmäßig
- siehe Stolperstein "sudo: hwclock: command not found" weiter unten,
falls "sudo hwclock -r" mit einer Fehlermeldung statt einer Zeitangabe
antwortet.

Aktuelle, korrekte Uhrzeit manuell setzen (Datum/Uhrzeit anpassen):

sudo date -s "JJJJ-MM-TT HH:MM:SS"

Auf die RTC schreiben, damit sie dauerhaft erhalten bleibt:

sudo hwclock -w

Schritt 7: Testen

Pi neu starten:

sudo reboot

Direkt danach (vor einer eventuellen manuellen Korrektur) prüfen:

date

Zeigt das Datum jetzt korrekt an, funktioniert die RTC – der Pi behält die Uhrzeit ab sofort auch über Neustarts und Stromausfälle hinweg, ganz ohne Internet.

Genauigkeit: Ein DS1307 geht über Monate hinweg um einige Sekunden
bis wenige Minuten nach/vor - für Klimadaten mit 20-300 Sekunden
Auflösung ist das unproblematisch. Bei Bedarf die Zeit gelegentlich
(z. B. einmal im Schulhalbjahr) manuell nachstellen (Schritt 6
wiederholen).

Optional: Shutdown-Taster nachrüsten

Für den Kofferbetrieb praktisch: ein einfacher Taster, mit dem sich der Pi sauber herunterfahren lässt, ohne Laptop/SSH mitbringen zu müssen. Raspberry Pi OS bringt dafür einen fertigen Mechanismus mit.

Wichtiger Pin-Hinweis: Der Standard-Pin für diese Funktion ist
eigentlich GPIO3 (Pin 5) - genau der wird hier aber bereits für die
I²C-Verbindung zur RTC verwendet! Deshalb einen anderen, freien Pin
nehmen, z. B. GPIO17 (Pin 11).

Einschränkung dabei: Nur GPIO3 kann den Pi aus dem vollständig
heruntergefahrenen Zustand per Tastendruck auch wieder EINSCHALTEN
(feste Hardware-Eigenschaft des SoC, kein Software-Feature). Mit
GPIO17 funktioniert nur das saubere HERUNTERFAHREN per Knopfdruck -
zum Wiedereinschalten bleibt es beim Ein-/Ausschalten über die
Steckdosenleiste. Für den Koffer-Einsatz reicht das aber völlig.
  1. Per SSH verbinden, Konfigurationsdatei öffnen:
sudo nano /boot/firmware/config.txt
  1. Am Ende ergänzen:
# 6. Shutdown-Taster
dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up
  Speichern (Strg+O, Enter) und Editor verlassen (Strg+X)
- **Sauber herunterfahren** (NICHT ''reboot'' – der Pi muss für die Verkabelung stromlos sein):
sudo shutdown -h now
  1. Warten, bis die grüne Aktivitäts-LED dauerhaft aus ist, dann Steckdosenleiste ausschalten bzw. Stromkabel ziehen
  2. Taster zwischen Pin 11 (GPIO17) und einem beliebigen GND-Pin (z. B. Pin 9) anschließen – kein zusätzlicher Widerstand nötig, der interne Pull-up wird durch gpio_pull=up aktiviert
  3. Steckdosenleiste wieder einschalten – der Pi bootet neu, die config.txt-Änderung wird dabei automatisch aktiv

Verhalten: Ein kurzer Tastendruck löst einen sauberen Shutdown aus (wie sudo shutdown -h now). Die grüne Aktivitäts-LED erlischt, sobald es sicher ist, den Strom zu trennen.


Stolpersteine