Fixed departure updates for multiple devices
This commit is contained in:
parent
18684a14dc
commit
cd74f0982e
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Loading…
Reference in a new issue