mirror of
https://codeberg.org/ET-Kiel/tk102gpx.git
synced 2026-06-28 07:29:51 +02:00
Compare commits
No commits in common. "fa469cda30b568647736a254dc84b2683f1ab30d" and "02e96d82a1ff32038e62a81070d7bd06a40182bb" have entirely different histories.
fa469cda30
...
02e96d82a1
3 changed files with 33 additions and 49 deletions
2
crontab
2
crontab
|
|
@ -1,2 +1,2 @@
|
||||||
# m h dom mon dow command
|
# m h dom mon dow command
|
||||||
* * * * * /home/ncrs1/stephan/tk102gpx/cron.sh > /home/ncrs1/stephan/tk102gpx/cron.log 2>&1
|
*/5 * * * * make -C /home/ncrs1/stephan/tk102gpx > /home/ncrs1/stephan/tk102gpx/cron.log 2>&1
|
||||||
|
|
|
||||||
52
tk102cat.py
52
tk102cat.py
|
|
@ -8,7 +8,7 @@ files = []
|
||||||
timeout = None
|
timeout = None
|
||||||
|
|
||||||
def logger(s):
|
def logger(s):
|
||||||
print("\n"+s, file=sys.stderr)
|
print(s, file=sys.stderr)
|
||||||
|
|
||||||
oo,files = getopt.getopt(sys.argv[1:], "p:", ("port=",))
|
oo,files = getopt.getopt(sys.argv[1:], "p:", ("port=",))
|
||||||
|
|
||||||
|
|
@ -18,53 +18,37 @@ for o,v in oo:
|
||||||
|
|
||||||
poll = select.poll()
|
poll = select.poll()
|
||||||
|
|
||||||
|
sockets = {}
|
||||||
|
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
sock.bind(("", port))
|
sock.bind(("", port))
|
||||||
sock.listen(2)
|
sock.listen(2)
|
||||||
poll.register(sock, select.POLLIN)
|
poll.register(sock, select.POLLIN)
|
||||||
logger(f"listening on port {port}, socket fd {sock.fileno()}")
|
logger("listening on port %d, socket fd %d" % (port,sock.fileno()))
|
||||||
|
|
||||||
class tksocks:
|
|
||||||
def __init__(self):
|
|
||||||
self.sockets = {}
|
|
||||||
self.fdescs = []
|
|
||||||
def add(self, s):
|
|
||||||
if len(self.fdescs) > 9:
|
|
||||||
self.close(self.fdescs[0])
|
|
||||||
fd = s[0].fileno()
|
|
||||||
self.sockets[fd] = s
|
|
||||||
self.fdescs.append(fd)
|
|
||||||
poll.register(fd, select.POLLIN | select.POLLHUP | select.POLLRDHUP)
|
|
||||||
def get(self, fd):
|
|
||||||
return self.sockets[fd]
|
|
||||||
def close(self, fd):
|
|
||||||
s = self.get(fd)
|
|
||||||
logger(f"closing connection from {repr(s[1])}")
|
|
||||||
del self.sockets[fd]
|
|
||||||
self.fdescs.remove(fd)
|
|
||||||
poll.unregister(fd)
|
|
||||||
s[0].close()
|
|
||||||
|
|
||||||
sockets = tksocks()
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
|
||||||
c = poll.poll(timeout)
|
c = poll.poll(timeout)
|
||||||
for fd, ev in c:
|
for fd, ev in c:
|
||||||
if fd==sock.fileno():
|
if fd==sock.fileno():
|
||||||
s = sock.accept()
|
s = sock.accept()
|
||||||
logger(f"connection from {repr(s[1])}")
|
logger("connection from %s" % repr(s[1]))
|
||||||
sockets.add(s)
|
if len(sockets) > 99:
|
||||||
|
logger("too many connections %s" % repr(sockets))
|
||||||
|
s[0].send("too many connections, good bye")
|
||||||
|
s[0].close()
|
||||||
else:
|
else:
|
||||||
|
sockets[s[0].fileno()] = s
|
||||||
|
poll.register(s[0], select.POLLIN | select.POLLHUP | select.POLLRDHUP)
|
||||||
|
elif fd in sockets:
|
||||||
|
so = sockets[fd][0]
|
||||||
if ev & select.POLLIN:
|
if ev & select.POLLIN:
|
||||||
d = sockets.get(fd)[0].recv(4096, socket.MSG_DONTWAIT)
|
d = so.recv(4096, socket.MSG_DONTWAIT)
|
||||||
if d:
|
if d:
|
||||||
out.write(d)
|
out.write(d)
|
||||||
out.flush()
|
out.flush()
|
||||||
if ev & (select.POLLHUP | select.POLLRDHUP):
|
if ev & (select.POLLHUP | select.POLLRDHUP):
|
||||||
sockets.close(fd)
|
logger("closing connection from %s" % repr(sockets[fd][1]))
|
||||||
except KeyboardInterrupt:
|
del sockets[fd]
|
||||||
break
|
poll.unregister(fd)
|
||||||
except Exception as e:
|
so.close()
|
||||||
logger(f"Error: {repr(e)}")
|
|
||||||
|
|
|
||||||
10
tk102gpx.py
10
tk102gpx.py
|
|
@ -72,7 +72,7 @@ tk_re = re.compile(b"".join((
|
||||||
b"(?P<VAR>[^,]+)?,",
|
b"(?P<VAR>[^,]+)?,",
|
||||||
b"(?P<WHAT>[^,]*,)?",
|
b"(?P<WHAT>[^,]*,)?",
|
||||||
b"A\*(?P<GPCKS>[0-9A-F][0-9A-F]),",
|
b"A\*(?P<GPCKS>[0-9A-F][0-9A-F]),",
|
||||||
b"(?P<SIGNAL>[FL])?,",
|
b"(?P<BAT>[FL])?,",
|
||||||
b"imei:(?P<IMEI>[0-9]+),",
|
b"imei:(?P<IMEI>[0-9]+),",
|
||||||
b"(?P<LEN>[0-9]{3})",
|
b"(?P<LEN>[0-9]{3})",
|
||||||
b"(?P<BCKS>..)"
|
b"(?P<BCKS>..)"
|
||||||
|
|
@ -130,7 +130,7 @@ class TKGPX(gpxpy.gpx.GPX):
|
||||||
slept = True
|
slept = True
|
||||||
sys.stderr.write(".")
|
sys.stderr.write(".")
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
time.sleep(10)
|
time.sleep(60)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
break
|
break
|
||||||
continue
|
continue
|
||||||
|
|
@ -151,8 +151,8 @@ class TKGPX(gpxpy.gpx.GPX):
|
||||||
if verbose >= 3:
|
if verbose >= 3:
|
||||||
print(repr(rd), file=sys.stderr)
|
print(repr(rd), file=sys.stderr)
|
||||||
|
|
||||||
if verbose>0 and rd["SIGNAL"] != b"F":
|
if verbose>0 and rd["BAT"] != b"F":
|
||||||
print(f"Signal is {repr(rd['SIGNAL'])} at {rd['SERIAL']}", file=sys.stderr)
|
print(f"Battery is {repr(rd['BAT'])} at {rd['SERIAL']}", file=sys.stderr)
|
||||||
|
|
||||||
pd = {
|
pd = {
|
||||||
"latitude": gprmc2deg(rd["LAT"], rd["NS"]),
|
"latitude": gprmc2deg(rd["LAT"], rd["NS"]),
|
||||||
|
|
@ -183,7 +183,7 @@ class TKGPX(gpxpy.gpx.GPX):
|
||||||
|
|
||||||
if raw==2:
|
if raw==2:
|
||||||
cd = {}
|
cd = {}
|
||||||
cd.update(strorbytes(rd, 'SIGNAL'))
|
cd.update(strorbytes(rd, 'BAT'))
|
||||||
cd.update(strorbytes(rd, 'SERIAL'))
|
cd.update(strorbytes(rd, 'SERIAL'))
|
||||||
cd.update(strorbytes(rd, 'PHONE'))
|
cd.update(strorbytes(rd, 'PHONE'))
|
||||||
cd['time'] = pd['time'].isoformat()[:19]+'Z'
|
cd['time'] = pd['time'].isoformat()[:19]+'Z'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue