83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
|
|||
|
import websocket
|
|||
|
import time
|
|||
|
import numpy as np
|
|||
|
import datetime
|
|||
|
|
|||
|
import os
|
|||
|
|
|||
|
last_date = None
|
|||
|
logfile = None
|
|||
|
|
|||
|
os.makedirs("logs", exist_ok=True)
|
|||
|
|
|||
|
def write_log(dt, line):
|
|||
|
global last_date, logfile
|
|||
|
|
|||
|
date = dt.date()
|
|||
|
|
|||
|
# reopen log file if day has changed
|
|||
|
if last_date != date:
|
|||
|
if logfile:
|
|||
|
logfile.close()
|
|||
|
|
|||
|
logname = os.path.join("logs", date.strftime("%Y-%m-%d.csv"))
|
|||
|
print(f"(Re-)opening logfile: {logname}")
|
|||
|
logfile = open(logname, "a")
|
|||
|
|
|||
|
last_date = date
|
|||
|
|
|||
|
if line[-1] != '\n':
|
|||
|
line += '\n'
|
|||
|
|
|||
|
logfile.write(line)
|
|||
|
|
|||
|
|
|||
|
last_keepalive = datetime.datetime.now()
|
|||
|
|
|||
|
def on_open(wsapp):
|
|||
|
wsapp.send("SET auth t=kiwi p=#")
|
|||
|
wsapp.send("SERVER DE CLIENT openwebrx.js W/F")
|
|||
|
wsapp.send("SET send_dB=1")
|
|||
|
wsapp.send("SET zoom=0 start=0")
|
|||
|
wsapp.send("SET maxdb=0 mindb=-100")
|
|||
|
wsapp.send("SET interp=13")
|
|||
|
wsapp.send("SET wf_comp=0")
|
|||
|
wsapp.send("SET wf_speed=1")
|
|||
|
#wsapp.send("SET MARKER min=0.000 max=30000.000 zoom=0 width=1904")
|
|||
|
#wsapp.send("SET aper=1 algo=3 param=0.00")
|
|||
|
|
|||
|
def on_message(wsapp, message):
|
|||
|
global last_keepalive
|
|||
|
|
|||
|
msgtype = message[:3].decode('ascii')
|
|||
|
msgdata = message[4:]
|
|||
|
now = datetime.datetime.now()
|
|||
|
|
|||
|
if msgtype == 'MSG':
|
|||
|
msgstr = msgdata.decode('utf-8')
|
|||
|
print(f"Status message: {msgstr}")
|
|||
|
elif msgtype == 'W/F':
|
|||
|
#print(msgdata)
|
|||
|
print(f"Received waterfall data: {len(msgdata)} bytes.")
|
|||
|
#print(f"Header: {msgdata[:12]}")
|
|||
|
specdata = msgdata[12:]
|
|||
|
spectrum = np.frombuffer(specdata, dtype=np.uint8).astype(int)
|
|||
|
spectrum = spectrum - 255 # converts to dBm
|
|||
|
logline = f"{now.timestamp():.3f};" + ";".join([f"{dBm:d}" for dBm in spectrum]) + "\n"
|
|||
|
|
|||
|
write_log(now, logline)
|
|||
|
|
|||
|
if now - last_keepalive > datetime.timedelta(seconds=10):
|
|||
|
wsapp.send("SET keepalive")
|
|||
|
last_keepalive = now
|
|||
|
else:
|
|||
|
print(f"Unknown type: {msgtype} – data: {msgdata}")
|
|||
|
|
|||
|
url = f"ws://192.168.75.14:8073/kiwi/{int(time.time())}/W/F"
|
|||
|
wsapp = websocket.WebSocketApp(url,
|
|||
|
on_message=on_message,
|
|||
|
on_open=on_open)
|
|||
|
wsapp.run_forever()
|