diff --git a/server/departures.py b/server/departures.py index 8a50dcd..9d46575 100644 --- a/server/departures.py +++ b/server/departures.py @@ -50,20 +50,25 @@ class Departure: self.last_stop = last_stop self.departure = departure self.delay = delay - self.updated = 1 + self.updated = {} Departure.storage[did] = self def update(self, delay): if delay != self.delay: - self.updated += 1 + for id in self.updated: + self.updated[id] += 1 self.delay = delay + def resend(self, id): + if id in self.updated: + self.updated[id] += 1 + def get_departure(self): return -(floor(((datetime.now().timestamp() - (self.departure + self.delay*60))/60)*10)/10) - def data(self): - if self.updated != 0: - self.updated = 0 + def data(self, id): + if id not in self.updated or self.updated[id] != 0: + self.updated[id] = 0 return f"{self}" else: return None diff --git a/server/lora.py b/server/lora.py index 448de06..21f87d4 100644 --- a/server/lora.py +++ b/server/lora.py @@ -16,7 +16,6 @@ class LoraController: def __init__(self, main): self.main = main - self.storage = dict() self.devices = [] self.token = "" @@ -38,6 +37,12 @@ class LoraController: def new(self, id: int, stop_id: str): self.devices.append(LoraDevice(self, id, stop_id)) + def json(self): + resp = [] + for d in self.devices: + resp.append({'id': f"{d.id:0>16x}", 'stop_id': d.stop_id}) + return resp + class LoraDevice: def __init__(self, controller: LoraController, deveui: int, stop_id: str): @@ -47,16 +52,19 @@ class LoraDevice: self.message_pool = [] self.thread = None self.port = 1 - self.send(lambda: "CLEAR") + self.clear() def get_updated_departures(self): self.send_time() for d in Departure.get(self.stop_id): - if d.updated > 0: + if self.id not in d.updated or d.updated[self.id] > 0: self.send(d.data) + def clear(self): + self.send(lambda id: "CLEAR") + def send_time(self): - self.send(lambda: f"TIME|{(datetime.now() - datetime(1970, 1, 1)).total_seconds():.0f}") + self.send(lambda id: f"TIME|{(datetime.now() - datetime(1970, 1, 1)).total_seconds():.0f}") def send(self, msg): self.message_pool.append(msg) @@ -68,7 +76,7 @@ class LoraDevice: while not self.controller.main.ended: if len(self.message_pool) == 0: break - message = self.message_pool.pop(0)() + message = self.message_pool.pop(0)(self.id) if not message: continue url = f"https://lora.plzen.eu/api/v2/nodes/{self.id:0>16x}/queue" @@ -88,4 +96,3 @@ class LoraDevice: if self.port > 3: self.port = 1 sleep(5) - diff --git a/server/main.py b/server/main.py index d73d533..e19240a 100644 --- a/server/main.py +++ b/server/main.py @@ -25,7 +25,8 @@ class Main: self.api = API(self) lora_controller.generate_token() for d in self.config["devices"]: - lora_controller.new(d["id"], str(d["stop_id"])) + if "stop_id" in d: + lora_controller.new(d["id"], str(d["stop_id"])) self.thread = threading.Thread(target=self.update_loop) self.thread.start()