dxspot.py: add 2m EsCN status

这个提交包含在:
William Goodspeed 2025-07-14 11:35:01 +08:00
父节点 6612fda856
当前提交 a5e1c07a80
共有 2 个文件被更改,包括 26 次插入19 次删除

查看文件

@ -42,7 +42,10 @@ class EsStatusTracker:
def status(self) -> bool:
return self._status
ALL_TRACKERS = [EsStatusTracker(DX_BAND_OPEN_WINDOW, DX_BAND_OPEN_THRESHOLD)]
ALL_TRACKERS = {
'6m': EsStatusTracker(DX_BAND_OPEN_WINDOW, DX_BAND_OPEN_THRESHOLD),
'2m': EsStatusTracker(DX_BAND_OPEN_WINDOW, DX_BAND_OPEN_THRESHOLD),
}
def on_connect(client, userdata, flags, rc):
logging.info(f'Connected to MQTT broker: {str(rc)}')
@ -52,7 +55,7 @@ def on_connect(client, userdata, flags, rc):
def on_message(client, userdata, msg):
try:
spot = json.loads(msg.payload.decode())
tracker = ALL_TRACKERS[0]
tracker = ALL_TRACKERS[spot['b']]
except:
logging.warning('Failed to parse MQTT message, payload busted')
return
@ -66,10 +69,10 @@ def on_message(client, userdata, msg):
+ f'{int(d)}km {spot["rp"]}dB')
tracker.add_match(spot['t'])
def update_image(state, font_path=IMG_FONT, output=IMG_OUT_PATH):
def update_image(tbl, font_path=IMG_FONT, output=IMG_OUT_PATH):
width = 155
margin = 6
height = margin + 22 + 12 * 2 + margin
height = margin + 22 + 12 * (1 + len(tbl)) + margin
img = Image.new("RGB", (width, height), '#000000')
draw = ImageDraw.Draw(img)
@ -93,11 +96,13 @@ def update_image(state, font_path=IMG_FONT, output=IMG_OUT_PATH):
# Table rows
y = 30
draw.text((2, y), ' ITEM STATUS ', font=font, fill="yellow")
draw.text((2, y+12), '6m EsCN ', font=font)
if state:
draw.text((2+8*8, y+12), '50MHz ES', font=font, fill="#00ff00")
else:
draw.text((2+8*8, y+12), 'Band Closed', font=font, fill="red")
y += 12
for col in tbl:
draw.text((2, y), col[0], font=font)
draw.text((2+8*8, y), col[1][0], font=font, fill=col[1][1])
y += 12
img.save(output)
mqttc = mqtt_client.Client(
@ -111,9 +116,14 @@ mqttc.connect(PSKREPORT_MQTT_SERVER)
mqttc.loop_start()
try:
while True:
for tracker in ALL_TRACKERS:
for tracker in ALL_TRACKERS.values():
tracker.tick()
update_image(tracker.status)
update_image([
('6m EsCN', ('50MHz ES', '#00ff00')
if ALL_TRACKERS['6m'].status else ('Band Closed', '#ff0000')),
('2m EsCN', ('114MHz ES', '#00ff00')
if ALL_TRACKERS['2m'].status else ('Band Closed', '#ff0000')),
])
time.sleep(10)
except KeyboardInterrupt:
mqttc.disconnect()

查看文件

@ -5,14 +5,11 @@ IMG_OUT_PATH = './DXSPOT_VHFCOND.PNG'
PSKREPORT_MQTT_SERVER='mqtt.pskreporter.info'
PSKREPORT_TOPICS = [
# BY -> JA, 6m
'pskr/filter/v2/6m/FT8/+/+/+/+/318/339',
# JA -> BY, 6m
'pskr/filter/v2/6m/FT8/+/+/+/+/339/318',
# BY -> Korea, 6m
'pskr/filter/v2/6m/FT8/+/+/+/+/318/137',
# Korea -> BY, 6m
'pskr/filter/v2/6m/FT8/+/+/+/+/137/318',
'pskr/filter/v2/6m/FT8/+/+/+/+/318/+',
'pskr/filter/v2/6m/FT8/+/+/+/+/+/318',
'pskr/filter/v2/2m/FT8/+/+/+/+/318/+',
'pskr/filter/v2/2m/FT8/+/+/+/+/+/318',
]
DX_BAND_OPEN_WINDOW = 600