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

查看文件

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