From 2f948b9e2d4a6a970a7ea534824321b21231b046 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 10 Oct 2019 19:34:03 +0200 Subject: [PATCH] improve bw_client input thread --- _demo_procMan.py | 2 +- boswatch/decoder/decoder.py | 2 +- bw_client.py | 43 +++++++++++++++++++++++++------------ config/client.yaml | 4 +++- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/_demo_procMan.py b/_demo_procMan.py index 1dcc669..4aa3107 100644 --- a/_demo_procMan.py +++ b/_demo_procMan.py @@ -28,7 +28,7 @@ sdrProc.skipLines(20) # #### MULTIMON configuration mmProc = ProcessManager("/opt/multimon/multimon-ng", textMode=True) # mmProc.addArgument("-i") -mmProc.addArgument("-a FMSFSK -a POCSAG512 -a POCSAG1200 -a POCSAG2400") +mmProc.addArgument("-a FMSFSK -a POCSAG512 -a POCSAG1200 -a POCSAG2400 -a ZVEI1") # mmProc.addArgument("-f alpha") mmProc.addArgument("-t raw -") mmProc.setStdin(sdrProc.stdout) diff --git a/boswatch/decoder/decoder.py b/boswatch/decoder/decoder.py index 50ae598..8b60cb0 100644 --- a/boswatch/decoder/decoder.py +++ b/boswatch/decoder/decoder.py @@ -40,5 +40,5 @@ class Decoder: elif "ZVEI" in data: return ZveiDecoder.decode(data) else: - logging.error("no decoder found for: %s", data) + logging.warning("no decoder found for: %s", data) return None diff --git a/bw_client.py b/bw_client.py index aed6701..8d5863c 100644 --- a/bw_client.py +++ b/bw_client.py @@ -80,33 +80,46 @@ try: port = broadcastClient.serverPort inputQueue = queue.Queue() + inputThreadRunning = True # ========== INPUT CODE ========== def handleSDRInput(dataQueue, config): sdrProc = ProcessManager("/usr/bin/rtl_fm") - sdrProc.addArgument("-f 85M") - sdrProc.addArgument("-m fm") - sdrProc.start(True) + for freq in config.get("frequencies"): + sdrProc.addArgument("-f " + freq) + sdrProc.addArgument("-l 50") # required fore scanning function + if not sdrProc.start(): + exit(0) + # sdrProc.skipLines(20) mmProc = ProcessManager("/opt/multimon/multimon-ng", textMode=True) - # mmProc.addArgument("-i") - # mmProc.addArgument("-a POCSAG1200 -a FMSFSK -a ZVEI1") + mmProc.addArgument("-a FMSFSK -a POCSAG512 -a POCSAG1200 -a POCSAG2400 -a ZVEI1") mmProc.addArgument("-f aplha") - mmProc.addArgument("-t raw /dev/stdin -") + mmProc.addArgument("-t raw -") mmProc.setStdin(sdrProc.stdout) - # mmProc.addArgument("./poc1200.raw") - mmProc.start(True) + if not mmProc.start(): + exit(0) mmProc.skipLines(5) - while 1: + + while inputThreadRunning: + if not sdrProc.isRunning: + logging.warning("rtl_fm was down - try to restart") + sdrProc.start() + # sdrProc.skipLines(20) if not mmProc.isRunning: logging.warning("multimon was down - try to restart") mmProc.start() mmProc.skipLines(5) - line = mmProc.readline() - if line: - dataQueue.put_nowait((line, time.time())) - logging.debug("Add data to queue") - print(line) + if sdrProc.isRunning and mmProc.isRunning: + line = mmProc.readline() + if line: + dataQueue.put_nowait((line, time.time())) + logging.debug("Add data to queue") + print(line) + logging.debug("stoping thread") + mmProc.stop() + sdrProc.stop() + # ========== INPUT CODE ========== mmThread = threading.Thread(target=handleSDRInput, name="mmReader", args=(inputQueue, bwConfig.get("inputSource", "sdr"))) @@ -158,4 +171,6 @@ except: # pragma: no cover finally: logging.debug("Starting shutdown routine") bwClient.disconnect() + inputThreadRunning = False + mmThread.join() logging.debug("BOSWatch client has stopped ...") diff --git a/config/client.yaml b/config/client.yaml index 5f84774..b38ddc3 100644 --- a/config/client.yaml +++ b/config/client.yaml @@ -22,7 +22,9 @@ server: # only used if useBroadcast = no inputSource: sdr: device: 0 - frequency: 85.000M + frequencies: + - 85M + - 86M error: 0 squelch: 0 gain: 100