From 6433b1717034254aec77cd1f56884a76e3b2709a Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 14 Feb 2024 18:37:08 +0100 Subject: [PATCH 01/35] Bump to v13.4.0.1 --- README.md | 2 +- decode-config.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 646d8bc..efa1994 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v13.4.0.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index caeffcc..3ed0052 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.0.0', + 'VERSION': '13.4.0.1', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2831,10 +2831,10 @@ def match(self, setting_hardware, config_version): 'counter_both_edges': (HARDWARE.ESP, ' Date: Wed, 28 Feb 2024 18:11:10 +0100 Subject: [PATCH 02/35] Fix cmnd Module2 output (#87) --- decode-config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decode-config.py b/decode-config.py index 3ed0052..bcb4cc7 100755 --- a/decode-config.py +++ b/decode-config.py @@ -1921,7 +1921,7 @@ def match(self, setting_hardware, config_version): # ====================================================================== SETTING_8_3_1_6 = copy.copy(SETTING_8_3_1_5) SETTING_8_3_1_6.update ({ - 'fallback_module': (HARDWARE.ESP, 'B', 0xF42, (None, None, ('Management', '"Module2 {}".format($)')) ), + 'fallback_module': (HARDWARE.ESP, 'B', 0xF42, (None, None, ('Management', '"Module2 {}".format($+1 & 0xff)')) ), 'zb_channel': (HARDWARE.ESP, 'B', 0xF32, (None, '11 <= $ <= 26', ('Zigbee', None)) ), 'zb_txradio_dbm': (HARDWARE.ESP, 'B', 0xF33, (None, None, ('Zigbee', '"ZbConfig {{\\\"Channel\\\":{},\\\"PanID\\\":\\\"0x{:04X}\\\",\\\"ExtPanID\\\":\\\"0x{:016X}\\\",\\\"KeyL\\\":\\\"0x{:016X}\\\",\\\"KeyH\\\":\\\"0x{:016X}\\\",\\\"TxRadio\\\":{}}}".format(@["zb_channel"], @["zb_pan_id"], @["zb_ext_panid"], @["zb_precfgkey_l"], @["zb_precfgkey_h"],@["zb_txradio_dbm"])')) ), }) From d1eabdee33e358f41224e917c03c1b9d2d19c4e2 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 1 Mar 2024 10:59:33 +0100 Subject: [PATCH 03/35] Fix cmnd Module output --- decode-config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decode-config.py b/decode-config.py index bcb4cc7..344e110 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2367,9 +2367,9 @@ def match(self, setting_hardware, config_version): 'eth_address_esp32s3': (HARDWARE.ESP32S3, 'B', 0x45E, (None, '0 <= $ <= 31', ('Wifi', '"EthAddress {}".format($)')) ), 'module': (HARDWARE.ESP32 ^ HARDWARE.ESP32S3, - 'B', 0x474, (None, None, ('Management', '"Module {}".format($)')) ), + 'B', 0x474, (None, None, ('Management', '"Module {}".format($+1 & 0xff)')) ), 'module_esp32s3': (HARDWARE.ESP32S3, - 'B', 0x45F, (None, None, ('Management', '"Module {}".format($)')) ), + 'B', 0x45F, (None, None, ('Management', '"Module {}".format($+1 & 0xff)')) ), 'webcam_config': (HARDWARE.ESP32 ^ HARDWARE.ESP32S3, { 'stream': (HARDWARE.ESP32 ^ HARDWARE.ESP32S3, ' Date: Fri, 1 Mar 2024 11:00:09 +0100 Subject: [PATCH 04/35] Bump to v13.4.0.2 --- README.md | 2 +- decode-config.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index efa1994..88ddc9e 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.0.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v13.4.0.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 344e110..117fb3b 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.0.1', + 'VERSION': '13.4.0.2', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2831,10 +2831,10 @@ def match(self, setting_hardware, config_version): 'counter_both_edges': (HARDWARE.ESP, ' Date: Fri, 1 Mar 2024 19:15:45 +0100 Subject: [PATCH 05/35] Fix settings range validation --- decode-config.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/decode-config.py b/decode-config.py index 117fb3b..3e09406 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2247,6 +2247,7 @@ def match(self, setting_hardware, config_version): SETTING_9_5_0_5[SETTINGVAR][HARDWARE.hstr(HARDWARE.ESP)].extend(['SET_MAX']) SETTING_9_5_0_5[SETTINGVAR][HARDWARE.hstr(HARDWARE.ESP82)].extend(['SET_MAX']) SETTING_9_5_0_5[SETTINGVAR][HARDWARE.hstr(HARDWARE.ESP32)].extend(['SET_MAX']) +SETTING_9_5_0_5.pop('adc_param_type', None) SETTING_9_5_0_5.update ({ 'ipv4_rgx_address': (HARDWARE.ESP, ' Date: Mon, 11 Mar 2024 01:45:19 +0000 Subject: [PATCH 06/35] Bump softprops/action-gh-release from 1 to 2 Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2. - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2) --- updated-dependencies: - dependency-name: softprops/action-gh-release dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build_assets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_assets.yml b/.github/workflows/build_assets.yml index d1b90e1..57a873a 100644 --- a/.github/workflows/build_assets.yml +++ b/.github/workflows/build_assets.yml @@ -53,6 +53,6 @@ jobs: - name: Build self-contained executable with pyinstaller for ${{matrix.TARGET}} run: ${{matrix.CMD_BUILD}} - name: Upload asset for ${{matrix.TARGET}} - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: files: ${{matrix.OUT_FILE_NAME}} From 11e6dead8c729ce8b00d66546d142d7c2743a30f Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Mon, 18 Mar 2024 14:14:42 +0100 Subject: [PATCH 07/35] Bump to v13.4.0.3 --- README.md | 2 +- decode-config.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 88ddc9e..f1ce2e7 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.0.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v13.4.0.3-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 3e09406..7ac56ef 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.0.2', + 'VERSION': '13.4.0.3', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2832,10 +2832,10 @@ def match(self, setting_hardware, config_version): 'counter_both_edges': (HARDWARE.ESP, ' Date: Fri, 5 Apr 2024 09:07:38 +0200 Subject: [PATCH 08/35] Update v13.4.0.4 settings --- README.md | 2 +- decode-config.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f1ce2e7..820185d 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.0.3-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v13.4.0.4-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 7ac56ef..0cc3f52 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.0.3', + 'VERSION': '13.4.0.4', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2692,6 +2692,7 @@ def match(self, setting_hardware, config_version): }) # ====================================================================== SETTING_12_2_0_2 = copy.deepcopy(SETTING_12_1_1_6) +SETTING_12_2_0_2.pop('energy_kWhtotal',None) SETTING_12_2_0_2.update ({ 'energy_power_calibration2': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), + }) # ====================================================================== SETTINGS = [ - (0x0D040003,0x1000, SETTING_13_4_0_3), + (0x0D040004,0x1000, SETTING_13_4_0_4), (0x0D030005,0x1000, SETTING_13_3_0_5), (0x0D030002,0x1000, SETTING_13_3_0_2), (0x0D020003,0x1000, SETTING_13_2_0_3), From b721f6fd38393d7e80761dccf074e1c8e34695ad Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 5 Apr 2024 09:44:13 +0200 Subject: [PATCH 09/35] Reformat settings --- decode-config.py | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/decode-config.py b/decode-config.py index 0cc3f52..64b1700 100755 --- a/decode-config.py +++ b/decode-config.py @@ -317,8 +317,7 @@ def module_import_error(module): : defines the use of data at format is defined in 'struct module format string' - see - https://docs.python.org/3.8/library/struct.html#format-strings + see https://docs.python.org/3/library/struct.html#format-strings : A dictionary describes a (sub)setting dictonary and can recursively define another @@ -772,7 +771,7 @@ def match(self, setting_hardware, config_version): }, 0x2E8, (None, None, ('Control', None)), (None, None) ), 'pwm_value': (HARDWARE.ESP, ' Date: Wed, 10 Apr 2024 10:56:39 +0200 Subject: [PATCH 10/35] Add topic macro @t for backup/restore filenames --- README.md | 155 ++++++++++++++++++++++------------------------- decode-config.py | 17 ++++-- 2 files changed, 83 insertions(+), 89 deletions(-) diff --git a/README.md b/README.md index 820185d..0850867 100644 --- a/README.md +++ b/README.md @@ -330,6 +330,7 @@ Note: This is the static hostname which is configured by the command *Hostname*, Note: This can be different to the configured hostname as this can contain also macros).source * **@F** is replaced by the filename of MQTT request (only for MQTT sources, backup filenames only). This is usually the filename that Tasmota uses when saving the configuration in the WebUI. +* **@t** is replaced by *Topic* (backup & restore filenames) Example: @@ -729,18 +730,15 @@ For advanced help use parameter `-H` or `--full-help`.
```help - usage: decode-config.py [-s ] [-p ] - [--fulltopic ] [--cafile ] - [--certfile ] [--keyfile ] [--insecure] - [--keepalive ] [-i ] + usage: decode-config.py [-s ] [-p ] [--fulltopic ] + [--cafile ] [--certfile ] [--keyfile ] + [--insecure] [--keepalive ] [-i ] [-o ] [-t json|bin|dmp] [-E] [-e] [-F] - [--json-indent ] [--json-compact] - [--json-show-pw] [--cmnd-indent ] - [--cmnd-groups] [--cmnd-sort] - [--cmnd-use-rule-concat] [--cmnd-use-backlog] - [-c ] [-S] [-T json|cmnd|command] - [-g [ ...]] [-w] [--dry-run] - [-h] [-H] [-v] [-V] + [--json-indent ] [--json-compact] [--json-show-pw] + [--cmnd-indent ] [--cmnd-groups] [--cmnd-sort] + [--cmnd-use-rule-concat] [--cmnd-use-backlog] [-c ] + [-S] [-T json|cmnd|command] [-g [ ...]] + [-w] [--dry-run] [-h] [-H] [-v] [-V] Backup/Restore Tasmota configuration data. @@ -748,36 +746,33 @@ For advanced help use parameter `-H` or `--full-help`. Read/Write Tasmota configuration from/to -s, --source - source used for the Tasmota configuration (default: - None). Specify source type, path, file, user, - password, hostname, port and topic at once as an - URL. The URL must be in the form 'scheme://[usernam - e[:password]@]host[:port][/topic]|pathfile'where - scheme is 'file' for a tasmota binary config file, - 'http' for a Tasmota HTTP web connection and - 'mqtt(s)' for Tasmota MQTT transport ('mqtts' uses - a TLS connection to MQTT server) + source used for the Tasmota configuration (default: None). + Specify source type, path, file, user, password, hostname, port + and topic at once as an URL. The URL must be in the form + 'scheme://[username[:password]@]host[:port][/topic]|pathfile' + where 'scheme' is 'file' for a tasmota binary config file, + 'http' for a Tasmota HTTP web connection and 'mqtt(s)' for + Tasmota MQTT transport ('mqtts' uses a TLS connection to MQTT + server) -p, --password - Web server password on HTTP source (set by Tasmota - 'WebPassword' command), MQTT server password in - MQTT source (set by Tasmota 'MqttPassword' command) - (default: None) + Web server password on HTTP source (set by Tasmota 'WebPassword' + command), MQTT server password in MQTT source (set by Tasmota + 'MqttPassword' command) (default: None) MQTT: MQTT transport settings - --fulltopic Optional MQTT transport fulltopic used for - accessing Tasmota device (default: ) - --cafile Enables SSL/TLS connection: path to a or filename - of the Certificate Authority certificate files that - are to be treated as trusted by this client - (default None) - --certfile Enables SSL/TLS connection: filename of a PEM - encoded client certificate file (default None) - --keyfile Enables SSL/TLS connection: filename of a PEM - encoded client private key file (default None) - --insecure suppress verification of the MQTT server hostname - in the server certificate (default False) + --fulltopic Optional MQTT transport fulltopic used for accessing Tasmota + device (default: ) + --cafile Enables SSL/TLS connection: path to a or filename of the + Certificate Authority certificate files that are to be treated + as trusted by this client (default None) + --certfile Enables SSL/TLS connection: filename of a PEM encoded client + certificate file (default None) + --keyfile Enables SSL/TLS connection: filename of a PEM encoded client + private key file (default None) + --insecure suppress verification of the MQTT server hostname in the server + certificate (default False) --keepalive keepalive timeout for the client (default 60) Backup/Restore: @@ -785,73 +780,66 @@ For advanced help use parameter `-H` or `--full-help`. -i, --restore-file file to restore configuration from (default: None). - Replacements: @v=firmware version from config, - @d=devicename, @f=friendlyname1, @h=hostname from - config, @H=device hostname (http source only) + Replacements: @v=firmware version from config, @d=devicename, + @f=friendlyname1, @h=hostname from config, @H=device hostname + (http source only), @t=topic -o, --backup-file - file to backup configuration to, can be specified - multiple times (default: None). Replacements: - @v=firmware version from config, @d=devicename, - @f=friendlyname1, @h=hostname from config, - @H=device hostname (http source only), - @F=configuration filename from MQTT request (mqtt - source only) + file to backup configuration to, can be specified multiple times + (default: None). Replacements: @v=firmware version from config, + @d=devicename, @f=friendlyname1, @h=hostname from config, + @H=device hostname (http source only), @F=configuration filename + from MQTT request (mqtt source only), @t=topic -t, --backup-type json|bin|dmp backup filetype (default: 'json') - -E, --extension append filetype extension for -i and -o filename - (default) - -e, --no-extension do not append filetype extension, use -i and -o - filename as passed + -E, --extension append filetype extension for -i and -o filename (default) + -e, --no-extension do not append filetype extension, use -i and -o filename as + passed -F, --force-restore force restore even configuration is identical JSON output: - JSON format specification. To revert an option, insert "dont" or "no" - after "json", e.g. --json-no-indent, --json-dont-show-pw + JSON format specification. To revert an option, insert "dont" or "no" after "json", + e.g. --json-no-indent, --json-dont-show-pw --json-indent - pretty-printed JSON output using indent level - (default: 'None'). -1 disables indent. + pretty-printed JSON output using indent level (default: 'None'). + -1 disables indent. --json-compact compact JSON output by eliminate whitespace --json-show-pw unhide passwords (default) Tasmota command output: - Tasmota command output format specification. To revert an option, - insert "dont" or "no" after "cmnd", e.g. --cmnd-no-indent, --cmnd-dont- - sort + Tasmota command output format specification. To revert an option, insert "dont" or + "no" after "cmnd", e.g. --cmnd-no-indent, --cmnd-dont-sort --cmnd-indent - Tasmota command grouping indent level (default: - '2'). 0 disables indent + Tasmota command grouping indent level (default: '2'). 0 disables + indent --cmnd-groups group Tasmota commands (default) --cmnd-sort sort Tasmota commands (default) --cmnd-use-rule-concat - use rule concatenation with + for Tasmota 'Rule' - command - --cmnd-use-backlog use 'Backlog' for Tasmota commands as much as - possible + use rule concatenation with + for Tasmota 'Rule' command + --cmnd-use-backlog use 'Backlog' for Tasmota commands as much as possible Common: Optional arguments -c, --config - program config file - can be used to set default - command parameters (default: None) - -S, --output display output regardsless of backup/restore usage - (default do not output on backup or restore usage) + program config file - can be used to set default command + parameters (default: None) + -S, --output display output regardsless of backup/restore usage (default do + not output on backup or restore usage) -T, --output-format json|cmnd|command display output format (default: 'json') -g, --group - limit data processing to command groups ['Control', - 'Display', 'Domoticz', 'Hdmi', 'Internal', 'Knx', - 'Light', 'Management', 'Mqtt', 'Power', 'Rf', - 'Rules', 'Sensor', 'Serial', 'Setoption', - 'Settings', 'Shutter', 'System', 'Telegram', - 'Timer', 'Wifi', 'Zigbee'] (default no filter) + limit data processing to command groups ['Control', 'Display', + 'Domoticz', 'Hdmi', 'Internal', 'Knx', 'Light', 'Management', + 'Mqtt', 'Power', 'Rf', 'Rules', 'Sensor', 'Serial', 'Setoption', + 'Settings', 'Shutter', 'System', 'Telegram', 'Timer', 'Usf', + 'Wifi', 'Zigbee'] (default no filter) -w, --ignore-warnings - do not exit on warnings. Not recommended, used by - your own responsibility! - --dry-run test program without changing configuration data on - device or file + do not exit on warnings. Not recommended, used by your own + responsibility! + --dry-run test program without changing configuration data on device or + file Info: Extra information @@ -859,16 +847,15 @@ For advanced help use parameter `-H` or `--full-help`. -h, --help show usage help message and exit -H, --full-help show full help message and exit -v, --verbose produce more output about what the program does - -V, --version show program version (and config version if - --source is given) and exit + -V, --version show program version (and config version if --source is given) + and exit The arguments -s must be given. - Args that start with '--' (eg. -s) can also be set in a config file - (specified via -c). Config file syntax allows: key=value, flag=true, - stuff=[a,b,c] (for details, see syntax at https://goo.gl/R74nmi). If an arg - is specified in more than one place, then commandline values override - config file values which override defaults. + Args that start with '--' (eg. -s) can also be set in a config file (specified via -c). + Config file syntax allows: key=value, flag=true, stuff=[a,b,c] (for details, see syntax + at https://goo.gl/R74nmi). If an arg is specified in more than one place, then + commandline values override config file values which override defaults. ``` > **Note** diff --git a/decode-config.py b/decode-config.py index 64b1700..782397e 100755 --- a/decode-config.py +++ b/decode-config.py @@ -3821,6 +3821,8 @@ def make_filename(filename, filetype, configmapping): hostname from device (http source only) @F: configuration filename from MQTT request (mqtt source only) + @t: + topic from config data @param filetype: FileType.x object - creates extension if not None @param configmapping: @@ -3829,7 +3831,7 @@ def make_filename(filename, filetype, configmapping): @return: New filename with replacements """ - config_version = config_friendlyname = config_hostname = device_hostname = filesource = '' + config_version = config_friendlyname = config_hostname = device_hostname = filesource = config_topic = '' try: config_version = configmapping['header']['data']['version']['id'] @@ -3854,6 +3856,10 @@ def make_filename(filename, filetype, configmapping): device_hostname = '' if filename.find('@F') >= 0 and ARGS.mqttsource is not None and ARGS.filesource is not None: filesource = ARGS.filesource.strip().rstrip('.dmp') + config_topic = configmapping.get('mqtt_topic', '') + if config_topic != '': + if str(config_topic).find('%') < 0: + config_topic = re.sub('_{2,}', '_', re.sub('[^0-9a-zA-Z]', '_', str(config_topic)).strip('_')) dirname = basename = ext = '' @@ -3893,6 +3899,7 @@ def make_filename(filename, filetype, configmapping): filename = filename.replace('@h', config_hostname) filename = filename.replace('@H', device_hostname) filename = filename.replace('@F', filesource) + filename = filename.replace('@t', config_topic) return filename @@ -6459,8 +6466,8 @@ def _format_action_invocation(self, action): default=DEFAULTS['source']['source'], help="source used for the Tasmota configuration (default: {}). " "Specify source type, path, file, user, password, hostname, port and topic at once as an URL. " - "The URL must be in the form 'scheme://[username[:password]@]host[:port][/topic]|pathfile'" - "where scheme is 'file' for a tasmota binary config file, 'http' for a Tasmota HTTP web connection " + "The URL must be in the form 'scheme://[username[:password]@]host[:port][/topic]|pathfile' " + "where 'scheme' is 'file' for a tasmota binary config file, 'http' for a Tasmota HTTP web connection " "{}".format(DEFAULTS['source']['source'], "and 'mqtt(s)' for Tasmota MQTT transport ('mqtts' uses a TLS connection to MQTT server)" if MQTT_MODULE else "")) source.add_argument('-f', '--file', dest='filesource', default=DEFAULTS['source']['filesource'], help=configargparse.SUPPRESS) @@ -6517,13 +6524,13 @@ def _format_action_invocation(self, action): metavar='', dest='restorefile', default=DEFAULTS['backup']['backupfile'], - help="file to restore configuration from (default: {}). Replacements: @v=firmware version from config, @d=devicename, @f=friendlyname1, @h=hostname from config, @H=device hostname (http source only)".format(DEFAULTS['backup']['restorefile'])) + help="file to restore configuration from (default: {}). Replacements: @v=firmware version from config, @d=devicename, @f=friendlyname1, @h=hostname from config, @H=device hostname (http source only), @t=topic".format(DEFAULTS['backup']['restorefile'])) backres.add_argument('-o', '--backup-file', metavar='', dest='backupfile', action='append', default=DEFAULTS['backup']['backupfile'], - help="file to backup configuration to, can be specified multiple times (default: {}). Replacements: @v=firmware version from config, @d=devicename, @f=friendlyname1, @h=hostname from config, @H=device hostname (http source only), @F=configuration filename from MQTT request (mqtt source only)".format(DEFAULTS['backup']['backupfile'])) + help="file to backup configuration to, can be specified multiple times (default: {}). Replacements: @v=firmware version from config, @d=devicename, @f=friendlyname1, @h=hostname from config, @H=device hostname (http source only), @F=configuration filename from MQTT request (mqtt source only), @t=topic".format(DEFAULTS['backup']['backupfile'])) backup_file_formats = ['json', 'bin', 'dmp'] backres.add_argument('-t', '--backup-type', metavar='|'.join(backup_file_formats), From 966c32e183b19ef871fc12cc186ee60d7599bd7a Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Tue, 16 Apr 2024 16:29:09 +0200 Subject: [PATCH 11/35] Bump to v13.4.1.1 --- README.md | 2 +- decode-config.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0850867..6a7e27b 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.0.4-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v13.4.1.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 782397e..763e130 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.0.4', + 'VERSION': '13.4.1.1', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2837,7 +2837,10 @@ def match(self, setting_hardware, config_version): 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), }) # ====================================================================== +SETTING_13_4_1_1 = copy.copy(SETTING_13_4_0_4) +# ====================================================================== SETTINGS = [ + (0x0D040101,0x1000, SETTING_13_4_1_1), (0x0D040004,0x1000, SETTING_13_4_0_4), (0x0D030005,0x1000, SETTING_13_3_0_5), (0x0D030002,0x1000, SETTING_13_3_0_2), From 86ad4f787fac7a047e6a8daab25e31a2a90f4f3e Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 19 Apr 2024 09:21:04 +0200 Subject: [PATCH 12/35] Bump to v13.4.1.2 --- README.md | 2 +- decode-config.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6a7e27b..56eec73 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.1.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v13.4.1.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 763e130..7f53ca9 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.1.1', + 'VERSION': '13.4.1.2', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2837,10 +2837,10 @@ def match(self, setting_hardware, config_version): 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), }) # ====================================================================== -SETTING_13_4_1_1 = copy.copy(SETTING_13_4_0_4) +SETTING_13_4_1_2 = copy.copy(SETTING_13_4_0_4) # ====================================================================== SETTINGS = [ - (0x0D040101,0x1000, SETTING_13_4_1_1), + (0x0D040102,0x1000, SETTING_13_4_1_2), (0x0D040004,0x1000, SETTING_13_4_0_4), (0x0D030005,0x1000, SETTING_13_3_0_5), (0x0D030002,0x1000, SETTING_13_3_0_2), From 387bc8bcfdf0cec0331cdf82b6e1c57924ee6995 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 15 May 2024 13:09:34 +0200 Subject: [PATCH 13/35] Prep release v14.0.0 --- README.md | 12 ++++++------ decode-config.py | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 56eec73..c7a7b94 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Convert, backup and restore configuration data of devices flashed with [Tasmota Overview -[![master](https://img.shields.io/badge/master-v13.4.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/master) +[![master](https://img.shields.io/badge/master-v14.0.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/master) [![GitHub download](https://img.shields.io/github/downloads/tasmota/decode-config/total.svg)](https://github.com/tasmota/decode-config/releases/latest) [![PyPI version](https://badge.fury.io/py/decode-config.svg)](https://badge.fury.io/py/decode-config) ![PyPI downloads](https://img.shields.io/pypi/dm/decode-config?label=pypi%20downloads) @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v13.4.1.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.0.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
@@ -338,7 +338,7 @@ Example: decode-config -c my.conf -s tasmota-4281 --backup-file Config_@d_@v ``` -This will create a file like `Config_Tasmota_13.4.json` (the part `Tasmota` and `13.4` will choosen related to your device configuration). +This will create a file like `Config_Tasmota_14.0.json` (the part `Tasmota` and `14.0` will choosen related to your device configuration). #### Save multiple backup at once @@ -350,7 +350,7 @@ decode-config -c my.conf -s tasmota-4281 -o Config_@d_@v -o Backup_@H.json -o Ba creates three backup files: -* `Config_Tasmota_13.4.json` using JSON format +* `Config_Tasmota_14.0.json` using JSON format * `Backup_tasmota-4281.json` using JSON format * `Backup_tasmota-4281.dmp` using Tasmota configuration file format @@ -358,10 +358,10 @@ creates three backup files: Reading back a previously saved backup file, use the `--restore-file ` parameter. -To restore the previously save backup file `Config_Tasmota_13.4.json` to device `tasmota-4281` use: +To restore the previously save backup file `Config_Tasmota_14.0.json` to device `tasmota-4281` use: ```bash -decode-config -c my.conf -s tasmota-4281 --restore-file Config_Tasmota_13.4 +decode-config -c my.conf -s tasmota-4281 --restore-file Config_Tasmota_14.0 ``` Restore operation also allows placeholders **@v**, **@d**, **@f**, **@h** or **@H** like in backup filenames so we can use the same naming as for the backup process: diff --git a/decode-config.py b/decode-config.py index 7f53ca9..f146489 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '13.4.1.2', + 'VERSION': '14.0.0.0', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2837,10 +2837,10 @@ def match(self, setting_hardware, config_version): 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), }) # ====================================================================== -SETTING_13_4_1_2 = copy.copy(SETTING_13_4_0_4) +SETTING_14_0_0_0 = copy.copy(SETTING_13_4_0_4) # ====================================================================== SETTINGS = [ - (0x0D040102,0x1000, SETTING_13_4_1_2), + (0x0E000000,0x1000, SETTING_14_0_0_0), (0x0D040004,0x1000, SETTING_13_4_0_4), (0x0D030005,0x1000, SETTING_13_3_0_5), (0x0D030002,0x1000, SETTING_13_3_0_2), From b2a72d606d5830dd1420e5b2e38f864c8de6a12f Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 15 May 2024 13:28:27 +0200 Subject: [PATCH 14/35] Bump to v14.0.0.1 --- README.md | 2 +- decode-config.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c7a7b94..4866624 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.0.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.0.0.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index f146489..a10a0ff 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.0.0.0', + 'VERSION': '14.0.0.1', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2837,10 +2837,10 @@ def match(self, setting_hardware, config_version): 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), }) # ====================================================================== -SETTING_14_0_0_0 = copy.copy(SETTING_13_4_0_4) +SETTING_14_0_0_1 = copy.copy(SETTING_13_4_0_4) # ====================================================================== SETTINGS = [ - (0x0E000000,0x1000, SETTING_14_0_0_0), + (0x0E000001,0x1000, SETTING_14_0_0_1), (0x0D040004,0x1000, SETTING_13_4_0_4), (0x0D030005,0x1000, SETTING_13_3_0_5), (0x0D030002,0x1000, SETTING_13_3_0_2), From c41c253aff33e14fc9df84699a77e46d0f68277b Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 30 May 2024 10:02:56 +0200 Subject: [PATCH 15/35] Update v14.0.0.2 settings --- README.md | 2 +- decode-config.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4866624..01e59f5 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.0.0.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.0.0.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index a10a0ff..bff433c 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.0.0.1', + 'VERSION': '14.0.0.2', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2837,10 +2837,13 @@ def match(self, setting_hardware, config_version): 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), }) # ====================================================================== -SETTING_14_0_0_1 = copy.copy(SETTING_13_4_0_4) +SETTING_14_0_0_2 = copy.copy(SETTING_13_4_0_4) +SETTING_14_0_0_2['sbflag1'][1].update({ + 'telegram_disable_af': (HARDWARE.ESP, ' Date: Thu, 30 May 2024 10:04:05 +0200 Subject: [PATCH 16/35] Bump to v14.0.0.3 --- README.md | 2 +- decode-config.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 01e59f5..9c83276 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.0.0.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.0.0.3-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index bff433c..075e226 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.0.0.2', + 'VERSION': '14.0.0.3', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2842,7 +2842,10 @@ def match(self, setting_hardware, config_version): 'telegram_disable_af': (HARDWARE.ESP, ' Date: Sun, 2 Jun 2024 11:16:52 +0200 Subject: [PATCH 17/35] Update v14.0.0.4 settings --- README.md | 2 +- decode-config.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9c83276..af132cf 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.0.0.3-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.0.0.4-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 075e226..45b0640 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.0.0.3', + 'VERSION': '14.0.0.4', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2842,10 +2842,13 @@ def match(self, setting_hardware, config_version): 'telegram_disable_af': (HARDWARE.ESP, ' Date: Mon, 3 Jun 2024 14:28:57 +0200 Subject: [PATCH 18/35] Prep release v14.1.0 --- README.md | 12 ++++++------ decode-config.py | 5 ++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index af132cf..d9b0bdc 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Convert, backup and restore configuration data of devices flashed with [Tasmota Overview -[![master](https://img.shields.io/badge/master-v14.0.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/master) +[![master](https://img.shields.io/badge/master-v14.1.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/master) [![GitHub download](https://img.shields.io/github/downloads/tasmota/decode-config/total.svg)](https://github.com/tasmota/decode-config/releases/latest) [![PyPI version](https://badge.fury.io/py/decode-config.svg)](https://badge.fury.io/py/decode-config) ![PyPI downloads](https://img.shields.io/pypi/dm/decode-config?label=pypi%20downloads) @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.0.0.4-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.1.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
@@ -338,7 +338,7 @@ Example: decode-config -c my.conf -s tasmota-4281 --backup-file Config_@d_@v ``` -This will create a file like `Config_Tasmota_14.0.json` (the part `Tasmota` and `14.0` will choosen related to your device configuration). +This will create a file like `Config_Tasmota_14.1.json` (the part `Tasmota` and `14.1` will choosen related to your device configuration). #### Save multiple backup at once @@ -350,7 +350,7 @@ decode-config -c my.conf -s tasmota-4281 -o Config_@d_@v -o Backup_@H.json -o Ba creates three backup files: -* `Config_Tasmota_14.0.json` using JSON format +* `Config_Tasmota_14.1.json` using JSON format * `Backup_tasmota-4281.json` using JSON format * `Backup_tasmota-4281.dmp` using Tasmota configuration file format @@ -358,10 +358,10 @@ creates three backup files: Reading back a previously saved backup file, use the `--restore-file ` parameter. -To restore the previously save backup file `Config_Tasmota_14.0.json` to device `tasmota-4281` use: +To restore the previously save backup file `Config_Tasmota_14.1.json` to device `tasmota-4281` use: ```bash -decode-config -c my.conf -s tasmota-4281 --restore-file Config_Tasmota_14.0 +decode-config -c my.conf -s tasmota-4281 --restore-file Config_Tasmota_14.1 ``` Restore operation also allows placeholders **@v**, **@d**, **@f**, **@h** or **@H** like in backup filenames so we can use the same naming as for the backup process: diff --git a/decode-config.py b/decode-config.py index 45b0640..81c17af 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.0.0.4', + 'VERSION': '14.1.0.0', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2847,7 +2847,10 @@ def match(self, setting_hardware, config_version): 'tcp_baudrate': (HARDWARE.ESP, ' Date: Mon, 3 Jun 2024 15:16:04 +0200 Subject: [PATCH 19/35] Bump to v14.1.0.1 --- README.md | 2 +- decode-config.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d9b0bdc..ceecff1 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.1.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.1.0.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 81c17af..d4b8405 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.1.0.0', + 'VERSION': '14.1.0.1', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2847,10 +2847,10 @@ def match(self, setting_hardware, config_version): 'tcp_baudrate': (HARDWARE.ESP, ' Date: Wed, 5 Jun 2024 21:55:20 +0200 Subject: [PATCH 20/35] Update README --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ceecff1..1b7972d 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ In comparison with the [Tasmota](https://github.com/arendst/Tasmota) build-in "* * uses a human readable and editable [JSON](http://www.json.org/)-format for backup/restore * can restore previously backed up and modified JSON-format files * is able to process any subsets of configuration data -* can convert data from older Tasmota versions (from version v5.10.0) to a newer one and vice versa -* is able to create Tasmota compatible command list for the most available commands +* can convert data from older Tasmota versions (starting with early v5.10.0) to a newer and current one and vice versa +* is able to create Tasmota command list for the most available configuration data related commands Comparing backup files created by **decode-config** and [.dmp](#dmp-format) files created by Tasmota "*Backup Configuration*" / "*Restore Configuration*": @@ -116,7 +116,7 @@ decode-config.py #### Prerequisite -Since **decode-config.py** is a Python program, it requires an installed [Python](https://en.wikipedia.org/wiki/Python_%28programming_language%29) environment. +Since **decode-config.py** is a [Python](https://en.wikipedia.org/wiki/Python_%28programming_language%29) program, it requires an installed [Python](https://www.python.org) environment. ##### Linux @@ -128,11 +128,11 @@ sudo apt-get install python3 python3-pip ##### Windows -Install [Python 3.x](https://www.python.org/downloads/windows/) as described +Install [Python 3.x for Windows](https://www.python.org/downloads/windows/) as described ##### MacOS -Install [Python 3.x](https://www.python.org/downloads/mac-osx/) as described +Install [Python 3.x for macOS](https://www.python.org/downloads/mac-osx/) as described ## Usage From fe1da187372f3ed381768635ce884fb5bf976223 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 5 Jun 2024 21:57:20 +0200 Subject: [PATCH 21/35] Chaange PowerLock cmnd group --- README.md | 1 + decode-config.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b7972d..6d55a87 100644 --- a/README.md +++ b/README.md @@ -924,6 +924,7 @@ These Tasmota commands are unsupported and not implemented in **decode-config** | | LedPwmOff | | | | | LedState | | | | | Power | | | + | | PowerLock | | | | | PowerOnState | | | | | PulseTime | | | | | SwitchDebounce | | | diff --git a/decode-config.py b/decode-config.py index d4b8405..6ed5e38 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2834,7 +2834,7 @@ def match(self, setting_hardware, config_version): # ====================================================================== SETTING_13_4_0_4 = copy.copy(SETTING_13_3_0_5) SETTING_13_4_0_4.update ({ - 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), + 'power_lock': (HARDWARE.ESP, '>i & 1) ) for i in range(0, 32))')) ), }) # ====================================================================== SETTING_14_0_0_2 = copy.copy(SETTING_13_4_0_4) From d1168962f71bc5a3344751f0f96959aa25e9ca5d Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 5 Jun 2024 22:02:16 +0200 Subject: [PATCH 22/35] Update README Tasmota cmnds --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d55a87..7be7e8b 100644 --- a/README.md +++ b/README.md @@ -1020,8 +1020,9 @@ These Tasmota commands are unsupported and not implemented in **decode-config** | | RgxState | | | | | RgxSubnet | | | | | Ssid | | | - | | WebColor | | | | | WebPassword | | | + | | WebCanvas | | | + | | WebColor | | | | | WebRefresh | | | | | WebSensor | | | | | WebServer | | | From 577976ef5fb616b7372535abda5ff760a09580e2 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 12 Jun 2024 08:50:30 +0200 Subject: [PATCH 23/35] Fix v14.1.0.1 settings --- decode-config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decode-config.py b/decode-config.py index 6ed5e38..af89bfa 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2850,7 +2850,7 @@ def match(self, setting_hardware, config_version): SETTING_14_1_0_1 = copy.copy(SETTING_14_0_0_4) # ====================================================================== SETTINGS = [ - (0x0E010000,0x1000, SETTING_14_1_0_1), + (0x0E010001,0x1000, SETTING_14_1_0_1), (0x0E000004,0x1000, SETTING_14_0_0_4), (0x0E000002,0x1000, SETTING_14_0_0_2), (0x0D040004,0x1000, SETTING_13_4_0_4), From 4699ca17600285350c9e283869ed71bf5f9cd86e Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 12 Jun 2024 09:42:57 +0200 Subject: [PATCH 24/35] Update v14.1.0.2 settings --- README.md | 4 ++-- decode-config.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7be7e8b..343cd2a 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.1.0.1-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.1.0.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
@@ -1169,7 +1169,7 @@ These Tasmota commands are unsupported and not implemented in **decode-config** | | SerialConfig | | | | | SerialDelimiter | | | | | SSerialConfig | | | - | | SSerialSend9 | | | + | | SSerialMode | | | | | TCPBaudrate | | | | | TCPConfig | | | | **Domoticz** | DomoticzIdx | | | diff --git a/decode-config.py b/decode-config.py index af89bfa..195cd23 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.1.0.1', + 'VERSION': '14.1.0.2', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2847,10 +2847,15 @@ def match(self, setting_hardware, config_version): 'tcp_baudrate': (HARDWARE.ESP, ' Date: Sun, 30 Jun 2024 14:16:38 +0200 Subject: [PATCH 25/35] Bump to v14.1.0.3 --- README.md | 2 +- decode-config.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 343cd2a..ac7dbe2 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.1.0.2-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.1.0.3-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 195cd23..19233c6 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.1.0.2', + 'VERSION': '14.1.0.3', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2854,7 +2854,10 @@ def match(self, setting_hardware, config_version): 'sserial_mode': (HARDWARE.ESP, 'B', 0xF41, (None, '0 <= $ <= 3', ('Serial', '"SSerialMode {}".format($)')) ), }) # ====================================================================== +SETTING_14_1_0_3 = copy.copy(SETTING_14_1_0_2) +# ====================================================================== SETTINGS = [ + (0x0E010003,0x1000, SETTING_14_1_0_3), (0x0E010002,0x1000, SETTING_14_1_0_2), (0x0E000004,0x1000, SETTING_14_0_0_4), (0x0E000002,0x1000, SETTING_14_0_0_2), From 13843c6acfb224ffc289f246be032c953c878143 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Tue, 2 Jul 2024 15:06:20 +0200 Subject: [PATCH 26/35] Update v14.1.0.3 settings --- decode-config.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/decode-config.py b/decode-config.py index 19233c6..f868414 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2855,6 +2855,14 @@ def match(self, setting_hardware, config_version): }) # ====================================================================== SETTING_14_1_0_3 = copy.copy(SETTING_14_1_0_2) +SETTING_14_1_0_3.update ({ + 'energy_max_power_safe_limit': (HARDWARE.ESP, ' Date: Mon, 8 Jul 2024 12:31:20 +0200 Subject: [PATCH 27/35] Update README --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ac7dbe2..bffe6c3 100644 --- a/README.md +++ b/README.md @@ -594,18 +594,17 @@ becomes to The huge number of Tasmota configuration data can be overstrained and confusing, so the most of the configuration data are grouped into categories. -The following groups are available: `Control`, `Display`, `Domoticz`, `Internal`, `Knx`, `Light`, `Management`, `Mqtt`, `Power`, `Rf`, `Rules`, `Sensor`, `Serial`, `Setoption`, `Shutter`, `System`, `Timer`, `Wifi`, `Zigbee` +Filtering by groups affects the entire output, regardless of whether this is the screen or a json backup file. The output of a dmp or bin file cannot be filtered. These binary file types must always contain the entire configuration. + +The following groups are available: `Control`, `Display`, `Domoticz`, `Hdmi`, `Internal`, `Knx`, `Light`, `Management`, `Mqtt`, `Power`, `Rf`, `Rules`, `Sensor`, `Serial`, `Setoption`, `Settings`, `Shutter`, `System`, `Telegram`, `Timer`, `Usf`, `Wifi`, `Zigbee` These are similary to the categories on [Tasmota Command Documentation](https://tasmota.github.io/docs/Commands/). To filter outputs to a subset of groups, use the `-g` or `--group` parameter, concatenating the groups you want, e. g. ```bash -decode-config -s tasmota-4281 -c my.conf --output-format cmnd --group Main MQTT Management Wifi +decode-config -s tasmota-4281 -c my.conf --output-format cmnd --group Control Management MQTT Wifi ``` - -Filtering by groups affects the entire output, regardless of whether screen output or backup file. - ## Usage examples ### Using Tasmota binary configuration files From 9ed8dff1dbe4e1311544c09175d8728d6841e71c Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 19 Jul 2024 16:27:44 +0200 Subject: [PATCH 28/35] Fix download timeout for slow mqtt connection --- decode-config.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/decode-config.py b/decode-config.py index f868414..6b876b1 100755 --- a/decode-config.py +++ b/decode-config.py @@ -195,6 +195,7 @@ def module_import_error(module): MAX_BACKLOGLEN = 320 MQTT_MESSAGE_MAX_SIZE = 700 MQTT_TIMEOUT = 5000 +MQTT_DELAY = 0.2 MQTT_FILETYPE = 2 TASM_FILE_SETTINGS = '/.settings' @@ -4303,7 +4304,7 @@ def on_message(client, userdata, msg): err_flag = True return if "Done" in rcv_code: - time.sleep(0.1) + time.sleep(MQTT_DELAY) if "Command" in root: rcv_code = root["Command"] if rcv_code == "Error": @@ -4519,7 +4520,7 @@ def on_message(client, userdata, msg): err_flag = True return if "Done" in rcv_code: - time.sleep(0.1) + time.sleep(MQTT_DELAY) if "Command" in root: rcv_code = root["Command"] if rcv_code == "Error": From a8cc078a2319f0b9f5a4bc5af6939c76d5d965b5 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Sat, 20 Jul 2024 14:23:18 +0200 Subject: [PATCH 29/35] Revert "Fix download timeout for slow mqtt connection" This reverts commit 9ed8dff1dbe4e1311544c09175d8728d6841e71c. --- decode-config.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/decode-config.py b/decode-config.py index 6b876b1..f868414 100755 --- a/decode-config.py +++ b/decode-config.py @@ -195,7 +195,6 @@ def module_import_error(module): MAX_BACKLOGLEN = 320 MQTT_MESSAGE_MAX_SIZE = 700 MQTT_TIMEOUT = 5000 -MQTT_DELAY = 0.2 MQTT_FILETYPE = 2 TASM_FILE_SETTINGS = '/.settings' @@ -4304,7 +4303,7 @@ def on_message(client, userdata, msg): err_flag = True return if "Done" in rcv_code: - time.sleep(MQTT_DELAY) + time.sleep(0.1) if "Command" in root: rcv_code = root["Command"] if rcv_code == "Error": @@ -4520,7 +4519,7 @@ def on_message(client, userdata, msg): err_flag = True return if "Done" in rcv_code: - time.sleep(MQTT_DELAY) + time.sleep(0.1) if "Command" in root: rcv_code = root["Command"] if rcv_code == "Error": From fc31c795140b67442b6096ee610f2038f6865d7a Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Sat, 20 Jul 2024 14:26:38 +0200 Subject: [PATCH 30/35] Fix MQTT transmission for slow clients --- decode-config.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/decode-config.py b/decode-config.py index f868414..78fdef2 100755 --- a/decode-config.py +++ b/decode-config.py @@ -4302,8 +4302,6 @@ def on_message(client, userdata, msg): err_str ="Receive code "+rcv_code err_flag = True return - if "Done" in rcv_code: - time.sleep(0.1) if "Command" in root: rcv_code = root["Command"] if rcv_code == "Error": @@ -4325,11 +4323,12 @@ def on_message(client, userdata, msg): except: pass - if dobj is None and rcv_id > 0 and file_size > 0 and file_type > 0 and file_name: + if dobj is None and file_id == 0 and rcv_id > 0 and file_size > 0 and file_type > 0 and file_name: file_id = rcv_id dobj = bytearray() else: - if use_base64 and file_id > 0 and file_id != rcv_id: + if use_base64 and file_id > 0 and file_id != rcv_id and "Id" in rcv_code: + err_str = "FileID mismatch ({}!={})".format(file_id, rcv_id) err_flag = True return @@ -4354,6 +4353,7 @@ def on_message(client, userdata, msg): def wait_for_ack(): nonlocal err_flag + nonlocal err_str timeout = MQTT_TIMEOUT/10 while ack_flag and not err_flag and timeout > 0: @@ -4518,8 +4518,6 @@ def on_message(client, userdata, msg): err_str ="Receive code "+rcv_code err_flag = True return - if "Done" in rcv_code: - time.sleep(0.1) if "Command" in root: rcv_code = root["Command"] if rcv_code == "Error": From 1aa966121bd3e2fcd6f93e1db18f63b03bba9b98 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 26 Jul 2024 09:26:02 +0200 Subject: [PATCH 31/35] Bump to v14.1.0.4 --- README.md | 2 +- decode-config.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bffe6c3..dc4c407 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota. -[![development version](https://img.shields.io/badge/development-v14.1.0.3-blue.svg)](https://github.com/tasmota/decode-config/tree/development) +[![development version](https://img.shields.io/badge/development-v14.1.0.4-blue.svg)](https://github.com/tasmota/decode-config/tree/development) ## Table of contents
diff --git a/decode-config.py b/decode-config.py index 78fdef2..8cf24f0 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.1.0.3', + 'VERSION': '14.1.0.4', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2862,9 +2862,11 @@ def match(self, setting_hardware, config_version): 'energy_max_power_safe_limit_window': (HARDWARE.ESP, ' Date: Wed, 31 Jul 2024 10:27:51 +0200 Subject: [PATCH 32/35] Update README (#91) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index dc4c407..6d31b5b 100644 --- a/README.md +++ b/README.md @@ -393,6 +393,9 @@ Set this location for a device: decode-config -c my.conf -s tasmota-4281 -i location ``` +> **Note** +When using JSON subsets on ESP32 chip types, always keep the key `config_version` in the JSON data, otherwise an error will occur stating that the file is for ESP82xx. + > **Hint** Keep the JSON-format valid e.g. when cutting unnecessary content from a given JSON backup file, consider to remove the last comma on same indent level: Invalid JSON (useless comma in line 3: `...2.294442,`):
{

From 207d19533c6f321cc66034b8a4cbdaabfdef8791 Mon Sep 17 00:00:00 2001
From: Norbert Richter 
Date: Fri, 26 Jul 2024 08:54:37 +0200
Subject: [PATCH 33/35] Add #90 real-time debug output

---
 decode-config.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/decode-config.py b/decode-config.py
index 8cf24f0..f778e86 100755
--- a/decode-config.py
+++ b/decode-config.py
@@ -4280,6 +4280,8 @@ def on_message(client, userdata, msg):
         base64_data = ""
         rcv_id = 0
 
+        if ARGS.debug:
+            print("{}: on_message - payload {}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), msg.payload.decode(STR_CODING)))
         try:
             root = json.loads(msg.payload.decode(STR_CODING))
             if root:
@@ -4325,6 +4327,9 @@ def on_message(client, userdata, msg):
         except:
             pass
 
+        if ARGS.debug:
+            print("{}: on_message - use_base64={}, file_id={}, rcv_id={}, file_type={}, file_size={}, file_md5={}, in_hash_md5={}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), use_base64, file_id, rcv_id, file_type, file_size, file_md5, in_hash_md5.hexdigest()))
+
         if dobj is None and file_id == 0 and rcv_id > 0 and file_size > 0 and file_type > 0 and file_name:
             file_id = rcv_id
             dobj = bytearray()
@@ -4422,19 +4427,27 @@ def wait_for_connect():
     in_hash_md5 = hashlib.md5()
 
     data = {"Password":tasmota_mqtt_password, "Type":MQTT_FILETYPE}
+    if ARGS.debug:
+        data_dbg = {"Password":HIDDEN_PASSWORD, "Type":MQTT_FILETYPE}
     if not use_base64:
         data["Binary"] = 1
     client.publish(topic_publish, json.dumps(data))
+    if ARGS.debug:
+        print("{}: client.publish({}, {})".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), topic_publish, json.dumps(data_dbg)))
 
     ack_flag = True
     run_flag = True
     while run_flag:
         if wait_for_ack():                  # We use Ack here
             client.publish(topic_publish, "0")   # Abort any failed download
+            if ARGS.debug:
+                print('{}: client.publish({}, "0")'.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), topic_publish))
             run_flag = False
         else:
             if file_md5 == "":               # Request chunk
                 client.publish(topic_publish, "?")
+                if ARGS.debug:
+                    print('{}: client.publish({}, "?")'.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), topic_publish))
                 ack_flag = True
             else:
                 run_flag = False

From fc4032a323f5939f82abd1e734294700237f1950 Mon Sep 17 00:00:00 2001
From: Norbert Richter 
Date: Tue, 6 Aug 2024 09:36:57 +0200
Subject: [PATCH 34/35] Fix module missing from output (#92)

---
 decode-config.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/decode-config.py b/decode-config.py
index f778e86..867bbca 100755
--- a/decode-config.py
+++ b/decode-config.py
@@ -2366,7 +2366,7 @@ def match(self, setting_hardware, config_version):
                                                      'B',   0x450,       (None, '0 <= $ <= 31',                 ('Wifi',        '"EthAddress {}".format($)')) ),
     'eth_address_esp32s3':          (HARDWARE.ESP32S3,
                                                      'B',   0x45E,       (None, '0 <= $ <= 31',                 ('Wifi',        '"EthAddress {}".format($)')) ),
-    'module':                       (HARDWARE.ESP32 ^ HARDWARE.ESP32S3,
+    'module_esp32':                 (HARDWARE.ESP32 ^ HARDWARE.ESP32S3,
                                                      'B',   0x474,       (None, None,                           ('Management',  '"Module {}".format($+1 & 0xff)')) ),
     'module_esp32s3':               (HARDWARE.ESP32S3,
                                                      'B',   0x45F,       (None, None,                           ('Management',  '"Module {}".format($+1 & 0xff)')) ),

From e9b8207c98eaed2d17c6c0846288dee7f16b2f9f Mon Sep 17 00:00:00 2001
From: Norbert Richter 
Date: Wed, 14 Aug 2024 15:20:12 +0200
Subject: [PATCH 35/35] Prep release v14.2.0

---
 README.md        | 12 ++++++------
 decode-config.py |  6 +++---
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 6d31b5b..03d5d7b 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Convert, backup and restore configuration data of devices flashed with [Tasmota
 Overview
 
 
-[![master](https://img.shields.io/badge/master-v14.1.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/master)
+[![master](https://img.shields.io/badge/master-v14.2.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/master)
 [![GitHub download](https://img.shields.io/github/downloads/tasmota/decode-config/total.svg)](https://github.com/tasmota/decode-config/releases/latest)
 [![PyPI version](https://badge.fury.io/py/decode-config.svg)](https://badge.fury.io/py/decode-config)
 ![PyPI downloads](https://img.shields.io/pypi/dm/decode-config?label=pypi%20downloads)
@@ -43,7 +43,7 @@ Comparing backup files created by **decode-config** and [.dmp](#dmp-format) file
 Using the latest development version of decode-config is only necessary if you also use the latest development version of Tasmota.
 
 
-[![development version](https://img.shields.io/badge/development-v14.1.0.4-blue.svg)](https://github.com/tasmota/decode-config/tree/development)
+[![development version](https://img.shields.io/badge/development-v14.2.0.0-blue.svg)](https://github.com/tasmota/decode-config/tree/development)
 
 ## Table of contents
 
@@ -338,7 +338,7 @@ Example: decode-config -c my.conf -s tasmota-4281 --backup-file Config_@d_@v ``` -This will create a file like `Config_Tasmota_14.1.json` (the part `Tasmota` and `14.1` will choosen related to your device configuration). +This will create a file like `Config_Tasmota_14.2.json` (the part `Tasmota` and `14.2` will choosen related to your device configuration). #### Save multiple backup at once @@ -350,7 +350,7 @@ decode-config -c my.conf -s tasmota-4281 -o Config_@d_@v -o Backup_@H.json -o Ba creates three backup files: -* `Config_Tasmota_14.1.json` using JSON format +* `Config_Tasmota_14.2.json` using JSON format * `Backup_tasmota-4281.json` using JSON format * `Backup_tasmota-4281.dmp` using Tasmota configuration file format @@ -358,10 +358,10 @@ creates three backup files: Reading back a previously saved backup file, use the `--restore-file ` parameter. -To restore the previously save backup file `Config_Tasmota_14.1.json` to device `tasmota-4281` use: +To restore the previously save backup file `Config_Tasmota_14.2.json` to device `tasmota-4281` use: ```bash -decode-config -c my.conf -s tasmota-4281 --restore-file Config_Tasmota_14.1 +decode-config -c my.conf -s tasmota-4281 --restore-file Config_Tasmota_14.2 ``` Restore operation also allows placeholders **@v**, **@d**, **@f**, **@h** or **@H** like in backup filenames so we can use the same naming as for the backup process: diff --git a/decode-config.py b/decode-config.py index 867bbca..45ccc7d 100755 --- a/decode-config.py +++ b/decode-config.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from __future__ import print_function METADATA = { - 'VERSION': '14.1.0.4', + 'VERSION': '14.2.0.0', 'DESCRIPTION': 'Backup/restore and decode configuration tool for Tasmota', 'CLASSIFIER': 'Development Status :: 4 - Beta', 'URL': 'https://github.com/tasmota/decode-config', @@ -2863,10 +2863,10 @@ def match(self, setting_hardware, config_version): (HARDWARE.ESP, '