1 """ For when responding to the terminal is not trivial """
3 from datetime import datetime, timezone
4 from logging import getLogger
5 from struct import pack
9 from .gps303proto import parse_message, proto_by_name
10 from .zmsg import Bcast, Resp
12 log = getLogger("gps303/termconfig")
17 zsub = zctx.socket(zmq.SUB)
18 zsub.connect(conf.get("collector", "publishurl"))
26 "POSITION_UPLOAD_INTERVAL",
28 topic = pack("B", proto_by_name(protoname))
29 zsub.setsockopt(zmq.SUBSCRIBE, topic)
30 zpush = zctx.socket(zmq.PUSH)
31 zpush.connect(conf.get("collector", "listenurl"))
35 zmsg = Bcast(zsub.recv())
36 msg = parse_message(zmsg.packet)
38 "IMEI %s from %s at %s: %s",
41 datetime.fromtimestamp(zmsg.when).astimezone(tz=timezone.utc),
44 # TODO get data from the config
45 resp = Resp(imei=zmsg.imei, packet=msg.response())
46 log.debug("Response: %s", resp)
47 zpush.send(resp.packed)
49 except KeyboardInterrupt:
53 if __name__.endswith("__main__"):
54 runserver(common.init(log))