aprsd/aprsd.py

91 lines
2.1 KiB
Python

#!/usr/bin/python
# example incoming message:
# KM6LYW>APRS,TCPIP*,qAC,FOURTH::KM6LYW-4 :test message to telnet
# KM6LYW-4>APRS,TCPIP*,qAC,T2TEXAS::KM6LYW-9 :This is a test message
#
# from radio:
# KM6LYW>APY01D,PINE*,WIDE2-1,qAR,KJ6NKR-2::KM6LYW-9 :time please{15
import sys
import telnetlib
import time
import re
from random import randint
HOST = "texas.aprs2.net"
USER = "KM6LYW-9"
PASS = "11111"
def send_ack(tocall, ack):
tocall = tocall.ljust(9) # pad to nine chars
line = "KM6LYW-9>APRS,TCPIP*::" + tocall + ":ack" + ack + "\n"
print "Sending ack __________________"
print "Raw : " + line,
print "To : " + tocall
print "Ack number : " + ack
tn.write(line)
def send_message(tocall, message):
messagecounter = randint(100,999)
tocall = tocall.ljust(9) # pad to nine chars
line = "KM6LYW-9>APRS,TCPIP*::" + tocall + ":" + message + "{" + str(messagecounter) + "\n"
print "Sending message_______________"
print "Raw : " + line,
print "To : " + tocall
print "Message : " + message
tn.write(line)
### end send_ack()
def process_message(line):
f = re.search('(.*)>', line)
fromcall = f.group(1)
m = re.search('::KM6LYW-9 :(.*)', line)
fullmessage = m.group(1)
searchresult = re.search('(.*){(.*)', fullmessage)
if searchresult:
message= searchresult.group(1)
ack = searchresult.group(2)
else:
message = fullmessage
ack = "none"
print "Received message______________"
print "Raw : " + line
print "From : " + fromcall
print "Message : " + message
print "Ack number : " + ack
if not re.search('^ack[0-9]*', message):
send_ack(fromcall, ack)
reply = "Echo: " + message
send_message(fromcall, reply)
else:
print "Reply reqd : This is an ack, not replying."
### end process_message()
tn = telnetlib.Telnet(HOST, 14580)
time.sleep(2)
tn.write("user " + USER + " pass " + PASS + " vers aprsd 0.99\n" )
while True:
line = ""
for char in tn.read_until("\n",100):
line = line + char
line = line.replace('\n', '')
if re.search("::KM6LYW-9 ", line):
process_message(line)
else:
print line
# end while True
tn.close()
exit()