rtl-wmbus/rtl_wmbus.py

74 wiersze
2.1 KiB
Python
Executable File

import sys
import os
import traceback
import subprocess
import psutil
import signal
from time import time
__rtl_sdr = None
__rtl_wmbus = None
def __signal_handler(signal, frame):
global __rtl_sdr, __rtl_wmbus
if __rtl_wmbus:
#print("Terminating rtl_wmbus")
__rtl_wmbus.kill()
__rtl_wmbus.wait()
if __rtl_sdr:
#print("Terminating rtl_sdr")
__rtl_sdr.kill()
__rtl_sdr.wait()
def _main(args):
global __rtl_sdr, __rtl_wmbus
#"/C/Program Files/PothosSDR/bin/rtl_sdr" -f 868.95M -s 1600000 - 2>/dev/null | build/rtl_wmbus_x64.exe -v
#"C:\Program Files\PothosSDR\bin\rtl_sdr" -f 868.95M -s 1600000 - 2>NUL | build\rtl_wmbus_x64.exe -v
try:
signal.signal(signal.SIGINT, __signal_handler)
__rtl_sdr = subprocess.Popen([r"c:\Program Files\PothosSDR\bin\rtl_sdr", "-f", "868.95M", "-s", "1600000", "-"], stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
psutil.Process(__rtl_sdr.pid).nice(psutil.REALTIME_PRIORITY_CLASS)
__rtl_wmbus = subprocess.Popen([r"d:\rtl-wmbus\build\rtl_wmbus_x64.exe", "-v"], stdin=__rtl_sdr.stdout, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
psutil.Process(__rtl_wmbus.pid).nice(psutil.REALTIME_PRIORITY_CLASS)
psutil.Process(os.getpid()).nice(psutil.REALTIME_PRIORITY_CLASS)
#__rtl_sdr.stdout.close() # Allow rtl_sdr to receive a SIGPIPE if rtl_wmbus exits.
t1 = time()
rate = 0
while __rtl_sdr.poll() is None and __rtl_wmbus.poll() is None:
s = __rtl_wmbus.stdout.readline().decode('utf-8').rstrip('\n').rstrip('\r')
t2 = time()
if s.find("T1;1") >= 0 or s.find("C1;1") >= 0 or s.find("S1;1") >= 0:
rate += 1
print(s)
else:
pass
dt = t2 - t1
if dt >= 10:
#print(rate/dt, file=sys.stderr)
t1 = t2
rate = 0
return 0
except Exception as e:
print(traceback.print_exc())
return 1
if __name__ == '__main__':
sys.exit(_main(sys.argv))