Added departure resending when sent only once

This commit is contained in:
Filip Znachor 2022-12-13 19:13:10 +01:00
parent 9e5f67eee7
commit c11960321f
3 changed files with 35 additions and 7 deletions

View file

@ -45,6 +45,7 @@ class Departure:
if len(last_stop) >= 21: if len(last_stop) >= 21:
last_stop = last_stop[:20].strip() + "..." last_stop = last_stop[:20].strip() + "..."
self.did = did self.did = did
self.sent = 0
self.stop_id = stop_id self.stop_id = stop_id
self.id = Departure.get_id() self.id = Departure.get_id()
self.line = line self.line = line
@ -53,14 +54,18 @@ class Departure:
self.departure = departure self.departure = departure
self.delay = delay self.delay = delay
self.controller = lora_controller self.controller = lora_controller
self.controller.data(self) self.send()
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.controller.data(self) self.send()
self.delay = delay self.delay = delay
def send(self):
self.controller.data(self)
self.sent += 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)

View file

@ -2,9 +2,11 @@ import requests
from requests.structures import CaseInsensitiveDict from requests.structures import CaseInsensitiveDict
import json import json
import threading import threading
from operator import itemgetter
from base64 import b64encode from base64 import b64encode
from datetime import datetime from datetime import datetime
from random import randint from random import randint, shuffle
from time import sleep
import urllib3 import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
@ -36,15 +38,13 @@ class LoraController:
self.devices.append(LoraDevice(self, id, stop_id)) self.devices.append(LoraDevice(self, id, stop_id))
def time(self): def time(self):
def to_string():
return f"TIME|{(datetime.now() - datetime(1970, 1, 1)).total_seconds():.0f}"
for d in self.devices: for d in self.devices:
d.send(to_string) d.send(lambda: f"TIME|{(datetime.now() - datetime(1970, 1, 1)).total_seconds():.0f}")
def data(self, data): def data(self, data):
for d in self.devices: for d in self.devices:
if d.stop_id == data.stop_id: if d.stop_id == data.stop_id:
d.send(data.__repr__) d.send_departure(data)
class LoraDevice: class LoraDevice:
@ -54,8 +54,25 @@ class LoraDevice:
self.stop_id = stop_id self.stop_id = stop_id
self.message_pool = [] self.message_pool = []
self.thread = None self.thread = None
self.sent_departures = {}
self.send(lambda: "CLEAR") self.send(lambda: "CLEAR")
def resend(self):
to_send = []
for d in self.sent_departures:
if self.sent_departures[d] <= 2:
to_send.append(d)
shuffle(to_send)
for d in to_send[:1]:
self.send_departure(d)
def send_departure(self, departure):
if departure not in self.sent_departures:
self.sent_departures[departure] = 1
else:
self.sent_departures[departure] += 1
self.send(departure.__repr__)
def send(self, msg): def send(self, msg):
self.message_pool.append(msg) self.message_pool.append(msg)
if not self.thread or not self.thread.is_alive(): if not self.thread or not self.thread.is_alive():

View file

@ -68,11 +68,16 @@ class Main:
def update_loop(self): def update_loop(self):
refetch = 0 refetch = 0
regenerate = 1 regenerate = 1
resend = 1
while True: while True:
if self.ended: if self.ended:
break break
if resend == 0:
for d in self.controller.devices:
d.resend()
if regenerate == 0: if regenerate == 0:
self.controller.generate_token() self.controller.generate_token()
@ -83,6 +88,7 @@ class Main:
refetch = (refetch + 1) % 3 refetch = (refetch + 1) % 3
regenerate = (regenerate + 1) % (6*30) regenerate = (regenerate + 1) % (6*30)
resend = (resend + 1) % 7
sleep(.1) sleep(.1)