Catch error on satellites

This commit is contained in:
2026-06-08 12:41:58 -04:00
parent ecb6fe0097
commit cb72616e26

View File

@ -7,6 +7,7 @@ import yaml
from math import radians from math import radians
from datetime import datetime from datetime import datetime
from time import strftime, time from time import strftime, time
from pprint import pprint
from gps import * from gps import *
import gpxpy import gpxpy
@ -165,88 +166,93 @@ class QtGPSWindow(MainWindow):
elif report['class'] == 'SKY': elif report['class'] == 'SKY':
self.txtHDOP.setText(str(getattr(report, 'hdop', 0.0))) self.txtHDOP.setText(str(getattr(report, 'hdop', 0.0)))
self.txtVDOP.setText(str(getattr(report, 'vdop', 0.0))) self.txtVDOP.setText(str(getattr(report, 'vdop', 0.0)))
satellites = getattr(report, 'satellites')
txt = "%4s %4s %4s %3s %1s" % ('PRN', 'Azim', 'Elev', 'SNR', 'Used') try:
self.txtSatellites.setStyleSheet("background-color: rgb(0, 0, 0)") satellites = report['satellites']
self.txtSatellites.setTextColor(self.white)
self.txtSatellites.setFontWeight(QFont.Bold)
self.txtSatellites.setText(txt)
prns = []
radius = []
theta = []
colors = []
markers = []
for (i, satellite) in enumerate(satellites):
prn = int(satellite['PRN'])
azim = int(satellite['az'])
elev = int(satellite['el'])
snr = int(satellite['ss'])
used = int(satellite['used'])
# health = satellite['health']
# don't show if not visible txt = "%4s %4s %4s %3s %1s" % ('PRN', 'Azim', 'Elev', 'SNR', 'Used')
if azim >= 360 or elev < -10 or elev > 90: self.txtSatellites.setStyleSheet("background-color: rgb(0, 0, 0)")
continue; self.txtSatellites.setTextColor(self.white)
self.txtSatellites.setFontWeight(QFont.Bold)
cname = '#000000' self.txtSatellites.setText(txt)
color = self.black
if snr < 12:
cname = '#808080'
color = self.gray
elif snr < 30:
cname = '#ff0000'
color = self.red
elif snr < 36:
cname = '#ffd300'
color = self.yellow
elif snr < 42:
cname = '#00ff00'
color = self.green
else:
cname = '#0000ff'
color = self.blue
txt = "%4u %4u %4u %3u %1u" % (prn, azim, elev, snr, used)
self.txtSatellites.setTextColor(color)
if used:
self.txtSatellites.setFontWeight(QFont.Bold)
else:
self.txtSatellites.setFontWeight(QFont.Normal)
self.txtSatellites.append(txt)
prns.append(prn)
theta.append(radians(float(azim)))
radius.append(float(elev))
colors.append(cname)
if used:
markers.append(ord('P'))
else:
markers.append(ord('+'))
area = 100 prns = []
figure = Figure() radius = []
polar = figure.add_subplot(111, projection='polar') theta = []
polar.scatter(theta, radius, c=colors, s=area, cmap=None, alpha=0.75) colors = []
polar.set_rorigin(90.0) markers = []
polar.set_xticklabels([])
polar.set_yticklabels([]) for satellite in satellites:
for i, prn in enumerate(prns): prn = int(satellite['PRN'])
polar.annotate(str(prn), (theta[i], radius[i])) azim = int(satellite['az'])
elev = int(satellite['el'])
snr = int(satellite['ss'])
used = int(satellite['used'])
# health = satellite['health']
# don't show if not visible
if azim >= 360 or elev < -10 or elev > 90:
continue;
cname = '#000000'
color = self.black
if snr < 12:
cname = '#808080'
color = self.gray
elif snr < 30:
cname = '#ff0000'
color = self.red
elif snr < 36:
cname = '#ffd300'
color = self.yellow
elif snr < 42:
cname = '#00ff00'
color = self.green
else:
cname = '#0000ff'
color = self.blue
txt = "%4u %4u %4u %3u %1u" % (prn, azim, elev, snr, used)
self.txtSatellites.setTextColor(color)
if used:
self.txtSatellites.setFontWeight(QFont.Bold)
else:
self.txtSatellites.setFontWeight(QFont.Normal)
self.txtSatellites.append(txt)
prns.append(prn)
theta.append(radians(float(azim)))
radius.append(float(elev))
colors.append(cname)
if used:
markers.append(ord('P'))
else:
markers.append(ord('+'))
area = 100
figure = Figure()
polar = figure.add_subplot(111, projection='polar')
polar.scatter(theta, radius, c=colors, s=area, cmap=None, alpha=0.75)
polar.set_rorigin(90.0)
polar.set_xticklabels([])
polar.set_yticklabels([])
for i, prn in enumerate(prns):
polar.annotate(str(prn), (theta[i], radius[i]))
polar.set_theta_direction(-1) polar.set_theta_direction(-1)
polar.set_theta_zero_location('N', offset=0) polar.set_theta_zero_location('N', offset=0)
canvas = FigureCanvas(figure)
self.scene.clear()
self.scene.addWidget(canvas)
h = float(self.scene.height()) / 2.0
w = float(self.scene.width()) / 2.0
self.viewSatellites.centerOn(w,h)
self.viewSatellites.show()
except:
pass
canvas = FigureCanvas(figure)
self.scene.clear()
self.scene.addWidget(canvas)
h = float(self.scene.height()) / 2.0
w = float(self.scene.width()) / 2.0
self.viewSatellites.centerOn(w,h)
self.viewSatellites.show()
self.show() self.show()
def toggle_logging(self): def toggle_logging(self):