Fix the use of GPS as time source in the new cameteo module
This commit is contained in:
parent
aafc5f2c77
commit
1cce6281b5
@ -328,7 +328,7 @@ class GPSData(Data):
|
||||
def __init__(self, name="GPS",
|
||||
update_interval=0, write_interval=60, send_interval=60,
|
||||
enable=True, enable_pin=DigitalInOut(board.A5),
|
||||
rtc=None, debug=False):
|
||||
debug=False):
|
||||
|
||||
Data.__init__(self, name=name,
|
||||
update_interval=update_interval,
|
||||
@ -342,7 +342,6 @@ class GPSData(Data):
|
||||
'alt': float(),
|
||||
'qual': int(),
|
||||
'age': int()}
|
||||
self._rtc = rtc
|
||||
self._enable = enable
|
||||
self._gps_last_fix = int()
|
||||
self._gps_current_fix = int()
|
||||
@ -370,8 +369,6 @@ class GPSData(Data):
|
||||
self._gps.timestamp_utc.tm_hour,
|
||||
self._gps.timestamp_utc.tm_min,
|
||||
self._gps.timestamp_utc.tm_sec)
|
||||
if self._rtc is not None:
|
||||
set_clock_from_localtime(self._rtc)
|
||||
if self._gps.has_fix:
|
||||
self._gps_last_fix = self._gps_current_fix
|
||||
self.data['lat'] = self._gps.latitude
|
||||
@ -397,25 +394,23 @@ class GPSData(Data):
|
||||
self._gps.send_command('PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')
|
||||
self._gps.send_command('PMTK220,1000') # 1000 ms refresh rate
|
||||
|
||||
if self._rtc is not None:
|
||||
rtc.set_time_source(self._rtc)
|
||||
if self.debug:
|
||||
print("GPS is the time source!")
|
||||
|
||||
def disable(self):
|
||||
"""Disable GPS module"""
|
||||
if self._enable:
|
||||
self._enable = False
|
||||
self._gps_en_pin.value = not self._enable # Set enable pin high to disable GPS module
|
||||
# Switch backto internal RTC
|
||||
rtc.set_time_source(rtc.RTC())
|
||||
|
||||
@property
|
||||
def datetime(self):
|
||||
"""Wrapper to feed rtc.set_time_source()"""
|
||||
return self._gps.timestamp_utc
|
||||
|
||||
|
||||
#############
|
||||
# Functions #
|
||||
#############
|
||||
|
||||
def set_clock_from_localtime(clock, treshold=2.0):
|
||||
def set_clock_from_localtime(clock, threshold=2.0, debug=False):
|
||||
"""
|
||||
Compare internal RTC and date-time from time.localtime() and set
|
||||
the RTC date/time to this value if the difference is more or equal to
|
||||
@ -423,9 +418,24 @@ def set_clock_from_localtime(clock, treshold=2.0):
|
||||
The source of time.localtime() can be set with rtc.set_time_source()
|
||||
"""
|
||||
|
||||
if debug:
|
||||
print("Clock date/time : " + TIME_FORMAT.format(*clock.datetime[0:6]))
|
||||
print("Local date/time : " + TIME_FORMAT.format(*time.localtime()[0:6]))
|
||||
|
||||
# Check if time.localtime() is valid and can be converted in seconds
|
||||
try:
|
||||
local_seconds = time.mktime(time.localtime())
|
||||
except OverflowError as err:
|
||||
print(err)
|
||||
print("Local time source : " + TIME_FORMAT.format(*time.localtime()[0:6]))
|
||||
print("Wait some time to have proper time from time source...")
|
||||
return 1
|
||||
|
||||
# Max difference between GPS and internal RTC (in seconds):
|
||||
if abs(time.mktime(time.localtime()) - time.mktime(clock.datetime)) >= treshold:
|
||||
# print("Clock difference with GPS!")
|
||||
# print("Previous date/time : " + TIME_FORMAT.format(*clock.datetime[0:6]))
|
||||
if abs(local_seconds - time.mktime(clock.datetime)) >= threshold:
|
||||
print("Clock difference with GPS!")
|
||||
print("Previous date/time : " + TIME_FORMAT.format(*clock.datetime[0:6]))
|
||||
clock.datetime = time.localtime() # Trust localtime if there is a bias
|
||||
print("Clocks synced !")
|
||||
|
||||
return 0
|
||||
|
@ -91,10 +91,12 @@ else:
|
||||
|
||||
sys_data = cameteo.SysData(debug=False)
|
||||
bme_data = cameteo.BME280Data()
|
||||
gps_data = cameteo.GPSData(rtc=CLOCK)
|
||||
gps_data = cameteo.GPSData()
|
||||
|
||||
data = [gps_data, sys_data, bme_data]
|
||||
|
||||
rtc.set_time_source(gps_data, debug=True)
|
||||
|
||||
# Init timers
|
||||
last_update = last_sent_packet = last_written_data = time.monotonic()
|
||||
|
||||
@ -108,6 +110,7 @@ while True:
|
||||
|
||||
for src in data:
|
||||
src.update(current_time, verbose=PRINT_DATA)
|
||||
cameteo.set_clock_from_localtime(CLOCK, threshold=2.0)
|
||||
|
||||
for src in data:
|
||||
src.write_on_flash(current_time)
|
||||
|
Loading…
Reference in New Issue
Block a user