+
+
+class LocEvt(_Zmsg):
+ """Zmq message with original or approximated location from lookaside"""
+
+ KWARGS = (
+ ("imei", "0000000000000000"),
+ ("devtime", datetime(1970, 1, 1, tzinfo=timezone.utc)),
+ ("lat", 0.0),
+ ("lon", 0.0),
+ ("is_gps", True),
+ )
+
+ # This message is for external consumption, so use json encoding,
+ # except imei that forms 16 byte prefix that can be used as the
+ # topic to subscribe.
+ @property
+ def packed(self):
+ return (
+ ("0000000000000000" + self.imei)[-16:].encode()
+ + dumps(
+ {
+ "devtime": str(self.devtime),
+ "latitude": self.lat,
+ "longitude": self.lon,
+ "is-gps": self.is_gps,
+ }
+ ).encode()
+ )
+
+ # And this is full json that can be sent over websocket etc.
+ @property
+ def json(self):
+ return dumps(
+ {
+ "imei": self.imei,
+ "devtime": str(self.devtime),
+ "latitude": self.lat,
+ "longitude": self.lon,
+ "is-gps": self.is_gps,
+ }
+ )
+
+ def decode(self, buffer):
+ self.imei = buffer[:16].decode()
+ json_data = loads(buffer[16:])
+ self.devtime = datetime.fromisoformat(json_data["devtime"])
+ self.lat = json_data["latitude"]
+ self.lon = json_data["longitude"]
+ self.is_gps = json_data["is-gps"]