Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Tutorial] RTC in CarPi einbinden
#1
Bekanntermaßen besitzt der Raspberry Pi ja keine eingebaute Echtzeituhr. Normalerweise ist das kein Problem solange der Pi eine Internetverbindung hat und über diese die korrekte Uhrzeit beziehen kann. Doch was tun wenn der Pi in einem Auto verbaut ist und somit eine Internetverbindung garnicht oder nur umständlich herzustellen ist? In diesem Fall ist eine Real Time Clock (RTC) die Lösung!

Dieses Tutorial beschreibt wie man ein RTC-Modul unter Raspbian Jessie einbindet. Dazu verwenden wir ein DS3231, das wesentlich genauer arbeitet als ein DS1307.

##############################################################################
WARNUNG: Wie immer bei Eingriffen ins System ist es ratsam, vorher ein Backup zu erstellen!
##############################################################################

1. Hardware-Setup:

Verbindet das RTC-Modul entsprechend folgendem Schema mit dem Pi:
   

(Anmerkung: Falls schon ein Radio-Modul (SI4703) am Pi angeschlossen ist, dann sind die I2C-Pins (GPIO2 und GPIO3) bereits belegt. Das macht aber überhaupt nichts. Hängt einfach das Modul dazu, der I2C kann damit umgehen.)


Nun gehts an’s Eingemachte:

2. Terminal-Fenster öffnen und die /boot/config.txt bearbeiten:
Code:
sudo nano /boot/config.txt

Hier die folgende Zeile einfügen:
Code:
dtoverlay=i2c-rtc,ds3231

Speichern (CTRL-o und ENTER) und schließen (CTRL-x)

3. Nun müssen die zukünftig nicht mehr gebrauchten Dienste fake-hwclock und ntp beendet werden:
Code:
sudo systemctl stop hwclock.sh fake-hwclock ntp
sudo systemctl disable hwclock.sh fake-hwclock ntp
sudo systemctl mask hwclock.sh fake-hwclock ntp

4. Neue Datei erstellen
Code:
sudo nano /etc/systemd/system/hwclock-sync.service

und mit folgendem Inhalt versehen:
Code:
[Unit]
Description=Time Synchronization from RTC Source
After=systemd-modules-load.service
RequiresMountsFor=/dev/rtc
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/sbin/hwclock -s
TimeoutSec=0

[Install]
WantedBy=time-sync.target
Speichern und schließen.

5. Bearbeiten
Code:
sudo nano /etc/rc.local

folgendes vor „exit 0“ einfügen:
Code:
[ ! -e /var/lib/systemd/clock -a "`systemctl is-active systemd-timesyncd | grep -i active`" ] && timedatectl set-ntp 1 > /dev/null 2>&1
Speichern und schließen.

6. Neue Datei:
Code:
sudo nano /etc/systemd/timesyncd.conf

mit folgendem Inhalt:
Code:
[Time]
NTP=0.europe.pool.ntp.org 1.europe.pool.ntp.org 2.europe.pool.ntp.org 3.europe.pool.ntp.org
FallbackNTP=0.europe.pool.ntp.org 1.europe.pool.ntp.org 2.europe.pool.ntp.org 3.europe.pool.ntp.org
Speichern und schließen.


7. Mit folgendem Kommando wird die automatische Zeit-Synchronisierung über RTC (oder NTP falls Internetverbindung besteht) beim Systemstart angestoßen:
Code:
sudo systemctl enable hwclock-sync systemd-timesyncd

8. Anstatt eines Reboots starten wir die Dienste manuell:
Code:
sudo systemctl start hwclock-sync systemd-timesyncd

Damit ist die Einrichtung abgeschlossen. Ob alles richtig gelaufen ist, können wir nun mit
Code:
timedatectl
testen. Die Ausgabe sollte in etwa so aussehen:

      Local time: So 2018-01-05 14:00:34 CET
      Universal time: So 2018-01-05 13:00:34 UTC
      RTC time: So 2018-01-05 13:00:33
      Time zone: Europe/Vienna (CET, +0100)
      NTP enabled: yes
      NTP synchronized: yes
      RTC in local TZ: no

9. Die Dienste ntp und fake-hwclock werden nun nicht mehr benötigt und können deinstalliert werden. Dafür einfach folgende Schritte nacheinander ausführen:
Code:
sudo systemctl stop fake-hwclock ntp
sudo systemctl disable fake-hwclock ntp
sudo apt-get -y remove fake-hwclock ntp
sudo rm -f /etc/init.d/{fake-hwclock,ntp}
sudo rm -f /etc/default/{fake-hwclock,ntp}
sudo rm -f /etc/rc?.d/{S,K}??fake-hwclock
sudo rm -f /etc/rc?.d/{S,K}??ntp
sudo rm -f /etc/ntp.conf
sudo rm -f /etc/cron.daily/ntp
sudo rm -f /etc/cron.hourly/fake-hwclock
sudo rm -f /var/log/ntpstats

Hinweis: Gerade nach einer Ersteinrichtung kann es sein, dass die RTC nicht synchron mit der Netzwerkzeit ist. Deshalb führen wir als letzten Schritt noch einen Reset der RTC durch
Code:
timedatectl set-local-rtc false

Falls Datum/Uhrzeit immer noch nicht stimmen:
Synchronisieren mit ntp:
Code:
timedatectl set-ntp 1

Das war’s!


Credits: Ehre wem Ehre gebührt! Das ganze habe ich mir nicht selbst ausgedacht. Weitestgehend habe ich das dieser Quelle entnommen. Ich habe es nur übersetzt und in kleineren Details abgeändert.

Wer sich mehr in's Thema vertiefen möchte, kann hier mal reinschauen:
https://oberguru.net/linux/zeit-zeitserv...n-rtc.html
https://wiki.archlinux.org/index.php/Tim...ronization

Have fun!
Zitieren
#2
Hallo Jack,
Ich habe eine Frage zu der Anleitung, ich habe bei Punkt 6 bereits ein existierendes File „timesyncd.conf“ und nicht neu erstellt wird wie von dir übersetzt. Jetzt hab ich mal in die Originale Anleitung rein gelesen, da steht nix von erstellen sondern von Editieren, werd da aber nicht Schlau draus?! Was muss ich da jetzt machen? Muss ich da was machen, was muss da wohin? Oder kann das so bleiben?
Danke für das tolle Tutorial und deine Hilfe

Grüße
David
Zitieren
#3
In dieser Datei werden NTP-Server definiert, über die per NTP (falls Internetverbindung besteht) ein Timesync stattfindet. Wenn die Datei schon existiert und dort NTP-Server eingetragen sind, dann kannst du sie so lassen wie sie ist. Falls sie leer ist, dann fügst du den Inhalt wie oben beschrieben ein.
Zitieren
#4
Hallo,
Darin steht:
Code:
[Time]
Servers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
Zitieren
#5
Bin nicht ganz sicher ob die Syntax so stimmt. Die Zeile mit der Serverliste sollte eigentlich mit "NTP=" beginnen (s. hier). Ebenfalls weiß ich nicht, ob diese NTP-Server gültig sind. Um sicher zu gehen würde ich empfehlen den Inhalt der Datei durch den im Tutorial genannten zu ersetzen.
Zitieren
#6
Kleine Stolperfalle: in der /etc/RC.local die einzufügende Zeile: das Zeichen zwischen " systemclt is-active ..... grep -i active " jeweils nach und vor den doppelten Anführungsstrichen ist ein sogenannter "Back-quote" und befindet sich auf der deutschen Standardtastatur oben rechts neben dem Fragezeichen und wird mit Shift erreicht.
Ich hatte prompt das falsche Zeichen (Shift-Raute) genommen und mich über die Fehlermeldung gewundert.
Zitieren
#7
Deswegen ist Copy&Paste wenn möglich vorzuziehen. Wink
Zitieren
#8
Wenn ich wüsste, wie Copy-Paste bei Putty geht, müsste ich nicht abtippen.
Zitieren
#9
Zum Einfügen eines zuvor kopierten Strings musst du in PuTTY nur einen Rechtsklick machen. Oder auf der Tastatur Shift+Insert.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
RasPiCarProjekt