Moved message queue to LoraDevice

This commit is contained in:
Filip Znachor 2022-12-12 14:54:11 +01:00
parent 7c3ef92a18
commit a903e4050d
2 changed files with 20 additions and 37 deletions

View file

@ -5,6 +5,7 @@ import threading
from time import sleep
from base64 import b64encode
from datetime import datetime
from random import randint
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
@ -15,9 +16,6 @@ class LoraController:
self.main = main
self.storage = dict()
self.devices = []
# TODO: create separated message pool for each device
self.message_pool = []
self.thread = None
self.token = ""
def generate_token(self):
@ -49,8 +47,18 @@ class LoraController:
if d.stop_id == data.stop_id:
d.send(data.__repr__)
def send(self, id, msg):
self.message_pool.append((id, msg))
class LoraDevice:
def __init__(self, controller: LoraController, deveui: int, stop_id: int):
self.controller = controller
self.id = deveui
self.stop_id = stop_id
self.message_pool = []
self.thread = None
self.send(lambda: "CLEAR")
def send(self, msg):
self.message_pool.append(msg)
if not self.thread or not self.thread.is_alive():
self.thread = threading.Thread(target=self.thread_sending)
self.thread.start()
@ -59,27 +67,15 @@ class LoraController:
while True:
if len(self.message_pool) == 0:
break
data = self.message_pool.pop(0)
url = f"https://lora.plzen.eu/api/v2/nodes/{data[0]:0>16x}/queue"
string = data[1]()
message = self.message_pool.pop(0)
url = f"https://lora.plzen.eu/api/v2/nodes/{self.id:0>16x}/queue"
headers = CaseInsensitiveDict()
headers["Content-Type"] = "application/json"
headers["Authorization"] = f"Bearer {self.token}"
headers["Authorization"] = f"Bearer {self.controller.token}"
payload = {
"confirmed": True,
"data": b64encode(string.encode("utf-8")).decode("ascii"),
"fPort": 10,
"data": b64encode(message().encode("utf-8")).decode("ascii"),
"fPort": randint(1, 50),
"reference": "string"
}
requests.post(url, verify=False, headers=headers, data=json.dumps(payload))
sleep(2)
class LoraDevice:
def __init__(self, controller: LoraController, deveui: int, stop_id: int):
self.controller = controller
self.id = deveui
self.stop_id = stop_id
def send(self, msg):
self.controller.send(self.id, msg)

View file

@ -21,6 +21,7 @@ class Main:
sys.exit(-1)
self.ended = False
lora_controller = LoraController(self)
lora_controller.generate_token()
for d in self.config["devices"]:
lora_controller.new(d["id"], d["stop_id"])
self.controller = lora_controller
@ -66,7 +67,7 @@ class Main:
def update_loop(self):
refetch = 0
regenerate = 0
regenerate = 1
while True:
if self.ended:
@ -101,21 +102,7 @@ class Main:
def input_loop(self):
try:
while not self.ended:
print("> ", end="")
command = input()
if command in ["d", "dep", "departures"]:
for did in Departure.storage:
print(Departure.storage[did])
if len(Departure.storage) == 0:
print("No loaded departures")
if command in ["q", "queue"]:
for m in self.controller.message_pool:
print(m)
if len(self.controller.message_pool) == 0:
print("No messages in queue")
if command in ["s", "stop"]:
self.stop()
except KeyboardInterrupt: