When using a custom wardragon_monitor.py that publishes dynamic GPS data via ZMQ, DragonSync correctly receives latitude/longitude/altitude but always reports:
"gps_fix": false
even though the monitor message clearly contains:
"gps_fix": true
This causes dashboards and downstream consumers to indicate no GPS fix while valid position data is present.
DragonSync parses GPS fields from the monitor status message but does not propagate the GPS metadata fields into the SystemStatus object.
Specifically, the status handler extracts: latitude, longitude, altitude, speed, track
but ignores:
gps_fix
time_source
time_utc
As a result, SystemStatus.gps_fix defaults to False.
This occurs even though the upstream monitor publishes valid values.
Required Fix
- Extract GPS metadata from gps_data
Add after speed/track parsing:
gps_fix = bool(gps_data.get('gps_fix', False))
time_source = str(gps_data.get('time_source', '') or '')
gpsd_time_utc = str(gps_data.get('time_utc', '') or '')
2) Pass fields into SystemStatus
Modify constructor call:
BEFORE
system_status = SystemStatus(
serial_number=serial_number,
lat=lat, lon=lon, alt=alt, speed=speed, track=track,
cpu_usage=cpu_usage,
memory_total=memory_total, memory_available=memory_available,
disk_total=disk_total, disk_used=disk_used,
temperature=temperature, uptime=uptime,
pluto_temp=pluto_temp, zynq_temp=zynq_temp
)
AFTER
system_status = SystemStatus(
serial_number=serial_number,
lat=lat, lon=lon, alt=alt, speed=speed, track=track,
gps_fix=gps_fix,
time_source=time_source,
gpsd_time_utc=gpsd_time_utc,
cpu_usage=cpu_usage,
memory_total=memory_total, memory_available=memory_available,
disk_total=disk_total, disk_used=disk_used,
temperature=temperature, uptime=uptime,
pluto_temp=pluto_temp, zynq_temp=zynq_temp
)
When using a custom wardragon_monitor.py that publishes dynamic GPS data via ZMQ, DragonSync correctly receives latitude/longitude/altitude but always reports:
"gps_fix": false
even though the monitor message clearly contains:
"gps_fix": true
This causes dashboards and downstream consumers to indicate no GPS fix while valid position data is present.
DragonSync parses GPS fields from the monitor status message but does not propagate the GPS metadata fields into the SystemStatus object.
Specifically, the status handler extracts: latitude, longitude, altitude, speed, track
but ignores:
gps_fix
time_source
time_utc
As a result, SystemStatus.gps_fix defaults to False.
This occurs even though the upstream monitor publishes valid values.
Required Fix
Add after speed/track parsing:
gps_fix = bool(gps_data.get('gps_fix', False))
time_source = str(gps_data.get('time_source', '') or '')
gpsd_time_utc = str(gps_data.get('time_utc', '') or '')
2) Pass fields into SystemStatus
Modify constructor call:
BEFORE
system_status = SystemStatus(
serial_number=serial_number,
lat=lat, lon=lon, alt=alt, speed=speed, track=track,
cpu_usage=cpu_usage,
memory_total=memory_total, memory_available=memory_available,
disk_total=disk_total, disk_used=disk_used,
temperature=temperature, uptime=uptime,
pluto_temp=pluto_temp, zynq_temp=zynq_temp
)
AFTER
system_status = SystemStatus(
serial_number=serial_number,
lat=lat, lon=lon, alt=alt, speed=speed, track=track,
gps_fix=gps_fix,
time_source=time_source,
gpsd_time_utc=gpsd_time_utc,
cpu_usage=cpu_usage,
memory_total=memory_total, memory_available=memory_available,
disk_total=disk_total, disk_used=disk_used,
temperature=temperature, uptime=uptime,
pluto_temp=pluto_temp, zynq_temp=zynq_temp
)