From d566a7fdbb4582985b51cff644cc1bedc555b5d4 Mon Sep 17 00:00:00 2001 From: Mike Geppert Date: Tue, 5 Aug 2025 01:13:43 -0500 Subject: [PATCH] Implement console parameters feature to set Tasmota device settings --- README.md | 30 ++++++++++++++++++++++++++++-- TasmotaManager.py | 18 ++++++++++++++++++ network_configuration.json | 1 - 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a6db253..666282d 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,22 @@ Create a `network_configuration.json` file with the following structure: "Password": "mqtt-password", "Topic": "%hostname_base%", "FullTopic": "%prefix%/%topic%/", - "NoRetain": false + "NoRetain": false, + "console": { + "SwitchRetain": "Off", + "ButtonRetain": "Off", + "PowerOnState": "3", + "PowerRetain": "On", + "SetOption1": "0", + "SetOption3": "1", + "SetOption13": "0", + "SetOption19": "0", + "SetOption32": "8", + "SetOption53": "1", + "SetOption73": "1", + "rule1": "on button1#state=10 do power0 toggle endon", + "rule2": "1" + } } } ``` @@ -107,12 +122,23 @@ The script can process devices that match patterns in the `unknown_device_patter This feature helps automate the setup of new Tasmota devices that haven't been properly named yet. +## Console Parameters + +The script supports setting Tasmota console parameters via the `console` section in the MQTT configuration. After verifying and updating MQTT settings, the script will apply all console parameters to each device. This allows you to: + +- Configure device behavior (PowerOnState, SetOptions, etc.) +- Set up rules for button actions +- Configure retain flags for various message types +- Apply any other Tasmota console commands + +Each parameter is sent as a command to the device using the Tasmota HTTP API. The device details in `TasmotaDevices.json` will include a `console_status` field indicating whether console parameters were updated. + ## Output Files The script generates several output files: - `current.json`: List of currently active Tasmota devices - `deprecated.json`: Devices that were previously active but are no longer present -- `TasmotaDevices.json`: Detailed information about each device +- `TasmotaDevices.json`: Detailed information about each device, including MQTT and console parameter status ## License diff --git a/TasmotaManager.py b/TasmotaManager.py index 08ebd58..87d41b0 100644 --- a/TasmotaManager.py +++ b/TasmotaManager.py @@ -718,6 +718,23 @@ class TasmotaDiscovery: # Check and update MQTT settings if needed mqtt_updated = check_mqtt_settings(ip, name, mqtt_data) + + # Set console parameters from config + console_updated = False + console_params = mqtt_config.get('console', {}) + if console_params: + self.logger.info(f"{name}: Setting console parameters from configuration") + for param, value in console_params.items(): + try: + url = f"http://{ip}/cm?cmnd={param}%20{value}" + response = requests.get(url, timeout=5) + if response.status_code == 200: + self.logger.debug(f"{name}: Set console parameter {param} to {value}") + console_updated = True + else: + self.logger.error(f"{name}: Failed to set console parameter {param}") + except requests.exceptions.RequestException as e: + self.logger.error(f"{name}: Error setting console parameter {param}: {str(e)}") device_detail = { "name": name, @@ -726,6 +743,7 @@ class TasmotaDiscovery: "version": status_data.get("StatusFWR", {}).get("Version", "Unknown"), "hostname": network_data.get("StatusNET", {}).get("Hostname", "Unknown"), "mqtt_status": "Updated" if mqtt_updated else "Verified", + "console_status": "Updated" if console_updated else "Verified", "last_checked": time.strftime("%Y-%m-%d %H:%M:%S"), "status": "online" } diff --git a/network_configuration.json b/network_configuration.json index ae0da3a..194220b 100644 --- a/network_configuration.json +++ b/network_configuration.json @@ -30,7 +30,6 @@ "NoRetain": false, "console": { "SwitchRetain": "Off", - "ButtonRetain": "On", "ButtonRetain": "Off", "PowerOnState": "3", "PowerRetain": "On",