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:
last_stop = last_stop[:20].strip() + "..."
self.did = did
self.sent = 0
self.stop_id = stop_id
self.id = Departure.get_id()
self.line = line
@ -53,14 +54,18 @@ class Departure:
self.departure = departure
self.delay = delay
self.controller = lora_controller
self.controller.data(self)
self.send()
Departure.storage[did] = self
def update(self, delay):
if delay != self.delay:
self.controller.data(self)
self.send()
self.delay = delay
def send(self):
self.controller.data(self)
self.sent += 1
def get_departure(self):
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
import json
import threading
from operator import itemgetter
from base64 import b64encode
from datetime import datetime
from random import randint
from random import randint, shuffle
from time import sleep
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
@ -36,15 +38,13 @@ class LoraController:
self.devices.append(LoraDevice(self, id, stop_id))
def time(self):
def to_string():
return f"TIME|{(datetime.now() - datetime(1970, 1, 1)).total_seconds():.0f}"
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):
for d in self.devices:
if d.stop_id == data.stop_id:
d.send(data.__repr__)
d.send_departure(data)
class LoraDevice:
@ -54,8 +54,25 @@ class LoraDevice:
self.stop_id = stop_id
self.message_pool = []
self.thread = None
self.sent_departures = {}
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):
self.message_pool.append(msg)
if not self.thread or not self.thread.is_alive():

View file

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