From 66c328a687f6493862bee6466292b4af05a7c9a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 30 Mar 2024 23:29:05 +0100 Subject: [PATCH] assign node config and ibeacon config automatically --- src/c3nav/mesh/consumers.py | 128 ++++++++++++++++++ .../mesh/templates/mesh/node_detail.html | 2 +- 2 files changed, 129 insertions(+), 1 deletion(-) diff --git a/src/c3nav/mesh/consumers.py b/src/c3nav/mesh/consumers.py index 705903bc..4cfceda9 100644 --- a/src/c3nav/mesh/consumers.py +++ b/src/c3nav/mesh/consumers.py @@ -47,6 +47,108 @@ class NodeState: ota_recipient: Optional[OTAUpdateRecipient] = None +node_assignments = {'54:32:04:b6:fc:cd': (1, 'Alpheratz'), + '54:32:04:b7:e2:35': (2, 'Ankaa'), + '54:32:04:b7:8a:4d': (3, 'Schedar'), + '54:32:04:b5:29:21': (4, 'Diphda'), + '54:32:04:b8:51:05': (5, 'Achernar'), + '54:32:04:b8:b8:05': (6, 'Hamal'), + '54:32:04:b7:40:01': (7, 'Acamar'), + '54:32:04:b6:ec:fd': (8, 'Menkar'), + '54:32:04:b5:e6:f5': (9, 'Mirfak'), + '54:32:04:b7:47:d9': (10, 'Aldebaran'), + '54:32:04:b7:7c:f1': (11, 'Rigel'), + '54:32:04:b5:d3:d1': (12, 'Capella'), + '54:32:04:b6:17:f1': (13, 'Bellatrix'), + '30:30:f9:c3:70:15': (14, 'Elnath'), + '54:32:04:b5:2e:31': (15, 'Alnilam'), + '54:32:04:b5:c4:d5': (16, 'Betelgeuse'), + '54:32:04:b7:72:39': (17, 'Canopus'), + '54:32:04:b7:75:05': (18, 'Sirius'), + '54:32:04:b7:3d:59': (19, 'Adhara'), + '54:32:04:b8:ac:31': (20, 'Procyon'), + '54:32:04:b7:46:89': (21, 'Pollux'), + '54:32:04:b7:83:e5': (22, 'Avior'), + '54:32:04:b7:1b:ed': (23, 'Suhail'), + '54:32:04:b7:84:99': (24, 'Miaplacidus'), + '54:32:04:b6:cf:c1': (25, 'Alphard'), + '48:31:b7:aa:57:c9': (26, 'Regulus'), + '54:32:04:b7:cb:f5': (27, 'Dubhe'), + '54:32:04:b5:67:b1': (28, 'Denebola'), + '48:31:b7:ac:ad:71': (29, 'Gienah'), + '54:32:04:b6:9a:71': (30, 'Acrux'), + '54:32:04:b7:61:95': (31, 'Gacrux'), + '54:32:04:b8:6f:49': (32, 'Alioth'), + '30:30:f9:c3:9c:f9': (33, 'Spica'), + '48:31:b7:ac:c7:f1': (34, 'Alkaid'), + '54:32:04:b5:5f:8d': (35, 'Hadar'), + '54:32:04:b7:1c:61': (36, 'Menkent'), + '54:32:04:b8:78:69': (37, 'Arcturus'), + '48:31:b7:ac:a6:89': (38, 'Rigil Kentaurus'), + '54:32:04:b7:3e:89': (39, 'Zubenelgenubi'), + '48:31:b7:aa:34:05': (40, 'Kochab'), + '54:32:04:b7:0d:b9': (41, 'Alphecca'), + '54:32:04:b5:a3:7d': (42, 'Antares'), + '54:32:04:b7:f7:39': (43, 'Atria'), + '54:32:04:b5:a9:79': (44, 'Sabik'), + '54:32:04:b7:25:49': (45, 'Shaula'), + '54:32:04:b7:3d:f9': (46, 'Rasalgethi'), + '54:32:04:b6:fc:c5': (47, 'Eltanin'), + '48:31:b7:aa:1a:25': (48, 'Kaus Australis'), + '48:31:b7:aa:49:85': (49, 'Vega'), + '48:31:b7:aa:66:01': (50, 'Nunki'), + '48:31:b7:aa:36:7d': (51, 'Altair'), + '48:31:b7:aa:3e:01': (52, 'Peacock'), + '54:32:04:b6:ef:4d': (53, 'Deneb'), + '54:32:04:b5:cc:a1': (54, 'Enif'), + '48:31:b7:aa:b4:35': (55, 'Alnair'), + '48:31:b7:ac:8a:a5': (56, 'Fomalhaut'), + '48:31:b7:ab:98:6d': (57, 'Markab'), + '54:32:04:b6:e9:e1': (58, 'Mimosa'), + '54:32:04:b6:fe:01': (59, 'Toliman'), + '54:32:04:b7:4b:2d': (60, 'Alnitak'), + '48:31:b7:ac:2d:9d': (61, 'Wezen'), + '48:31:b7:ab:d9:3d': (62, 'Sargas'), + '48:31:b7:aa:24:81': (63, 'Menkalinan'), + '54:32:04:b5:95:4d': (65, 'Polaris'), + '54:32:04:b5:30:7d': (66, 'Castor'), + '54:32:04:b7:db:ed': (67, 'Mirzam'), + '48:31:b7:ac:c2:d1': (68, 'Alsephina'), + '48:31:b7:aa:21:45': (69, 'Saiph'), + '48:31:b7:ac:c1:7d': (70, 'Rasalhague'), + '48:31:b7:aa:1a:7d': (71, 'Algol'), + '30:30:f9:c3:7c:dd': (72, 'Almach'), + '54:32:04:b6:19:25': (73, 'Tiaki'), + '48:31:b7:aa:c4:45': (74, 'Aspidiske'), + '48:31:b7:ac:35:05': (75, 'Naos'), + '30:30:f9:c3:7c:d1': (76, 'Mizar'), + '54:32:04:b7:04:41': (77, 'Sadr'), + '54:32:04:b5:c3:19': (78, 'Mintaka'), + '54:32:04:b5:66:19': (79, 'Caph'), + '48:31:b7:ac:a4:11': (80, 'Dschubba'), + '54:32:04:b5:31:fd': (81, 'Larawag'), + '54:32:04:b8:1f:d9': (82, 'Merak'), + '30:30:f9:c3:82:0d': (83, 'Izar'), + '54:32:04:b5:b0:79': (84, 'Phecda'), + '54:32:04:b6:fb:8d': (85, 'Scheat'), + '54:32:04:b8:b5:61': (86, 'Alderamin'), + '54:32:04:b7:3b:a9': (87, 'Aludra'), + '54:32:04:b6:df:41': (88, 'Acrab'), + '54:32:04:b7:d0:05': (89, 'Markeb'), + '54:32:04:b7:cc:65': (90, 'Zosma'), + '54:32:04:b7:4e:25': (91, 'Arneb'), + '54:32:04:b8:8c:29': (92, 'Ascella'), + '54:32:04:b7:3d:25': (93, 'Algieba'), + '54:32:04:b8:72:29': (94, 'Zubeneschamali'), + '54:32:04:b8:8a:a5': (95, 'Unukalhai'), + '54:32:04:b8:b8:7d': (96, 'Sheratan'), + '54:32:04:b8:aa:95': (97, 'Kraz'), + '54:32:04:b5:4e:99': (98, 'Mahasim'), + '54:32:04:b7:86:05': (99, 'Phact'), + '54:32:04:b7:8b:d5': (100, 'Ruchbah')} + + + class MeshConsumer(AsyncWebsocketConsumer): mesh_msg_format = CFormat.from_annotation(MeshMessage) def __init__(self): @@ -301,6 +403,32 @@ class MeshConsumer(AsyncWebsocketConsumer): print('queue requested chunk sending') await self.ota_set_chunks(node_status.ota_recipient.update, chunks=set(msg.content.chunks)) + if isinstance(msg.content, messages.ConfigNodeMessage): + # todo: this could be nice if it was configurable + if msg.content.number == 0: + node_assignment = node_assignments.get(msg.src) + if node_assignment: + number, name = node_assignment + await self.send_msg(messages.MeshMessage( + src=MESH_ROOT_ADDRESS, + dst=msg.src, + content=messages.ConfigNodeMessage( + number=number, + name=name, + ) + )) + else: + await self.send_msg(messages.MeshMessage( + src=MESH_ROOT_ADDRESS, + dst=msg.src, + content=messages.ConfigIBeaconMessage( + uuid="a142621a-2f42-09b3-245b-e1ac6356e9b0", + major=1337, + minor=msg.content.number, + ) + )) + + @database_sync_to_async def create_uplink_in_database(self, address): with transaction.atomic(): diff --git a/src/c3nav/mesh/templates/mesh/node_detail.html b/src/c3nav/mesh/templates/mesh/node_detail.html index fcfd19e6..8884f770 100644 --- a/src/c3nav/mesh/templates/mesh/node_detail.html +++ b/src/c3nav/mesh/templates/mesh/node_detail.html @@ -69,7 +69,7 @@

- {% trans 'Chaange board settings' %} + {% trans 'Change board settings' %}