diff --git a/.gitignore b/.gitignore index 6eb8353..7792185 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,8 @@ /dist_1.0/bandmap /dist_1.0/bandmap.exe /dist_1.0/bandmap_setup.exe -/work/* -/work2/* -/work3/* /OLD/* +/JUNK/* +/work/__pycache__/* +/work/save* +/work*/__pycache__/* diff --git a/Corrections.txt b/Corrections.txt old mode 100644 new mode 100755 diff --git a/DIFF b/DIFF index 3b2db53..ce976d9 100755 --- a/DIFF +++ b/DIFF @@ -11,8 +11,8 @@ #set ROOT="/media/${USER}/aa2il" set ROOT="/media/${USER}/marconi" #set ROOT="/media/${USER}/hertz" -#set ROOT="/media/${USER}/sproul" -set ROOT="/media/${USER}/sproul-win" +set ROOT="/media/${USER}/sproul" +#set ROOT="/media/${USER}/sproul-win" #set ROOT="/media/${USER}/3D76-ECB1" #set ROOT="/media/${USER}/acer" #set ROOT="/media/${USER}/cartman" @@ -30,7 +30,7 @@ set old=${ROOT}${PTH} # Override if needed #set old='save34' -#set old='work2' +set old='work' echo OLD=$old rm -f DIFFS diff --git a/Friends.txt b/Friends.txt old mode 100644 new mode 100755 diff --git a/Most_Wanted.txt b/Most_Wanted.txt old mode 100644 new mode 100755 index 909d796..3e993ce --- a/Most_Wanted.txt +++ b/Most_Wanted.txt @@ -1,3 +1,4 @@ -A8OK -C21MM -V55LA +VP8G +S9Z + + diff --git a/bm_gui.py b/bm_gui.py old mode 100644 new mode 100755 index 0a8afb5..b56dcee --- a/bm_gui.py +++ b/bm_gui.py @@ -49,6 +49,7 @@ from widgets_tk import StatusBar from tcp_server import open_udp_client,KEYER_UDP_PORT from bm_udp import * +from load_history import load_history ######################################################################################### @@ -614,7 +615,7 @@ def SelectBands(self,allow_change=False): # Get latest logbook now = datetime.utcnow().replace(tzinfo=UTC) - if self.P.PARSE_LOG and len(self.qsos)==0: + if self.P.STAND_ALONE or len(self.qsos)==0: if self.P.LOG_NAME0: # Log for operator if different from current callsign # We won't keep reading this file so we set REVISIT=False @@ -1166,7 +1167,7 @@ def Settings(self): # Print out log def ShowLog(self): - print('\nLOG::::::::::',self.P.PARSE_LOG) + print('\nLOG::::::::::',self.P.STAND_ALONE) for qso in self.qsos: print(qso) print(' ') diff --git a/bm_udp.py b/bm_udp.py old mode 100644 new mode 100755 index 02be80c..d5baa88 --- a/bm_udp.py +++ b/bm_udp.py @@ -145,7 +145,8 @@ def bm_udp_msg_handler(self,sock,msg): def spot_list_query(P,sock=None,band=None): print('BM UDP SPOTLIST QUERY: band=',band) - if not hasattr(P,'gui'): + if not hasattr(P,'gui') and False: + print('BM UDP SPOTLIST QUERY: No Gui?') return if not band: @@ -194,6 +195,7 @@ def spot_list_query(P,sock=None,band=None): #print("Size of decompressed text",a3_size,'\na3=',a3) #print("\nDifference of size= ", a_size-a2_size) + print('BM UDP SPOTLIST QUERY: Sending compressed message ...') if sock: sock.send(msg22) else: @@ -201,9 +203,11 @@ def spot_list_query(P,sock=None,band=None): else: + print('BM UDP SPOTLIST QUERY: Sending message ...') if sock: sock.send(msg2.encode()) else: P.udp_server.Broadcast(msg2) + print('BM UDP SPOTLIST QUERY: Done.') diff --git a/cluster_feed.py b/cluster_feed.py old mode 100644 new mode 100755 index 9860ff2..c2df3a2 --- a/cluster_feed.py +++ b/cluster_feed.py @@ -120,7 +120,7 @@ def cluster_feed(self): print('spot=',spot) # Check for band changes - if tn.nsleep>=1 and True: + if tn.nsleep>=1: band = self.band.get() #logging.info("Calling Get band ...") frq2 = 1e-6*self.sock.get_freq(VFO=self.VFO) @@ -204,7 +204,7 @@ def digest_spot(self,line): # Check for logged contact if "=2: - print('CLUSTER FEED B i=',i,self.SpotList[i].dx_call, + print('\tB i=',i,self.SpotList[i].dx_call, '\ttime=',self.SpotList[i].time,obj.time, '\tfreq=',self.SpotList[i].frequency,obj.frequency) # Update list box entry - In progress idx2 = [i for i,x in enumerate(self.current) if x.dx_call == dx_call and x.band==b] - if len(idx2)>0 and True: + if len(idx2)>0: bgc = self.lb.itemcget(idx2[0], 'background') #print '&&&&&&&&&&&&&&&&&&&&&& Modifying ',idx2[0],dx_call,bgc #print lb.get(idx2[0]) @@ -404,7 +404,7 @@ def digest_spot(self,line): else: # New call - maintain a list of all spots sorted by freq - print("CLUSTER FEED: New call =",dx_call,'\tfreq=',freq, + print("DIGEST SPOT: New call =",dx_call,'\tfreq=',freq, '\tmode=',mode,'\tband=',band) self.SpotList.append( obj ) # self.SpotList.sort(key=lambda x: x.frequency, reverse=False) @@ -442,7 +442,7 @@ def digest_spot(self,line): elif xm in ['SSB','LSB','USB','FM']: xm='PH' if xm not in self.P.SHOW_MODES: - #print('CLUSTER_FEED: Culling',xm,'spot - ', self.P.SHOW_MODES) + #print('DIGEST SPOT: Culling',xm,'spot - ', self.P.SHOW_MODES) return True # Cull dupes @@ -491,7 +491,7 @@ def digest_spot(self,line): cull_old_spots(self) if VERBOSITY>=1: - print('CLUSTER FEED B: nspots=',self.nspots,len(self.SpotList),len(self.current)) + print('DIGEST SPOT: nspots=',self.nspots,len(self.SpotList),len(self.current)) return True ######################################################################################### diff --git a/params.py b/params.py index 96f1078..2549efa 100644 --- a/params.py +++ b/params.py @@ -146,13 +146,10 @@ def __init__(self): self.MAX_HOURS_DUPE = args.hours - self.CONTEST_MODE = args.contest - self.DESKTOP = args.desktop - self.SMALL_FONT = args.small or self.CONTEST_MODE - - self.PARSE_LOG = self.CONTEST_MODE and True - self.PARSE_LOG = True - #self.PARSE_LOG = False + self.CONTEST_MODE = args.contest + self.DESKTOP = args.desktop + self.SMALL_FONT = args.small or self.CONTEST_MODE + self.STAND_ALONE = True self.BM_GEO = args.bm_geo self.TEST_MODE = args.test @@ -253,7 +250,7 @@ def __init__(self): self.LOG_NAME = os.path.expanduser( self.LOG_NAME.replace('[MYCALL]',MY_CALL2 ) ) self.NODES = NODES self.threads = [] - print('LOG_NAME=',self.LOG_NAME,'\tPARGE_LOG=',self.PARSE_LOG) + print('LOG_NAME=',self.LOG_NAME,'\tSTAND_ALONE=',self.STAND_ALONE) if self.SERVER=="WSJT" or args.buttons: self.ALLOW_CHANGES=True diff --git a/work/Corrections.txt b/work/Corrections.txt new file mode 100755 index 0000000..039aed4 --- /dev/null +++ b/work/Corrections.txt @@ -0,0 +1,7 @@ +AA2IR AA2IL +T2IL AA2IL +TA2IL AA2IL +TY4GS KY4GS +EW5LXS W5LXS +NS0RCWT NS0R +NS0RCWO NS0R diff --git a/work/DIFF b/work/DIFF new file mode 100755 index 0000000..ce976d9 --- /dev/null +++ b/work/DIFF @@ -0,0 +1,62 @@ +#! /bin/csh -f +############################################################################# +# +# Script to compare working code version on RPi to configured version +# +############################################################################# +# +# Specify root where old version exists +#set ROOT="/media/${USER}/305f60b3-8413-4edb-afc1-4e4ce064aab3/home/${USER}" +#set ROOT="/media/${USER}/pi" +#set ROOT="/media/${USER}/aa2il" +set ROOT="/media/${USER}/marconi" +#set ROOT="/media/${USER}/hertz" +set ROOT="/media/${USER}/sproul" +#set ROOT="/media/${USER}/sproul-win" +#set ROOT="/media/${USER}/3D76-ECB1" +#set ROOT="/media/${USER}/acer" +#set ROOT="/media/${USER}/cartman" +if( !(-e $ROOT) )then + set ROOT="${ROOT}2" +endif + +# Add path down to old version +set N=`echo $HOME | wc -c` +echo N=$N +#set PTH=`pwd | cut -c ${N}-` +set PTH=`pwd | sed 's/\/home2//g' | cut -c ${N}-` +echo PTH=$PTH +set old=${ROOT}${PTH} + +# Override if needed +#set old='save34' +set old='work' +echo OLD=$old + +rm -f DIFFS +foreach i (*.py DIFF *.bat *.txt dist/*.iss) + echo $i + set n=`diff -w $old/$i $i | wc -l` + if( !( -e $old/$i ) )then + echo NO SUCH FILE $old/$i + cp $i $old/$i + else if( $n > 0 ) then + echo ---------------------------------- >> DIFFS + echo $i >> DIFFS + echo " " >> DIFFS + diff -w $old/$i $i >> DIFFS + echo " " >> DIFFS + + #kompare $old/$i $i + kompare $i $old/$i + endif +end + +chmod +x bandmap.py DIFF + +#cat DIFFS +set f=`basename $ROOT` +echo $f +if( $f == "acer" )then + cp $old/dist/*.exe $old/dist/Output/*.exe dist +endif diff --git a/work/Friends.txt b/work/Friends.txt new file mode 100755 index 0000000..8b2eb71 --- /dev/null +++ b/work/Friends.txt @@ -0,0 +1,82 @@ +# CWA 0 +yl3jd,Hanz,Advisor +kb1fgc,Rich,Classmate +wz4m,Tommy,Classmate +k5vba,Stan,Classmate +k0pir,Rich,Classmate +k3es,Brian,Classmate +n0zt,Dan,Hanz Former Student + +# CWA 1 +n7kom,Former Student +nj7v,Charlie,Former Student +SV2HUD,Vas,Former Student +N7AUE,Jim,Muley +WB7UKC,Marty Mueller +KM6GOX,Derek,Former Student + +# CWops +k6rb,Rob,#3,Sponsored me +n3jt,Jim,#1,Sponsored me +wt9u,Jim,Sponsored me +kr2q,Doug,NJ +k3jt,Terry,WV +w5tm,Ed,OK +ky4gs,Amanda,SC +ko4vw,Steve,GA +w7zdx,Bog +w7brs,Jeff,OR +vk2/w7brs,Jeff,Lord Howe Island +NQ2W,Will,NY +K4PQC,PHIL,GA +k9uiy,Vic,IL +W5LXS,Roger,TX + +# CWA 2 +KE7MPO,Skip,WA,Former Student +W5CYN,Jim,,Former Student +N0RPM,Jason,Former Student +AG5ZN,Bill,Former Student +W0WL,Joe,Former Student + +# CWA 3 +AA7TO,Jr,,Former Student +KN6RDC,Christian,,Former Student +N3RTW,Sean,Former Student +N5GG,Colin,Former Student +N6GV,Gary,Former Student +WB0RLJ,Jim,Former Student + +# CWA 4 +AC7FX,John,Former Student +NN7O,Tom,Former Student +AE5JT,Jeff,Former Student +W0ABE,Justin,Former Student + +# CWA 5 +KC6EOA,Brad,Student +KC7TAK,Ryan,Student +WE7DW,Dave,Student +WB3ERS,Nat,Student +VA4ADM,Pavel,Student + +# Locals +k6pa,Troy, Bought Army Tower from him +n6utc,Efram,VHFer +n6mi,Scott,VHF guru +n6vi,Marty,VHF guru +wa7bnm,Bruce +n6ki,Dennis +N6GP,Tim,VHFer +w6sx,Hank + +# Clubs +n6ror,ROARS +W5LVC,Colin,Dallas Club +#K4HTA,Sean,VA Club + +# Other +N7AAE,Marty Mueller, Jim's brother +VE3INE,Mary,Prospective student + +# DX - should be in Most Wanted list, not here! diff --git a/work/Most_Wanted.txt b/work/Most_Wanted.txt new file mode 100755 index 0000000..3e993ce --- /dev/null +++ b/work/Most_Wanted.txt @@ -0,0 +1,4 @@ +VP8G +S9Z + + diff --git a/work/Release_Notes.txt b/work/Release_Notes.txt new file mode 100644 index 0000000..b6cc7fe --- /dev/null +++ b/work/Release_Notes.txt @@ -0,0 +1,35 @@ +Bandmap v1.0 - by AA2IL +----------------------- + +A simple gui written in Python to sort and display dx cluster spots. +It can also be used to display decoded "spots" from wsjt-x. +Indications as to the age of a spot and the "need" status of a spot's DXCC are also given. +The rig can be tuned to a spot by clicking on the spot. + +This app is written in python 3. The python script bandmap.py can be run under linux or windoz 10/11. You will also need the libraries in github.com/aa2il/libs and to installed the python modules listed in "requirements.txt". + +Stand-alone execuatables for linux and windoz 10/11 have been made using pyinstaller. Complete source code and build files are available at https://github.com/aa2il/band. + +Please email constructive comments/suggestions to aa2il AT arrl DOT net. + +Windows Installer: bandmap_setup.exe + +After installation, double click the desktop shortcut or open a command prompt (cmd.exe) and execute "C:\Program Files (x86)\AA2IL\bandmap.exe". + +Known issues: + +- Rig control is not yet available under windoz. (All capabilities are avaiable under linux.) + +------------------------------------------------------------------------------ + +Revision history: + +Next Release: + +- Assort bug fixes +- Added switch to retain only spots from North America +- Rig control now working for DIRECT FTdx3000 + +Version 1.0 - Jan. 2023 + +This is the first version-controlled release. diff --git a/work/bandmap.py b/work/bandmap.py new file mode 100755 index 0000000..3087177 --- /dev/null +++ b/work/bandmap.py @@ -0,0 +1,153 @@ +#! /home/joea/miniconda3/envs/aa2il/bin/python -u +# +# NEW: /home/joea/miniconda3/envs/aa2il/bin/python -u +# OLD: /usr/bin/python3 -u +######################################################################################### +# +# bandmap.py - Rev. 1.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Simple gui to sort & display dx cluster spots. Indications as to the age of a spot and +# the "need" status of a spot's DXCC are also given. The rig can be tuned to a spot by +# clicking on it. +# +# This code needs some libs, e.g. pytz, that may not already be installed. +# Use the package manager to install pip and then from the command line type +# sudo pip install pytz (or pip3 for python3) +# +# The -u forces unubffered output on stdout making debug easier +# +# TO DO: +# - During big contests, it seems to take some time for the gui to react - matching is slow? +# - REALLY NEED TO CLEAN UP THIS RAT'S NEST!!!! +# +############################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +######################################################################################### + +from rig_io import open_rig_connection +from bm_gui import BandMapGUI +from settings import * +from params import * +from dx.cluster_connections import connection,get_logger +from cluster_feed import ClusterFeed +from dx.spot_processing import ChallengeData +from pprint import pprint +from get_node_list import * +from tcp_server import * +from bm_udp import * +from load_history import load_history +from utilities import get_Host_Name_IP,ping_test,Memory_Monitor +from watchdog import * + +######################################################################################### + +VERSION='1.0' + +######################################################################################### + +# Begin executable +if __name__ == "__main__": + + print("\n\n***********************************************************************************") + print("\nStarting Bandmap v'+VERSION+' ...") + print('\nUse -echo flag to echo lines from zerver') + + # Process command line params + P=PARAMS() + + # Memory monitor + if True: + if P.SERVER=="WSJT": + P.MEM = Memory_Monitor('/tmp/BANDMAP_MEMORY_WSJT.TXT') + else: + P.MEM = Memory_Monitor('/tmp/BANDMAP_MEMORY.TXT') + + # Create GUI + bm_gui = BandMapGUI(None,P) + P.bm_gui=bm_gui + + # Read list of nodes - work in progress + if False: + get_node_list(P) + sys.exit(0) + + # Open connection to rig + P.sock = open_rig_connection(P.CONNECTION,0,P.PORT,0,'BANDMAP',rig=P.RIG) + if not P.sock.active: + print('*** No connection to rig ***') + #sys,exit(0) + + # Test internet connection - to be continued ... + if P.SERVER!='NONE' and P.SERVER!="WSJT": + print('Checking internet connection ...') + P.host_name,P.host_ip=get_Host_Name_IP() + print("\nHostname : ", P.host_name) + print("IP : ", P.host_ip,'\n') + if P.host_ip=='127.0.0.1': + P.INTERNET=False + print('No internet connection :-(') + #sys.exit(0) + else: + print('Local Internet connection appears to be alive ...') + # Next try pinging something outside LAN + P.INTERNET=ping_test('8.8.8.8') + if P.INTERNET: + print('\n... Outside Internet Connection appears to be alive also.') + else: + print('\n... No internet connection :-(') + #sys.exit(0) + + # Read various auxilary data files + P.bm_gui.read_aux_data() + + # Start thread with UDP server + if P.BM_UDP_CLIENT: + P.bm_gui.status_bar.setText('Opening UDP client ...') + P.udp_server = TCP_Server(P,None,BANDMAP_UDP_PORT,Server=True, + Handler=bm_udp_msg_handler) + worker = Thread(target=P.udp_server.Listener, args=(), + name='Bandmap UDP Server' ) + worker.daemon=True + worker.start() + P.threads.append(worker) + + # Start thread to manage feed from dx cluster + P.bm_gui.status_bar.setText('Starting Cluster Feed Monitor ...') + P.ClusterFeed = ClusterFeed(P,200) + """ + worker = Thread(target=P.ClusterFeed.Monitor, args=(), + name='Cluster Feed Monitor' ) + worker.daemon=True + worker.start() + P.threads.append(worker) + """ + + # WatchDog - runs in its own thread + P.WATCHDOG = True + #P.WATCHDOG = False + if P.WATCHDOG: + P.bm_gui.status_bar.setText("Spawning Watchdog ...") + P.monitor = WatchDog(P,2000) + + # Let's go! + P.bm_gui.status_bar.setText('And away we go!') + P.bm_gui.run() + if False: + print("P=") + pprint(vars(P)) + print(' ') + P.bm_gui.root.mainloop() + + + diff --git a/work/bm_gui.py b/work/bm_gui.py new file mode 100755 index 0000000..09f6478 --- /dev/null +++ b/work/bm_gui.py @@ -0,0 +1,1900 @@ +######################################################################################### +# +# gui.py - Rev. 2.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Gui for dx cluster bandmap. +# +######################################################################################### +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +######################################################################################### + +import sys +import os +import time +import socket +import json +import platform + +from datetime import datetime +from dx.spot_processing import ChallengeData,Station + +from dx.cluster_connections import * +from fileio import parse_adif, read_text_file +import webbrowser + +if sys.version_info[0]==3: + from tkinter import * + import tkinter.font +else: + from Tkinter import * + import tkFont + +from rig_io import bands +from rig_io.ft_tables import THIRTEEN_COLONIES +from cluster_feed import * +from settings import * +import logging +from utilities import freq2band, error_trap +from widgets_tk import StatusBar +from tcp_server import open_udp_client,KEYER_UDP_PORT +from bm_udp import * +from load_history import load_history + +######################################################################################### + +DEFAULT_BAND = '20m' +VERBOSITY=0 + +######################################################################################### + +# Setup basic logging +logging.basicConfig( + format="%(asctime)-15s [%(levelname)s] %(funcName)s:\t(message)s", + level=logging.INFO) + +######################################################################################### + +# The GUI +class BandMapGUI: + def __init__(self,root,P): + + # Init + self.P = P + self.nspots=0 + self.SpotList=[] + self.current=[] + self.last_check=datetime.now() + self.qsos=[] + self.VFO = P.RIG_VFO + if self.P.FT4: + self.FT_MODE='FT4' + else: + self.FT_MODE='FT8' + self.Ready=False + self.friends=[] + self.most_wanted=[] + self.corrections=[] + P.members=[] + self.calls1 = [] + self.sock = None + self.old_mode = None + + # UDP stuff + P.bm_udp_client=None + P.bm_udp_ntries=0 + + # Read "regular" logbook - need to update this + # Might need to bring this out to bandmap.py + if self.P.CWOPS and False: + if True: + print('\nCWops members worked:\n',self.P.data.cwops_worked) + self.calls1 = [] + #sys.exit(0) + elif '_6' in self.P.LOG_NAME: + # For CQP + fname99=self.P.LOG_NAME.replace('_6','') + print('GUI: Reading regular log file',fname99) + logbook = parse_adif(fname99) + self.calls1 = [ qso['call'] for qso in logbook ] + self.calls1 =list( set( self.calls1) ) + elif True: + # After the CQP + fname99=self.P.LOG_NAME.replace('.','_6.') + print('GUI: Reading regular log file',fname99) + logbook = parse_adif(fname99) + self.calls1 = [ qso['call'] for qso in logbook ] + self.calls1 =list( set( self.calls1) ) + else: + self.calls1 = [] + print('GUI: CALLS1=',self.calls1,len(self.calls1)) + + # Create the GUI - need to be able to distinguish between multiple copies of bandmap + if root: + self.root=Toplevel(root) + #self.hide() + else: + self.root = Tk() + + if P.SERVER=="WSJT": + self.root.title("Band Map by AA2IL - " + P.SERVER) + else: + self.root.title("Band Map by AA2IL - Server " + P.SERVER) + + # Move to lower left corner of screen + if P.BM_GEO==None: + self.screen_width = self.root.winfo_screenwidth() + self.screen_height = self.root.winfo_screenheight() + print('Screen=',self.screen_width, self.screen_height) + w=400 + h=self.screen_height + sz=str(w)+'x'+str(h)+'+'+str(self.screen_width-400)+'+0' + else: + #bandmap.py -geo 400x790+1520+240 + sz=P.BM_GEO + self.root.geometry(sz) + + # Add menu bar + self.create_menu_bar() + + # Set band according to rig freq + self.band = StringVar(self.root) + self.ant = IntVar(self.root) + self.ant.set(-1) + self.mode = StringVar(self.root) + self.mode.set('') + self.mode2 = StringVar(self.root) + self.mode2.set(self.FT_MODE) + + # Buttons + BUTframe = Frame(self.root) + BUTframe.pack() + + # Buttons to select HF bands + self.Band_Buttons=[] + for bb in bands.keys(): + if bb=='2m': + break + b = int( bb.split("m")[0] ) + but=Radiobutton(BUTframe, + text=bb, + indicatoron = 0, + variable=self.band, + command=lambda: self.SelectBands(self.P.ALLOW_CHANGES), + value=bb) + self.Band_Buttons.append( but ) + + if not P.CONTEST_MODE or bands[bb]["CONTEST"]: + but.pack(side=LEFT,anchor=W) + + # Another row of buttons to select mode & antenna + #ModeFrame = Frame(self.root) + #ModeFrame.pack(side=TOP) + #subFrame1 = Frame(ModeFrame,relief=RIDGE,borderwidth=2) + subFrame1 = Frame(self.toolbar,relief=FLAT,borderwidth=2,bg='red') + subFrame1.pack(side=LEFT) + if P.SERVER=="WSJT": + for m in ['FT8','FT4','MSK144']: + Radiobutton(subFrame1, + text=m, + indicatoron = 0, + variable=self.mode2, + command=lambda: self.SelectMode2(), + value=m).pack(side=LEFT,anchor=W) + + else: + for m in ['CW','Data','SSB']: + Radiobutton(subFrame1, + text=m, + indicatoron = 0, + variable=self.mode, + command=lambda: self.SelectMode(), + value=m).pack(side=LEFT,anchor=W) + + #subFrame2 = Frame(ModeFrame) + subFrame2 = Frame(self.toolbar,relief=FLAT,borderwidth=2,bg='green') + subFrame2.pack(side=LEFT) + for a in [1,2,3]: + Radiobutton(subFrame2, + text='Ant'+str(a), + indicatoron = 0, + variable=self.ant, + command=lambda: self.SelectAnt(), + value=a).pack(side=LEFT,anchor=W) + + if False: + frm=ModeFrame + else: + frm=self.toolbar + #frm=Frame(self.toolbar,relief=RIDGE,borderwidth=1) + #frm.pack(side=LEFT) + Button(frm,text="-1", + command=lambda: self.FreqAdjust(-1) ).pack(side=LEFT,anchor=W) + Button(frm,text="+1", + command=lambda: self.FreqAdjust(+1) ).pack(side=LEFT,anchor=W) + + + if P.CONTEST_MODE: + Button(frm,text="<", + command=lambda: self.SetSubBand(1) ).pack(side=LEFT,anchor=W) + Button(frm,text=">", + command=lambda: self.SetSubBand(3) ).pack(side=LEFT,anchor=W) + + # List box with a scroll bar + self.LBframe = Frame(self.root) + #self.LBframe.pack(side=LEFT,fill=BOTH,expand=1) + self.LBframe.pack(fill=BOTH,expand=1) + self.scrollbar = Scrollbar(self.LBframe, orient=VERTICAL) + + # Select a fixed-space font + if platform.system()=='Linux': + FAMILY="monospace" + elif platform.system()=='Windows': + #FAMILY="fixed" # Doesn't come out fixed space?! + FAMILY="courier" + else: + print('GUI INIT: Unknown OS',platform.system()) + sys.exit(0) + if self.P.SMALL_FONT: + SIZE=8 + else: + SIZE=10 + if sys.version_info[0]==3: + self.lb_font = tkinter.font.Font(family=FAMILY,size=SIZE,weight="bold") + else: + self.lb_font = tkFont.Font(family=FAMILY,size=SIZE,weight="bold") + self.lb = Listbox(self.LBframe, yscrollcommand=self.scrollbar.set,font=self.lb_font) + self.scrollbar.config(command=self.lb.yview) + self.scrollbar.pack(side=RIGHT, fill=Y) + self.lb.pack(side=LEFT, fill=BOTH, expand=1) + self.lb.bind('<>', self.LBLeftClick) +# self.lb.bind('<2>' if aqua else '<3>', lambda e: context_menu(e, menu)) + self.lb.bind('',self.LBCenterClick) + self.lb.bind('',self.LBRightClick) + + # Trap the mouse wheel pseudo-events so we can handle them properly + self.lb.bind('',self.scroll_updown) + self.lb.bind('',self.scroll_updown) + self.scrollbar.bind('',self.scroll_updown) + self.scrollbar.bind('',self.scroll_updown) + + # Status bar along the bottom + self.status_bar = StatusBar(self.root) + self.status_bar.setText("Howdy Ho!") + self.status_bar.pack(fill=X,side=BOTTOM) + + # Make what we have so far visible + self.root.update_idletasks() + self.root.update() + + + # Function to actually get things going + def run(self): + + self.sock = self.P.sock + + # Put gui on proper desktop + if self.P.DESKTOP!=None: + cmd='wmctrl -r "'+self.root.title()+'" -t '+str(self.P.DESKTOP) + os.system(cmd) + + if self.sock and self.sock.active: + if VERBOSITY>0: + logging.info("Calling Get band ...") + f = 1e-6*self.sock.get_freq(VFO=self.VFO) # Query rig at startup + b = freq2band(f) + self.rig_freq = 1e-3*f + else: + f = 0 + b = DEFAULT_BAND # No conenction so just default + print('BM_GUI: BAND.SET band=',b,'\tf=',f) + self.band.set(b) + self.rig_band=b + print("Initial band=",b) + + if self.sock and self.sock.active: + self.SelectMode('') + self.SelectAnt(-1) + self.SelectBands(True) + + print('Initial server=',self.P.SERVER) + self.node.set(self.P.SERVER) + + self.WatchDog() + + + # Callback to handle mouse wheel scrolling since Tk doesn't seem to do a very good job of it + # The jumps in Tk are much to big and I can't figure out how to adjust so do this instead + def scroll_updown(self, event): + if event.num==4: + n=-1 # int(-1*(event.delta/120)) + else: + n=1 # int(-1*(event.delta/120)) + #print('MOUSE WHEEL ...........................................................................................', + # n,event.num,event.delta,'\n',event) + self.lb.yview_scroll(n, "units") + return "break" + + # Adjust rig freq + def FreqAdjust(self,df): + if VERBOSITY>0: + logging.info("Calling Get Freq ...") + self.rig_freq = self.sock.get_freq(VFO=self.VFO) / 1000. + if VERBOSITY>0: + logging.info("Calling Set Freq ...") + self.sock.set_freq(self.rig_freq+df,VFO=self.VFO) + + # Set rig freq to lo or hi end of mode subband + def SetSubBand(self,iopt): + if self.sock==None: + return + + b = self.band.get() + if VERBOSITY>0: + logging.info("Calling Get Mode ...") + m = self.sock.get_mode(VFO=self.VFO) + if m=='AM': + m='SSB' + if iopt==1: + print('m=',m) + frq = bands[b][m+'1'] * 1000 + elif iopt==2: + frq1 = bands[b][m+'1'] * 500 + frq2 = bands[b][m+'2'] * 500 + frq = frq1+frq2 + elif iopt==3: + frq = bands[b][m+'2'] * 1000 + print("\nSetSubBand:",iopt,b,m,frq) + if VERBOSITY>0: + logging.info("Calling Set Freq ...") + self.sock.set_freq(float(frq/1000.),VFO=self.VFO) + + # Callback to select antenna + def SelectAnt(self,a=None,b=None,VERBOSITY=0): + if self.sock==None: + print('SELECT ANT - No socket!') + return + + if not a: + a = self.ant.get() + if a==-1: + + if VERBOSITY>0: + logging.info("Calling Get Ant ...") + print("SELECT ANT: Calling Get Ant ...") + a = self.sock.get_ant() + self.ant.set(a) + if VERBOSITY>0: + print("SELECT ANT: Got Antenna =",a) + + elif a==-2: + if VERBOSITY>0: + logging.info("Checking Ant matches Band ...") + if self.P.sock.rig_type2=='FTdx3000': + if b in ['160m','80m']: + ant=3 + elif b in ['40m','20m','15m']: + ant=1 + elif b in ['30m','17m','12m','10m','6m']: + ant=2 + else: + ant=1 + self.P.sock.set_ant(ant,VFO=self.VFO) + + else: + print("\n%%%%%%%%%% Select Antenna: Setting Antenna =",a,"%%%%%%%%") + if VERBOSITY>0: + logging.info("Calling Set Ant ...") + self.sock.set_ant(a,VFO=self.VFO) + self.status_bar.setText("Selecting Antenna "+str(a)) + + # Callback to handle mode changes for WSJT-X + def SelectMode2(self,VERBOSITY=0): + if VERBOSITY>0: + print('\nSelectMode2: mode=',self.FT_MODE) + + if self.sock==None: + print('SELECT MODE2 - No socket!') + return + + try: + self.FT_MODE=self.mode2.get() + band = self.band.get() + frq = bands[band][self.FT_MODE] + 1 + except: + error_trap('GUI->SELECT MODE2: Problem setting new config') + return + + print('\n***************************************** Well well well ...',self.FT_MODE,band,frq) + self.P.ClusterFeed.tn.configure_wsjt(NewMode=self.FT_MODE) + time.sleep(.1) + self.sock.set_freq(frq,VFO=self.VFO) + + # Make sure monitor is turned on also + GAIN=25 + self.sock.set_monitor_gain(25) + + return + + # Callback to handle mode changes for rig + def SelectMode(self,m=None,VERBOSITY=0): + if VERBOSITY>0: + print('\nSelectMode: mode=',m) + + if self.sock==None: + print('SELECT MODE - No socket!') + return + + if m==None: + m = self.mode.get() + print('SelectMode-a: mode2=',m) + + if m=='': + if VERBOSITY>0: + logging.info("Calling Get Mode ...") + m = self.sock.get_mode(VFO=self.VFO) + #print('SelectMode:',m) + if m==None: + return + if m=='RTTY' or m=='FT8' or m=='FT4' or m[0:3]=='PKT' or m=='DIGITIAL': + m='Data' + self.mode.set(m) + if m!=self.old_mode: + self.status_bar.setText("Mode Select: "+str(m)) + self.old_mode=m + return + + # Translate mode request into something that FLDIGI understands + #print('SelectMode-c:',m) + if m in ['SSB','LSB','USB']: + # buf=get_response(s,'w BY;EX1030\n'); # Audio from MIC (front) + if VERBOSITY>0: + logging.info("Calling Get Freq ...") + self.rig_freq = self.sock.get_freq(VFO=self.VFO) / 1000. + if self.rig_freq<10000: + m='LSB' + else: + m='USB' + elif m=='Data' or m=='DIGITAL': + m='RTTY' + #print("SelecteMode-d:",m) + if VERBOSITY>0: + logging.info("Calling Set Mode ...") + if not self.P.CONTEST_MODE: + self.sock.set_mode(m,VFO=self.VFO,Filter='Auto') + if m=='CW': + self.sock.set_if_shift(0) + + # Function to collect spots for a particular band + def collect_spots(self,band,REVERSE=False,OVERRIDE=False): + + print('COLLECT_SPOTS: band=',band,'\tReverse=',REVERSE, + '\tOVERRIDE=',OVERRIDE,'\tCONTEST_MODE=', self.P.CONTEST_MODE) + + if 'cm' in band: + iband=int( band.replace('cm','') ) + else: + iband=int( band.replace('m','') ) + + spots=[] + for x in self.SpotList: + keep= x and x.band == iband + if self.P.DX_ONLY: + # Retain only stations outside US or SESs + keep = keep and (x.dx_station.country!='United States' or len(x.dx_call)==3 or \ + x.dx_call=='WM3PEN') + if self.P.NA_ONLY: + # Retain only stations in North America + keep = keep and x.dx_station.continent=='NA' + + if self.P.NEW_CWOPS_ONLY: + # Retain only cwops stations not worked yet this year + keep = keep and self.cwops_worked_status(x.dx_call)==1 + + # Retain only modes we are interested in + xm = x.mode + if xm in ['FT8','FT4','DIGITAL','JT65']: + xm='DIGI' + elif xm in ['SSB','LSB','USB','FM']: + xm='PH' + #if keep and (xm not in self.P.SHOW_MODES): + # print('COLLECT_SPOTS: Culling',xm,'spot - ', self.P.SHOW_MODES) + keep = keep and (xm in self.P.SHOW_MODES) + + # Check for dupes + if keep: + match = self.B4(x,band) + c,c2,age=self.spot_color(match,x) + x.color=c + if not (self.P.SHOW_DUPES or OVERRIDE): + keep = keep and (c2!='r') + #print('COLLECT SPOTS:',x.dx_call,c,c2,keep,band,match) + #print('\tx.color=',x.color) + + # Keep spots that haven't been culled + if keep: + spots.append(x) + + spots.sort(key=lambda x: x.frequency, reverse=REVERSE) + + return spots + + + + # Callback to handle band changes + def SelectBands(self,allow_change=False): + + VERBOSITY = self.P.DEBUG + #VERBOSITY = 1 + if VERBOSITY>0: + print('SELECT BANDS A: nspots=',self.nspots, + '\tlen SpotList=',len(self.SpotList), + '\tlen Current=',len(self.current)) + + self.scrolling('SELECT BANDS A') + + if not self.sock: + print('\nGUI->SELECT BANDS: Not sure why but no socket yet ????') + print('\tsock=',self.sock,'\n') + #return + + try: + band = self.band.get() + except: + error_trap('GUI->SELECT BANDS: ????') + print('\tband=',self.band) + return + + if VERBOSITY>0: + logging.info("Calling Get Band ...") + if self.sock: + frq2 = 1e-6*self.sock.get_freq(VFO=self.VFO) + else: + frq2=0 + band2 = freq2band(frq2) + self.status_bar.setText("Band Select: "+str(band)) + + print("You've selected ",band,' - Current rig band=',band2,\ + ' - allow_change=',allow_change,' - mode=',self.FT_MODE, \ + flush=True) + + # Check for band change + if allow_change: + b=band + if self.P.CLUSTER=='WSJT': + print('BM_GUI - Config WSJT ...',b,self.FT_MODE) + self.P.ClusterFeed.tn.configure_wsjt(NewMode=self.FT_MODE) + time.sleep(.1) + try: + new_frq = bands[b][self.FT_MODE] + 1 + except: + error_trap('GUI->SELECT BANDS: Problem getting freq') + return + if VERBOSITY>0: + logging.info("Calling Set Freq and Mode ...") + print('SELECT BANDS: Setting freq=',new_frq,'and mode=',self.FT_MODE) + if self.sock: + self.sock.set_freq(new_frq,VFO=self.VFO) + self.sock.set_mode(self.FT_MODE,VFO=self.VFO) + else: + if band != band2 and self.sock: + if VERBOSITY>0: + logging.info("Calling Set Band ...") + self.sock.set_band(band,VFO=self.VFO) + + # Make sure antenna selection is correct also + self.SelectAnt(-2,band) + + # Extract a list of spots that are in the desired band + self.current = self.collect_spots(band) + y=self.scrolling('SELECT BANDS B') + + # Get latest logbook + now = datetime.utcnow().replace(tzinfo=UTC) + if self.P.STAND_ALONE or len(self.qsos)==0: + if self.P.LOG_NAME0: + # Log for operator if different from current callsign + # We won't keep reading this file so we set REVISIT=False + print('\nGUI: Reading log file',self.P.LOG_NAME0) + logbook = parse_adif(self.P.LOG_NAME0,REVISIT=False,verbosity=0) + self.qsos += logbook + print('QSOs in log=',len(logbook),len(self.qsos)) + + # Log for current callsign + # We will keep reading this file for new QSOs so we set REVISIT=True + print('\nGUI: Reading log file',self.P.LOG_NAME) + logbook = parse_adif(self.P.LOG_NAME,REVISIT=True,verbosity=0) + self.qsos += logbook + print('QSOs in log=',len(logbook),len(self.qsos)) + #sys.exit(0) + + if self.P.CWOPS: + self.calls = self.calls1 + [ qso['call'] for qso in self.qsos ] + self.calls=list( set( self.calls) ) + print('No. unique calls worked:',len(self.calls)) + #print(self.calls) + + # Re-populate list box with spots from this band + # This seems to be the slow part + #print 'Repopulate ...',len(self.current),len(self.qsos) + self.lb.delete(0, END) + n=0 + for x in self.current: + #pprint(vars(x)) + dxcc=x.dx_station.country + if self.P.CLUSTER=='WSJT': + #print('Insert1') + self.lb.insert(END, "%4d %-10.10s %+6.6s %-17.17s %+4.4s" % \ + (int(x.df),x.dx_call,x.mode,cleanup(dxcc),x.snr)) + else: + #print('Insert2') + if x.mode=='CW': + val=x.wpm + else: + #val=x.snr + val='' + self.lb.insert(END, "%-6.1f %-10.19s %+6.6s %-15.15s %+4.4s" % \ + (x.frequency,x.dx_call,x.mode,cleanup(dxcc),val)) + + # JBA - Change background colors on each list entry + self.lb.itemconfigure(END, background=self.current[n].color) + n+=1 + + # Reset lb view + self.LBsanity() + self.lb.yview_moveto(y) + self.scrolling('SELECT BANDS C') + if VERBOSITY>0: + print('SELECT BANDS B: nspots=',self.nspots, + '\tlen SpotList=',len(self.SpotList), + '\tlen Current=',len(self.current)) + + + def match_qsos(self,qso,x,b,now): + if self.P.CW_SS: + # Can only work each station once regardless of band in this contest + match = x.dx_call==qso['call'] + else: + try: + match = (x.dx_call==qso['call']) and (b==qso['band']) + except: + error_trap('GUI->MATCH QSOS: ?????') + match=False + print('dx_call=',x.dx_call) + print('qso=',qso) + + #print('\n------MATCH_QSOS: qso=',qso,x.dx_call,match) + if match: + t1 = datetime.strptime(now.strftime("%Y%m%d %H%M%S"), "%Y%m%d %H%M%S") + t2 = datetime.strptime( qso['qso_date_off']+" "+qso["time_off"] , "%Y%m%d %H%M%S") + delta=(t1-t2).total_seconds() / 3600 + match = delta< self.P.MAX_HOURS_DUPE + if VERBOSITY>=2: + print('--- MATCH_QSOS: Possible dupe for',x.dx_call,'\tt12',t1,t2,'\tdelta=',delta,match) + + return match + + # Function to return worked status of cwops stations + # 0 = call is not a cwops member + # 1 = call is a cwops member but hasn't been worked yet this year + # 2 = call is a cwops member and been worked yet this year + def cwops_worked_status(self,dx_call): + if '/' in dx_call: + dx_station = Station(dx_call) + home_call = dx_station.homecall + else: + home_call = dx_call + + if (dx_call in self.P.members) or (home_call in self.P.members): + if (dx_call in self.P.data.cwops_worked) or (home_call in self.P.data.cwops_worked): + status=2 + else: + status=1 + else: + status=0 + + #print('CWops WORKED STATUS: call=',dx_call,'\thome call=',home_call,'\tworked=',status) + return status + + # Function to determine spot color + def spot_color(self,match,x): + + now = datetime.utcnow().replace(tzinfo=UTC) + age = (now - x.time).total_seconds()/60 # In minutes + dx_call=x.dx_call.upper() + dx_station = Station(dx_call) + if dx_station.country=='United States' and len(dx_station.appendix)>=2: + dx_call=dx_station.homecall # Strip out bogus appendices from state QPs + cwops_status=self.cwops_worked_status(dx_call) + + # Set color depending criteria + # c2 is the abbreviated version used to shorten the inter-process messages + # These need to be matched in pySDR/gui.py + if match: + c="red" + c2='r' + elif x.needed: + c="magenta" + c2='m' + elif x.need_this_year: + c="violet" + c2='v' + elif x.need_mode: + c="pink" + c2='p' + elif dx_call in self.friends: + c="lightskyblue" + c2='lb' + elif dx_call in self.most_wanted: + c="turquoise" + c2='t' + elif dx_call==self.P.MY_CALL: + c="deepskyblue" + c2='b' + elif self.P.CWOPS and cwops_status>0: + if cwops_status==2: + c="gold" + c2='d' + else: + c='orange' + c2='o' + elif dx_call in THIRTEEN_COLONIES: + c="lightskyblue" + c2='lb' + else: + if age<2: + c="yellow" + c2='y' + else: + c="lightgreen" + c2='g' + + return c,c2,age + + + # Why is this still around? - see cluster_feed.py + def lb_update(self): + b = self.band.get() + print('LB_UPDATE: b=',b) + now = datetime.utcnow().replace(tzinfo=UTC) + idx=-1 + if len(self.current)==0: + print('LB_UPDATE - Nothing to do.',self.current) + return + for x in self.current: + idx+=1 + for qso in self.qsos: + match = self.match_qsos(qso,x,b,now) + call=qso['call'] + #print('LB_UPDATE:',call,x.dx_call,match) + #match |= call==self.P.MY_CALL + if match: + break + #else: + # print('LB_UPDATE - Nothing to do.',self.current) + # return + + if idx>=0: + c,c2,age=self.spot_color(match,x) + self.lb.itemconfigure(idx, background=c) + #print('LB_UPDATE:',dx_call,c) + + + # Function to check if we've already worked a spotted station + def B4(self,x,b): + + now = datetime.utcnow().replace(tzinfo=UTC) + dx_call=x.dx_call.upper() + nqsos=len(self.qsos) + if VERBOSITY>0: + print('B4: ... call=',dx_call,'\tband=',b,'nqsos=',nqsos) + + match=False + if nqsos>0: + for qso in self.qsos: + #print('QSO=',qso) + if self.P.CW_SS: + # Can only work each station once regardless of band in this contest + match = dx_call==qso['call'] + else: + try: + match = (dx_call==qso['call']) and (b==qso['band']) + except: + error_trap('GUI->MATCH QSOS: ?????') + match=False + print('dx_call=',dx_call) + print('qso=',qso) + + if match: + t1 = datetime.strptime(now.strftime("%Y%m%d %H%M%S"), "%Y%m%d %H%M%S") + t2 = datetime.strptime( qso['qso_date_off']+" "+qso["time_off"] , "%Y%m%d %H%M%S") + delta=(t1-t2).total_seconds() / 3600 + match = delta < self.P.MAX_HOURS_DUPE + if VERBOSITY>=2: + print('--- Possible dupe ',tag,' for',dx_call,'\tt12=',t1,t2,'\tdelta=', + delta,match) + if match: + print('*** Dupe ***',qso['call'],qso['band']) + break + + return match + + + + # Function to set list box view + def set_lbview(self,frq,MIDDLE=False): + + dfbest=1e9 + ibest=-1 + idx=0 + + # Keep track of entry that is closest to current rig freq + for x in self.current: + df=abs( x.frequency-frq ) + # print idx,x.frequency,frq,df,ibest + if df-1: + + sb=self.scrollbar.get() + sz=self.lb.size() + yview=self.lb.yview() + """ + print("LBSANITY: Closest=",ibest, + '\tf=',self.current[ibest].frequency, + '\tsize=',sz, + '\tsb=',sb, + '\tyview',yview) + """ + #print('hght:',self.lb['height']) + + # Use to scrollbar to determine how many lines are visible + d = yview[1]-yview[0] # Fraction of list in view + n = d*sz # No. line in view + if MIDDLE: + y = max( ibest*d/n - d/2. , 0) # Top coord so view will be centered around ibest + else: + y = max( ibest*d/n , 0) # Top coord will be centered around ibest + self.lb.yview_moveto(y) + + self.lb.selection_clear(0,END) + if False: + # This was problematic + self.lb.selection_set(ibest) + + + # Make sure the entry closest to the rig freq is visible + def LBsanity(self): + VERBOSITY = self.P.DEBUG + #print('LBSANITY ...') + + # Dont bother if using as WSJT companion + #if not CONTEST_MODE or CLUSTER=='WSJT': + if self.P.CLUSTER=='WSJT': + print('LBSANITY - WS server - nothing to do') + return + + # Don't bother if not on same band as the rig + b1 = self.rig_band + b2 = self.band.get() + #print('LBSANITY: rig band=',b1,'\tband=',b2) + if b1!=b2: + if VERBOSITY>0: + print('LBSANITY - Rig on different band - nothing to do') + return + + # Don't bother if user doesn't want to keep rig freq centered + if not self.P.KEEP_FREQ_CENTERED: + #if VERBOSITY>0: + # print('LBSANITY - DONT KEEP CENTERED - nothing to do') + + y=self.scrolling('LBSANITY',verbosity=0) + self.lb.yview_moveto(y) + + return + + # Set lb view so its centered around the rig rig freq + frq = self.rig_freq + self.set_lbview(frq,True) + + # Callback to clear all spots + def Clear_Spot_List(self): + print("\n------------- Clear Spot List -------------",self.P.CLUSTER,'\n') + self.nspots=0 + self.SpotList=[]; + self.current=[] + self.lb.delete(0, END) + + ######################################################################################### + + # Watch Dog + def WatchDog(self): + #print('BM WATCH DOG ...') + + # Check if we have any new spots + nspots=self.P.q.qsize() + print('BM WATCH DOG - There are',nspots,'new spots in the queue ...') + while nspots>0: + line=self.P.q.get() + self.digest_spot(line) + self.P.q.task_done() + nspots=self.P.q.qsize() + + # Check for antenna or mode or band changes + # Should combine these two + if VERBOSITY>0: + logging.info("Calling Get Band & Freq ...") + if self.P.SERVER=="WSJT": + tmp = self.P.ClusterFeed.tn.wsjt_status() + #print('WatchDog:',tmp) + if all(tmp): + if not self.Ready: + print('WatchDog - Ready to go ....') + self.P.ClusterFeed.tn.configure_wsjt(NewMode=self.FT_MODE) + self.Ready=True + + self.rig_freq = tmp[0] + self.rig_band = tmp[1] + self.FT_MODE = tmp[2] + + else: + try: + if self.sock: + self.rig_freq = 1e-3*self.sock.get_freq(VFO=self.VFO) + self.rig_band = freq2band(1e-3*self.rig_freq) + except: + error_trap('WATCHDOG: Problem reading rig freq/band',True) + + try: + if self.sock: + self.SelectAnt(-1,VERBOSITY=0) + self.SelectMode('',VERBOSITY=0) + except: + error_trap('WATCHDOG: Problem reading rig antenna/mode',True) + + # Try to connect to the keyer + if self.P.BM_UDP_CLIENT: + if not self.P.bm_udp_client: + self.P.bm_udp_ntries+=1 + if self.P.bm_udp_ntries<=100: + self.P.bm_udp_client=open_udp_client(self.P,KEYER_UDP_PORT, + bm_udp_msg_handler) + if self.P.bm_udp_client: + print('BM GUI->WatchDog: Opened connection to KEYER.') + self.P.bm_udp_ntries=0 + else: + print('WATCHDOG: Unable to open UDP client (keyer) - too many attempts',self.P.bm_udp_ntries) + + # Check if socket is dead + if self.sock and self.sock.ntimeouts>=10: + print('\tWATCHDOG: *** Too many socket timeouts - port is probably closed - giving up -> sys.exit ***\n') + sys.exit(0) + + # Re-schedule to do it all over again in 1-second + self.root.update_idletasks() + self.root.update() + self.root.after(1*1000, self.WatchDog) + + ######################################################################################### + + # Callback when an item in the listbox is selected + def LBSelect(self,value,vfo): + print('LBSelect: Tune rig to a spot - vfo=',vfo,value) + self.status_bar.setText("Spot Select "+value) + self.scrolling('LBSelect') + + # Examine item that was selected + b=value.strip().split() + if b[2]=='FT8' or b[2]=='FT4': + b[0] = float(b[0])+1 + + # If we're running WSJT, tune to a particular spot + if self.P.CLUSTER=='WSJT': + df = b[0] + dx_call = b[1] + #print('\n========================= LBSelect:',b,'\n') + self.P.ClusterFeed.tn.configure_wsjt(RxDF=df,DxCall=dx_call) + return + + # Note - need to set freq first so get on right band, then set the mode + # We do a second set freq since rig may offset by 700 Hz if we are in CW mode + # There must be a better way to do this but this is what we do for now + #print("LBSelect: Setting freq ",b[0]) + print("LBSelect: Setting freq=',b[0],'on VFO',vfo,'\tmode=',b[2].'\tcall ",b[1]) + if VERBOSITY>0: + logging.info("Calling Set Freq ...") + if self.sock: + self.sock.set_freq(float(b[0]),VFO=vfo) + if not self.P.CONTEST_MODE: + print("LBSelect: Setting mode ",b[2]) + self.SelectMode(b[2]) + self.sock.set_freq(float(b[0]),VFO=vfo) + self.sock.set_call(b[1]) + + # Make sure antenna selection is correct also + band=freq2band(0.001*float(b[0])) + self.SelectAnt(-2,band) + + # Send spot info to keyer + if self.P.BM_UDP_CLIENT and self.P.bm_udp_client: + self.P.bm_udp_client.Send('Call:'+b[1]+':'+vfo) + + + def LBLeftClick(self,event): + print('LBLeftClick ...') + w=event.widget + if len( w.curselection() ) > 0: + index = int(w.curselection()[0]) + value = w.get(index) + print('You selected item %d: "%s"' % (index, value)) + self.LBSelect(value,self.P.RIG_VFO) + + def LBRightClick(self,event): + print('LBRightClick ...') + index = event.widget.nearest(event.y) + value = event.widget.get(index) + print('You selected item %d: "%s"' % (index, value)) + self.status_bar.setText("Right Click "+value) + + #print(self.P.RIGHT_CLICK_TUNES_VFOB,self.P.SERVER) + + if not self.P.RIGHT_CLICK_TUNES_VFOB or self.P.SERVER=="WSJT": + + # This used to trigger a qrz call lookup + b=value.strip().split() + print("Looking up call: ",b[1]) + + link = 'https://www.qrz.com/db/' + b[1] + webbrowser.open_new_tab(link) + + else: + + # Tune VFO-B to spot freq + print("Tuning VFO B to ",value) + self.LBSelect(value,'B') + + + def LBCenterClick(self,event): + print('LBCenterClick: Delete an entry') + + index = event.widget.nearest(event.y) + value = event.widget.get(index) + b=value.strip().split() + call=b[1] + print('You selected item %d: %s - %s' % (index,value,call)) + self.status_bar.setText("Spot Delete "+value) + + del self.current[index] + self.lb.delete(index) + + #print('\nCENTER CLICK B4:',len(self.SpotList),self.SpotList) + idx=[] + i=0 + for i in range(len(self.SpotList)): + x=self.SpotList[i] + if hasattr(x, 'dx_call') and x.dx_call==call: + idx.append(i) + idx.reverse() + #print('idx=',idx) + for i in idx: + x=self.SpotList.pop(i) + #print('\nCENTER CLICK AFTER:',len(self.SpotList),self.SpotList) + + ######################################################################################### + + # For debug + def donothing(self): + win = Toplevel(self.root) + button = Button(win, text="Do nothing button") + button.pack() + + # Open dialog window for basic settings + def Settings(self): + self.SettingsWin = SETTINGS_GUI(self.root,self.P) + return + + # Print out log + def ShowLog(self): + print('\nLOG::::::::::',self.P.STAND_ALONE) + for qso in self.qsos: + print(qso) + print(' ') + return + + # Select a new cluster + def SelectNode(self): + SERVER = self.node.get() + print('SelectNode:',SERVER) + if SERVER != self.P.SERVER: + self.P.SERVER = SERVER + self.P.CLUSTER = self.P.NODES[SERVER] + self.root.title("Band Map by AA2IL - Server " + SERVER) + self.Reset() + self.node.set(self.P.SERVER) + + def Reset(self): + self.P.ClusterFeed.Reset() + + # Toggle DX ONLY mode + def toggle_dx_only(self): + self.P.DX_ONLY=self.dx_only.get() + self.SelectBands() + + # Toggle NA ONLY mode + def toggle_na_only(self): + self.P.NA_ONLY=self.na_only.get() + self.SelectBands() + + # Toggle NEW CWOPS ONLY mode + def toggle_new_cwops_only(self): + self.P.NEW_CWOPS_ONLY=self.new_cwops_only.get() + print('TOGGLE CWOPS: ',self.P.NEW_CWOPS_ONLY) + self.SelectBands() + + # Toggle showing CW spots + def toggle_cw(self): + self.P.SHOW_CW=self.show_cw.get() + print('TOGGLE CW: BEFORE show_cw=',self.P.SHOW_CW,'\t',self.P.SHOW_MODES) + if self.P.SHOW_CW: + self.P.SHOW_MODES.append('CW') + else: + self.P.SHOW_MODES.remove('CW') + print('TOGGLE CW: AFTER show_cw=',self.P.SHOW_CW,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing RTTY spots + def toggle_rtty(self): + self.P.SHOW_RTTY=self.show_rtty.get() + print('TOGGLE RTTY: BEFORE show_rtty=',self.P.SHOW_RTTY,'\t',self.P.SHOW_MODES) + if self.P.SHOW_RTTY: + self.P.SHOW_MODES.append('RTTY') + else: + self.P.SHOW_MODES.remove('RTTY') + print('TOGGLE RTTY: AFTER show_rtty=',self.P.SHOW_RTTY,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing DIGI spots + def toggle_digi(self): + self.P.SHOW_DIGI=self.show_digi.get() + print('TOGGLE DIGI: BEFORE show_digi=',self.P.SHOW_DIGI,'\t',self.P.SHOW_MODES) + if self.P.SHOW_DIGI: + self.P.SHOW_MODES.append('DIGI') + else: + self.P.SHOW_MODES.remove('DIGI') + print('TOGGLE DIGI: AFTER show_digi=',self.P.SHOW_DIGI,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing PHONE spots + def toggle_phone(self): + self.P.SHOW_PHONE=self.show_phone.get() + print('TOGGLE PHONE: BEFORE show_phone=',self.P.SHOW_PHONE,'\t',self.P.SHOW_MODES) + if self.P.SHOW_PHONE: + self.P.SHOW_MODES.append('PH') + else: + self.P.SHOW_MODES.remove('PH') + print('TOGGLE PHONE: AFTER show_phone=',self.P.SHOW_PHONE,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing of needs for mode + def toggle_need_mode(self): + self.P.SHOW_NEED_MODE=self.show_need_mode.get() + + # Toggle keep freq centered + def toggle_keep_centered(self): + self.P.KEEP_FREQ_CENTERED=self.center_freq.get() + + # Toggle right click tunes VFO B + def toggle_right_click_tunes_vfob(self): + self.P.RIGHT_CLICK_TUNES_VFOB=self.right_click_tunes_vfob.get() + + # Toggle font used in list box + def toggle_small_font(self): + self.P.SMALL_FONT=self.small_font.get() + if self.P.SMALL_FONT: + SIZE=8 + else: + SIZE=10 + self.lb_font.configure(size=SIZE) + self.lb.configure(font=self.lb_font) + + # Need to force a refresh to get the correct no. of rows in the list box + # I haven't found a simple way to do this so we slightly change the window size, + # refresh and change the size back + """ + # This method causes the window to move slightly - dont know why???!!! + #window.geometry("{}x{}+{}+{}".format(window_width, window_height, x-coord, y-coord)) + #root.geometry('%dx%d+%d+%d' % (w, h, x, y)) + + geom = self.root.geometry() + geom1 = geom.split('x') + geom2 = str( int(geom1[0])+1 ) +'x'+geom1[1] + self.root.geometry(geom2) + self.root.update() + self.root.geometry(geom) + self.root.update() + geom3 = self.root.geometry() + print('TOGGLE SMALL FONT: size=',SIZE,'\tgeom=',geom,geom2,geom3) + """ + # The window doesn't move with this method but there is a momentary flash - ugh! + #self.root.state('withdrawn') + self.root.attributes('-zoomed', True) + self.root.update() + self.root.attributes('-zoomed', False) + #self.root.state('normal') + self.root.update() + + # Toggle showing already worked stations + def toggle_dupes(self): + self.P.SHOW_DUPES=self.show_dupes.get() + self.SelectBands() + + # Toggle logging of raw spots + def toggle_echo(self): + self.P.ECHO_ON=self.echo_raw_spots.get() + + # Toggle showing of needs for this year + def toggle_need_year(self): + self.P.SHOW_NEED_YEAR=self.show_need_year.get() + + # Toggle contest mode + def toggle_contest_mode(self): + self.P.CONTEST_MODE=self.contest_mode.get() + if self.P.CONTEST_MODE: + self.status_bar.setText("Contest Mode ON") + else: + self.status_bar.setText("Contest Mode OFF") + + for but,bb in zip( self.Band_Buttons , bands.keys()): + #print('bb=',bb) + but.pack_forget() + if not self.P.CONTEST_MODE or bands[bb]["CONTEST"]: + but.pack(side=LEFT,anchor=W) + + + """ + # Not quite done with this yet + def toggle_ft4(self): + self.P.FT4=self.ft4.get() + if self.P.FT4: + self.FT_MODE='FT4' + else: + self.FT_MODE='FT8' + print('TOGGLE BOGGLE',self.P.FT4,self.FT_MODE) + """ + + ######################################################################################### + + # Function to create menu bar + def create_menu_bar(self): + print('Creating Menubar ...') + OLD_WAY=True + OLD_WAY=False + + self.toolbar = Frame(self.root, bd=1, relief=RAISED) + self.toolbar.pack(side=TOP, fill=X) + if OLD_WAY: + menubar = Menu(self.root) + menubar2 = menubar + else: + menubar = Menubutton(self.toolbar,text='Options',relief='flat') + menubar.pack(side=LEFT, padx=2, pady=2) + menubar2 = menubar + + Menu1 = Menu(menubar, tearoff=0) + Menu1.add_command(label="Clear", command=self.Clear_Spot_List) + Menu1.add_command(label="Reset", command=self.Reset) + + # Sub-menu to pick server + Menu2 = Menu(menubar2, tearoff=0) + self.node = StringVar(self.root) + #self.node.set(self.P.SERVER) + for node in list(self.P.NODES.keys()): + Menu2.add_radiobutton(label=node, + value=node, + variable=self.node, + command=self.SelectNode ) + Menu1.add_cascade(label="Cluster", menu=Menu2) + Menu1.add_separator() + + self.dx_only = BooleanVar(value=self.P.DX_ONLY) + Menu1.add_checkbutton( + label="DX Only", + underline=0, + variable=self.dx_only, + command=self.toggle_dx_only + ) + + self.na_only = BooleanVar(value=self.P.NA_ONLY) + Menu1.add_checkbutton( + label="NA Only", + underline=0, + variable=self.na_only, + command=self.toggle_na_only + ) + + self.new_cwops_only = BooleanVar(value=self.P.NEW_CWOPS_ONLY) + Menu1.add_checkbutton( + label="New CWops Only", + underline=0, + variable=self.new_cwops_only, + command=self.toggle_new_cwops_only + ) + + self.contest_mode = BooleanVar(value=self.P.CONTEST_MODE) + Menu1.add_checkbutton( + label="Contest Mode", + underline=0, + variable=self.contest_mode, + command=self.toggle_contest_mode + ) + + Menu1.add_separator() + self.P.SHOW_CW = 'CW' in self.P.SHOW_MODES + self.show_cw = BooleanVar(value=self.P.SHOW_CW) + Menu1.add_checkbutton( + label="Show CW", + underline=0, + variable=self.show_cw, + command=self.toggle_cw + ) + + self.P.SHOW_RTTY = 'RTTY' in self.P.SHOW_MODES + self.show_rtty = BooleanVar(value=self.P.SHOW_RTTY) + Menu1.add_checkbutton( + label="Show RTTY", + underline=0, + variable=self.show_rtty, + command=self.toggle_rtty + ) + + self.P.SHOW_DIGI = 'DIGI' in self.P.SHOW_MODES + self.show_digi = BooleanVar(value=self.P.SHOW_DIGI) + Menu1.add_checkbutton( + label="Show DIGI", + underline=0, + variable=self.show_digi, + command=self.toggle_digi + ) + + self.P.SHOW_PHONE = 'PH' in self.P.SHOW_MODES + self.show_phone = BooleanVar(value=self.P.SHOW_PHONE) + Menu1.add_checkbutton( + label="Show PHONE", + underline=0, + variable=self.show_phone, + command=self.toggle_phone + ) + + Menu1.add_separator() + self.echo_raw_spots = BooleanVar(value=self.P.ECHO_ON) + Menu1.add_checkbutton( + label="Echo Raw Spots", + underline=0, + variable=self.echo_raw_spots, + command=self.toggle_echo + ) + + self.show_dupes = BooleanVar(value=self.P.SHOW_DUPES) + Menu1.add_checkbutton( + label="Show Dupes", + underline=0, + variable=self.show_dupes, + command=self.toggle_dupes + ) + + Menu1.add_separator() + self.show_need_year = BooleanVar(value=self.P.SHOW_NEED_YEAR) + Menu1.add_checkbutton( + label="Show This Year", + underline=0, + variable=self.show_need_year, + command=self.toggle_need_year + ) + + self.show_need_mode = BooleanVar(value=self.P.SHOW_NEED_MODE) + Menu1.add_checkbutton( + label="Show Mode Needs", + underline=0, + variable=self.show_need_mode, + command=self.toggle_need_mode + ) + + self.center_freq = BooleanVar(value=self.P.KEEP_FREQ_CENTERED) + Menu1.add_checkbutton( + label="Keep Freq Centered", + underline=0, + variable=self.center_freq, + command=self.toggle_keep_centered + ) + + self.small_font = BooleanVar(value=self.P.SMALL_FONT) + Menu1.add_checkbutton( + label="Small Font", + underline=0, + variable=self.small_font, + command=self.toggle_small_font + ) + + self.right_click_tunes_vfob = BooleanVar(value=self.P.RIGHT_CLICK_TUNES_VFOB) + Menu1.add_checkbutton( + label="Right Click Tunes VFO B", + underline=0, + variable=self.right_click_tunes_vfob, + command=self.toggle_right_click_tunes_vfob + ) + + """ + # Not quite done with this yet + self.ft4 = BooleanVar(value=self.P.FT4) + Menu1.add_checkbutton( + label="FT4", + underline=0, + variable=self.ft4, + command=self.toggle_ft4 + ) + """ + + Menu1.add_separator() + Menu1.add_command(label="Settings ...", command=self.Settings) + Menu1.add_separator() + Menu1.add_command(label="Show Log ...", command=self.ShowLog) + Menu1.add_separator() + Menu1.add_command(label="Exit", command=self.root.quit) + + menubar.menu = Menu1 + menubar["menu"]= menubar.menu + + + # Function to read various auiliary data files + def read_aux_data(self): + + P=self.P + + # Read challenge data + self.status_bar.setText('Reading DX Challenge data ...') + P.data = ChallengeData(P.CHALLENGE_FNAME) + + # Load data for highlighting CW ops members + if P.CWOPS: + self.status_bar.setText('Reading CWops data ...') + fname='~/Python/history/data/Shareable CWops data.xlsx' + HIST,fname2 = load_history(fname) + P.members=list( set( HIST.keys() ) ) + print('No. CW Ops Members:',len(P.members)) + #print(P.members) + + P.cwop_nums=set([]) + for m in P.members: + P.cwop_nums.add( int( HIST[m]['cwops'] ) ) + P.cwop_nums = list( P.cwop_nums ) + #print(P.cwop_nums) + #sys.exit(0) + + # Read list of friends + self.status_bar.setText('Reading misc data ...') + self.friends = [] + lines = read_text_file('Friends.txt', + KEEP_BLANKS=False,UPPER=True) + for line in lines: + c=line.split(',')[0] + if c[0]!='#': + self.friends.append(c) + print('FRIENDS=',self.friends) + #sys.exit(0) + + # Read lists of most wanted + self.most_wanted = read_text_file('Most_Wanted.txt', + KEEP_BLANKS=False,UPPER=True) + print('MOST WANTED=',self.most_wanted) + + # Read lists of common errors + corrections = read_text_file('Corrections.txt', + KEEP_BLANKS=False,UPPER=True) + print('Corrections=',corrections) + self.corrections={} + for x in corrections: + print(x) + y=x.split(' ') + self.corrections[y[0]] = y[1] + print('Corrections=',self.corrections) + + ######################################################################################### + + # Function to read spots from the telnet connection + def digest_spot(self,line): + + lb=self.lb + VERBOSITY = self.P.DEBUG + + # Check for logged contact + if "=7 and dx_call[-3:] in ['CWT','SST','MST']: + dx_call = dx_call[:-3] + obj.dx_call = dx_call + + # Reject FT8/4 spots if we're in a contest + keep=True + m = self.mode.get() + if self.P.CONTEST_MODE: + if m=='CW' and obj.mode in ['FT4','FT8','DIGITAL']: + keep=False + + # Reject calls that really aren't calls + b = self.band.get() + if keep: + if not dx_call or len(dx_call)<=2 or not obj.dx_station: + keep=False + elif not obj.dx_station.country and not obj.dx_station.call_suffix: + keep=False + + # Filter out NCDXF beacons + elif 'NCDXF' in line or 'BEACON' in line or '/B' in dx_call: + if VERBOSITY>=1: + print('Ignoring BEACON:',line.strip()) + keep=False + + if False: + print('DIGEST SPOT:',line.strip()) + print('keep=',keep,'\tb=',b) + + if keep: + if dx_call==self.P.MY_CALL or (self.P.ECHO_ON and False): + print('keep:',line.strip()) + + # Highlighting in WSJT-X window + if self.P.CLUSTER=='WSJT': + for qso in self.qsos: + if self.P.CW_SS: + # Can only work each station once regardless of band in this contest + match = dx_call==qso['call'] + else: + match = (dx_call==qso['call']) and (b==qso['band']) + if match: + break + else: + # Set background according to SNR to call attention to stronger sigs + fg=1 # 1=Red + try: + snr=int(obj.snr) + if snr>=0: + bg=2 # 13=Light magenta, 2=Light Green + elif snr>=-15: + bg=10 # 18=Light purple, 10=light Green + else: + bg=0 + except: + bg=0 + self.P.ClusterFeed.tn.highlight_spot(dx_call,fg,bg) + #print('DIGEST SPOT: call=',obj.dx_call,'\tsnr=',obj.snr, + #'\tfg/bg=',fg,bg,'\t',obj.snr.isnumeric(),int(obj.snr),len(obj.snr)) + + # Pull out info from the spot + freq=float( obj.frequency ) + mode=obj.mode + band=obj.band + self.nspots+=1 + print('DIGEST SPOT: call=',obj.dx_call,'\tfreq=',freq,'\tmode=',mode, + '\tband=',band,'\tnspots=',self.nspots) + + dxcc=obj.dx_station.country + if dxcc==None and False: + print('\nDXCC=NONE!!!!') + pprint(vars(obj.dx_station)) + sys.exit(0) + now = datetime.utcnow().replace(tzinfo=UTC) + year=now.year + obj.needed = self.P.data.needed_challenge(dxcc,str(band)+'M',0) + obj.need_this_year = self.P.data.needed_challenge(dxcc,year,0) and self.P.SHOW_NEED_YEAR + + # Reconcile mode + if mode in ['CW']: + mode2='CW' + elif mode in ['SSB','LSB','USB','FM','PH']: + mode2='Phone' + elif mode in ['DIGITAL','FT8','FT4','JT65','PSK']: + mode2='Data' + else: + mode2='Unknown' + obj.need_mode = self.P.data.needed_challenge(dxcc,mode2,0) and self.P.SHOW_NEED_MODE + + # Determine color for this spot + match = self.B4(obj,str(band)+'m') + c,c2,age=self.spot_color(match,obj) + obj.color=c + + # Check if this call is already there + # Need some error trapping here bx we seem to get confused sometimes + try: + b = self.band.get() + except: + b = '' + + try: + # Indices of all matches + idx1 = [i for i,x in enumerate(self.SpotList) + if x.dx_call==dx_call and x.band==band and x.mode==mode] + #if x.dx_call==dx_call and x.band==band] + except: + idx1 = [] + + if len(idx1)>0: + + # Call already in list - Update spot info + #if VERBOSITY>=2: + print("DIGEST SPOT: Dupe call =",dx_call,'\tfreq=',freq, + '\tmode=',mode,'\tband=',band,'\tidx1=',idx1) + for i in idx1: + if VERBOSITY>=2: + print('\tA i=',i,self.SpotList[i].dx_call, + '\ttime=',self.SpotList[i].time,obj.time, + '\tfreq=',self.SpotList[i].frequency,obj.frequency) + self.SpotList[i].time=obj.time + self.SpotList[i].frequency=obj.frequency + self.SpotList[i].snr=obj.snr + self.SpotList[i].color=obj.color + if self.P.CLUSTER=='WSJT': + self.SpotList[i].df=obj.df + if VERBOSITY>=2: + print('\tB i=',i,self.SpotList[i].dx_call, + '\ttime=',self.SpotList[i].time,obj.time, + '\tfreq=',self.SpotList[i].frequency,obj.frequency) + + # Update list box entry - In progress + idx2 = [i for i,x in enumerate(self.current) if x.dx_call == dx_call and x.band==b] + if len(idx2)>0: + bgc = self.lb.itemcget(idx2[0], 'background') + #print '&&&&&&&&&&&&&&&&&&&&&& Modifying ',idx2[0],dx_call,bgc + #print lb.get(idx2[0]) + lb.delete(idx2[0]) + if self.P.CLUSTER=='WSJT': + df = obj.df + try: + df=int(df) + #print('Insert3') + lb.insert(idx2[0], "%4d %-10.10s %+6.6s %-17.17s %+4.4s" % \ + (df,dx_call,mode,cleanup(dxcc),obj.snr)) + + i=idx[0] + self.current[i].time=obj.time + self.current[i].frequency=obj.frequency + self.current[i].snr=obj.snr + self.current[i].df=obj.df + self.current[i].color=obj.color + except: + error_trap('DIGEST SPOT: ?????') + else: + #print('Insert4') + lb.insert(idx2[0], "%-6.1f %-10.19s %+6.6s %-15.16s %+4.4s" % \ + (freq,dx_call,mode,cleanup(dxcc),obj.snr)) + #lb.itemconfigure(idx2[0], background=bgc) + lb.itemconfigure(idx2[0], background=obj.color) + #self.scrolling('DIGEST SPOT C') + + else: + + # New call - maintain a list of all spots sorted by freq + print("DIGEST SPOT: New call =",dx_call,'\tfreq=',freq, + '\tmode=',mode,'\tband=',band) + self.SpotList.append( obj ) + # self.SpotList.sort(key=lambda x: x.frequency, reverse=False) + + # Show only those spots on the list that are from the desired band + try: + BAND = int( self.band.get().replace('m','') ) + except: + error_trap('DIGEST SPOT: ?????') + print('band=',self.band) + return + + now = datetime.utcnow().replace(tzinfo=UTC) + if band==BAND: + + # Cull out U.S. stations, except SESs (Useful for chasing DX) + dxcc = obj.dx_station.country + if self.P.DX_ONLY and dxcc=='United States' and len(obj.dx_call)>3: + return True + + # Cull out stations not in North America (useful for NAQP for example) + cont = obj.dx_station.continent + #print('cont=',cont) + if self.P.NA_ONLY and cont!='NA': + return True + + # Cull out stations non-cwops or cwops we've worked this year - useful for ACA + status=self.cwops_worked_status(obj.dx_call) + if self.P.NEW_CWOPS_ONLY and status!=1: + return True + + # Cull out modes we are not interested in + xm = obj.mode + if xm in ['FT8','FT4','DIGITAL','JT65']: + xm='DIGI' + elif xm in ['SSB','LSB','USB','FM']: + xm='PH' + if xm not in self.P.SHOW_MODES: + #print('DIGEST SPOT: Culling',xm,'spot - ', self.P.SHOW_MODES) + return True + + # Cull dupes + if not self.P.SHOW_DUPES: + if obj.color=='red': + return True + + # Find insertion point - This might be where the sorting problem is - if two stations have same freq? + #self.current.append( obj ) + #self.current.sort(key=lambda x: x.frequency, reverse=False) + idx2 = [i for i,x in enumerate(self.current) if x.frequency > freq] + if len(idx2)==0: + idx2=[len(self.current)]; + if False: + print('INSERT: len(current)=',len(self.current)) + print('freq=',freq,dx_call) + print('idx2=',idx2) + for cc in self.current: + print(cc.dx_call,cc.frequency) + self.current.insert(idx2[0], obj ) + + if self.P.CLUSTER=='WSJT': + df = int( obj.df ) + lb.insert(idx2[0], "%4d %-10.10s %+6.6s %-17.17s %+4.4s" % \ + (df,dx_call,mode,cleanup(dxcc),obj.snr)) + else: + lb.insert(idx2[0], "%-6.1f %-10.10s %+6.6s %-15.15s %+4.4s" % \ + (freq,dx_call,mode,cleanup(dxcc),obj.snr)) + + # Change background colors on each list entry + try: + # This triggered an error sometime + lb.itemconfigure(idx2[0], background=obj.color) + #self.scrolling('DIGEST SPOT D') + except: + error_trap('DIGET SPOT: Error in configuring item bg color ????') + print('idx=',idx) + print('OBJ:') + pprint(vars(obj)) + + # Check if we need to cull old spots + self.LBsanity() + dt = (datetime.now() - self.last_check).total_seconds()/60 # In minutes + # print "dt=",dt + if dt>1: + self.cull_old_spots() + + if VERBOSITY>=1: + print('DIGEST SPOT: nspots=',self.nspots,len(self.SpotList),len(self.current)) + return True + + ######################################################################################### + + # Debug routine for scrolling issues + def scrolling(self,txt,verbosity=0): + #print('SCROLLING:',txt,verbosity) + + sb=self.scrollbar.get() + sz=self.lb.size() + yview=self.lb.yview() + y=yview[0] + + idx=int( y*sz +0.5 ) + val=self.lb.get(min(max(idx,0),sz-1)) + if verbosity>0: + print('SCROLLING:',txt+': sz=',sz,'\tyview=',yview, + '\n\ty=',y,'\tidx=',idx,'\tval=',val) + + return y + + + # Function to cull aged spots + def cull_old_spots(self): + #logging.info("Calling Get_Freq ...") + now = datetime.utcnow().replace(tzinfo=UTC) + if self.sock: + frq = self.sock.get_freq(VFO=self.VFO) + else: + frq=0 + #print('SpotList=',self.SpotList) + #print("CULL OLD SPOTS - Rig freq=",frq,'\tnspots=',self.nspots,len(self.SpotList),len(self.current), + # '\nmax age=',self.P.MAX_AGE,'\tnow=',now) + print("CULL OLD SPOTS - Rig freq=",frq, + '\tnspots=',self.nspots, + '\tlen SpotList=',len(self.SpotList), + '\tlen Current=',len(self.current), + '\n\tmax age=',self.P.MAX_AGE, + '\tnow=',now) + + self.scrolling('CULL OLD SPOTS A') + + NewList=[]; + BAND = int( self.band.get().replace('m','') ) + for x in self.SpotList: + try: + age = (now - x.time).total_seconds()/60 # In minutes + except: + error_trap('CULL_OLD_SPOTS: ????') + age=0 + print('x=',x) + #pprint(vars(x)) + print('now=',now) + #print('x.time=',x.time) + continue + + # print x.time,now,age + if age1000: + # Compress text + msg22 = zlib.compress(msg2.encode()) + + # Check size of text b4 and after compression + if True: + a_size=sys.getsizeof(msg2) + print('msg2=',msg2,'\nSize of original msg',a_size) + a2_size=sys.getsizeof(msg22) + print("Size of compressed msg:",a2_size) + + # Decompressing text + #a3=zlib.decompress(msg22) + + #Check size of text after decompression + #a3_size=sys.getsizeof(a3) + #print("Size of decompressed text",a3_size,'\na3=',a3) + #print("\nDifference of size= ", a_size-a2_size) + + print('BM UDP SPOTLIST QUERY: Sending compressed message ...') + if sock: + sock.send(msg22) + else: + P.udp_server.Broadcast(msg22) + + else: + + print('BM UDP SPOTLIST QUERY: Sending message ...') + if sock: + sock.send(msg2.encode()) + else: + P.udp_server.Broadcast(msg2) + + print('BM UDP SPOTLIST QUERY: Done.') + diff --git a/work/cluster_feed.py b/work/cluster_feed.py new file mode 100755 index 0000000..d81006d --- /dev/null +++ b/work/cluster_feed.py @@ -0,0 +1,333 @@ +######################################################################################### +# +# cluster_feed.py - Rev. 2.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Routines to grab spots from the dx cluster. +# +############################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +######################################################################################### + +import sys +import re +import time +import pytz +from datetime import datetime +from dx.spot_processing import Spot +from pprint import pprint +from fileio import parse_adif +import logging +from pywsjtx.simple_server import SimpleServer +from utilities import freq2band, error_trap +from dx.cluster_connections import * +import threading +import queue + +######################################################################################### + +UTC = pytz.utc +OLD_WAY=True + +######################################################################################### + +# Setup basic logging +logging.basicConfig( + format="%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s", + level=logging.INFO) + +# Function to fudge dxcc for display +def cleanup(dxcc): + try: + dxcc2=dxcc.replace('Republic of ','') + except: + dxcc2=dxcc + return dxcc2 + +# The GUI +class ClusterFeed: + def __init__(self,P,msec): + + # Init + print('ClusterFeed Init ...') + self.P = P + self.nerrors=0 + self.last_error='' + + # Open spot server + self.open_spot_server() + + # Open a file to save all of the spots + if P.SAVE_SPOTS: + self.fp = open("all_spots.dat","w") + else: + self.fp=-1 + + # Create a buffer to communicate spots to gui thread + P.q = queue.Queue(maxsize=0) + + # Kick off cluster spot monitor + dt=.001*msec + self.Timer = threading.Timer(dt, self.Monitor) + self.Timer.daemon=True # This prevents timer thread from blocking shutdown + self.Timer.start() + + + # Function to open spot server + def open_spot_server(self): + + print('\nOpening Spot Server ...') + P=self.P + + # Open telnet connection to spot server + print('SERVER=',P.SERVER,'\tMY_CALL=',P.MY_CALL) + #sys,exit(0) + if P.SERVER=='NONE': # or (P.SERVER!="WSJT" and not P.INTERNET): + + # No cluster node + self.tn = None + + elif P.SERVER=='ANY': + + # Go down list of known nodes until we find one we can connect to + KEYS=list(P.NODES.keys()) + print('NODES=',P.NODES) + print('KEYS=',KEYS) + + self.tn=None + inode=0 + while not self.tn and inode=2: + print('Line:',line) + else: + return 0 + + if line=='': + #print('CLUSTER FEED: Time out ',self.P.TIME_OUT) + return 0 + elif not "\n" in line: + # Dont let timeout happen before we get entire line + #print 'CLUSTER FEED: Partial line read' + try: + line2 = self.tn.read_until(b"\n",timeout=10).decode("utf-8") + line = line+line2 + except: + error_trap('CLUSTER_FEED: TIME_OUT2 or other issue ???') + print('line =',line,type(line)) + #print('line2 =',line2,type(line2)) + return 0 + + if len(line)>5: + if self.P.ECHO_ON or VERBOSITY>=1: + #print('>>> Cluster Feed:',line.rstrip()) + print('==> ',line.rstrip()) + if self.P.SAVE_SPOTS: + fp.write(line.rstrip()+'\n') + fp.flush() + + # Some clusters ask additional questions + if line.find("Is this correct?")>=0: + self.tn.write(b"Y\n") # send "Y" + return 0 + + # Process the spot + if len(line)>0: + #self.P.bm_gui.scrolling('DIGEST SPOT A') + #self.P.bm_gui.digest_spot(line) + #self.P.bm_gui.scrolling('DIGEST SPOT B') + self.P.q.put(line) + return 1 + + + # Callback to reset telnet connection + def Reset(self): + print("\n------------- Reset -------------",self.P.CLUSTER,'\n') + self.P.bm_gui.status_bar.setText("RESET - "+self.P.CLUSTER) + self.P.bm_gui.Clear_Spot_List() + """ + if self.P.BM_UDP_CLIENT and self.P.bm_udp_client and False: + self.P.bm_udp_client.StartServer() + if self.P.BM_UDP_CLIENT and self.P.bm_udp_server and False: + self.P.bm_udp_server.StartServer() + """ + if self.tn: + self.tn.close() + time.sleep(.1) + + try: + self.tn = connection(self.P.TEST_MODE,self.P.CLUSTER, \ + self.P.MY_CALL,self.P.WSJT_FNAME) + print("--- Reset --- Connected to",self.P.CLUSTER) + OK=self.test_telnet_connection() + except: + error_trap('GUI->RESET: Problem connecting to node'+self.P.CLUSTER) + OK=False + + if not OK: + print('--- Reset --- Now what Sherlock?!') + self.P.bm_gui.status_bar.setText('Lost telnet connection?!') + diff --git a/work/get_node_list.py b/work/get_node_list.py new file mode 100644 index 0000000..01c2208 --- /dev/null +++ b/work/get_node_list.py @@ -0,0 +1,100 @@ +#! /usr/bin/python3 -u +################################################################################ +# +# get_node_list.py - Rev 1.0 +# Copyright (C) 2022 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Function to genearate a list of known cluster nodes +# +################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +################################################################################ + +import sys +from collections import OrderedDict +import xlrd +from unidecode import unidecode +from dx.spot_processing import Station +from pprint import pprint +from latlon2maiden import * +from numpy import isnan + +################################################################################ + +def get_node_list(P): + + # Read list of nodes + print('Reading List of Cluster Nodes - fname=',P.NODES_FNAME) + book = xlrd.open_workbook(P.NODES_FNAME,formatting_info=True) + sheet1 = book.sheet_by_name('DX Nodes') + print(sheet1.nrows,sheet1.ncols) + + nodes=OrderedDict() + ready=False + for i in range(1, sheet1.nrows): + val=unidecode( sheet1.cell(i,0).value ) + #print(i,row) + if 'K - United States' in val: + print(i,val,' - There it is!') + ready=True + continue + elif ready: + done = True + for j in range(1,sheet1.ncols): + val=unidecode( str(sheet1.cell(i,j).value) ) + #print(i,sheet1.cell(i,j)) + done = done and val=='' + if done: + print('Done.') + break + addr = unidecode( sheet1.cell(i,0).value ).split() + + loc = unidecode( sheet1.cell(i,1).value ).split('\n') + #print(addr,loc) + if len(loc)>1: + gridsq=loc[1] + else: + gridsq='' + + lat,lon=maidenhead2latlon(gridsq) + #print(gridsq,lat,lon) + if isnan(lat): + call = addr[0].split('-')[0] + station = Station(call) + gridsq=latlon2maidenhead(station.latitude,-station.longitude,6) + + dx=distance_maidenhead(P.SETTINGS['MY_GRID'],gridsq) + if isnan(dx): + print(dx) + print(call) + pprint(vars(station)) + print(gridsq) + sys.exit(0) + + #port = unidecode( sheet1.cell(i,2).value ) + sysop = unidecode( sheet1.cell(i,3).value ) + notes = unidecode( sheet1.cell(i,4).value ) + + nodes[ addr[0] ] = {'ipaddr' : addr[-1] , + 'location' : loc[0], + 'grid' : gridsq, + 'sysop' : sysop, + 'distance' : dx, + 'notes' : notes} + #print(addr[0],nodes[ addr[0] ]) + + # Sort by distance to me + nodes2=OrderedDict( sorted(nodes.items(), key= lambda x:x[1]['distance'])) + for key in nodes2.keys(): + print(key,nodes2[key]) + diff --git a/work/params.py b/work/params.py new file mode 100644 index 0000000..2549efa --- /dev/null +++ b/work/params.py @@ -0,0 +1,275 @@ +#! /usr/bin/python3 -u +################################################################################ +# +# Params.py - Rev 1.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Command line param parser for bandmap +# +################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +################################################################################ + +import sys +import os +import argparse +from collections import OrderedDict +from rig_io import CONNECTIONS,RIGS +from settings import * + +################################################################################ + +# Sometimes when these don't work, its bx the login handshaking needs some work +NODES=OrderedDict() +#NODES['PY3NZ'] = 'dxc.baependi.com.br:8000' # dxwatch.com - down? +#NODES['NK7Z'] = 'nk7z-cluster.ddns.net:7373' # Lots of spots! - down? +NODES['NC7J'] = 'dxc.nc7j.com:7373' # OK - AR cluster +NODES['W3LPL'] = 'w3lpl.net:7373' # Ok - lots of spots, no FT8 dxc.w3lpl.net + +#telnet telnet.reversebeacon.net 7000 +#telnet telnet.reversebeacon.net 7001 +NODES['RBN'] = 'telnet.reversebeacon.net:7000' # RBN - 7000 for CW & RTTY, 7001 for ft8 + +NODES['AE5E'] = 'dxspots.com' # +NODES['VE7CC'] = 'dxc.ve7cc.net' # +NODES['W9PA'] = 'dxc.w9pa.net:7373' # Ok - lots of spots, no FT8 dxc.w3lpl.net +NODES['WC2L'] = 'dxc.wc2l.com' # +NODES['K3LR'] = 'dx.k3lr.com' # +NODES['WS7I'] = 'ws7i.ewarg.org:7300' # OK - need to work on filtering - uses "non AR" cluster, can show FT8 + +NODES['W8AEF'] = 'paul.w8aef.com:7373' # AZ - no FT8 - can turn it on +NODES['N6WS'] = 'n6ws.no-ip.org:7300' # Ok +NODES['K1TTT'] = 'k1ttt.net:7373' # (Peru, MA); Skimmer capable +NODES['W6RFU'] = 'ucsbdx.ece.ucsb.edu:7300' # Ok - CQ Zones 1-5 spots only (i.e. US & Canada) +NODES['AE5E'] = 'dxspots.com' # Ok - not many spots +NODES['N4DEN'] = 'dxc.n4den.us:7373' # Ok +NODES['W6KK'] = 'w6kk.zapto.org:7300' # Ok - USA and VE spots only, not many spots +NODES['N7OD'] = 'n7od.pentux.net' # Ok +NODES['WC4J'] = 'dxc.wc4j.net' # Doesnt work +NODES['WA9PIE'] = 'dxc.wa9pie.net:8000' # HRD +NODES['K2LS'] = 'dxc.k2ls.com' # CQ Zones 1-8 spots only (i.e. NA) - not sure how to log in +NODES['W6CUA'] = 'w6cua.no-ip.org:7300' # Not sure how to log on? +NODES['K7EK'] = 'www.k7ek.net:9000' # Doesn't work? +NODES['K6EXO'] = 'k6exo.dyndns.org:7300' # Doesn't work? +NODES['N6WS'] = 'n6ws.no-ip.org:7300' # Not sure how to log on? +NODES['N7OD'] = 'n7od.pentux.net' # Not sure how to log on? +NODES['ANY'] = '' +NODES['NONE'] = '' + +################################################################################ + +# Structure to contain processing params +class PARAMS: + def __init__(self): + + # Process command line args + # Can add required=True to anything that is required + arg_proc = argparse.ArgumentParser() + arg_proc.add_argument('-contest', action='store_true',help='Conest Mode') + arg_proc.add_argument('-ss', action='store_true',help='ARRL Sweepstakes') + arg_proc.add_argument('-echo', action='store_true',help='Echo lines from server') + arg_proc.add_argument("-rig", help="Connection Type to Rig", + type=str,default=["NONE"],nargs='+', + choices=CONNECTIONS+['NONE']+RIGS) + arg_proc.add_argument("-port", help="TCPIP port", + type=int,default=0) + arg_proc.add_argument("-cluster", help="Server", + type=str,default="ANY", + choices=list(NODES.keys()) ) + arg_proc.add_argument("-wsjt", help="wsjt", nargs='*', + type=str,default=None) + arg_proc.add_argument("-log", help="Log file (keep track of dupes)", + type=str, + default=None) + #default=None,nargs='*') + #default="~/logs/[MYCALL].adif") + #default="") #,nargs='+') + arg_proc.add_argument('-dx_only', action='store_true', + help='Show only DX spots') + arg_proc.add_argument('-nodupes', action='store_true', + help='Dont show dupes') + arg_proc.add_argument("-modes", help="Show only these modes", + type=str,default='ANY',nargs='*') + arg_proc.add_argument('-na_only', action='store_true', + help='Show only spots from North America') + arg_proc.add_argument('-buttons', action='store_true', + help='Enable band buttons') + arg_proc.add_argument('-bm_udp', action='store_true', + help='Start UDP client') + arg_proc.add_argument('-save', action='store_true', + help='Save All Spots') + arg_proc.add_argument('-cwops', action='store_true', + help='Highlight CWops Members') + arg_proc.add_argument('-show_mode', action='store_true', + help='Show mode needs') + arg_proc.add_argument('-show_year', action='store_true', + help='Show dxcc needs for this year') + arg_proc.add_argument('-ft4', action='store_true', + help='Use FT4 freqs instead of FT8') + arg_proc.add_argument('-small', action='store_true', + help='Use small font') + arg_proc.add_argument('-center', action='store_true', + help='Keep list centered on rig freq') + arg_proc.add_argument("-vfo", help="VFO to follow", + type=str,default="A", + choices=['A','B'] ) + #arg_proc.add_argument('-noft8', action='store_true',help='Filter out FT8 spots') + arg_proc.add_argument('-bm_geo',type=str,default=None, + help='Geometry') + arg_proc.add_argument('-test', action='store_true',help='Test Mode') + arg_proc.add_argument("-hours", help="Max no. hours for a dupe", + type=float,default=2*24) + arg_proc.add_argument("-age", help="Max no. minutes to keep a spot around", + type=int,default=None) + arg_proc.add_argument('-desktop',type=int,default=None, + help='Desk Top Work Space No.') + arg_proc.add_argument("-debug", help="Debug Level", + type=int,default=0) + args = arg_proc.parse_args() + + self.CONNECTION = args.rig[0] + if len(args.rig)>=2: + self.RIG = args.rig[1] + else: + self.RIG = None + self.PORT = args.port + + self.MAX_HOURS_DUPE = args.hours + + self.CONTEST_MODE = args.contest + self.DESKTOP = args.desktop + self.SMALL_FONT = args.small or self.CONTEST_MODE + self.STAND_ALONE = True + + self.BM_GEO = args.bm_geo + self.TEST_MODE = args.test + self.CW_SS = args.ss + self.CWOPS = args.cwops + self.DX_ONLY = args.dx_only + self.NA_ONLY = args.na_only + self.NEW_CWOPS_ONLY = False + self.BM_UDP_CLIENT = args.bm_udp + self.SAVE_SPOTS = args.save + self.RIG_VFO = args.vfo + self.FT4 = args.ft4 + self.DEBUG = args.debug + self.SHOW_NEED_MODE = args.show_mode + self.SHOW_NEED_YEAR = args.show_year + self.SHOW_DUPES = not args.nodupes + + valid_modes=['CW','RTTY','DIGI','PH'] + if type(args.modes) is list: + self.SHOW_MODES = args.modes + elif args.modes=='ANY': + self.SHOW_MODES = valid_modes + else: + self.SHOW_MODES = [args.modes] + for m in self.SHOW_MODES: + if m not in valid_modes: + print('PARAMS ERROR - Unrecognized mode:',m,'\nValid modes are',valid_modes) + sys.exit(0) + + # See http://www.ng3k.com/misc/cluster.html for a list + self.SERVER=args.cluster.upper() + self.WSJT_FNAME=None + + self.WSJT_IP_ADDRESS = '127.0.0.1' + self.WSJT_PORT = 2237 + WSJT2=args.wsjt + if WSJT2!=None: + print("\nWSJT2=",WSJT2,len(WSJT2)) + self.WSJT_FNAME=os.path.expanduser("~/.local/share/WSJT-X") + self.WSJT_FNAME+=" - "+WSJT2[0] + self.WSJT_FNAME+="/ALL.TXT" + self.CLUSTER='WSJT' + self.SERVER='WSJT' + + if len(WSJT2)>=2: + self.WSJT_PORT = int(WSJT2[1]) + + print("WSJT_FNAME=", self.WSJT_FNAME) + print("WSJT_PORT =", self.WSJT_IP_ADDRESS,self.WSJT_PORT) + #sys.exit(0) + else: + self.CLUSTER=NODES[self.SERVER] + #print('CLUSTER=',CLUSTER) + + if args.log==None: + if args.wsjt==None: + #self.LOG_NAME = "~/logs/[MYCALL].adif" + self.LOG_NAME = "~/[OPERATOR]/[MYCALL].adif" + #self.LOG_NAME = "~/logs/[OPERATOR].adif" + else: + self.LOG_NAME = "~/.local/share/WSJT-X" + if WSJT2!=None: + self.LOG_NAME+=" - "+WSJT2[0] + self.LOG_NAME += "/wsjtx_log.adi" + else: + self.LOG_NAME = args.log + + if False: + #print(len(args.log)) + print(args.log) + print(WSJT2) + print(self.SERVER) + print(self.LOG_NAME) + sys,exit(0) + + self.ECHO_ON=args.echo + if args.age: + self.MAX_AGE=args.age + elif self.CLUSTER=='WSJT': + self.MAX_AGE=4 # Was 5 + else: + self.MAX_AGE=5 # Was 10 + + self.rootlogger = "dxcsucker" + self.TIME_OUT=.01 + + # Read config file + self.SETTINGS,self.RCFILE = read_settings('.keyerrc') + + self.MY_CALL = self.SETTINGS['MY_CALL'] + self.OPERATOR = self.SETTINGS['MY_OPERATOR'] + self.LOG_NAME = self.LOG_NAME.replace('[OPERATOR]',self.OPERATOR) + if self.OPERATOR!=self.MY_CALL: + self.LOG_NAME0 = os.path.expanduser( self.LOG_NAME.replace('[MYCALL]',self.OPERATOR ) ) + else: + self.LOG_NAME0 = None + MY_CALL2 = self.MY_CALL.replace('/','_') + self.LOG_NAME = os.path.expanduser( self.LOG_NAME.replace('[MYCALL]',MY_CALL2 ) ) + self.NODES = NODES + self.threads = [] + print('LOG_NAME=',self.LOG_NAME,'\tSTAND_ALONE=',self.STAND_ALONE) + + if self.SERVER=="WSJT" or args.buttons: + self.ALLOW_CHANGES=True + else: + self.ALLOW_CHANGES=False + + # The spreadsheets with the DXCC already worked data & node info + #MY_CALL3 = self.MY_CALL.split('/')[0] + MY_CALL3 = self.OPERATOR.split('/')[0] + self.DATA_DIR = os.path.expanduser('~/'+MY_CALL3+'/') + self.CHALLENGE_FNAME = self.DATA_DIR+'/states.xls' + if not os.path.isfile(self.CHALLENGE_FNAME): + self.CHALLENGE_FNAME = 'states.xls' + if not os.path.isfile(self.CHALLENGE_FNAME): + self.CHALLENGE_FNAME = None + + self.NODES_FNAME = self.DATA_DIR+'/states.xls' + if not os.path.isfile(self.NODES_FNAME): + self.NODES_FNAME = 'nodes.xls' + + self.KEEP_FREQ_CENTERED=args.center + self.RIGHT_CLICK_TUNES_VFOB = self.SERVER!="WSJT" diff --git a/work/playpen.py b/work/playpen.py new file mode 100755 index 0000000..e4e31f0 --- /dev/null +++ b/work/playpen.py @@ -0,0 +1,178 @@ +#!/usr/bin/python3 +############################################################################################ +# +# playpen.py - Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Work area to get various components up and running. +# +############################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +############################################################################################ + +import sys +from datetime import datetime, date, tzinfo +import pytz +from dx.cluster_connections import get_logger +from dx.spot_processing import Station, Spot, WWV, Comment, ChallengeData +from fileio import parse_adif +#from fileio import * +from pprint import pprint +from dx.cty import load_cty + +UTC = pytz.utc +LOG_NAME='~/.fldigi/logs/aa2il_2018.adif' + +print('HEY') + +if True: + + logger = get_logger("dxcsucker") + dx_station = Station("KU5B") + print(dx_station) + pprint(vars(dx_station)) + + dx_station = Station("KU5B/OT") + print(dx_station) + pprint(vars(dx_station)) + sys.exit(0) + + dx_station = Station("AD4EB") + print(dx_station) + pprint(vars(dx_station)) + + # This is valid + dx_station = Station("F/AD4EB") + print(dx_station) + pprint(vars(dx_station)) + + # This is not + dx_station = Station("AD4EB/F") + print(dx_station) + pprint(vars(dx_station)) + + # This works + dx_station = Station("VP5/AD4EB") + print(dx_station) + pprint(vars(dx_station)) + + # so does kthisworks + dx_station = Station("AD4EB/VP5") + print(dx_station) + pprint(vars(dx_station)) + + # Bogus State QP + dx_station = Station("AD4EB/FLOY") + print(dx_station) + pprint(vars(dx_station)) + sys.exit(0) + +if True: + from pyhamtools.locator import calculate_heading, calculate_heading_longpath + bearing = calculate_heading("JN48QM", "QF67bf") + print(bearing) + #74.3136 + bearing2 = calculate_heading_longpath("JN48QM", "QF67bf") + print(bearing2) + #254.3136 + sys.exit(0) + +if True: + + if False: + # This is very slow bx it downloads the database each time + # There appears to be a way to speed it up using REDIS but let's try something else + from pyhamtools import LookupLib, Callinfo + + print('Hey 1') + my_lookuplib = LookupLib(lookuptype="countryfile") + print('Hey 2') + cic = Callinfo(my_lookuplib) + print('Hey 3') + print((cic.get_all("DH1TW"))) + print('Hey 4') + sys.exit(0) + + if True: + + # This seems pretty fast + dxcc="6Y3T" + dx_station = Station(dxcc) + #print dx_station + pprint(vars(dx_station)) + print() + + data = ChallengeData('~/AA2IL/states.xls') + needed = data.needed_challenge(dx_station.country,'20M',0) + print(('20M needed=',needed)) + needed = data.needed_challenge(dx_station.country,'2018',0) + print(('2018 needed=',needed)) + + sys.exit(0) + + dx_station = Station("KG4WH") + print(dx_station) + pprint(vars(dx_station)) + + dx_station = Station("DH1TW") + print(dx_station) + pprint(vars(dx_station)) + + dx_station = Station("VA7IO") + print(dx_station) + pprint(vars(dx_station)) + + # This one is broke - should return Canada + dx_station = Station("CZ4A") + print(dx_station) + pprint(vars(dx_station)) + + sys.exit(0) + + if True: + print('Hey 1') + cty_dir = '~/Python/data/' + cty = load_cty(cty_dir+"cty.plist") #Load Country File + print('Hey 2') + + print(cty) + #prefix = obtain_prefix(call) + #print prefix + sys.exit(0) + + print('Reading log...') + qsos = parse_adif(LOG_NAME) + print(('# QSOs in log=',len(qsos),type(qsos))) + + #calls = [ x['call'] for x in qsos ] + #print calls + now = datetime.utcnow().replace(tzinfo=UTC) + print((now,now.replace(tzinfo=None))) + #now2 = datetime.strptime(now.strftime("%Y%m%d"), "%Y%m%d") + qsos2=[] + for qso in qsos: + date_off = datetime.strptime( qso["qso_date_off"]+" "+qso["time_off"] , "%Y%m%d %H%M%S") \ + .replace(tzinfo=UTC) + age = (now - date_off).total_seconds() # In seconds + + #age = (now - date_off).total_seconds() / 60. # In minutes + #print date_off + #print age + #print age / (24*60.) # In days + #sys.exit(0) + if age < 5*24*3600: + qsos2.append(qso) + + print(('# recent QSOs in log=',len(qsos2),type(qsos2))) + print('... Read log') + sys.exit(0) + diff --git a/work/requirements.txt b/work/requirements.txt new file mode 100644 index 0000000..b033ace --- /dev/null +++ b/work/requirements.txt @@ -0,0 +1,16 @@ +# pip3 install -r requirements.txt +# +# Also need the "libs" and "data" directories which are available in this +# repository. +# Set the PYTHONPATH environment variable to point to where "libs" is installed, +# e.g. for csh/tcsh: +# +# setenv PYTHONPATH $HOME/Python/libs + +pyserial +xlrd +unidecode +pyhamtools +numpy +pandas + diff --git a/work/spot_processing.log b/work/spot_processing.log new file mode 100644 index 0000000..2de312e --- /dev/null +++ b/work/spot_processing.log @@ -0,0 +1,446 @@ +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W3LPL3 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KE8RU1 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of TA6C10 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of K5SL9 could not be decoded +Busted Prefix: 'False' of JG1TSG7 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Homecall: 'False' of S/G could not be decoded +Busted Homecall: 'False' of 14 could not be decoded +Busted Homecall: 'False' of could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +Busted Homecall: 'False' of DROPING could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of QTH could not be decoded +Busted Homecall: 'False' of QTH could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +Busted Homecall: 'False' of USA could not be decoded +Busted Homecall: 'False' of USA could not be decoded +Busted Homecall: 'False' of USA could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of FWAS could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QRZCO could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QSY could not be decoded +Busted Homecall: 'False' of QSY could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' diff --git a/work/watchdog.py b/work/watchdog.py new file mode 100755 index 0000000..7632844 --- /dev/null +++ b/work/watchdog.py @@ -0,0 +1,78 @@ +#! /usr/bin/python3 -u +################################################################################ +# +# WatchDog.py - Rev 1.0 +# Copyright (C) 2024 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Watchdog timer for bandmap. +# +################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +################################################################################ + +import threading +from utilities import error_trap +import os +import psutil +import time + +################################################################################ + +VERBOSITY=0 + +################################################################################ + +class WatchDog: + def __init__(self,P,msec): + print('Watch Dog Starting ....') + + self.P = P + self.dt =.001*msec + P.SHUTDOWN = False + + # Kick off watchdog monito + P.Timer = threading.Timer(self.dt, self.Monitor) + P.Timer.daemon=True # This prevents timer thread from blocking shutdown + P.Timer.start() + + + def Monitor(self): + P=self.P + #print('Watch Dog ....') + + # Check if another thread shut down - this isn't complete yet + if P.SHUTDOWN: + if P.Timer: + print('WatchDog - Cancelling timer ...') + P.Timer.cancel() + P.WATCHDOG = False + P.Timer=None + print('WatchDog - Shut down.') + + # Monitor memory usage + if P.MEM: + P.MEM.take_snapshot() + + # Reset timer + if VERBOSITY>0: + print("WatchDog - Timer ...") + if not P.SHUTDOWN: # and not P.Stopper.isSet(): + P.Timer = threading.Timer(self.dt, self.Monitor) + P.Timer.setDaemon(True) # This prevents timer thread from blocking shutdown + P.Timer.start() + else: + P.Timer=None + print('... Watch Dog quit') + P.WATCHDOG = False + + diff --git a/work/windoz.bat b/work/windoz.bat new file mode 100644 index 0000000..f4c7bc7 --- /dev/null +++ b/work/windoz.bat @@ -0,0 +1,37 @@ +@echo off +echo %DATE% %TIME% +goto BUILD +echo. +echo Notes about how to run BANDMAP on Windoze 10 +echo. +echo Already should have almost everything we need installed already + pip install -r requirements.txt +echo. +echo Also need a temp directory: + md ..\tmp +echo. +echo Run the script under python: + bandmap.py +:BUILD +echo. +echo Compile - works on both windoz and linux: +echo This takes a long time ... +echo. + pyinstaller --onefile bandmap.py + copy ..\data\cty.plist dist + copy ..\data\nodes.plist dist + copy Release_Notes.txt dist +echo. +echo Run the compiled version: + dist\bandmap.exe +echo. +echo On Linux: +echo "cp ../data/cty.plist dist" +echo dist\bandmap.exe +echo. +echo Run Inno Setup Compiler and follow the prompts to create an installer. +echo This installer works on Windoz 10 and Bottles. +echo. +echo %DATE% %TIME% +echo. + diff --git a/work2/Corrections.txt b/work2/Corrections.txt new file mode 100755 index 0000000..039aed4 --- /dev/null +++ b/work2/Corrections.txt @@ -0,0 +1,7 @@ +AA2IR AA2IL +T2IL AA2IL +TA2IL AA2IL +TY4GS KY4GS +EW5LXS W5LXS +NS0RCWT NS0R +NS0RCWO NS0R diff --git a/work2/DIFF b/work2/DIFF new file mode 100755 index 0000000..ce976d9 --- /dev/null +++ b/work2/DIFF @@ -0,0 +1,62 @@ +#! /bin/csh -f +############################################################################# +# +# Script to compare working code version on RPi to configured version +# +############################################################################# +# +# Specify root where old version exists +#set ROOT="/media/${USER}/305f60b3-8413-4edb-afc1-4e4ce064aab3/home/${USER}" +#set ROOT="/media/${USER}/pi" +#set ROOT="/media/${USER}/aa2il" +set ROOT="/media/${USER}/marconi" +#set ROOT="/media/${USER}/hertz" +set ROOT="/media/${USER}/sproul" +#set ROOT="/media/${USER}/sproul-win" +#set ROOT="/media/${USER}/3D76-ECB1" +#set ROOT="/media/${USER}/acer" +#set ROOT="/media/${USER}/cartman" +if( !(-e $ROOT) )then + set ROOT="${ROOT}2" +endif + +# Add path down to old version +set N=`echo $HOME | wc -c` +echo N=$N +#set PTH=`pwd | cut -c ${N}-` +set PTH=`pwd | sed 's/\/home2//g' | cut -c ${N}-` +echo PTH=$PTH +set old=${ROOT}${PTH} + +# Override if needed +#set old='save34' +set old='work' +echo OLD=$old + +rm -f DIFFS +foreach i (*.py DIFF *.bat *.txt dist/*.iss) + echo $i + set n=`diff -w $old/$i $i | wc -l` + if( !( -e $old/$i ) )then + echo NO SUCH FILE $old/$i + cp $i $old/$i + else if( $n > 0 ) then + echo ---------------------------------- >> DIFFS + echo $i >> DIFFS + echo " " >> DIFFS + diff -w $old/$i $i >> DIFFS + echo " " >> DIFFS + + #kompare $old/$i $i + kompare $i $old/$i + endif +end + +chmod +x bandmap.py DIFF + +#cat DIFFS +set f=`basename $ROOT` +echo $f +if( $f == "acer" )then + cp $old/dist/*.exe $old/dist/Output/*.exe dist +endif diff --git a/work2/Friends.txt b/work2/Friends.txt new file mode 100755 index 0000000..8b2eb71 --- /dev/null +++ b/work2/Friends.txt @@ -0,0 +1,82 @@ +# CWA 0 +yl3jd,Hanz,Advisor +kb1fgc,Rich,Classmate +wz4m,Tommy,Classmate +k5vba,Stan,Classmate +k0pir,Rich,Classmate +k3es,Brian,Classmate +n0zt,Dan,Hanz Former Student + +# CWA 1 +n7kom,Former Student +nj7v,Charlie,Former Student +SV2HUD,Vas,Former Student +N7AUE,Jim,Muley +WB7UKC,Marty Mueller +KM6GOX,Derek,Former Student + +# CWops +k6rb,Rob,#3,Sponsored me +n3jt,Jim,#1,Sponsored me +wt9u,Jim,Sponsored me +kr2q,Doug,NJ +k3jt,Terry,WV +w5tm,Ed,OK +ky4gs,Amanda,SC +ko4vw,Steve,GA +w7zdx,Bog +w7brs,Jeff,OR +vk2/w7brs,Jeff,Lord Howe Island +NQ2W,Will,NY +K4PQC,PHIL,GA +k9uiy,Vic,IL +W5LXS,Roger,TX + +# CWA 2 +KE7MPO,Skip,WA,Former Student +W5CYN,Jim,,Former Student +N0RPM,Jason,Former Student +AG5ZN,Bill,Former Student +W0WL,Joe,Former Student + +# CWA 3 +AA7TO,Jr,,Former Student +KN6RDC,Christian,,Former Student +N3RTW,Sean,Former Student +N5GG,Colin,Former Student +N6GV,Gary,Former Student +WB0RLJ,Jim,Former Student + +# CWA 4 +AC7FX,John,Former Student +NN7O,Tom,Former Student +AE5JT,Jeff,Former Student +W0ABE,Justin,Former Student + +# CWA 5 +KC6EOA,Brad,Student +KC7TAK,Ryan,Student +WE7DW,Dave,Student +WB3ERS,Nat,Student +VA4ADM,Pavel,Student + +# Locals +k6pa,Troy, Bought Army Tower from him +n6utc,Efram,VHFer +n6mi,Scott,VHF guru +n6vi,Marty,VHF guru +wa7bnm,Bruce +n6ki,Dennis +N6GP,Tim,VHFer +w6sx,Hank + +# Clubs +n6ror,ROARS +W5LVC,Colin,Dallas Club +#K4HTA,Sean,VA Club + +# Other +N7AAE,Marty Mueller, Jim's brother +VE3INE,Mary,Prospective student + +# DX - should be in Most Wanted list, not here! diff --git a/work2/Most_Wanted.txt b/work2/Most_Wanted.txt new file mode 100755 index 0000000..3e993ce --- /dev/null +++ b/work2/Most_Wanted.txt @@ -0,0 +1,4 @@ +VP8G +S9Z + + diff --git a/work2/Release_Notes.txt b/work2/Release_Notes.txt new file mode 100644 index 0000000..b6cc7fe --- /dev/null +++ b/work2/Release_Notes.txt @@ -0,0 +1,35 @@ +Bandmap v1.0 - by AA2IL +----------------------- + +A simple gui written in Python to sort and display dx cluster spots. +It can also be used to display decoded "spots" from wsjt-x. +Indications as to the age of a spot and the "need" status of a spot's DXCC are also given. +The rig can be tuned to a spot by clicking on the spot. + +This app is written in python 3. The python script bandmap.py can be run under linux or windoz 10/11. You will also need the libraries in github.com/aa2il/libs and to installed the python modules listed in "requirements.txt". + +Stand-alone execuatables for linux and windoz 10/11 have been made using pyinstaller. Complete source code and build files are available at https://github.com/aa2il/band. + +Please email constructive comments/suggestions to aa2il AT arrl DOT net. + +Windows Installer: bandmap_setup.exe + +After installation, double click the desktop shortcut or open a command prompt (cmd.exe) and execute "C:\Program Files (x86)\AA2IL\bandmap.exe". + +Known issues: + +- Rig control is not yet available under windoz. (All capabilities are avaiable under linux.) + +------------------------------------------------------------------------------ + +Revision history: + +Next Release: + +- Assort bug fixes +- Added switch to retain only spots from North America +- Rig control now working for DIRECT FTdx3000 + +Version 1.0 - Jan. 2023 + +This is the first version-controlled release. diff --git a/work2/bandmap.py b/work2/bandmap.py new file mode 100755 index 0000000..3087177 --- /dev/null +++ b/work2/bandmap.py @@ -0,0 +1,153 @@ +#! /home/joea/miniconda3/envs/aa2il/bin/python -u +# +# NEW: /home/joea/miniconda3/envs/aa2il/bin/python -u +# OLD: /usr/bin/python3 -u +######################################################################################### +# +# bandmap.py - Rev. 1.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Simple gui to sort & display dx cluster spots. Indications as to the age of a spot and +# the "need" status of a spot's DXCC are also given. The rig can be tuned to a spot by +# clicking on it. +# +# This code needs some libs, e.g. pytz, that may not already be installed. +# Use the package manager to install pip and then from the command line type +# sudo pip install pytz (or pip3 for python3) +# +# The -u forces unubffered output on stdout making debug easier +# +# TO DO: +# - During big contests, it seems to take some time for the gui to react - matching is slow? +# - REALLY NEED TO CLEAN UP THIS RAT'S NEST!!!! +# +############################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +######################################################################################### + +from rig_io import open_rig_connection +from bm_gui import BandMapGUI +from settings import * +from params import * +from dx.cluster_connections import connection,get_logger +from cluster_feed import ClusterFeed +from dx.spot_processing import ChallengeData +from pprint import pprint +from get_node_list import * +from tcp_server import * +from bm_udp import * +from load_history import load_history +from utilities import get_Host_Name_IP,ping_test,Memory_Monitor +from watchdog import * + +######################################################################################### + +VERSION='1.0' + +######################################################################################### + +# Begin executable +if __name__ == "__main__": + + print("\n\n***********************************************************************************") + print("\nStarting Bandmap v'+VERSION+' ...") + print('\nUse -echo flag to echo lines from zerver') + + # Process command line params + P=PARAMS() + + # Memory monitor + if True: + if P.SERVER=="WSJT": + P.MEM = Memory_Monitor('/tmp/BANDMAP_MEMORY_WSJT.TXT') + else: + P.MEM = Memory_Monitor('/tmp/BANDMAP_MEMORY.TXT') + + # Create GUI + bm_gui = BandMapGUI(None,P) + P.bm_gui=bm_gui + + # Read list of nodes - work in progress + if False: + get_node_list(P) + sys.exit(0) + + # Open connection to rig + P.sock = open_rig_connection(P.CONNECTION,0,P.PORT,0,'BANDMAP',rig=P.RIG) + if not P.sock.active: + print('*** No connection to rig ***') + #sys,exit(0) + + # Test internet connection - to be continued ... + if P.SERVER!='NONE' and P.SERVER!="WSJT": + print('Checking internet connection ...') + P.host_name,P.host_ip=get_Host_Name_IP() + print("\nHostname : ", P.host_name) + print("IP : ", P.host_ip,'\n') + if P.host_ip=='127.0.0.1': + P.INTERNET=False + print('No internet connection :-(') + #sys.exit(0) + else: + print('Local Internet connection appears to be alive ...') + # Next try pinging something outside LAN + P.INTERNET=ping_test('8.8.8.8') + if P.INTERNET: + print('\n... Outside Internet Connection appears to be alive also.') + else: + print('\n... No internet connection :-(') + #sys.exit(0) + + # Read various auxilary data files + P.bm_gui.read_aux_data() + + # Start thread with UDP server + if P.BM_UDP_CLIENT: + P.bm_gui.status_bar.setText('Opening UDP client ...') + P.udp_server = TCP_Server(P,None,BANDMAP_UDP_PORT,Server=True, + Handler=bm_udp_msg_handler) + worker = Thread(target=P.udp_server.Listener, args=(), + name='Bandmap UDP Server' ) + worker.daemon=True + worker.start() + P.threads.append(worker) + + # Start thread to manage feed from dx cluster + P.bm_gui.status_bar.setText('Starting Cluster Feed Monitor ...') + P.ClusterFeed = ClusterFeed(P,200) + """ + worker = Thread(target=P.ClusterFeed.Monitor, args=(), + name='Cluster Feed Monitor' ) + worker.daemon=True + worker.start() + P.threads.append(worker) + """ + + # WatchDog - runs in its own thread + P.WATCHDOG = True + #P.WATCHDOG = False + if P.WATCHDOG: + P.bm_gui.status_bar.setText("Spawning Watchdog ...") + P.monitor = WatchDog(P,2000) + + # Let's go! + P.bm_gui.status_bar.setText('And away we go!') + P.bm_gui.run() + if False: + print("P=") + pprint(vars(P)) + print(' ') + P.bm_gui.root.mainloop() + + + diff --git a/work2/bm_gui.py b/work2/bm_gui.py new file mode 100755 index 0000000..56dc27d --- /dev/null +++ b/work2/bm_gui.py @@ -0,0 +1,1578 @@ +######################################################################################### +# +# gui.py - Rev. 2.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Gui for dx cluster bandmap. +# +######################################################################################### +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +######################################################################################### + +import sys +import os +import time +import socket +import json +import platform + +from datetime import datetime +from dx.spot_processing import ChallengeData,Station + +from dx.cluster_connections import * +from fileio import parse_adif, read_text_file +import webbrowser + +if sys.version_info[0]==3: + from tkinter import * + import tkinter.font +else: + from Tkinter import * + import tkFont + +from rig_io import bands +from rig_io.ft_tables import THIRTEEN_COLONIES +from cluster_feed import * +from settings import * +import logging +from utilities import freq2band, error_trap +from widgets_tk import StatusBar +from tcp_server import open_udp_client,KEYER_UDP_PORT +from bm_udp import * +from load_history import load_history + +######################################################################################### + +DEFAULT_BAND = '20m' +VERBOSITY=0 + +######################################################################################### + +# Setup basic logging +logging.basicConfig( + format="%(asctime)-15s [%(levelname)s] %(funcName)s:\t(message)s", + level=logging.INFO) + +######################################################################################### + +# The GUI +class BandMapGUI: + def __init__(self,root,P): + + # Init + self.P = P + P.nspots=0 + P.SpotList=[] + P.current=[] + P.friends=[] + P.most_wanted=[] + P.corrections=[] + P.members=[] + + self.last_check=datetime.now() + self.qsos=[] + self.VFO = P.RIG_VFO + if self.P.FT4: + self.FT_MODE='FT4' + else: + self.FT_MODE='FT8' + self.Ready=False + self.calls1 = [] + self.sock = None + self.old_mode = None + + # UDP stuff + P.bm_udp_client=None + P.bm_udp_ntries=0 + + # Read "regular" logbook - need to update this + # Might need to bring this out to bandmap.py + if self.P.CWOPS and False: + if True: + print('\nCWops members worked:\n',self.P.data.cwops_worked) + self.calls1 = [] + #sys.exit(0) + elif '_6' in self.P.LOG_NAME: + # For CQP + fname99=self.P.LOG_NAME.replace('_6','') + print('GUI: Reading regular log file',fname99) + logbook = parse_adif(fname99) + self.calls1 = [ qso['call'] for qso in logbook ] + self.calls1 =list( set( self.calls1) ) + elif True: + # After the CQP + fname99=self.P.LOG_NAME.replace('.','_6.') + print('GUI: Reading regular log file',fname99) + logbook = parse_adif(fname99) + self.calls1 = [ qso['call'] for qso in logbook ] + self.calls1 =list( set( self.calls1) ) + else: + self.calls1 = [] + print('GUI: CALLS1=',self.calls1,len(self.calls1)) + + # Create the GUI - need to be able to distinguish between multiple copies of bandmap + if root: + self.root=Toplevel(root) + #self.hide() + else: + self.root = Tk() + + if P.SERVER=="WSJT": + self.root.title("Band Map by AA2IL - " + P.SERVER) + else: + self.root.title("Band Map by AA2IL - Server " + P.SERVER) + + # Move to lower left corner of screen + if P.BM_GEO==None: + self.screen_width = self.root.winfo_screenwidth() + self.screen_height = self.root.winfo_screenheight() + print('Screen=',self.screen_width, self.screen_height) + w=400 + h=self.screen_height + sz=str(w)+'x'+str(h)+'+'+str(self.screen_width-400)+'+0' + else: + #bandmap.py -geo 400x790+1520+240 + sz=P.BM_GEO + self.root.geometry(sz) + + # Add menu bar + self.create_menu_bar() + + # Set band according to rig freq + self.band = StringVar(self.root) + self.ant = IntVar(self.root) + self.ant.set(-1) + self.mode = StringVar(self.root) + self.mode.set('') + self.mode2 = StringVar(self.root) + self.mode2.set(self.FT_MODE) + + # Buttons + BUTframe = Frame(self.root) + BUTframe.pack() + + # Buttons to select HF bands + self.Band_Buttons=[] + for bb in bands.keys(): + if bb=='2m': + break + b = int( bb.split("m")[0] ) + but=Radiobutton(BUTframe, + text=bb, + indicatoron = 0, + variable=self.band, + command=lambda: self.SelectBands(self.P.ALLOW_CHANGES), + value=bb) + self.Band_Buttons.append( but ) + + if not P.CONTEST_MODE or bands[bb]["CONTEST"]: + but.pack(side=LEFT,anchor=W) + + # Another row of buttons to select mode & antenna + #ModeFrame = Frame(self.root) + #ModeFrame.pack(side=TOP) + #subFrame1 = Frame(ModeFrame,relief=RIDGE,borderwidth=2) + subFrame1 = Frame(self.toolbar,relief=FLAT,borderwidth=2,bg='red') + subFrame1.pack(side=LEFT) + if P.SERVER=="WSJT": + for m in ['FT8','FT4','MSK144']: + Radiobutton(subFrame1, + text=m, + indicatoron = 0, + variable=self.mode2, + command=lambda: self.SelectMode2(), + value=m).pack(side=LEFT,anchor=W) + + else: + for m in ['CW','Data','SSB']: + Radiobutton(subFrame1, + text=m, + indicatoron = 0, + variable=self.mode, + command=lambda: self.SelectMode(), + value=m).pack(side=LEFT,anchor=W) + + #subFrame2 = Frame(ModeFrame) + subFrame2 = Frame(self.toolbar,relief=FLAT,borderwidth=2,bg='green') + subFrame2.pack(side=LEFT) + for a in [1,2,3]: + Radiobutton(subFrame2, + text='Ant'+str(a), + indicatoron = 0, + variable=self.ant, + command=lambda: self.SelectAnt(), + value=a).pack(side=LEFT,anchor=W) + + if False: + frm=ModeFrame + else: + frm=self.toolbar + #frm=Frame(self.toolbar,relief=RIDGE,borderwidth=1) + #frm.pack(side=LEFT) + Button(frm,text="-1", + command=lambda: self.FreqAdjust(-1) ).pack(side=LEFT,anchor=W) + Button(frm,text="+1", + command=lambda: self.FreqAdjust(+1) ).pack(side=LEFT,anchor=W) + + + if P.CONTEST_MODE: + Button(frm,text="<", + command=lambda: self.SetSubBand(1) ).pack(side=LEFT,anchor=W) + Button(frm,text=">", + command=lambda: self.SetSubBand(3) ).pack(side=LEFT,anchor=W) + + # List box with a scroll bar + self.LBframe = Frame(self.root) + #self.LBframe.pack(side=LEFT,fill=BOTH,expand=1) + self.LBframe.pack(fill=BOTH,expand=1) + self.scrollbar = Scrollbar(self.LBframe, orient=VERTICAL) + + # Select a fixed-space font + if platform.system()=='Linux': + FAMILY="monospace" + elif platform.system()=='Windows': + #FAMILY="fixed" # Doesn't come out fixed space?! + FAMILY="courier" + else: + print('GUI INIT: Unknown OS',platform.system()) + sys.exit(0) + if self.P.SMALL_FONT: + SIZE=8 + else: + SIZE=10 + if sys.version_info[0]==3: + self.lb_font = tkinter.font.Font(family=FAMILY,size=SIZE,weight="bold") + else: + self.lb_font = tkFont.Font(family=FAMILY,size=SIZE,weight="bold") + self.lb = Listbox(self.LBframe, yscrollcommand=self.scrollbar.set,font=self.lb_font) + self.scrollbar.config(command=self.lb.yview) + self.scrollbar.pack(side=RIGHT, fill=Y) + self.lb.pack(side=LEFT, fill=BOTH, expand=1) + self.lb.bind('<>', self.LBLeftClick) +# self.lb.bind('<2>' if aqua else '<3>', lambda e: context_menu(e, menu)) + self.lb.bind('',self.LBCenterClick) + self.lb.bind('',self.LBRightClick) + + # Trap the mouse wheel pseudo-events so we can handle them properly + self.lb.bind('',self.scroll_updown) + self.lb.bind('',self.scroll_updown) + self.scrollbar.bind('',self.scroll_updown) + self.scrollbar.bind('',self.scroll_updown) + + # Status bar along the bottom + self.status_bar = StatusBar(self.root) + self.status_bar.setText("Howdy Ho!") + self.status_bar.pack(fill=X,side=BOTTOM) + + # Make what we have so far visible + self.root.update_idletasks() + self.root.update() + + + # Function to actually get things going + def run(self): + + self.sock = self.P.sock + + # Put gui on proper desktop + if self.P.DESKTOP!=None: + cmd='wmctrl -r "'+self.root.title()+'" -t '+str(self.P.DESKTOP) + os.system(cmd) + + if self.sock and self.sock.active: + if VERBOSITY>0: + logging.info("Calling Get band ...") + f = 1e-6*self.sock.get_freq(VFO=self.VFO) # Query rig at startup + b = freq2band(f) + self.rig_freq = 1e-3*f + else: + f = 0 + b = DEFAULT_BAND # No conenction so just default + print('BM_GUI: BAND.SET band=',b,'\tf=',f) + self.band.set(b) + self.rig_band=b + print("Initial band=",b) + + if self.sock and self.sock.active: + self.SelectMode('') + self.SelectAnt(-1) + self.SelectBands(True) + + print('Initial server=',self.P.SERVER) + self.node.set(self.P.SERVER) + + self.WatchDog() + + + # Callback to handle mouse wheel scrolling since Tk doesn't seem to do a very good job of it + # The jumps in Tk are much to big and I can't figure out how to adjust so do this instead + def scroll_updown(self, event): + if event.num==4: + n=-1 # int(-1*(event.delta/120)) + else: + n=1 # int(-1*(event.delta/120)) + #print('MOUSE WHEEL ...........................................................................................', + # n,event.num,event.delta,'\n',event) + self.lb.yview_scroll(n, "units") + return "break" + + # Adjust rig freq + def FreqAdjust(self,df): + if VERBOSITY>0: + logging.info("Calling Get Freq ...") + self.rig_freq = self.sock.get_freq(VFO=self.VFO) / 1000. + if VERBOSITY>0: + logging.info("Calling Set Freq ...") + self.sock.set_freq(self.rig_freq+df,VFO=self.VFO) + + # Set rig freq to lo or hi end of mode subband + def SetSubBand(self,iopt): + if self.sock==None: + return + + b = self.band.get() + if VERBOSITY>0: + logging.info("Calling Get Mode ...") + m = self.sock.get_mode(VFO=self.VFO) + if m=='AM': + m='SSB' + if iopt==1: + print('m=',m) + frq = bands[b][m+'1'] * 1000 + elif iopt==2: + frq1 = bands[b][m+'1'] * 500 + frq2 = bands[b][m+'2'] * 500 + frq = frq1+frq2 + elif iopt==3: + frq = bands[b][m+'2'] * 1000 + print("\nSetSubBand:",iopt,b,m,frq) + if VERBOSITY>0: + logging.info("Calling Set Freq ...") + self.sock.set_freq(float(frq/1000.),VFO=self.VFO) + + # Callback to select antenna + def SelectAnt(self,a=None,b=None,VERBOSITY=0): + if self.sock==None: + print('SELECT ANT - No socket!') + return + + if not a: + a = self.ant.get() + if a==-1: + + if VERBOSITY>0: + logging.info("Calling Get Ant ...") + print("SELECT ANT: Calling Get Ant ...") + a = self.sock.get_ant() + self.ant.set(a) + if VERBOSITY>0: + print("SELECT ANT: Got Antenna =",a) + + elif a==-2: + if VERBOSITY>0: + logging.info("Checking Ant matches Band ...") + if self.P.sock.rig_type2=='FTdx3000': + if b in ['160m','80m']: + ant=3 + elif b in ['40m','20m','15m']: + ant=1 + elif b in ['30m','17m','12m','10m','6m']: + ant=2 + else: + ant=1 + self.P.sock.set_ant(ant,VFO=self.VFO) + + else: + print("\n%%%%%%%%%% Select Antenna: Setting Antenna =",a,"%%%%%%%%") + if VERBOSITY>0: + logging.info("Calling Set Ant ...") + self.sock.set_ant(a,VFO=self.VFO) + self.status_bar.setText("Selecting Antenna "+str(a)) + + # Callback to handle mode changes for WSJT-X + def SelectMode2(self,VERBOSITY=0): + if VERBOSITY>0: + print('\nSelectMode2: mode=',self.FT_MODE) + + if self.sock==None: + print('SELECT MODE2 - No socket!') + return + + try: + self.FT_MODE=self.mode2.get() + band = self.band.get() + frq = bands[band][self.FT_MODE] + 1 + except: + error_trap('GUI->SELECT MODE2: Problem setting new config') + return + + print('\n***************************************** Well well well ...',self.FT_MODE,band,frq) + self.P.ClusterFeed.tn.configure_wsjt(NewMode=self.FT_MODE) + time.sleep(.1) + self.sock.set_freq(frq,VFO=self.VFO) + + # Make sure monitor is turned on also + GAIN=25 + self.sock.set_monitor_gain(25) + + return + + # Callback to handle mode changes for rig + def SelectMode(self,m=None,VERBOSITY=0): + if VERBOSITY>0: + print('\nSelectMode: mode=',m) + + if self.sock==None: + print('SELECT MODE - No socket!') + return + + if m==None: + m = self.mode.get() + print('SelectMode-a: mode2=',m) + + if m=='': + if VERBOSITY>0: + logging.info("Calling Get Mode ...") + m = self.sock.get_mode(VFO=self.VFO) + #print('SelectMode:',m) + if m==None: + return + if m=='RTTY' or m=='FT8' or m=='FT4' or m[0:3]=='PKT' or m=='DIGITIAL': + m='Data' + self.mode.set(m) + if m!=self.old_mode: + self.status_bar.setText("Mode Select: "+str(m)) + self.old_mode=m + return + + # Translate mode request into something that FLDIGI understands + #print('SelectMode-c:',m) + if m in ['SSB','LSB','USB']: + # buf=get_response(s,'w BY;EX1030\n'); # Audio from MIC (front) + if VERBOSITY>0: + logging.info("Calling Get Freq ...") + self.rig_freq = self.sock.get_freq(VFO=self.VFO) / 1000. + if self.rig_freq<10000: + m='LSB' + else: + m='USB' + elif m=='Data' or m=='DIGITAL': + m='RTTY' + #print("SelecteMode-d:",m) + if VERBOSITY>0: + logging.info("Calling Set Mode ...") + if not self.P.CONTEST_MODE: + self.sock.set_mode(m,VFO=self.VFO,Filter='Auto') + if m=='CW': + self.sock.set_if_shift(0) + + # Function to collect spots for a particular band + def collect_spots(self,band,REVERSE=False,OVERRIDE=False): + + P=self.P + + print('COLLECT_SPOTS: nspots=',len(P.SpotList),'\tband=',band, + '\nReverse=',REVERSE,'\tOVERRIDE=',OVERRIDE,'\tCONTEST_MODE=', self.P.CONTEST_MODE) + + if 'cm' in band: + iband=int( band.replace('cm','') ) + else: + iband=int( band.replace('m','') ) + + spots=[] + for x in P.SpotList: + keep= x and x.band == iband + if self.P.DX_ONLY: + # Retain only stations outside US or SESs + keep = keep and (x.dx_station.country!='United States' or len(x.dx_call)==3 or \ + x.dx_call=='WM3PEN') + if self.P.NA_ONLY: + # Retain only stations in North America + keep = keep and x.dx_station.continent=='NA' + + if self.P.NEW_CWOPS_ONLY: + # Retain only cwops stations not worked yet this year + keep = keep and self.cwops_worked_status(x.dx_call)==1 + + # Retain only modes we are interested in + xm = x.mode + if xm in ['FT8','FT4','DIGITAL','JT65']: + xm='DIGI' + elif xm in ['SSB','LSB','USB','FM']: + xm='PH' + #if keep and (xm not in self.P.SHOW_MODES): + # print('COLLECT_SPOTS: Culling',xm,'spot - ', self.P.SHOW_MODES) + keep = keep and (xm in self.P.SHOW_MODES) + + # Check for dupes + if keep: + match = self.P.ClusterFeed.B4(x,band) + c,c2,age=self.spot_color(match,x) + x.color=c + if not (self.P.SHOW_DUPES or OVERRIDE): + keep = keep and (c2!='r') + #print('COLLECT SPOTS:',x.dx_call,c,c2,keep,band,match) + #print('\tx.color=',x.color) + + # Keep spots that haven't been culled + if keep: + spots.append(x) + + spots.sort(key=lambda x: x.frequency, reverse=REVERSE) + + print('\tNo. Collect spots=',len(spots)) + return spots + + + + # Callback to handle band changes + def SelectBands(self,allow_change=False): + + P=self.P + VERBOSITY = self.P.DEBUG + #VERBOSITY = 1 + if VERBOSITY>0: + print('SELECT BANDS A: nspots=',P.nspots, + '\tlen SpotList=',len(P.SpotList), + '\tlen Current=',len(P.current)) + + self.scrolling('SELECT BANDS A') + + if not self.sock: + print('\nGUI->SELECT BANDS: Not sure why but no socket yet ????') + print('\tsock=',self.sock,'\n') + #return + + try: + band = self.band.get() + except: + error_trap('GUI->SELECT BANDS: ????') + print('\tband=',self.band) + return + + if VERBOSITY>0: + logging.info("Calling Get Band ...") + if self.sock: + frq2 = 1e-6*self.sock.get_freq(VFO=self.VFO) + else: + frq2=0 + band2 = freq2band(frq2) + self.status_bar.setText("Band Select: "+str(band)) + + print("\nYou've selected ",band,' - Current rig band=',band2,\ + ' - allow_change=',allow_change,' - mode=',self.FT_MODE, \ + flush=True) + + # Check for band change + if allow_change: + b=band + if self.P.CLUSTER=='WSJT': + print('BM_GUI - Config WSJT ...',b,self.FT_MODE) + self.P.ClusterFeed.tn.configure_wsjt(NewMode=self.FT_MODE) + time.sleep(.1) + try: + new_frq = bands[b][self.FT_MODE] + 1 + except: + error_trap('GUI->SELECT BANDS: Problem getting freq') + return + if VERBOSITY>0: + logging.info("Calling Set Freq and Mode ...") + print('SELECT BANDS: Setting freq=',new_frq,'and mode=',self.FT_MODE) + if self.sock: + self.sock.set_freq(new_frq,VFO=self.VFO) + self.sock.set_mode(self.FT_MODE,VFO=self.VFO) + else: + if band != band2 and self.sock: + if VERBOSITY>0: + logging.info("Calling Set Band ...") + self.sock.set_band(band,VFO=self.VFO) + + # Make sure antenna selection is correct also + self.SelectAnt(-2,band) + + # Extract a list of spots that are in the desired band + P.current = self.collect_spots(band) + y=self.scrolling('SELECT BANDS B') + + # Get latest logbook + now = datetime.utcnow().replace(tzinfo=UTC) + if self.P.STAND_ALONE or len(self.qsos)==0: + if self.P.LOG_NAME0: + # Log for operator if different from current callsign + # We won't keep reading this file so we set REVISIT=False + print('\nGUI: Reading log file',self.P.LOG_NAME0) + logbook = parse_adif(self.P.LOG_NAME0,REVISIT=False,verbosity=0) + self.qsos += logbook + print('QSOs in log=',len(logbook),len(self.qsos)) + + # Log for current callsign + # We will keep reading this file for new QSOs so we set REVISIT=True + print('\nGUI: Reading log file',self.P.LOG_NAME) + logbook = parse_adif(self.P.LOG_NAME,REVISIT=True,verbosity=0) + self.qsos += logbook + print('QSOs in log=',len(logbook),len(self.qsos)) + #sys.exit(0) + + if self.P.CWOPS: + self.calls = self.calls1 + [ qso['call'] for qso in self.qsos ] + self.calls=list( set( self.calls) ) + print('No. unique calls worked:',len(self.calls)) + #print(self.calls) + + # Re-populate list box with spots from this band + # This seems to be the slow part + #print 'Repopulate ...',len(P.current),len(self.qsos) + self.lb.delete(0, END) + n=0 + for x in P.current: + #pprint(vars(x)) + dxcc=x.dx_station.country + if self.P.CLUSTER=='WSJT': + #print('Insert1') + self.lb.insert(END, "%4d %-10.10s %+6.6s %-17.17s %+4.4s" % \ + (int(x.df),x.dx_call,x.mode,cleanup(dxcc),x.snr)) + else: + #print('Insert2') + if x.mode=='CW': + val=x.wpm + else: + #val=x.snr + val='' + self.lb.insert(END, "%-6.1f %-10.19s %+6.6s %-15.15s %+4.4s" % \ + (x.frequency,x.dx_call,x.mode,cleanup(dxcc),val)) + + # JBA - Change background colors on each list entry + self.lb.itemconfigure(END, background=P.current[n].color) + n+=1 + + # Reset lb view + self.LBsanity() + self.lb.yview_moveto(y) + self.scrolling('SELECT BANDS C') + if VERBOSITY>0: + print('SELECT BANDS B: nspots=',P.nspots, + '\tlen SpotList=',len(P.SpotList), + '\tlen Current=',len(P.current)) + + + def match_qsos(self,qso,x,b,now): + if self.P.CW_SS: + # Can only work each station once regardless of band in this contest + match = x.dx_call==qso['call'] + else: + try: + match = (x.dx_call==qso['call']) and (b==qso['band']) + except: + error_trap('GUI->MATCH QSOS: ?????') + match=False + print('dx_call=',x.dx_call) + print('qso=',qso) + + #print('\n------MATCH_QSOS: qso=',qso,x.dx_call,match) + if match: + t1 = datetime.strptime(now.strftime("%Y%m%d %H%M%S"), "%Y%m%d %H%M%S") + t2 = datetime.strptime( qso['qso_date_off']+" "+qso["time_off"] , "%Y%m%d %H%M%S") + delta=(t1-t2).total_seconds() / 3600 + match = delta< self.P.MAX_HOURS_DUPE + if VERBOSITY>=2: + print('--- MATCH_QSOS: Possible dupe for',x.dx_call,'\tt12',t1,t2,'\tdelta=',delta,match) + + return match + + # Function to return worked status of cwops stations + # 0 = call is not a cwops member + # 1 = call is a cwops member but hasn't been worked yet this year + # 2 = call is a cwops member and been worked yet this year + def cwops_worked_status(self,dx_call): + if '/' in dx_call: + dx_station = Station(dx_call) + home_call = dx_station.homecall + else: + home_call = dx_call + + if (dx_call in self.P.members) or (home_call in self.P.members): + if (dx_call in self.P.data.cwops_worked) or (home_call in self.P.data.cwops_worked): + status=2 + else: + status=1 + else: + status=0 + + #print('CWops WORKED STATUS: call=',dx_call,'\thome call=',home_call,'\tworked=',status) + return status + + # Function to determine spot color + def spot_color(self,match,x): + P=self.P + + now = datetime.utcnow().replace(tzinfo=UTC) + age = (now - x.time).total_seconds()/60 # In minutes + dx_call=x.dx_call.upper() + dx_station = Station(dx_call) + if dx_station.country=='United States' and len(dx_station.appendix)>=2: + dx_call=dx_station.homecall # Strip out bogus appendices from state QPs + cwops_status=self.cwops_worked_status(dx_call) + + # Set color depending criteria + # c2 is the abbreviated version used to shorten the inter-process messages + # These need to be matched in pySDR/gui.py + if match: + c="red" + c2='r' + elif x.needed: + c="magenta" + c2='m' + elif x.need_this_year: + c="violet" + c2='v' + elif x.need_mode: + c="pink" + c2='p' + elif dx_call in P.friends: + c="lightskyblue" + c2='lb' + elif dx_call in P.most_wanted: + c="turquoise" + c2='t' + elif dx_call==self.P.MY_CALL: + c="deepskyblue" + c2='b' + elif self.P.CWOPS and cwops_status>0: + if cwops_status==2: + c="gold" + c2='d' + else: + c='orange' + c2='o' + elif dx_call in THIRTEEN_COLONIES: + c="lightskyblue" + c2='lb' + else: + if age<2: + c="yellow" + c2='y' + else: + c="lightgreen" + c2='g' + + return c,c2,age + + + # Why is this still around? - see cluster_feed.py + def lb_update(self): + b = self.band.get() + print('LB_UPDATE: b=',b) + now = datetime.utcnow().replace(tzinfo=UTC) + idx=-1 + if len(P.current)==0: + print('LB_UPDATE - Nothing to do.',P.current) + return + for x in P.current: + idx+=1 + for qso in self.qsos: + match = self.match_qsos(qso,x,b,now) + call=qso['call'] + #print('LB_UPDATE:',call,x.dx_call,match) + #match |= call==self.P.MY_CALL + if match: + break + #else: + # print('LB_UPDATE - Nothing to do.',P.current) + # return + + if idx>=0: + c,c2,age=self.spot_color(match,x) + self.lb.itemconfigure(idx, background=c) + #print('LB_UPDATE:',dx_call,c) + + + + + # Function to set list box view + def set_lbview(self,frq,MIDDLE=False): + + dfbest=1e9 + ibest=-1 + idx=0 + + # Keep track of entry that is closest to current rig freq + for x in P.current: + df=abs( x.frequency-frq ) + # print idx,x.frequency,frq,df,ibest + if df-1: + + sb=self.scrollbar.get() + sz=self.lb.size() + yview=self.lb.yview() + """ + print("LBSANITY: Closest=",ibest, + '\tf=',P.current[ibest].frequency, + '\tsize=',sz, + '\tsb=',sb, + '\tyview',yview) + """ + #print('hght:',self.lb['height']) + + # Use to scrollbar to determine how many lines are visible + d = yview[1]-yview[0] # Fraction of list in view + n = d*sz # No. line in view + if MIDDLE: + y = max( ibest*d/n - d/2. , 0) # Top coord so view will be centered around ibest + else: + y = max( ibest*d/n , 0) # Top coord will be centered around ibest + self.lb.yview_moveto(y) + + self.lb.selection_clear(0,END) + if False: + # This was problematic + self.lb.selection_set(ibest) + + + # Make sure the entry closest to the rig freq is visible + def LBsanity(self): + VERBOSITY = self.P.DEBUG + #print('LBSANITY ...') + + # Dont bother if using as WSJT companion + #if not CONTEST_MODE or CLUSTER=='WSJT': + if self.P.CLUSTER=='WSJT': + print('LBSANITY - WS server - nothing to do') + return + + # Don't bother if not on same band as the rig + b1 = self.rig_band + b2 = self.band.get() + #print('LBSANITY: rig band=',b1,'\tband=',b2) + if b1!=b2: + if VERBOSITY>0: + print('LBSANITY - Rig on different band - nothing to do') + return + + # Don't bother if user doesn't want to keep rig freq centered + if not self.P.KEEP_FREQ_CENTERED: + #if VERBOSITY>0: + # print('LBSANITY - DONT KEEP CENTERED - nothing to do') + + y=self.scrolling('LBSANITY',verbosity=0) + self.lb.yview_moveto(y) + + return + + # Set lb view so its centered around the rig rig freq + frq = self.rig_freq + self.set_lbview(frq,True) + + # Callback to clear all spots + def Clear_Spot_List(self): + P=self.P + print("\n------------- Clear Spot List -------------",self.P.CLUSTER,'\n') + P.nspots=0 + P.SpotList=[]; + P.current=[] + self.lb.delete(0, END) + + ######################################################################################### + + # Watch Dog + def WatchDog(self): + #print('BM WATCH DOG ...') + + # Check if we have any new spots + nspots=self.P.q.qsize() + #print('BM WATCH DOG - There are',nspots,'new spots in the queue ...') + while nspots>0: + entry=self.P.q.get() + #print('\tentry=',entry,len(entry)) + if len(entry)==1: + self.lb.delete(entry[0]) + else: + self.lb.insert(entry[0], entry[1]) + try: + self.lb.itemconfigure(entry[0], background=entry[2]) + except: + error_trap('WATCH DOG: Error in configuring item bg color ????') + print('entry=',entry) + self.P.q.task_done() + nspots=self.P.q.qsize() + + # Check for antenna or mode or band changes + # Should combine these two + if VERBOSITY>0: + logging.info("Calling Get Band & Freq ...") + if self.P.SERVER=="WSJT": + tmp = self.P.ClusterFeed.tn.wsjt_status() + #print('WatchDog:',tmp) + if all(tmp): + if not self.Ready: + print('WatchDog - Ready to go ....') + self.P.ClusterFeed.tn.configure_wsjt(NewMode=self.FT_MODE) + self.Ready=True + + self.rig_freq = tmp[0] + self.rig_band = tmp[1] + self.FT_MODE = tmp[2] + + else: + try: + if self.sock: + self.rig_freq = 1e-3*self.sock.get_freq(VFO=self.VFO) + self.rig_band = freq2band(1e-3*self.rig_freq) + except: + error_trap('WATCHDOG: Problem reading rig freq/band',True) + + try: + if self.sock: + self.SelectAnt(-1,VERBOSITY=0) + self.SelectMode('',VERBOSITY=0) + except: + error_trap('WATCHDOG: Problem reading rig antenna/mode',True) + + # Try to connect to the keyer + if self.P.BM_UDP_CLIENT: + if not self.P.bm_udp_client: + self.P.bm_udp_ntries+=1 + if self.P.bm_udp_ntries<=100: + self.P.bm_udp_client=open_udp_client(self.P,KEYER_UDP_PORT, + bm_udp_msg_handler) + if self.P.bm_udp_client: + print('BM GUI->WatchDog: Opened connection to KEYER.') + self.P.bm_udp_ntries=0 + else: + print('WATCHDOG: Unable to open UDP client (keyer) - too many attempts',self.P.bm_udp_ntries) + + # Check if socket is dead + if self.sock and self.sock.ntimeouts>=10: + print('\tWATCHDOG: *** Too many socket timeouts - port is probably closed - giving up -> sys.exit ***\n') + sys.exit(0) + + # Re-schedule to do it all over again in 1-second + self.root.update_idletasks() + self.root.update() + self.root.after(1*1000, self.WatchDog) + + ######################################################################################### + + # Callback when an item in the listbox is selected + def LBSelect(self,value,vfo): + print('LBSelect: Tune rig to a spot - vfo=',vfo,value) + self.status_bar.setText("Spot Select "+value) + self.scrolling('LBSelect') + + # Examine item that was selected + b=value.strip().split() + if b[2]=='FT8' or b[2]=='FT4': + b[0] = float(b[0])+1 + + # If we're running WSJT, tune to a particular spot + if self.P.CLUSTER=='WSJT': + df = b[0] + dx_call = b[1] + #print('\n========================= LBSelect:',b,'\n') + self.P.ClusterFeed.tn.configure_wsjt(RxDF=df,DxCall=dx_call) + return + + # Note - need to set freq first so get on right band, then set the mode + # We do a second set freq since rig may offset by 700 Hz if we are in CW mode + # There must be a better way to do this but this is what we do for now + #print("LBSelect: Setting freq ",b[0]) + print("LBSelect: Setting freq=',b[0],'on VFO',vfo,'\tmode=',b[2].'\tcall ",b[1]) + if VERBOSITY>0: + logging.info("Calling Set Freq ...") + if self.sock: + self.sock.set_freq(float(b[0]),VFO=vfo) + if not self.P.CONTEST_MODE: + print("LBSelect: Setting mode ",b[2]) + self.SelectMode(b[2]) + self.sock.set_freq(float(b[0]),VFO=vfo) + self.sock.set_call(b[1]) + + # Make sure antenna selection is correct also + band=freq2band(0.001*float(b[0])) + self.SelectAnt(-2,band) + + # Send spot info to keyer + if self.P.BM_UDP_CLIENT and self.P.bm_udp_client: + self.P.bm_udp_client.Send('Call:'+b[1]+':'+vfo) + + + def LBLeftClick(self,event): + print('LBLeftClick ...') + w=event.widget + if len( w.curselection() ) > 0: + index = int(w.curselection()[0]) + value = w.get(index) + print('You selected item %d: "%s"' % (index, value)) + self.LBSelect(value,self.P.RIG_VFO) + + def LBRightClick(self,event): + print('LBRightClick ...') + index = event.widget.nearest(event.y) + value = event.widget.get(index) + print('You selected item %d: "%s"' % (index, value)) + self.status_bar.setText("Right Click "+value) + + #print(self.P.RIGHT_CLICK_TUNES_VFOB,self.P.SERVER) + + if not self.P.RIGHT_CLICK_TUNES_VFOB or self.P.SERVER=="WSJT": + + # This used to trigger a qrz call lookup + b=value.strip().split() + print("Looking up call: ",b[1]) + + link = 'https://www.qrz.com/db/' + b[1] + webbrowser.open_new_tab(link) + + else: + + # Tune VFO-B to spot freq + print("Tuning VFO B to ",value) + self.LBSelect(value,'B') + + + def LBCenterClick(self,event): + P=self.P + print('LBCenterClick: Delete an entry') + + index = event.widget.nearest(event.y) + value = event.widget.get(index) + b=value.strip().split() + call=b[1] + print('You selected item %d: %s - %s' % (index,value,call)) + self.status_bar.setText("Spot Delete "+value) + + del P.current[index] + self.lb.delete(index) + + #print('\nCENTER CLICK B4:',len(P.SpotList),P.SpotList) + idx=[] + i=0 + for i in range(len(P.SpotList)): + x=P.SpotList[i] + if hasattr(x, 'dx_call') and x.dx_call==call: + idx.append(i) + idx.reverse() + #print('idx=',idx) + for i in idx: + x=P.SpotList.pop(i) + #print('\nCENTER CLICK AFTER:',len(P.SpotList),P.SpotList) + + ######################################################################################### + + # For debug + def donothing(self): + win = Toplevel(self.root) + button = Button(win, text="Do nothing button") + button.pack() + + # Open dialog window for basic settings + def Settings(self): + self.SettingsWin = SETTINGS_GUI(self.root,self.P) + return + + # Print out log + def ShowLog(self): + print('\nLOG::::::::::',self.P.STAND_ALONE) + for qso in self.qsos: + print(qso) + print(' ') + return + + # Select a new cluster + def SelectNode(self): + SERVER = self.node.get() + print('SelectNode:',SERVER) + if SERVER != self.P.SERVER: + self.P.SERVER = SERVER + self.P.CLUSTER = self.P.NODES[SERVER] + self.root.title("Band Map by AA2IL - Server " + SERVER) + self.Reset() + self.node.set(self.P.SERVER) + + def Reset(self): + self.P.ClusterFeed.Reset() + + # Toggle DX ONLY mode + def toggle_dx_only(self): + self.P.DX_ONLY=self.dx_only.get() + self.SelectBands() + + # Toggle NA ONLY mode + def toggle_na_only(self): + self.P.NA_ONLY=self.na_only.get() + self.SelectBands() + + # Toggle NEW CWOPS ONLY mode + def toggle_new_cwops_only(self): + self.P.NEW_CWOPS_ONLY=self.new_cwops_only.get() + print('TOGGLE CWOPS: ',self.P.NEW_CWOPS_ONLY) + self.SelectBands() + + # Toggle showing CW spots + def toggle_cw(self): + self.P.SHOW_CW=self.show_cw.get() + print('TOGGLE CW: BEFORE show_cw=',self.P.SHOW_CW,'\t',self.P.SHOW_MODES) + if self.P.SHOW_CW: + self.P.SHOW_MODES.append('CW') + else: + self.P.SHOW_MODES.remove('CW') + print('TOGGLE CW: AFTER show_cw=',self.P.SHOW_CW,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing RTTY spots + def toggle_rtty(self): + self.P.SHOW_RTTY=self.show_rtty.get() + print('TOGGLE RTTY: BEFORE show_rtty=',self.P.SHOW_RTTY,'\t',self.P.SHOW_MODES) + if self.P.SHOW_RTTY: + self.P.SHOW_MODES.append('RTTY') + else: + self.P.SHOW_MODES.remove('RTTY') + print('TOGGLE RTTY: AFTER show_rtty=',self.P.SHOW_RTTY,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing DIGI spots + def toggle_digi(self): + self.P.SHOW_DIGI=self.show_digi.get() + print('TOGGLE DIGI: BEFORE show_digi=',self.P.SHOW_DIGI,'\t',self.P.SHOW_MODES) + if self.P.SHOW_DIGI: + self.P.SHOW_MODES.append('DIGI') + else: + self.P.SHOW_MODES.remove('DIGI') + print('TOGGLE DIGI: AFTER show_digi=',self.P.SHOW_DIGI,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing PHONE spots + def toggle_phone(self): + self.P.SHOW_PHONE=self.show_phone.get() + print('TOGGLE PHONE: BEFORE show_phone=',self.P.SHOW_PHONE,'\t',self.P.SHOW_MODES) + if self.P.SHOW_PHONE: + self.P.SHOW_MODES.append('PH') + else: + self.P.SHOW_MODES.remove('PH') + print('TOGGLE PHONE: AFTER show_phone=',self.P.SHOW_PHONE,'\t',self.P.SHOW_MODES) + self.SelectBands() + self.status_bar.setText("Showing modes "+' '.join(self.P.SHOW_MODES)) + + # Toggle showing of needs for mode + def toggle_need_mode(self): + self.P.SHOW_NEED_MODE=self.show_need_mode.get() + + # Toggle keep freq centered + def toggle_keep_centered(self): + self.P.KEEP_FREQ_CENTERED=self.center_freq.get() + + # Toggle right click tunes VFO B + def toggle_right_click_tunes_vfob(self): + self.P.RIGHT_CLICK_TUNES_VFOB=self.right_click_tunes_vfob.get() + + # Toggle font used in list box + def toggle_small_font(self): + self.P.SMALL_FONT=self.small_font.get() + if self.P.SMALL_FONT: + SIZE=8 + else: + SIZE=10 + self.lb_font.configure(size=SIZE) + self.lb.configure(font=self.lb_font) + + # Need to force a refresh to get the correct no. of rows in the list box + # I haven't found a simple way to do this so we slightly change the window size, + # refresh and change the size back + """ + # This method causes the window to move slightly - dont know why???!!! + #window.geometry("{}x{}+{}+{}".format(window_width, window_height, x-coord, y-coord)) + #root.geometry('%dx%d+%d+%d' % (w, h, x, y)) + + geom = self.root.geometry() + geom1 = geom.split('x') + geom2 = str( int(geom1[0])+1 ) +'x'+geom1[1] + self.root.geometry(geom2) + self.root.update() + self.root.geometry(geom) + self.root.update() + geom3 = self.root.geometry() + print('TOGGLE SMALL FONT: size=',SIZE,'\tgeom=',geom,geom2,geom3) + """ + # The window doesn't move with this method but there is a momentary flash - ugh! + #self.root.state('withdrawn') + self.root.attributes('-zoomed', True) + self.root.update() + self.root.attributes('-zoomed', False) + #self.root.state('normal') + self.root.update() + + # Toggle showing already worked stations + def toggle_dupes(self): + self.P.SHOW_DUPES=self.show_dupes.get() + self.SelectBands() + + # Toggle logging of raw spots + def toggle_echo(self): + self.P.ECHO_ON=self.echo_raw_spots.get() + + # Toggle showing of needs for this year + def toggle_need_year(self): + self.P.SHOW_NEED_YEAR=self.show_need_year.get() + + # Toggle contest mode + def toggle_contest_mode(self): + self.P.CONTEST_MODE=self.contest_mode.get() + if self.P.CONTEST_MODE: + self.status_bar.setText("Contest Mode ON") + else: + self.status_bar.setText("Contest Mode OFF") + + for but,bb in zip( self.Band_Buttons , bands.keys()): + #print('bb=',bb) + but.pack_forget() + if not self.P.CONTEST_MODE or bands[bb]["CONTEST"]: + but.pack(side=LEFT,anchor=W) + + + """ + # Not quite done with this yet + def toggle_ft4(self): + self.P.FT4=self.ft4.get() + if self.P.FT4: + self.FT_MODE='FT4' + else: + self.FT_MODE='FT8' + print('TOGGLE BOGGLE',self.P.FT4,self.FT_MODE) + """ + + ######################################################################################### + + # Function to create menu bar + def create_menu_bar(self): + print('Creating Menubar ...') + OLD_WAY=True + OLD_WAY=False + + self.toolbar = Frame(self.root, bd=1, relief=RAISED) + self.toolbar.pack(side=TOP, fill=X) + if OLD_WAY: + menubar = Menu(self.root) + menubar2 = menubar + else: + menubar = Menubutton(self.toolbar,text='Options',relief='flat') + menubar.pack(side=LEFT, padx=2, pady=2) + menubar2 = menubar + + Menu1 = Menu(menubar, tearoff=0) + Menu1.add_command(label="Clear", command=self.Clear_Spot_List) + Menu1.add_command(label="Reset", command=self.Reset) + + # Sub-menu to pick server + Menu2 = Menu(menubar2, tearoff=0) + self.node = StringVar(self.root) + #self.node.set(self.P.SERVER) + for node in list(self.P.NODES.keys()): + Menu2.add_radiobutton(label=node, + value=node, + variable=self.node, + command=self.SelectNode ) + Menu1.add_cascade(label="Cluster", menu=Menu2) + Menu1.add_separator() + + self.dx_only = BooleanVar(value=self.P.DX_ONLY) + Menu1.add_checkbutton( + label="DX Only", + underline=0, + variable=self.dx_only, + command=self.toggle_dx_only + ) + + self.na_only = BooleanVar(value=self.P.NA_ONLY) + Menu1.add_checkbutton( + label="NA Only", + underline=0, + variable=self.na_only, + command=self.toggle_na_only + ) + + self.new_cwops_only = BooleanVar(value=self.P.NEW_CWOPS_ONLY) + Menu1.add_checkbutton( + label="New CWops Only", + underline=0, + variable=self.new_cwops_only, + command=self.toggle_new_cwops_only + ) + + self.contest_mode = BooleanVar(value=self.P.CONTEST_MODE) + Menu1.add_checkbutton( + label="Contest Mode", + underline=0, + variable=self.contest_mode, + command=self.toggle_contest_mode + ) + + Menu1.add_separator() + self.P.SHOW_CW = 'CW' in self.P.SHOW_MODES + self.show_cw = BooleanVar(value=self.P.SHOW_CW) + Menu1.add_checkbutton( + label="Show CW", + underline=0, + variable=self.show_cw, + command=self.toggle_cw + ) + + self.P.SHOW_RTTY = 'RTTY' in self.P.SHOW_MODES + self.show_rtty = BooleanVar(value=self.P.SHOW_RTTY) + Menu1.add_checkbutton( + label="Show RTTY", + underline=0, + variable=self.show_rtty, + command=self.toggle_rtty + ) + + self.P.SHOW_DIGI = 'DIGI' in self.P.SHOW_MODES + self.show_digi = BooleanVar(value=self.P.SHOW_DIGI) + Menu1.add_checkbutton( + label="Show DIGI", + underline=0, + variable=self.show_digi, + command=self.toggle_digi + ) + + self.P.SHOW_PHONE = 'PH' in self.P.SHOW_MODES + self.show_phone = BooleanVar(value=self.P.SHOW_PHONE) + Menu1.add_checkbutton( + label="Show PHONE", + underline=0, + variable=self.show_phone, + command=self.toggle_phone + ) + + Menu1.add_separator() + self.echo_raw_spots = BooleanVar(value=self.P.ECHO_ON) + Menu1.add_checkbutton( + label="Echo Raw Spots", + underline=0, + variable=self.echo_raw_spots, + command=self.toggle_echo + ) + + self.show_dupes = BooleanVar(value=self.P.SHOW_DUPES) + Menu1.add_checkbutton( + label="Show Dupes", + underline=0, + variable=self.show_dupes, + command=self.toggle_dupes + ) + + Menu1.add_separator() + self.show_need_year = BooleanVar(value=self.P.SHOW_NEED_YEAR) + Menu1.add_checkbutton( + label="Show This Year", + underline=0, + variable=self.show_need_year, + command=self.toggle_need_year + ) + + self.show_need_mode = BooleanVar(value=self.P.SHOW_NEED_MODE) + Menu1.add_checkbutton( + label="Show Mode Needs", + underline=0, + variable=self.show_need_mode, + command=self.toggle_need_mode + ) + + self.center_freq = BooleanVar(value=self.P.KEEP_FREQ_CENTERED) + Menu1.add_checkbutton( + label="Keep Freq Centered", + underline=0, + variable=self.center_freq, + command=self.toggle_keep_centered + ) + + self.small_font = BooleanVar(value=self.P.SMALL_FONT) + Menu1.add_checkbutton( + label="Small Font", + underline=0, + variable=self.small_font, + command=self.toggle_small_font + ) + + self.right_click_tunes_vfob = BooleanVar(value=self.P.RIGHT_CLICK_TUNES_VFOB) + Menu1.add_checkbutton( + label="Right Click Tunes VFO B", + underline=0, + variable=self.right_click_tunes_vfob, + command=self.toggle_right_click_tunes_vfob + ) + + """ + # Not quite done with this yet + self.ft4 = BooleanVar(value=self.P.FT4) + Menu1.add_checkbutton( + label="FT4", + underline=0, + variable=self.ft4, + command=self.toggle_ft4 + ) + """ + + Menu1.add_separator() + Menu1.add_command(label="Settings ...", command=self.Settings) + Menu1.add_separator() + Menu1.add_command(label="Show Log ...", command=self.ShowLog) + Menu1.add_separator() + Menu1.add_command(label="Exit", command=self.root.quit) + + menubar.menu = Menu1 + menubar["menu"]= menubar.menu + + + # Function to read various auiliary data files + def read_aux_data(self): + + P=self.P + + # Read challenge data + self.status_bar.setText('Reading DX Challenge data ...') + P.data = ChallengeData(P.CHALLENGE_FNAME) + + # Load data for highlighting CW ops members + if P.CWOPS: + self.status_bar.setText('Reading CWops data ...') + fname='~/Python/history/data/Shareable CWops data.xlsx' + HIST,fname2 = load_history(fname) + P.members=list( set( HIST.keys() ) ) + print('No. CW Ops Members:',len(P.members)) + #print(P.members) + + P.cwop_nums=set([]) + for m in P.members: + P.cwop_nums.add( int( HIST[m]['cwops'] ) ) + P.cwop_nums = list( P.cwop_nums ) + #print(P.cwop_nums) + #sys.exit(0) + + # Read list of friends + self.status_bar.setText('Reading misc data ...') + P.friends = [] + lines = read_text_file('Friends.txt', + KEEP_BLANKS=False,UPPER=True) + for line in lines: + c=line.split(',')[0] + if c[0]!='#': + P.friends.append(c) + print('FRIENDS=',P.friends) + #sys.exit(0) + + # Read lists of most wanted + P.most_wanted = read_text_file('Most_Wanted.txt', + KEEP_BLANKS=False,UPPER=True) + print('MOST WANTED=',P.most_wanted) + + # Read lists of common errors + corrections = read_text_file('Corrections.txt', + KEEP_BLANKS=False,UPPER=True) + print('Corrections=',corrections) + P.corrections={} + for x in corrections: + print(x) + y=x.split(' ') + P.corrections[y[0]] = y[1] + print('Corrections=',P.corrections) + + ######################################################################################### + + ######################################################################################### + + # Debug routine for scrolling issues + def scrolling(self,txt,verbosity=0): + #print('SCROLLING:',txt,verbosity) + + sb=self.scrollbar.get() + sz=self.lb.size() + yview=self.lb.yview() + y=yview[0] + + idx=int( y*sz +0.5 ) + val=self.lb.get(min(max(idx,0),sz-1)) + if verbosity>0: + print('SCROLLING:',txt+': sz=',sz,'\tyview=',yview, + '\n\ty=',y,'\tidx=',idx,'\tval=',val) + + return y + + + # Function to cull aged spots + def cull_old_spots(self): + P=self.P + #logging.info("Calling Get_Freq ...") + now = datetime.utcnow().replace(tzinfo=UTC) + if self.sock: + frq = self.sock.get_freq(VFO=self.VFO) + else: + frq=0 + #print('SpotList=',P.SpotList) + #print("CULL OLD SPOTS - Rig freq=",frq,'\tnspots=',P.nspots,len(P.SpotList),len(P.current), + # '\nmax age=',self.P.MAX_AGE,'\tnow=',now) + print("CULL OLD SPOTS - Rig freq=",frq, + '\tnspots=',P.nspots, + '\tlen SpotList=',len(P.SpotList), + '\tlen Current=',len(P.current), + '\n\tmax age=',self.P.MAX_AGE, + '\tnow=',now) + + self.scrolling('CULL OLD SPOTS A') + + NewList=[]; + BAND = int( self.band.get().replace('m','') ) + for x in P.SpotList: + try: + age = (now - x.time).total_seconds()/60 # In minutes + except: + error_trap('CULL_OLD_SPOTS: ????') + age=0 + print('x=',x) + #pprint(vars(x)) + print('now=',now) + #print('x.time=',x.time) + continue + + # print x.time,now,age + if age1000: + # Compress text + msg22 = zlib.compress(msg2.encode()) + + # Check size of text b4 and after compression + if True: + a_size=sys.getsizeof(msg2) + print('msg2=',msg2,'\nSize of original msg',a_size) + a2_size=sys.getsizeof(msg22) + print("Size of compressed msg:",a2_size) + + # Decompressing text + #a3=zlib.decompress(msg22) + + #Check size of text after decompression + #a3_size=sys.getsizeof(a3) + #print("Size of decompressed text",a3_size,'\na3=',a3) + #print("\nDifference of size= ", a_size-a2_size) + + print('BM UDP SPOTLIST QUERY: Sending compressed message ...') + if sock: + sock.send(msg22) + else: + P.udp_server.Broadcast(msg22) + + else: + + print('BM UDP SPOTLIST QUERY: Sending message ...') + if sock: + sock.send(msg2.encode()) + else: + P.udp_server.Broadcast(msg2) + + print('BM UDP SPOTLIST QUERY: Done.') + diff --git a/work2/cluster_feed.py b/work2/cluster_feed.py new file mode 100755 index 0000000..10ef7bd --- /dev/null +++ b/work2/cluster_feed.py @@ -0,0 +1,663 @@ +######################################################################################### +# +# cluster_feed.py - Rev. 2.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Routines to grab spots from the dx cluster. +# +############################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +######################################################################################### + +import sys +import re +import time +import pytz +from datetime import datetime +from dx.spot_processing import Spot +from pprint import pprint +from fileio import parse_adif +import logging +from pywsjtx.simple_server import SimpleServer +from utilities import freq2band, error_trap +from dx.cluster_connections import * +import threading +import queue + +######################################################################################### + +UTC = pytz.utc +OLD_WAY=True + +######################################################################################### + +# Setup basic logging +logging.basicConfig( + format="%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s", + level=logging.INFO) + +# Function to fudge dxcc for display +def cleanup(dxcc): + try: + dxcc2=dxcc.replace('Republic of ','') + except: + dxcc2=dxcc + return dxcc2 + +# The GUI +class ClusterFeed: + def __init__(self,P,msec): + + # Init + print('ClusterFeed Init ...') + self.P = P + self.nerrors=0 + self.last_error='' + + # Open spot server + self.open_spot_server() + + # Open a file to save all of the spots + if P.SAVE_SPOTS: + self.fp = open("all_spots.dat","w") + else: + self.fp=-1 + + # Create a buffer to communicate spots to gui thread + P.q = queue.Queue(maxsize=0) + + # Kick off cluster spot monitor + dt=.001*msec + self.Timer = threading.Timer(dt, self.Monitor) + self.Timer.daemon=True # This prevents timer thread from blocking shutdown + self.Timer.start() + + + # Function to open spot server + def open_spot_server(self): + + print('\nOpening Spot Server ...') + P=self.P + + # Open telnet connection to spot server + print('SERVER=',P.SERVER,'\tMY_CALL=',P.MY_CALL) + #sys,exit(0) + if P.SERVER=='NONE': # or (P.SERVER!="WSJT" and not P.INTERNET): + + # No cluster node + self.tn = None + + elif P.SERVER=='ANY': + + # Go down list of known nodes until we find one we can connect to + KEYS=list(P.NODES.keys()) + print('NODES=',P.NODES) + print('KEYS=',KEYS) + + self.tn=None + inode=0 + while not self.tn and inode=2: + print('Line:',line) + else: + return 0 + + if line=='': + #print('CLUSTER FEED: Time out ',self.P.TIME_OUT) + return 0 + elif not "\n" in line: + # Dont let timeout happen before we get entire line + #print 'CLUSTER FEED: Partial line read' + try: + line2 = self.tn.read_until(b"\n",timeout=10).decode("utf-8") + line = line+line2 + except: + error_trap('CLUSTER_FEED: TIME_OUT2 or other issue ???') + print('line =',line,type(line)) + #print('line2 =',line2,type(line2)) + return 0 + + if len(line)>5: + if self.P.ECHO_ON or VERBOSITY>=1: + #print('>>> Cluster Feed:',line.rstrip()) + print('==> ',line.rstrip()) + if self.P.SAVE_SPOTS: + fp.write(line.rstrip()+'\n') + fp.flush() + + # Some clusters ask additional questions + if line.find("Is this correct?")>=0: + self.tn.write(b"Y\n") # send "Y" + return 0 + + # Process the spot + if len(line)>0: + self.digest_spot(line) + + return 1 + + + # Callback to reset telnet connection + def Reset(self): + print("\n------------- Reset -------------",self.P.CLUSTER,'\n') + self.P.bm_gui.status_bar.setText("RESET - "+self.P.CLUSTER) + self.P.bm_gui.Clear_Spot_List() + """ + if self.P.BM_UDP_CLIENT and self.P.bm_udp_client and False: + self.P.bm_udp_client.StartServer() + if self.P.BM_UDP_CLIENT and self.P.bm_udp_server and False: + self.P.bm_udp_server.StartServer() + """ + if self.tn: + self.tn.close() + time.sleep(.1) + + try: + self.tn = connection(self.P.TEST_MODE,self.P.CLUSTER, \ + self.P.MY_CALL,self.P.WSJT_FNAME) + print("--- Reset --- Connected to",self.P.CLUSTER) + OK=self.test_telnet_connection() + except: + error_trap('GUI->RESET: Problem connecting to node'+self.P.CLUSTER) + OK=False + + if not OK: + print('--- Reset --- Now what Sherlock?!') + self.P.bm_gui.status_bar.setText('Lost telnet connection?!') + + + + # Function to read spots from the telnet connection + def digest_spot(self,line): + + P=self.P + #lb=P.bm_gui.lb + VERBOSITY = self.P.DEBUG + + # Check for logged contact + if "=7 and dx_call[-3:] in ['CWT','SST','MST']: + dx_call = dx_call[:-3] + obj.dx_call = dx_call + + # Reject FT8/4 spots if we're in a contest + keep=True + m = self.P.bm_gui.mode.get() + if self.P.CONTEST_MODE: + if m=='CW' and obj.mode in ['FT4','FT8','DIGITAL']: + keep=False + + # Reject calls that really aren't calls + b = self.P.bm_gui.band.get() + if keep: + if not dx_call or len(dx_call)<=2 or not obj.dx_station: + keep=False + elif not obj.dx_station.country and not obj.dx_station.call_suffix: + keep=False + + # Filter out NCDXF beacons + elif 'NCDXF' in line or 'BEACON' in line or '/B' in dx_call: + if VERBOSITY>=1: + print('Ignoring BEACON:',line.strip()) + keep=False + + if False: + print('DIGEST SPOT:',line.strip()) + print('keep=',keep,'\tb=',b) + + if keep: + if dx_call==self.P.MY_CALL or (self.P.ECHO_ON and False): + print('keep:',line.strip()) + + # Highlighting in WSJT-X window + if self.P.CLUSTER=='WSJT': + for qso in self.P.bm_gui.qsos: + if self.P.CW_SS: + # Can only work each station once regardless of band in this contest + match = dx_call==qso['call'] + else: + match = (dx_call==qso['call']) and (b==qso['band']) + if match: + break + else: + # Set background according to SNR to call attention to stronger sigs + fg=1 # 1=Red + try: + snr=int(obj.snr) + if snr>=0: + bg=2 # 13=Light magenta, 2=Light Green + elif snr>=-15: + bg=10 # 18=Light purple, 10=light Green + else: + bg=0 + except: + bg=0 + self.P.ClusterFeed.tn.highlight_spot(dx_call,fg,bg) + #print('DIGEST SPOT: call=',obj.dx_call,'\tsnr=',obj.snr, + #'\tfg/bg=',fg,bg,'\t',obj.snr.isnumeric(),int(obj.snr),len(obj.snr)) + + # Pull out info from the spot + freq=float( obj.frequency ) + mode=obj.mode + band=obj.band + P.nspots+=1 + print('DIGEST SPOT: call=',obj.dx_call,'\tfreq=',freq,'\tmode=',mode, + '\tband=',band,'\tnspots=',P.nspots) + + dxcc=obj.dx_station.country + if dxcc==None and False: + print('\nDXCC=NONE!!!!') + pprint(vars(obj.dx_station)) + sys.exit(0) + now = datetime.utcnow().replace(tzinfo=UTC) + year=now.year + obj.needed = self.P.data.needed_challenge(dxcc,str(band)+'M',0) + obj.need_this_year = self.P.data.needed_challenge(dxcc,year,0) and self.P.SHOW_NEED_YEAR + + # Reconcile mode + if mode in ['CW']: + mode2='CW' + elif mode in ['SSB','LSB','USB','FM','PH']: + mode2='Phone' + elif mode in ['DIGITAL','FT8','FT4','JT65','PSK']: + mode2='Data' + else: + mode2='Unknown' + obj.need_mode = self.P.data.needed_challenge(dxcc,mode2,0) and self.P.SHOW_NEED_MODE + + # Determine color for this spot + match = self.B4(obj,str(band)+'m') + c,c2,age=self.P.bm_gui.spot_color(match,obj) + obj.color=c + + # Check if this call is already there + # Need some error trapping here bx we seem to get confused sometimes + try: + b = self.P.bm_gui.band.get() + except: + b = '' + + try: + # Indices of all matches + idx1 = [i for i,x in enumerate(P.SpotList) + if x.dx_call==dx_call and x.band==band and x.mode==mode] + #if x.dx_call==dx_call and x.band==band] + except: + idx1 = [] + + if len(idx1)>0: + + # Call already in list - Update spot info + if VERBOSITY>=1: + print("DIGEST SPOT: Dupe call =",dx_call,'\tfreq=',freq, + '\tmode=',mode,'\tband=',band,'\tidx1=',idx1) + for i in idx1: + if VERBOSITY>=2: + print('\tA i=',i,P.SpotList[i].dx_call, + '\ttime=',P.SpotList[i].time,obj.time, + '\tfreq=',P.SpotList[i].frequency,obj.frequency) + P.SpotList[i].time=obj.time + P.SpotList[i].frequency=obj.frequency + P.SpotList[i].snr=obj.snr + P.SpotList[i].color=obj.color + if self.P.CLUSTER=='WSJT': + P.SpotList[i].df=obj.df + if VERBOSITY>=2: + print('\tB i=',i,P.SpotList[i].dx_call, + '\ttime=',P.SpotList[i].time,obj.time, + '\tfreq=',P.SpotList[i].frequency,obj.frequency) + + # Update list box entry + idx2 = [i for i,x in enumerate(P.current) if x.dx_call == dx_call and x.band==b] + if len(idx2)>0: + #lb.delete(idx2[0]) + self.P.q.put( [idx2[0]] ) + if self.P.CLUSTER=='WSJT': + df = obj.df + try: + df=int(df) + entry="%4d %-10.10s %+6.6s %-17.17s %+4.4s" % \ + (df,dx_call,mode,cleanup(dxcc),obj.snr) + self.P.q.put( [idx2[0], entry, obj.color] ) + + i=idx[0] + P.current[i].time=obj.time + P.current[i].frequency=obj.frequency + P.current[i].snr=obj.snr + P.current[i].df=obj.df + P.current[i].color=obj.color + except: + error_trap('DIGEST SPOT: ?????') + else: + entry="%-6.1f %-10.19s %+6.6s %-15.16s %+4.4s" % \ + (freq,dx_call,mode,cleanup(dxcc),obj.snr) + self.P.q.put( [idx2[0], entry, obj.color] ) + + else: + + # New call - maintain a list of all spots sorted by freq + print("DIGEST SPOT: New call =",dx_call,'\tfreq=',freq, + '\tmode=',mode,'\tband=',band) + P.SpotList.append( obj ) + # P.SpotList.sort(key=lambda x: x.frequency, reverse=False) + + # Show only those spots on the list that are from the desired band + try: + BAND = int( self.P.bm_gui.band.get().replace('m','') ) + except: + error_trap('DIGEST SPOT: ?????') + print('band=',self.P.bm_gui.band) + return + + now = datetime.utcnow().replace(tzinfo=UTC) + if band==BAND: + + # Cull out U.S. stations, except SESs (Useful for chasing DX) + dxcc = obj.dx_station.country + if self.P.DX_ONLY and dxcc=='United States' and len(obj.dx_call)>3: + return True + + # Cull out stations not in North America (useful for NAQP for example) + cont = obj.dx_station.continent + #print('cont=',cont) + if self.P.NA_ONLY and cont!='NA': + return True + + # Cull out stations non-cwops or cwops we've worked this year - useful for ACA + status=self.P.bm_gui.cwops_worked_status(obj.dx_call) + if self.P.NEW_CWOPS_ONLY and status!=1: + return True + + # Cull out modes we are not interested in + xm = obj.mode + if xm in ['FT8','FT4','DIGITAL','JT65']: + xm='DIGI' + elif xm in ['SSB','LSB','USB','FM']: + xm='PH' + if xm not in self.P.SHOW_MODES: + #print('DIGEST SPOT: Culling',xm,'spot - ', self.P.SHOW_MODES) + return True + + # Cull dupes + if not self.P.SHOW_DUPES: + if obj.color=='red': + return True + + # Find insertion point - This might be where the sorting problem is - if two stations have same freq? + #P.current.append( obj ) + #P.current.sort(key=lambda x: x.frequency, reverse=False) + idx2 = [i for i,x in enumerate(P.current) if x.frequency > freq] + if len(idx2)==0: + idx2=[len(P.current)]; + if False: + print('INSERT: len(current)=',len(P.current)) + print('freq=',freq,dx_call) + print('idx2=',idx2) + for cc in P.current: + print(cc.dx_call,cc.frequency) + P.current.insert(idx2[0], obj ) + + if self.P.CLUSTER=='WSJT': + df = int( obj.df ) + entry="%4d %-10.10s %+6.6s %-17.17s %+4.4s" % \ + (df,dx_call,mode,cleanup(dxcc),obj.snr) + else: + entry="%-6.1f %-10.10s %+6.6s %-15.15s %+4.4s" % \ + (freq,dx_call,mode,cleanup(dxcc),obj.snr) + self.P.q.put( [idx2[0], entry, obj.color] ) + + # Check if we need to cull old spots + self.P.bm_gui.LBsanity() + dt = (datetime.now() - self.P.bm_gui.last_check).total_seconds()/60 # In minutes + if dt>1: + self.P.bm_gui.cull_old_spots() + + if VERBOSITY>=1: + print('DIGEST SPOT: nspots=',P.nspots,len(P.SpotList),len(P.current)) + return True + + + + # Function to check if we've already worked a spotted station + def B4(self,x,b): + + VERBOSITY = self.P.DEBUG + now = datetime.utcnow().replace(tzinfo=UTC) + dx_call=x.dx_call.upper() + nqsos=len(self.P.bm_gui.qsos) + if VERBOSITY>0: + print('B4: ... call=',dx_call,'\tband=',b,'nqsos=',nqsos) + + match=False + if nqsos>0: + for qso in self.P.bm_gui.qsos: + #print('QSO=',qso) + if self.P.CW_SS: + # Can only work each station once regardless of band in this contest + match = dx_call==qso['call'] + else: + try: + match = (dx_call==qso['call']) and (b==qso['band']) + except: + error_trap('GUI->MATCH QSOS: ?????') + match=False + print('dx_call=',dx_call) + print('qso=',qso) + + if match: + t1 = datetime.strptime(now.strftime("%Y%m%d %H%M%S"), "%Y%m%d %H%M%S") + t2 = datetime.strptime( qso['qso_date_off']+" "+qso["time_off"] , "%Y%m%d %H%M%S") + delta=(t1-t2).total_seconds() / 3600 + match = delta < self.P.MAX_HOURS_DUPE + if VERBOSITY>=2: + print('--- Possible dupe ',tag,' for',dx_call,'\tt12=',t1,t2,'\tdelta=', + delta,match) + if match: + print('*** Dupe ***',qso['call'],qso['band']) + break + + return match + + diff --git a/work2/get_node_list.py b/work2/get_node_list.py new file mode 100644 index 0000000..01c2208 --- /dev/null +++ b/work2/get_node_list.py @@ -0,0 +1,100 @@ +#! /usr/bin/python3 -u +################################################################################ +# +# get_node_list.py - Rev 1.0 +# Copyright (C) 2022 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Function to genearate a list of known cluster nodes +# +################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +################################################################################ + +import sys +from collections import OrderedDict +import xlrd +from unidecode import unidecode +from dx.spot_processing import Station +from pprint import pprint +from latlon2maiden import * +from numpy import isnan + +################################################################################ + +def get_node_list(P): + + # Read list of nodes + print('Reading List of Cluster Nodes - fname=',P.NODES_FNAME) + book = xlrd.open_workbook(P.NODES_FNAME,formatting_info=True) + sheet1 = book.sheet_by_name('DX Nodes') + print(sheet1.nrows,sheet1.ncols) + + nodes=OrderedDict() + ready=False + for i in range(1, sheet1.nrows): + val=unidecode( sheet1.cell(i,0).value ) + #print(i,row) + if 'K - United States' in val: + print(i,val,' - There it is!') + ready=True + continue + elif ready: + done = True + for j in range(1,sheet1.ncols): + val=unidecode( str(sheet1.cell(i,j).value) ) + #print(i,sheet1.cell(i,j)) + done = done and val=='' + if done: + print('Done.') + break + addr = unidecode( sheet1.cell(i,0).value ).split() + + loc = unidecode( sheet1.cell(i,1).value ).split('\n') + #print(addr,loc) + if len(loc)>1: + gridsq=loc[1] + else: + gridsq='' + + lat,lon=maidenhead2latlon(gridsq) + #print(gridsq,lat,lon) + if isnan(lat): + call = addr[0].split('-')[0] + station = Station(call) + gridsq=latlon2maidenhead(station.latitude,-station.longitude,6) + + dx=distance_maidenhead(P.SETTINGS['MY_GRID'],gridsq) + if isnan(dx): + print(dx) + print(call) + pprint(vars(station)) + print(gridsq) + sys.exit(0) + + #port = unidecode( sheet1.cell(i,2).value ) + sysop = unidecode( sheet1.cell(i,3).value ) + notes = unidecode( sheet1.cell(i,4).value ) + + nodes[ addr[0] ] = {'ipaddr' : addr[-1] , + 'location' : loc[0], + 'grid' : gridsq, + 'sysop' : sysop, + 'distance' : dx, + 'notes' : notes} + #print(addr[0],nodes[ addr[0] ]) + + # Sort by distance to me + nodes2=OrderedDict( sorted(nodes.items(), key= lambda x:x[1]['distance'])) + for key in nodes2.keys(): + print(key,nodes2[key]) + diff --git a/work2/params.py b/work2/params.py new file mode 100644 index 0000000..2549efa --- /dev/null +++ b/work2/params.py @@ -0,0 +1,275 @@ +#! /usr/bin/python3 -u +################################################################################ +# +# Params.py - Rev 1.0 +# Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Command line param parser for bandmap +# +################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +################################################################################ + +import sys +import os +import argparse +from collections import OrderedDict +from rig_io import CONNECTIONS,RIGS +from settings import * + +################################################################################ + +# Sometimes when these don't work, its bx the login handshaking needs some work +NODES=OrderedDict() +#NODES['PY3NZ'] = 'dxc.baependi.com.br:8000' # dxwatch.com - down? +#NODES['NK7Z'] = 'nk7z-cluster.ddns.net:7373' # Lots of spots! - down? +NODES['NC7J'] = 'dxc.nc7j.com:7373' # OK - AR cluster +NODES['W3LPL'] = 'w3lpl.net:7373' # Ok - lots of spots, no FT8 dxc.w3lpl.net + +#telnet telnet.reversebeacon.net 7000 +#telnet telnet.reversebeacon.net 7001 +NODES['RBN'] = 'telnet.reversebeacon.net:7000' # RBN - 7000 for CW & RTTY, 7001 for ft8 + +NODES['AE5E'] = 'dxspots.com' # +NODES['VE7CC'] = 'dxc.ve7cc.net' # +NODES['W9PA'] = 'dxc.w9pa.net:7373' # Ok - lots of spots, no FT8 dxc.w3lpl.net +NODES['WC2L'] = 'dxc.wc2l.com' # +NODES['K3LR'] = 'dx.k3lr.com' # +NODES['WS7I'] = 'ws7i.ewarg.org:7300' # OK - need to work on filtering - uses "non AR" cluster, can show FT8 + +NODES['W8AEF'] = 'paul.w8aef.com:7373' # AZ - no FT8 - can turn it on +NODES['N6WS'] = 'n6ws.no-ip.org:7300' # Ok +NODES['K1TTT'] = 'k1ttt.net:7373' # (Peru, MA); Skimmer capable +NODES['W6RFU'] = 'ucsbdx.ece.ucsb.edu:7300' # Ok - CQ Zones 1-5 spots only (i.e. US & Canada) +NODES['AE5E'] = 'dxspots.com' # Ok - not many spots +NODES['N4DEN'] = 'dxc.n4den.us:7373' # Ok +NODES['W6KK'] = 'w6kk.zapto.org:7300' # Ok - USA and VE spots only, not many spots +NODES['N7OD'] = 'n7od.pentux.net' # Ok +NODES['WC4J'] = 'dxc.wc4j.net' # Doesnt work +NODES['WA9PIE'] = 'dxc.wa9pie.net:8000' # HRD +NODES['K2LS'] = 'dxc.k2ls.com' # CQ Zones 1-8 spots only (i.e. NA) - not sure how to log in +NODES['W6CUA'] = 'w6cua.no-ip.org:7300' # Not sure how to log on? +NODES['K7EK'] = 'www.k7ek.net:9000' # Doesn't work? +NODES['K6EXO'] = 'k6exo.dyndns.org:7300' # Doesn't work? +NODES['N6WS'] = 'n6ws.no-ip.org:7300' # Not sure how to log on? +NODES['N7OD'] = 'n7od.pentux.net' # Not sure how to log on? +NODES['ANY'] = '' +NODES['NONE'] = '' + +################################################################################ + +# Structure to contain processing params +class PARAMS: + def __init__(self): + + # Process command line args + # Can add required=True to anything that is required + arg_proc = argparse.ArgumentParser() + arg_proc.add_argument('-contest', action='store_true',help='Conest Mode') + arg_proc.add_argument('-ss', action='store_true',help='ARRL Sweepstakes') + arg_proc.add_argument('-echo', action='store_true',help='Echo lines from server') + arg_proc.add_argument("-rig", help="Connection Type to Rig", + type=str,default=["NONE"],nargs='+', + choices=CONNECTIONS+['NONE']+RIGS) + arg_proc.add_argument("-port", help="TCPIP port", + type=int,default=0) + arg_proc.add_argument("-cluster", help="Server", + type=str,default="ANY", + choices=list(NODES.keys()) ) + arg_proc.add_argument("-wsjt", help="wsjt", nargs='*', + type=str,default=None) + arg_proc.add_argument("-log", help="Log file (keep track of dupes)", + type=str, + default=None) + #default=None,nargs='*') + #default="~/logs/[MYCALL].adif") + #default="") #,nargs='+') + arg_proc.add_argument('-dx_only', action='store_true', + help='Show only DX spots') + arg_proc.add_argument('-nodupes', action='store_true', + help='Dont show dupes') + arg_proc.add_argument("-modes", help="Show only these modes", + type=str,default='ANY',nargs='*') + arg_proc.add_argument('-na_only', action='store_true', + help='Show only spots from North America') + arg_proc.add_argument('-buttons', action='store_true', + help='Enable band buttons') + arg_proc.add_argument('-bm_udp', action='store_true', + help='Start UDP client') + arg_proc.add_argument('-save', action='store_true', + help='Save All Spots') + arg_proc.add_argument('-cwops', action='store_true', + help='Highlight CWops Members') + arg_proc.add_argument('-show_mode', action='store_true', + help='Show mode needs') + arg_proc.add_argument('-show_year', action='store_true', + help='Show dxcc needs for this year') + arg_proc.add_argument('-ft4', action='store_true', + help='Use FT4 freqs instead of FT8') + arg_proc.add_argument('-small', action='store_true', + help='Use small font') + arg_proc.add_argument('-center', action='store_true', + help='Keep list centered on rig freq') + arg_proc.add_argument("-vfo", help="VFO to follow", + type=str,default="A", + choices=['A','B'] ) + #arg_proc.add_argument('-noft8', action='store_true',help='Filter out FT8 spots') + arg_proc.add_argument('-bm_geo',type=str,default=None, + help='Geometry') + arg_proc.add_argument('-test', action='store_true',help='Test Mode') + arg_proc.add_argument("-hours", help="Max no. hours for a dupe", + type=float,default=2*24) + arg_proc.add_argument("-age", help="Max no. minutes to keep a spot around", + type=int,default=None) + arg_proc.add_argument('-desktop',type=int,default=None, + help='Desk Top Work Space No.') + arg_proc.add_argument("-debug", help="Debug Level", + type=int,default=0) + args = arg_proc.parse_args() + + self.CONNECTION = args.rig[0] + if len(args.rig)>=2: + self.RIG = args.rig[1] + else: + self.RIG = None + self.PORT = args.port + + self.MAX_HOURS_DUPE = args.hours + + self.CONTEST_MODE = args.contest + self.DESKTOP = args.desktop + self.SMALL_FONT = args.small or self.CONTEST_MODE + self.STAND_ALONE = True + + self.BM_GEO = args.bm_geo + self.TEST_MODE = args.test + self.CW_SS = args.ss + self.CWOPS = args.cwops + self.DX_ONLY = args.dx_only + self.NA_ONLY = args.na_only + self.NEW_CWOPS_ONLY = False + self.BM_UDP_CLIENT = args.bm_udp + self.SAVE_SPOTS = args.save + self.RIG_VFO = args.vfo + self.FT4 = args.ft4 + self.DEBUG = args.debug + self.SHOW_NEED_MODE = args.show_mode + self.SHOW_NEED_YEAR = args.show_year + self.SHOW_DUPES = not args.nodupes + + valid_modes=['CW','RTTY','DIGI','PH'] + if type(args.modes) is list: + self.SHOW_MODES = args.modes + elif args.modes=='ANY': + self.SHOW_MODES = valid_modes + else: + self.SHOW_MODES = [args.modes] + for m in self.SHOW_MODES: + if m not in valid_modes: + print('PARAMS ERROR - Unrecognized mode:',m,'\nValid modes are',valid_modes) + sys.exit(0) + + # See http://www.ng3k.com/misc/cluster.html for a list + self.SERVER=args.cluster.upper() + self.WSJT_FNAME=None + + self.WSJT_IP_ADDRESS = '127.0.0.1' + self.WSJT_PORT = 2237 + WSJT2=args.wsjt + if WSJT2!=None: + print("\nWSJT2=",WSJT2,len(WSJT2)) + self.WSJT_FNAME=os.path.expanduser("~/.local/share/WSJT-X") + self.WSJT_FNAME+=" - "+WSJT2[0] + self.WSJT_FNAME+="/ALL.TXT" + self.CLUSTER='WSJT' + self.SERVER='WSJT' + + if len(WSJT2)>=2: + self.WSJT_PORT = int(WSJT2[1]) + + print("WSJT_FNAME=", self.WSJT_FNAME) + print("WSJT_PORT =", self.WSJT_IP_ADDRESS,self.WSJT_PORT) + #sys.exit(0) + else: + self.CLUSTER=NODES[self.SERVER] + #print('CLUSTER=',CLUSTER) + + if args.log==None: + if args.wsjt==None: + #self.LOG_NAME = "~/logs/[MYCALL].adif" + self.LOG_NAME = "~/[OPERATOR]/[MYCALL].adif" + #self.LOG_NAME = "~/logs/[OPERATOR].adif" + else: + self.LOG_NAME = "~/.local/share/WSJT-X" + if WSJT2!=None: + self.LOG_NAME+=" - "+WSJT2[0] + self.LOG_NAME += "/wsjtx_log.adi" + else: + self.LOG_NAME = args.log + + if False: + #print(len(args.log)) + print(args.log) + print(WSJT2) + print(self.SERVER) + print(self.LOG_NAME) + sys,exit(0) + + self.ECHO_ON=args.echo + if args.age: + self.MAX_AGE=args.age + elif self.CLUSTER=='WSJT': + self.MAX_AGE=4 # Was 5 + else: + self.MAX_AGE=5 # Was 10 + + self.rootlogger = "dxcsucker" + self.TIME_OUT=.01 + + # Read config file + self.SETTINGS,self.RCFILE = read_settings('.keyerrc') + + self.MY_CALL = self.SETTINGS['MY_CALL'] + self.OPERATOR = self.SETTINGS['MY_OPERATOR'] + self.LOG_NAME = self.LOG_NAME.replace('[OPERATOR]',self.OPERATOR) + if self.OPERATOR!=self.MY_CALL: + self.LOG_NAME0 = os.path.expanduser( self.LOG_NAME.replace('[MYCALL]',self.OPERATOR ) ) + else: + self.LOG_NAME0 = None + MY_CALL2 = self.MY_CALL.replace('/','_') + self.LOG_NAME = os.path.expanduser( self.LOG_NAME.replace('[MYCALL]',MY_CALL2 ) ) + self.NODES = NODES + self.threads = [] + print('LOG_NAME=',self.LOG_NAME,'\tSTAND_ALONE=',self.STAND_ALONE) + + if self.SERVER=="WSJT" or args.buttons: + self.ALLOW_CHANGES=True + else: + self.ALLOW_CHANGES=False + + # The spreadsheets with the DXCC already worked data & node info + #MY_CALL3 = self.MY_CALL.split('/')[0] + MY_CALL3 = self.OPERATOR.split('/')[0] + self.DATA_DIR = os.path.expanduser('~/'+MY_CALL3+'/') + self.CHALLENGE_FNAME = self.DATA_DIR+'/states.xls' + if not os.path.isfile(self.CHALLENGE_FNAME): + self.CHALLENGE_FNAME = 'states.xls' + if not os.path.isfile(self.CHALLENGE_FNAME): + self.CHALLENGE_FNAME = None + + self.NODES_FNAME = self.DATA_DIR+'/states.xls' + if not os.path.isfile(self.NODES_FNAME): + self.NODES_FNAME = 'nodes.xls' + + self.KEEP_FREQ_CENTERED=args.center + self.RIGHT_CLICK_TUNES_VFOB = self.SERVER!="WSJT" diff --git a/work2/playpen.py b/work2/playpen.py new file mode 100755 index 0000000..e4e31f0 --- /dev/null +++ b/work2/playpen.py @@ -0,0 +1,178 @@ +#!/usr/bin/python3 +############################################################################################ +# +# playpen.py - Copyright (C) 2021-4 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Work area to get various components up and running. +# +############################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +############################################################################################ + +import sys +from datetime import datetime, date, tzinfo +import pytz +from dx.cluster_connections import get_logger +from dx.spot_processing import Station, Spot, WWV, Comment, ChallengeData +from fileio import parse_adif +#from fileio import * +from pprint import pprint +from dx.cty import load_cty + +UTC = pytz.utc +LOG_NAME='~/.fldigi/logs/aa2il_2018.adif' + +print('HEY') + +if True: + + logger = get_logger("dxcsucker") + dx_station = Station("KU5B") + print(dx_station) + pprint(vars(dx_station)) + + dx_station = Station("KU5B/OT") + print(dx_station) + pprint(vars(dx_station)) + sys.exit(0) + + dx_station = Station("AD4EB") + print(dx_station) + pprint(vars(dx_station)) + + # This is valid + dx_station = Station("F/AD4EB") + print(dx_station) + pprint(vars(dx_station)) + + # This is not + dx_station = Station("AD4EB/F") + print(dx_station) + pprint(vars(dx_station)) + + # This works + dx_station = Station("VP5/AD4EB") + print(dx_station) + pprint(vars(dx_station)) + + # so does kthisworks + dx_station = Station("AD4EB/VP5") + print(dx_station) + pprint(vars(dx_station)) + + # Bogus State QP + dx_station = Station("AD4EB/FLOY") + print(dx_station) + pprint(vars(dx_station)) + sys.exit(0) + +if True: + from pyhamtools.locator import calculate_heading, calculate_heading_longpath + bearing = calculate_heading("JN48QM", "QF67bf") + print(bearing) + #74.3136 + bearing2 = calculate_heading_longpath("JN48QM", "QF67bf") + print(bearing2) + #254.3136 + sys.exit(0) + +if True: + + if False: + # This is very slow bx it downloads the database each time + # There appears to be a way to speed it up using REDIS but let's try something else + from pyhamtools import LookupLib, Callinfo + + print('Hey 1') + my_lookuplib = LookupLib(lookuptype="countryfile") + print('Hey 2') + cic = Callinfo(my_lookuplib) + print('Hey 3') + print((cic.get_all("DH1TW"))) + print('Hey 4') + sys.exit(0) + + if True: + + # This seems pretty fast + dxcc="6Y3T" + dx_station = Station(dxcc) + #print dx_station + pprint(vars(dx_station)) + print() + + data = ChallengeData('~/AA2IL/states.xls') + needed = data.needed_challenge(dx_station.country,'20M',0) + print(('20M needed=',needed)) + needed = data.needed_challenge(dx_station.country,'2018',0) + print(('2018 needed=',needed)) + + sys.exit(0) + + dx_station = Station("KG4WH") + print(dx_station) + pprint(vars(dx_station)) + + dx_station = Station("DH1TW") + print(dx_station) + pprint(vars(dx_station)) + + dx_station = Station("VA7IO") + print(dx_station) + pprint(vars(dx_station)) + + # This one is broke - should return Canada + dx_station = Station("CZ4A") + print(dx_station) + pprint(vars(dx_station)) + + sys.exit(0) + + if True: + print('Hey 1') + cty_dir = '~/Python/data/' + cty = load_cty(cty_dir+"cty.plist") #Load Country File + print('Hey 2') + + print(cty) + #prefix = obtain_prefix(call) + #print prefix + sys.exit(0) + + print('Reading log...') + qsos = parse_adif(LOG_NAME) + print(('# QSOs in log=',len(qsos),type(qsos))) + + #calls = [ x['call'] for x in qsos ] + #print calls + now = datetime.utcnow().replace(tzinfo=UTC) + print((now,now.replace(tzinfo=None))) + #now2 = datetime.strptime(now.strftime("%Y%m%d"), "%Y%m%d") + qsos2=[] + for qso in qsos: + date_off = datetime.strptime( qso["qso_date_off"]+" "+qso["time_off"] , "%Y%m%d %H%M%S") \ + .replace(tzinfo=UTC) + age = (now - date_off).total_seconds() # In seconds + + #age = (now - date_off).total_seconds() / 60. # In minutes + #print date_off + #print age + #print age / (24*60.) # In days + #sys.exit(0) + if age < 5*24*3600: + qsos2.append(qso) + + print(('# recent QSOs in log=',len(qsos2),type(qsos2))) + print('... Read log') + sys.exit(0) + diff --git a/work2/requirements.txt b/work2/requirements.txt new file mode 100644 index 0000000..b033ace --- /dev/null +++ b/work2/requirements.txt @@ -0,0 +1,16 @@ +# pip3 install -r requirements.txt +# +# Also need the "libs" and "data" directories which are available in this +# repository. +# Set the PYTHONPATH environment variable to point to where "libs" is installed, +# e.g. for csh/tcsh: +# +# setenv PYTHONPATH $HOME/Python/libs + +pyserial +xlrd +unidecode +pyhamtools +numpy +pandas + diff --git a/work2/spot_processing.log b/work2/spot_processing.log new file mode 100644 index 0000000..90f2a60 --- /dev/null +++ b/work2/spot_processing.log @@ -0,0 +1,3855 @@ +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W3LPL3 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KE8RU1 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of TA6C10 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of K5SL9 could not be decoded +Busted Prefix: 'False' of JG1TSG7 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of T9/HA7GN could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Homecall: 'False' of S/G could not be decoded +Busted Homecall: 'False' of 14 could not be decoded +Busted Homecall: 'False' of could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +Busted Homecall: 'False' of DROPING could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of QTH could not be decoded +Busted Homecall: 'False' of QTH could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +Busted Homecall: 'False' of USA could not be decoded +Busted Homecall: 'False' of USA could not be decoded +Busted Homecall: 'False' of USA could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of FWAS could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Prefix: 'False' of 0Y5MDX could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QRZCO could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of QRP could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Prefix: 'False' of WB9OW73 could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of SD could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Prefix: 'False' of NIO967ID5XD could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of QSY could not be decoded +Busted Homecall: 'False' of QSY could not be decoded +could not convert string to float: '3.1.0' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 896, in __process_spot + self.frequency = float(frequency_temp.group(0)) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '3.1.0' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of JH4EHF7 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of 9A9BB9 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of KM3T1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of K3PA2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of JH4EHF7 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W3LPL3 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W3LPL3 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of W3LPL3 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of JA1RTX7 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of JG1TSG7 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of K3PA1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT2 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of KM3T1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of JH7CSU1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +could not convert string to float: '' +Problem in Spot Processing +Traceback (most recent call last): + File "/home/joea/Python/libs/dx/spot_processing.py", line 899, in __process_spot + self.frequency = float(re.sub('[^0-9\.]+', '', raw_string[16:25])) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +ValueError: could not convert string to float: '' +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT6 could not be decoded +Busted Prefix: 'False' of KM3T3 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of KM3T2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of AC0C1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Prefix: 'False' of DK9IP1 could not be decoded +Busted Prefix: 'False' of W1NT2 could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of could not be decoded +Busted Homecall: 'False' of POTA could not be decoded +Busted Homecall: 'False' of POTA could not be decoded diff --git a/work2/watchdog.py b/work2/watchdog.py new file mode 100755 index 0000000..7632844 --- /dev/null +++ b/work2/watchdog.py @@ -0,0 +1,78 @@ +#! /usr/bin/python3 -u +################################################################################ +# +# WatchDog.py - Rev 1.0 +# Copyright (C) 2024 by Joseph B. Attili, aa2il AT arrl DOT net +# +# Watchdog timer for bandmap. +# +################################################################################ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +################################################################################ + +import threading +from utilities import error_trap +import os +import psutil +import time + +################################################################################ + +VERBOSITY=0 + +################################################################################ + +class WatchDog: + def __init__(self,P,msec): + print('Watch Dog Starting ....') + + self.P = P + self.dt =.001*msec + P.SHUTDOWN = False + + # Kick off watchdog monito + P.Timer = threading.Timer(self.dt, self.Monitor) + P.Timer.daemon=True # This prevents timer thread from blocking shutdown + P.Timer.start() + + + def Monitor(self): + P=self.P + #print('Watch Dog ....') + + # Check if another thread shut down - this isn't complete yet + if P.SHUTDOWN: + if P.Timer: + print('WatchDog - Cancelling timer ...') + P.Timer.cancel() + P.WATCHDOG = False + P.Timer=None + print('WatchDog - Shut down.') + + # Monitor memory usage + if P.MEM: + P.MEM.take_snapshot() + + # Reset timer + if VERBOSITY>0: + print("WatchDog - Timer ...") + if not P.SHUTDOWN: # and not P.Stopper.isSet(): + P.Timer = threading.Timer(self.dt, self.Monitor) + P.Timer.setDaemon(True) # This prevents timer thread from blocking shutdown + P.Timer.start() + else: + P.Timer=None + print('... Watch Dog quit') + P.WATCHDOG = False + + diff --git a/work2/windoz.bat b/work2/windoz.bat new file mode 100644 index 0000000..f4c7bc7 --- /dev/null +++ b/work2/windoz.bat @@ -0,0 +1,37 @@ +@echo off +echo %DATE% %TIME% +goto BUILD +echo. +echo Notes about how to run BANDMAP on Windoze 10 +echo. +echo Already should have almost everything we need installed already + pip install -r requirements.txt +echo. +echo Also need a temp directory: + md ..\tmp +echo. +echo Run the script under python: + bandmap.py +:BUILD +echo. +echo Compile - works on both windoz and linux: +echo This takes a long time ... +echo. + pyinstaller --onefile bandmap.py + copy ..\data\cty.plist dist + copy ..\data\nodes.plist dist + copy Release_Notes.txt dist +echo. +echo Run the compiled version: + dist\bandmap.exe +echo. +echo On Linux: +echo "cp ../data/cty.plist dist" +echo dist\bandmap.exe +echo. +echo Run Inno Setup Compiler and follow the prompts to create an installer. +echo This installer works on Windoz 10 and Bottles. +echo. +echo %DATE% %TIME% +echo. +