So, ich hab mal ein wenig in meinen "alten Dateibeständen" gekramt. Ich wusste ich hatte so was ähnliches schon mal gebraucht. Bei unserem ersten Wetterballon ist noch ein RPi mitgeflogen (ist inzwischen von einem Arduino ersetzt worden). Genau das gleich Problem mit der Systemzeit hatten wir da auch.
Hier
bin ich damals fündig geworden und habe auch vom Autor sehr nette und schnelle Hilfe bekommen. Das Python Script von der Seite hatten wir damals abgeändert um dem RPi die Systemzeit beizubringen. Ich habe das jetzt noch ein wenig angepasst. Dabei ist das raus gekommen (ich habe es gpstime.py genannt):
gpstime.py habe ich in /home/pi erstellt und mit
ausführbar gemacht.
Folgende Zeile muss noch an die eigene Schnittstelle angepasst werden. Wie man die raus findet erklärt CHristian hier.
Das Script holt sich aus den NMEA Daten den GPRMC Datensatz und daraus dann das Datum und die Uhrzeit und übergibt das dem RPi als Systemzeit.
Damit das alles auch automatisch abläuft, lasse ich das Script von /etc/rc.local beim Systemstart aufrufen:
Bei einem ersten Test hatte mein USB-GPS "leider" sofort einen Fix. Also hat alles super funktioniert.
Da ich leider von Python keine große Ahnung habe, weiß ich noch nicht was das Skript macht wenn der GPS Empfänger länger zum Fix braucht. Ich hoffe das meiner jetzt über Nacht alles vergisst und er morgen früh länger für einen Fix braucht. Dann kann ich dazu vielleicht mehr sagen.
Sollte das mit der rc.local keine gute Idee sein, könnte man das Script auch in crontab z.B. die 2./5. und 7. Minute nach Systemstart starten lassen. Ich werde berichten.
Hier
bin ich damals fündig geworden und habe auch vom Autor sehr nette und schnelle Hilfe bekommen. Das Python Script von der Seite hatten wir damals abgeändert um dem RPi die Systemzeit beizubringen. Ich habe das jetzt noch ein wenig angepasst. Dabei ist das raus gekommen (ich habe es gpstime.py genannt):
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import serial
import time
import datetime
import commands
import os
import sys
# Dictionary fuer die empfangene Daten
Protokolle = {}
# Variablen fuer die Uhrzeit
Uhrzeit = ""
Datum = ""
Stunde = ""
Minute = ""
Sekunde = ""
Tag = ""
Monat = ""
Jahr = ""
# UART oeffnen
UART = serial.Serial("/dev/ttyACM0", 9600)
UART.isOpen()
while True:
Protokolle = {}
for Counter in range(3):
Daten = []
# Zeile einlesen
Zeile = UART.readline()
Zeile = Zeile.strip()
# Zeile trennen
Daten = Zeile.split(",")
# Daten dem Dictionary hinzufuegen
Schluessel = Daten[0]
del Daten[0]
Protokolle.update({Schluessel:Daten})
for Key in Protokolle.iterkeys():
# Daten extrahieren
if(Key == "$GPRMC"):
# Datum formatieren
Uhrzeit = Protokolle[Key][0]
# UTC + 1 Stunde
Stunde = int(float(Uhrzeit[0:2]) + 1)
Minute = Uhrzeit[2:4]
Sekunde = Uhrzeit[4:6]
Datum = Protokolle[Key][8]
Tag = Datum[0:2]
Monat = Datum[2:4]
Jahr = Datum[4:6]
Seperator = "."
# Systemzeit zusammen setzen (MMDDhhmmYY.ss)
Systemzeit = Monat+Tag+str(Stunde)+Minute+Jahr+Seperator+Sekunde
# Sytemzeit setzen
os.system('sudo date ' + str(Systemzeit))
print Key
print Monat
print Tag
print Stunde
print Minute
print Jahr
print Systemzeit
time_set = True
UART.close()
sys.exit()
time.sleep(1)
Code:
chmod +x gpstime.py
Folgende Zeile muss noch an die eigene Schnittstelle angepasst werden. Wie man die raus findet erklärt CHristian hier.
Code:
UART = serial.Serial("/dev/ttyACM0", 9600)
Damit das alles auch automatisch abläuft, lasse ich das Script von /etc/rc.local beim Systemstart aufrufen:
Code:
python /home/pi/gpstime.py &
Da ich leider von Python keine große Ahnung habe, weiß ich noch nicht was das Skript macht wenn der GPS Empfänger länger zum Fix braucht. Ich hoffe das meiner jetzt über Nacht alles vergisst und er morgen früh länger für einen Fix braucht. Dann kann ich dazu vielleicht mehr sagen.
Sollte das mit der rc.local keine gute Idee sein, könnte man das Script auch in crontab z.B. die 2./5. und 7. Minute nach Systemstart starten lassen. Ich werde berichten.
RPI 3; Pollin 7 Zoll; CarPi 2016/2017 - Step-by-Step Anleitung