From 3fce82e97131fe94897eeb1190c15cf4404bada2 Mon Sep 17 00:00:00 2001 From: Filip Znachor Date: Tue, 20 Dec 2022 17:51:27 +0100 Subject: [PATCH] Added device toggle --- server/api.py | 9 +++++++++ server/lora.py | 16 ++++++++++++---- server/main.py | 4 +++- server/static/admin.html | 4 +++- server/static/admin.js | 4 ++++ 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/server/api.py b/server/api.py index b27ae08..d2e782a 100644 --- a/server/api.py +++ b/server/api.py @@ -79,6 +79,15 @@ class API: d.set_stop(request.forms.get('stop_id')) return {'success': True} + @route('/admin/devices/toggle', method='POST') + def admin_devices_toggle(): + if main.config["admin"]["secret"] != request.forms.get('secret'): + return {'error': "unauthorized"} + for i, d in enumerate(main.controller.devices): + if str(i) == request.forms.get('index'): + d.toggle(request.forms.get('state') == "true") + return {'success': True} + @error(404) def error404(err): return '' diff --git a/server/lora.py b/server/lora.py index 7dd187d..5fee812 100644 --- a/server/lora.py +++ b/server/lora.py @@ -34,21 +34,22 @@ class LoraController: data = requests.post(url, verify=False, headers=headers, data=json.dumps(data)).json() self.token = data["token"] - def new(self, id: int, stop_id: str): - self.devices.append(LoraDevice(self, id, stop_id)) + def new(self, id: int, stop_id: str, enabled: bool): + self.devices.append(LoraDevice(self, id, stop_id, enabled)) def json(self): resp = [] for d in self.devices: - resp.append({'id': f"{d.id:0>16x}", 'stop_id': d.stop_id}) + resp.append({'id': f"{d.id:0>16x}", 'stop_id': d.stop_id, 'enabled': d.enabled}) return resp class LoraDevice: - def __init__(self, controller: LoraController, deveui: int, stop_id: str): + def __init__(self, controller: LoraController, deveui: int, stop_id: str, enabled: bool): self.controller = controller self.id = deveui self.stop_id = stop_id + self.enabled = enabled self.message_pool = [] self.thread = None self.port = 1 @@ -59,6 +60,8 @@ class LoraDevice: self.stop_id = stop_id def get_updated_departures(self): + if not self.enabled: + return self.send_time() for d in Departure.get(self.stop_id): if self.id not in d.updated or d.updated[self.id] > 0: @@ -67,6 +70,11 @@ class LoraDevice: def clear(self): self.send(lambda id: "CLEAR") + def toggle(self, state: bool): + self.enabled = state + if not state: + self.message_pool = [] + def send_time(self): self.send(lambda id: f"TIME|{(datetime.now() - datetime(1970, 1, 1)).total_seconds():.0f}") diff --git a/server/main.py b/server/main.py index e19240a..de76f43 100644 --- a/server/main.py +++ b/server/main.py @@ -26,7 +26,9 @@ class Main: lora_controller.generate_token() for d in self.config["devices"]: if "stop_id" in d: - lora_controller.new(d["id"], str(d["stop_id"])) + if "enabled" not in d: + d["enabled"] = True + lora_controller.new(d["id"], str(d["stop_id"]), d["enabled"]) self.thread = threading.Thread(target=self.update_loop) self.thread.start() diff --git a/server/static/admin.html b/server/static/admin.html index cb5b51b..ee8dc63 100644 --- a/server/static/admin.html +++ b/server/static/admin.html @@ -20,8 +20,10 @@
- + + +
diff --git a/server/static/admin.js b/server/static/admin.js index ab1c3e4..2c06b14 100644 --- a/server/static/admin.js +++ b/server/static/admin.js @@ -29,6 +29,10 @@ let app = createApp({ async device_resend(index) { await api("/admin/devices/resend", {index, secret: this.secret}); }, + async device_toggle(index, state) { + this.devices[index].enabled = state; + await api("/admin/devices/toggle", {index, state, secret: this.secret}); + }, async device_change_stop(index) { let stop_id = prompt("Zadejte ID zastávky:"); if(!stop_id || stop_id.trim() == "") return;