import json, base64, socket, wx #AXUDP=("127.0.0.1",4020) #AXUDP=("192.168.1.24",4020) #AXUDP=("192.168.1.32",2300) AXUDP=("192.168.1.24",4020) JSONPORT=5200 # from lorarx IP=("0.0.0.0",JSONPORT) metainfo=True longcalls=False # True for 7..9 char calls or ssid >15 if axudp2 destination is able to read this def num(c): if (c<"0") or (c>"9"): return return ord(c)-ord("0") def getpos(s): if len(s)!=19: return lat=num(s[0])*10 + num(s[1]) + (num(s[2])*1000 + num(s[3])*100 + num(s[5])*10 + num(s[6]))/6000.0 if s[7]=="S": lat=-lat elif s[7]!="N": return long=num(s[9])*100 + num(s[10])*10 + num(s[11]) + (num(s[12])*1000 + num(s[13])*100 + num(s[15])*10 + num(s[16]))/6000.0 if s[17]=="W": long=-long elif s[17]!="E": return return lat, long, s[8]+s[18] sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.bind(IP) while True: data, addr=sock.recvfrom(1500) # print(data) try: obj = json.loads(data.decode()) # print(obj) payload=base64.b64decode(obj["payload"]) #base64 coded frame try: print("payload=", payload) except: print("print error") except: print("json decode error") else: # s="" # for i in range(j,len(payload)): s+=chr(payload[i]) #remove junk and make string type if obj["crc"]!=1: print("no crc or crc error") ## elif obj["net"]!=0x22 & obj["net"]!=0x23 & obj["net"]!=0x2B: print("wrong net-id") elif (len(payload)>5) & (payload[0]==ord("!")): ###fcs i=0 te=0 while (te+3": i+=1 while (iAPMESH" if len(pat)>0: s+=","+pat+"*" s+=":" prmsg="" if morp>0: if sm[morp]=="!": # position try: lat,long,sym=getpos(sm[morp+1:morp+20]) except: lat=0.0 long=0.0 sym=" " ok=False s+="!"+sm[morp+1:morp+20] s+=sm[morp+20:] print("pos:",ok,sym,lat,long) elif (sm[morp]==":") & (dst!="*"): # message print("msg") msgto=dst+" " s+=":"+dst[0:10]+":"+sm[morp+1:] prmsg=s else: ok=False else: ok=False mid=payload[1] + payload[2]*0x100 + payload[3]*0x10000 + payload[4]*0x1000000 hop=payload[5] & 7 vmq=payload[5] & 0x80 != 0 tra=payload[5] & 0x40 != 0 s+=" MID:" + "{:X}".format(mid) + " HOPS:" + str(hop) if eos+2