diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2024-02-20 02:33:09 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2024-02-20 02:33:09 +0300 |
commit | 03440a282cc4f130e36995da7bf2e3b34e8b4193 (patch) | |
tree | ecfc7428ffc897a5dcbcedde8495202c1e16dcad /bin | |
parent | b6ebabed82ce2b609b1e3c4917f9105bc7d1c8dd (diff) |
mqtt_node_util: support arbitrary node ids
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/mqtt_node_util.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/bin/mqtt_node_util.py b/bin/mqtt_node_util.py index 639d4b9..a685f26 100755 --- a/bin/mqtt_node_util.py +++ b/bin/mqtt_node_util.py @@ -41,9 +41,13 @@ def on_mqtt_connect(): if __name__ == '__main__': nodes_config = MqttNodesConfig() + node_names = nodes_config.get_nodes(only_names=True) parser = ArgumentParser() - parser.add_argument('--node-id', type=str, required=True, choices=nodes_config.get_nodes(only_names=True)) + parser.add_argument('--node-id', type=str, required=True, + help='one of: '+', '.join(node_names)) + parser.add_argument('--node-id-no-check', action='store_true', + help='when enabled, the script will not check for definition of the node in the mqtt_nodes.yaml config and will use the default password') parser.add_argument('--modules', type=str, choices=get_mqtt_modules(), nargs='*', help='mqtt modules to include') parser.add_argument('--switch-relay', choices=[0, 1], type=int, @@ -56,6 +60,9 @@ if __name__ == '__main__': config.load_app(parser=parser, no_config=True) arg = parser.parse_args() + if not arg.node_id_no_check and arg.node_id not in node_names: + raise ArgumentError(None, f'invalid node_id {arg.node_id}') + if arg.no_wait: no_wait = True @@ -65,8 +72,16 @@ if __name__ == '__main__': mqtt = MqttWrapper(randomize_client_id=True, client_id='mqtt_node_util') mqtt.add_connect_callback(on_mqtt_connect) + + try: + node_password = nodes_config.get_node(arg.node_id)['password'] + except KeyError as e: + if arg.node_id_no_check: + node_password = nodes_config['common']['password'] + else: + raise e mqtt_node = MqttNode(node_id=arg.node_id, - node_secret=nodes_config.get_node(arg.node_id)['password']) + node_secret=node_password) mqtt.add_node(mqtt_node) |