mirror of
https://github.com/pdxlocations/contact.git
synced 2026-03-28 17:12:35 +01:00
81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
import globals
|
|
from meshtastic.protobuf import config_pb2
|
|
import re
|
|
|
|
def get_channels():
|
|
"""Retrieve channels from the node and update globals.channel_list and globals.all_messages."""
|
|
node = globals.interface.getNode('^local')
|
|
device_channels = node.channels
|
|
|
|
# Clear and rebuild channel list
|
|
# globals.channel_list = []
|
|
|
|
for device_channel in device_channels:
|
|
if device_channel.role:
|
|
# Use the channel name if available, otherwise use the modem preset
|
|
if device_channel.settings.name:
|
|
channel_name = device_channel.settings.name
|
|
else:
|
|
# If channel name is blank, use the modem preset
|
|
lora_config = node.localConfig.lora
|
|
modem_preset_enum = lora_config.modem_preset
|
|
modem_preset_string = config_pb2._CONFIG_LORACONFIG_MODEMPRESET.values_by_number[modem_preset_enum].name
|
|
channel_name = convert_to_camel_case(modem_preset_string)
|
|
|
|
# Add channel to globals.channel_list if not already present
|
|
if channel_name not in globals.channel_list:
|
|
globals.channel_list.append(channel_name)
|
|
|
|
# Initialize globals.all_messages[channel_name] if it doesn't exist
|
|
if channel_name not in globals.all_messages:
|
|
globals.all_messages[channel_name] = []
|
|
|
|
|
|
return globals.channel_list
|
|
|
|
def get_node_list():
|
|
node_list = []
|
|
if globals.interface.nodes:
|
|
for node in globals.interface.nodes.values():
|
|
node_list.append(node['num'])
|
|
return node_list
|
|
|
|
def get_nodeNum():
|
|
myinfo = globals.interface.getMyNodeInfo()
|
|
myNodeNum = myinfo['num']
|
|
return myNodeNum
|
|
|
|
def decimal_to_hex(decimal_number):
|
|
return f"!{decimal_number:08x}"
|
|
|
|
def convert_to_camel_case(string):
|
|
words = string.split('_')
|
|
camel_case_string = ''.join(word.capitalize() for word in words)
|
|
return camel_case_string
|
|
|
|
def get_name_from_number(number, type='long'):
|
|
name = ""
|
|
for node in globals.interface.nodes.values():
|
|
if number == node['num']:
|
|
if type == 'long':
|
|
name = node['user']['longName']
|
|
return name
|
|
elif type == 'short':
|
|
name = node['user']['shortName']
|
|
return name
|
|
else:
|
|
pass
|
|
else:
|
|
name = str(decimal_to_hex(number)) # If long name not found, use the ID as string
|
|
return name
|
|
|
|
def sanitize_string(input_str: str) -> str:
|
|
"""Check if the string starts with a letter (a-z, A-Z) or an underscore (_), and replace all non-alpha/numeric/underscore characters with underscores."""
|
|
|
|
if not re.match(r'^[a-zA-Z_]', input_str):
|
|
# If not, add "_"
|
|
input_str = '_' + input_str
|
|
|
|
# Replace special characters with underscores (for database tables)
|
|
sanitized_str: str = re.sub(r'[^a-zA-Z0-9_]', '_', input_str)
|
|
return sanitized_str |