Added departure resending when sent only once
This commit is contained in:
parent
9e5f67eee7
commit
c11960321f
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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():
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue