Fixed departure updates for multiple devices

This commit is contained in:
Filip Znachor 2022-12-19 21:37:02 +01:00
parent 18684a14dc
commit cd74f0982e
3 changed files with 25 additions and 12 deletions

View file

@ -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

View file

@ -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)

View file

@ -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()