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.last_stop = last_stop
|
||||||
self.departure = departure
|
self.departure = departure
|
||||||
self.delay = delay
|
self.delay = delay
|
||||||
self.updated = 1
|
self.updated = {}
|
||||||
Departure.storage[did] = self
|
Departure.storage[did] = self
|
||||||
|
|
||||||
def update(self, delay):
|
def update(self, delay):
|
||||||
if delay != self.delay:
|
if delay != self.delay:
|
||||||
self.updated += 1
|
for id in self.updated:
|
||||||
|
self.updated[id] += 1
|
||||||
self.delay = delay
|
self.delay = delay
|
||||||
|
|
||||||
|
def resend(self, id):
|
||||||
|
if id in self.updated:
|
||||||
|
self.updated[id] += 1
|
||||||
|
|
||||||
def get_departure(self):
|
def get_departure(self):
|
||||||
return -(floor(((datetime.now().timestamp() - (self.departure + self.delay*60))/60)*10)/10)
|
return -(floor(((datetime.now().timestamp() - (self.departure + self.delay*60))/60)*10)/10)
|
||||||
|
|
||||||
def data(self):
|
def data(self, id):
|
||||||
if self.updated != 0:
|
if id not in self.updated or self.updated[id] != 0:
|
||||||
self.updated = 0
|
self.updated[id] = 0
|
||||||
return f"{self}"
|
return f"{self}"
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -16,7 +16,6 @@ class LoraController:
|
||||||
|
|
||||||
def __init__(self, main):
|
def __init__(self, main):
|
||||||
self.main = main
|
self.main = main
|
||||||
self.storage = dict()
|
|
||||||
self.devices = []
|
self.devices = []
|
||||||
self.token = ""
|
self.token = ""
|
||||||
|
|
||||||
|
@ -38,6 +37,12 @@ class LoraController:
|
||||||
def new(self, id: int, stop_id: str):
|
def new(self, id: int, stop_id: str):
|
||||||
self.devices.append(LoraDevice(self, id, stop_id))
|
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:
|
class LoraDevice:
|
||||||
|
|
||||||
def __init__(self, controller: LoraController, deveui: int, stop_id: str):
|
def __init__(self, controller: LoraController, deveui: int, stop_id: str):
|
||||||
|
@ -47,16 +52,19 @@ class LoraDevice:
|
||||||
self.message_pool = []
|
self.message_pool = []
|
||||||
self.thread = None
|
self.thread = None
|
||||||
self.port = 1
|
self.port = 1
|
||||||
self.send(lambda: "CLEAR")
|
self.clear()
|
||||||
|
|
||||||
def get_updated_departures(self):
|
def get_updated_departures(self):
|
||||||
self.send_time()
|
self.send_time()
|
||||||
for d in Departure.get(self.stop_id):
|
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)
|
self.send(d.data)
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.send(lambda id: "CLEAR")
|
||||||
|
|
||||||
def send_time(self):
|
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):
|
def send(self, msg):
|
||||||
self.message_pool.append(msg)
|
self.message_pool.append(msg)
|
||||||
|
@ -68,7 +76,7 @@ class LoraDevice:
|
||||||
while not self.controller.main.ended:
|
while not self.controller.main.ended:
|
||||||
if len(self.message_pool) == 0:
|
if len(self.message_pool) == 0:
|
||||||
break
|
break
|
||||||
message = self.message_pool.pop(0)()
|
message = self.message_pool.pop(0)(self.id)
|
||||||
if not message:
|
if not message:
|
||||||
continue
|
continue
|
||||||
url = f"https://lora.plzen.eu/api/v2/nodes/{self.id:0>16x}/queue"
|
url = f"https://lora.plzen.eu/api/v2/nodes/{self.id:0>16x}/queue"
|
||||||
|
@ -88,4 +96,3 @@ class LoraDevice:
|
||||||
if self.port > 3:
|
if self.port > 3:
|
||||||
self.port = 1
|
self.port = 1
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,8 @@ class Main:
|
||||||
self.api = API(self)
|
self.api = API(self)
|
||||||
lora_controller.generate_token()
|
lora_controller.generate_token()
|
||||||
for d in self.config["devices"]:
|
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 = threading.Thread(target=self.update_loop)
|
||||||
self.thread.start()
|
self.thread.start()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue