12 KiB
decode-config.py
decode-config.py backup and restore Sonoff-Tasmota configuration.
Comparing backup files created by decode-config.py and *.dmp files created by Tasmota "Backup/Restore Configuration":
decode-config.py *.json file |
Sonoff-Tasmota *.dmp file |
|
---|---|---|
Encrypted | No | Yes |
Readable | Yes | No |
Simply editable | Yes | No |
Simply batch processing | Yes | No |
decode-config.py handles Tasmota configurations for release version since 5.10.0 up to now.
Content
Prerequisite
- Python
This program is written in Python so you need to install a python environment (for details see Python Setup and Usage) - Sonoff-Tasmota Firmware with enabled Web-Server
To backup or restore configurations from/to a Sonoff-Tasmota device you need a firmare with enabled web-server in admin mode (command WebServer 2).
Only self compiled firmware may do not have a web-server sod if you use your own compiled firmware be aware to enable the web-server, otherwise you can only use the--file
parameter as source.
File Types
decode-config.py can handle the following backup file types:
.dmp Format
Configuration data as used by Tasmota "Backup/Restore Configuration" web interface.
This format is binary and encrypted.
.json Format
Configuration data in JSON-format.
This format is decrypted, human readable and editable and can also be used for the --restore-file
command.
This file will becreated by decode-config.py using --backup-file
with --backup-type json
parameter (default).
.bin Format
Configuration data in binary format.
This format is binary decryptet, editable (e.g. using a hex editor) and can also be used for --restore-file
command.
It will be created by decode-config.py using --backup-file
with --backup-type bin
.
Note:
This file is 4 byte longer than an original .dmp file due to an prefix header at the beginning. The file data starting at address position 4 are containing the same as the struct SYSCFG from Tasmota settings.h in decrypted format.
File extensions
decode-config.py uses auto extension as default for backup filenames; you don't need to append extensions to your backup file, it will be selected based on --backup-type
argument.
If you want using your own extension use the --no-extension
argument.
Usage
After download don't forget to set exec flag under linux with chmod +x decode-config.py
or call the program using python decode-config.py...
.
Basics
At least pass a source where you want to read the configuration data from using -f <filename>
or -d <host>
:
The source can be either
- a Tasmota device hostname or IP by passing it using the
-d <host>
arg - or a previously stored Tasmota *.dmp
configuration file by passing the filename using
-f ` arg
Example:
decode-config.py -d sonoff-4281
will output a human readable configuration in JSON-format:
{
"altitude": 112,
"baudrate": 115200,
"blinkcount": 10,
"blinktime": 10,
...
"ws_width": [
1,
3,
5
]
}
Save backup file
To save the output as backup file --backup-file <filename>
, you can use placeholder for Version, Friendlyname and Hostname:
decode-config.py -d sonoff-4281 --backup-file Config_@f_@v
If you have setup a WebPassword within Tasmota, use
decode-config.py -d sonoff-4281 -p <yourpassword> --backup-file Config_@f_@v
will create a file like Config_Sonoff_x.x.x.json
. Because it is in JSON format, you can read and edit the file with any raw text editor.
Restore backup file
Reading back a saved (and possible changed) backup file use the --restore-file <filename>
arg. This will read the (changed) configuration data from this file and send it back to the source device or filename.
To restore the previously save backup file Config_Sonoff_6.2.1.json
to device sonoff-4281
use:
decode-config.py -d sonoff-4281 --restore-file Config_Sonoff_6.2.1.json
with password set by WebPassword:
decode-config.py -d sonoff-4281 -p <yourpassword> --restore-file Config_Sonoff_6.2.1.json
Configuration file
Each argument that start with --
(eg. --file
) 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://pypi.org/project/ConfigArgParse).
If an argument is specified in more than one place, then commandline values override config file values which override defaults. This is usefull if you always use the same argument or a basic set of arguments.
The http authentication credentials --username
and --password
is predestinated to store it in a file instead using it on your command line as argument:
e.g. my.conf:
[source]
username = admin
password = myPaszxwo!z
To make a backup file from example above you can now pass the config file instead using the password on command line:
decode-config.py -d sonoff-4281 -c my.conf --backup-file Config_@f_@v
More program arguments
For better reading your porgram arguments each short written arg (minus sign -
) has a corresponding readable long version (two minus signs --
), eg. --device
for -d
or --file
for -f
(note: not even all --
arg has a corresponding -
one).
A short list of possible program args is displayed using -h
or --help
.
For advanced help use -H
or --full-help
:
usage: decode-config.py [-f <filename>] [-d <host>] [-P <port>]
[-u <username>] [-p <password>] [-i <filename>]
[-o <filename>] [-F json|bin|dmp] [-E] [-e]
[--json-indent <indent>] [--json-compact]
[--json-hide-pw] [--json-unhide-pw] [-h] [-H] [-v]
[-V] [-c <filename>] [--ignore-warnings]
Backup/Restore Sonoff-Tasmota configuration data. Args that start with '--'
(eg. -f) 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.
optional arguments:
-c, --config <filename>
program config file - can be used to set default
command args (default: None)
--ignore-warnings do not exit on warnings. Not recommended, used by your
own responsibility!
Source:
Read/Write Tasmota configuration from/to
-f, --file, --tasmota-file <filename>
file to retrieve/write Tasmota configuration from/to
(default: None)'
-d, --device, --host <host>
hostname or IP address to retrieve/send Tasmota
configuration from/to (default: None)
-P, --port <port> TCP/IP port number to use for the host connection
(default: 80)
-u, --username <username>
host HTTP access username (default: admin)
-p, --password <password>
host HTTP access password (default: None)
Backup/Restore:
Backup/Restore configuration file specification
-i, --restore-file <filename>
file to restore configuration from (default: None).
Replacements: @v=firmware version, @f=device friendly
name, @h=device hostname
-o, --backup-file <filename>
file to backup configuration to (default: None).
Replacements: @v=firmware version, @f=device friendly
name, @h=device hostname
-F, --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
JSON:
JSON backup format specification
--json-indent <indent>
pretty-printed JSON output using indent level
(default: 'None'). -1 disables indent.
--json-compact compact JSON output by eliminate whitespace
--json-hide-pw hide passwords (default)
--json-unhide-pw unhide passwords
Info:
additional information
-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's version number and exit
Either argument -d <host> or -f <filename> must be given.
Examples
The most of the examples are for linux command line. Under Windows call the program using python decode-config.py ...
.
Config file
Note: The example contains .ini style sections [...]
. Sections are always treated as comment and serves as clarity only.
For further details of config file syntax see https://pypi.org/project/ConfigArgParse.
my.conf
[Source]
username = admin
password = myPaszxwo!z
[JSON]
json-indent 2
Using Tasmota binary configuration files
-
Restore a Tasmota configuration file
decode-config.py -c my.conf -d sonoff --restore-file Config_Sonoff_6.2.1.dmp
-
Backup device using Tasmota configuration compatible format
a) use file extension to choice the file format
decode-config.py -c my.conf -d sonoff --backup-file Config_@f_@v.dmp
b) use args to choice the file format
decode-config.py -c my.conf -d sonoff --backup-type dmp --backup-file Config_@f_@v
Use batch processing
for device in sonoff1 sonoff2 sonoff3; do ./decode-config.py -c my.conf -d $device -o Config_@f_@v
or under windows
for device in (sonoff1 sonoff2 sonoff3) do python decode-config.py -c my.conf -d %device -o Config_@f_@v
will produce JSON configuration files for host sonoff1, sonoff2 and sonoff3 using friendly name and Tasmota firmware version for backup filenames.