Moved message queue to LoraDevice
This commit is contained in:
parent
7c3ef92a18
commit
a903e4050d
|
@ -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)
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue