kopia lustrzana https://github.com/xaelsouth/rtl-wmbus
74 wiersze
2.1 KiB
Python
Executable File
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))
|