diff --git a/.vscode/launch.json b/.vscode/launch.json index 4103a6a..7d8fa48 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,7 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { "name": "meshtastic BLE", "type": "debugpy", @@ -262,6 +263,14 @@ "justMyCode": true, "args": ["--nodes", "--show-fields", "AKA,Pubkey,Role,Role,Role,Latitude,Latitude,deviceMetrics.voltage"] } + { + "name": "meshtastic --export-config", + "type": "debugpy", + "request": "launch", + "module": "meshtastic", + "justMyCode": true, + "args": ["--export-config", "config.json"] + }, ] } diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 978da0a..b46d512 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -1122,11 +1122,31 @@ def subscribe() -> None: # pub.subscribe(onNode, "meshtastic.node") +def ensure_true_defaults(config_dict: dict, true_defaults: set[tuple[str, ...]]) -> None: + """Ensure that default=True keys are present in the config_dict and set to True.""" + for path in true_defaults: + d = config_dict + for key in path[:-1]: + if key not in d or not isinstance(d[key], dict): + d[key] = {} + d = d[key] + if path[-1] not in d: + d[path[-1]] = True def export_config(interface) -> str: """used in --export-config""" configObj = {} + true_defaults = { + ("bluetooth", "enabled"), + ("lora", "sx126xRxBoostedGain"), + ("lora", "txEnabled"), + ("lora", "usePreset"), + ("position", "positionBroadcastSmartEnabled"), + ("security", "serialEnabled"), + ("mqtt", "encryptionEnabled"), + } + owner = interface.getLongName() owner_short = interface.getShortName() channel_url = interface.localNode.getURL() @@ -1185,6 +1205,8 @@ def export_config(interface) -> str: else: configObj["config"] = config + ensure_true_defaults(configObj["config"], true_defaults) + module_config = MessageToDict(interface.localNode.moduleConfig) if module_config: # Convert inner keys to correct snake/camelCase