From a5e1c07a800ed83420a24585b2f509abb41ac5cb Mon Sep 17 00:00:00 2001 From: William Goodspeed Date: Mon, 14 Jul 2025 11:35:01 +0800 Subject: [PATCH] dxspot.py: add 2m EsCN status --- dxspot.py | 32 +++++++++++++++++++++----------- dxspot_const.py | 13 +++++-------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/dxspot.py b/dxspot.py index 3dba430..125bcbe 100644 --- a/dxspot.py +++ b/dxspot.py @@ -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() diff --git a/dxspot_const.py b/dxspot_const.py index fbc0a9f..4e9dff1 100644 --- a/dxspot_const.py +++ b/dxspot_const.py @@ -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