2018-10-27 09:37:33 +01:00
< h1 id = "decode-config-py" > decode-config.py< / h1 >
2019-10-27 11:04:08 +00:00
< p > < em > decode-config.py< / em > is able to backup and restore Tasmota configuration.< / p >
2019-01-07 17:15:11 +00:00
< p > In comparison with the Tasmota build-in " Backup/Restore Configuration" function < em > decode-config.py< / em > < / p >
2018-11-12 15:08:09 +00:00
< ul >
2019-01-07 17:15:11 +00:00
< li > uses human readable and editable < a href = "http://www.json.org/" > JSON< / a > -format for backup/restore,< / li >
< li > can restore previously backup and changed < a href = "http://www.json.org/" > JSON< / a > -format files,< / li >
< li > is able to create Tasmota compatible command list with related config parameter< / li >
2018-11-12 15:08:09 +00:00
< / ul >
2018-10-27 09:37:33 +01:00
< p > Comparing backup files created by < em > decode-config.py< / em > and *.dmp files created by Tasmota " Backup/Restore Configuration" : < / p >
< table >
< thead >
< tr >
< th > < / th >
< th style = "text-align:center" > decode-config.py< br / > *.json file< / th >
2019-10-27 11:04:08 +00:00
< th style = "text-align:center" > Tasmota< br / > *.dmp file< / th >
2018-10-27 09:37:33 +01:00
< / tr >
< / thead >
< tbody >
< tr >
< td > Encrypted< / td >
< td style = "text-align:center" > No< / td >
< td style = "text-align:center" > Yes< / td >
< / tr >
< tr >
< td > Readable< / td >
< td style = "text-align:center" > Yes< / td >
< td style = "text-align:center" > No< / td >
< / tr >
< tr >
< td > Simply editable< / td >
< td style = "text-align:center" > Yes< / td >
< td style = "text-align:center" > No< / td >
< / tr >
< tr >
< td > Simply batch processing< / td >
< td style = "text-align:center" > Yes< / td >
< td style = "text-align:center" > No< / td >
< / tr >
< / tbody >
< / table >
2019-01-07 17:15:11 +00:00
< p > < em > decode-config.py< / em > is compatible with Tasmota version from v5.10.0 up to now.< / p >
2018-10-27 09:37:33 +01:00
< h1 id = "content" > Content< / h1 >
< ul >
2018-11-12 15:08:09 +00:00
< li > < a href = "decode-config.md#prerequisite" > Prerequisite< / a > < / li >
< li > < a href = "decode-config.md#file-types" > File Types< / a > < ul >
< li > < a href = "decode-config.md#-dmp-format" > .dmp File Format< / a > < / li >
< li > < a href = "decode-config.md#-json-format" > .json File Format< / a > < / li >
< li > < a href = "decode-config.md#-bin-format" > .bin File Format< / a > < ul >
< li > < a href = "decode-config.md#file-extensions" > File extensions< / a > < / li >
< / ul >
< / li >
2018-10-27 09:37:33 +01:00
< / ul >
< / li >
2018-11-12 15:08:09 +00:00
< li > < a href = "decode-config.md#usage" > Usage< / a > < ul >
< li > < a href = "decode-config.md#basics" > Basics< / a > < / li >
< li > < a href = "decode-config.md#save-backup-file" > Save backup file< / a > < / li >
< li > < a href = "decode-config.md#restore-backup-file" > Restore backup file< / a > < / li >
< li > < a href = "decode-config.md#output-to-screen" > Output to screen< / a > < ul >
< li > < a href = "decode-config.md#json-output" > JSON output< / a > < / li >
< li > < a href = "decode-config.md#tasmota-command-output" > Tasmota command output< / a > < / li >
2018-10-27 09:37:33 +01:00
< / ul >
< / li >
2018-11-12 15:08:09 +00:00
< li > < a href = "decode-config.md#filter-data" > Filter data< / a > < / li >
< li > < a href = "decode-config.md#configuration-file" > Configuration file< / a > < / li >
< li > < a href = "decode-config.md#more-program-arguments" > More program arguments< / a > < / li >
< li > < a href = "decode-config.md#examples" > Examples< / a > < ul >
< li > < a href = "decode-config.md#config-file" > Config file< / a > < / li >
< li > < a href = "decode-config.md#using-tasmota-binary-configuration-files" > Using Tasmota binary configuration files< / a > < / li >
< li > < a href = "decode-config.md#use-batch-processing" > Use batch processing< / a > < / li >
2018-10-27 09:37:33 +01:00
< / ul >
< / li >
2018-11-14 07:03:55 +00:00
< li > < a href = "decode-config.md#notes" > Notes< / a > < / li >
2018-10-27 09:37:33 +01:00
< / ul >
< / li >
< / ul >
< h2 id = "prerequisite" > Prerequisite< / h2 >
< ul >
2019-01-07 17:15:11 +00:00
< li > < p > < a href = "https://en.wikipedia.org/wiki/Python_(programming_language" > Python< / a > )< br > This program is written in < a href = "https://en.wikipedia.org/wiki/Python_(programming_language" > Python< / a > ) so you need to install a working python environment (for details see < a href = "https://docs.python.org/2.7/using/index.html" > Python Setup and Usage< / a > )< / p >
2018-11-12 15:08:09 +00:00
< / li >
2019-10-27 11:04:08 +00:00
< li > < p > < a href = "https://github.com/arendst/Tasmota" > Tasmota< / a > < a href = "https://github.com/arendst/Tasmota/releases" > Firmware< / a > with Web-Server enabled:< / p >
2018-11-12 15:08:09 +00:00
< ul >
2019-10-27 11:04:08 +00:00
< li > To backup or restore configurations from or to a Tasmota device you need a firmare with enabled web-server in admin mode (command < a href = "https://github.com/arendst/Tasmota/wiki/Commands#wifi" > WebServer 2< / a > ). This is the Tasmota default.< / li >
2018-11-12 15:08:09 +00:00
< li > If using your own compiled firmware be aware to enable the web-server (< code > #define USE_WEBSERVER< / code > and < code > #define WEB_SERVER 2< / code > ).< / li >
< / ul >
< / li >
2018-10-27 09:37:33 +01:00
< / ul >
< h2 id = "file-types" > File Types< / h2 >
< p > < em > decode-config.py< / em > can handle the following backup file types: < / p >
< h3 id = "-dmp-format" > .dmp Format< / h3 >
< p > Configuration data as used by Tasmota " Backup/Restore Configuration" web interface.< br > This format is binary and encrypted.< / p >
< h3 id = "-json-format" > .json Format< / h3 >
2019-01-07 17:15:11 +00:00
< p > Configuration data in < a href = "http://www.json.org/" > JSON< / a > -format.< br > This format is decrypted, human readable and editable and can also be used for the < code > --restore-file< / code > parameter.< br > This file will be created by < em > decode-config.py< / em > using the < code > --backup-file< / code > with < code > --backup-type json< / code > parameter, this is the default.< / p >
2018-10-27 09:37:33 +01:00
< h3 id = "-bin-format" > .bin Format< / h3 >
2019-10-27 11:04:08 +00:00
< p > Configuration data in binary format.< br > This format is binary decryptet, editable (e.g. using a hex editor) and can also be used for < code > --restore-file< / code > command.< br > It will be created by < em > decode-config.py< / em > using < code > --backup-file< / code > with < code > --backup-type bin< / code > .< br > Note:< br > The .bin file contains the same information as the original .dmp file from Tasmota " Backup/Restore Configuration" but it is decrpted and 4 byte longer than an original (it is a prefix header at the beginning). .bin file data starting at address 4 contains the same as the < strong > struct SYSCFG< / strong > from Tasmota < a href = "https://github.com/arendst/Tasmota/blob/master/sonoff/settings.h" > settings.h< / a > in decrypted format.< / p >
2018-10-27 09:37:33 +01:00
< h4 id = "file-extensions" > File extensions< / h4 >
2019-01-07 17:15:11 +00:00
< p > You don' t need to append exensions for your file name as < em > decode-config.py< / em > uses auto extension as default. The extension will be choose based on file contents and < code > --backup-type< / code > parameter.
If you do not want using auto extensions use the < code > --no-extension< / code > parameter.< / p >
2018-10-27 09:37:33 +01:00
< h2 id = "usage" > Usage< / h2 >
2019-01-07 17:15:11 +00:00
< p > After download don' t forget to set the executable flag under linux with < code > chmod +x decode-config.py< / code > or call the program using < code > python decode-config.py...< / code > .< / p >
2018-10-27 09:37:33 +01:00
< h3 id = "basics" > Basics< / h3 >
< p > At least pass a source where you want to read the configuration data from using < code > -f < filename> < / code > or < code > -d < host> < / code > :< / p >
< p > The source can be either < / p >
< ul >
2019-01-07 17:15:11 +00:00
< li > a Tasmota device hostname or IP using the < code > -d < host> < / code > parameter< / li >
< li > a Tasmota < code > *.dmp< / code > configuration file using < code > -f < filename> < / code > parameter< / li >
2018-10-27 09:37:33 +01:00
< / ul >
< p > Example: < / p >
< pre > < code > decode-config< span class = "hljs-selector-class" > .py< / span > -d sonoff-< span class = "hljs-number" > 4281< / span >
< / code > < / pre > < p > will output a human readable configuration in < a href = "http://www.json.org/" > JSON< / a > -format:< / p >
< pre > < code > {
2019-10-27 11:04:08 +00:00
< span class = "hljs-string" > "altitude"< / span > : < span class = "hljs-number" > 112< / span > ,
< span class = "hljs-string" > "baudrate"< / span > : < span class = "hljs-number" > 115200< / span > ,
< span class = "hljs-string" > "blinkcount"< / span > : < span class = "hljs-number" > 10< / span > ,
< span class = "hljs-string" > "blinktime"< / span > : < span class = "hljs-number" > 10< / span > ,
2018-10-27 09:37:33 +01:00
...
< span class = "hljs-string" > "ws_width"< / span > : [
2019-10-27 11:04:08 +00:00
< span class = "hljs-number" > 1< / span > ,
< span class = "hljs-number" > 3< / span > ,
2018-10-27 09:37:33 +01:00
< span class = "hljs-number" > 5< / span >
]
}
< / code > < / pre > < h3 id = "save-backup-file" > Save backup file< / h3 >
2019-01-07 17:15:11 +00:00
< p > To save the output as backup file use < code > --backup-file < filename> < / code > , you can use placeholder for Version, Friendlyname and Hostname: < / p >
2018-10-27 09:37:33 +01:00
< pre > < code > < span class = "hljs-selector-tag" > decode-config< / span > < span class = "hljs-selector-class" > .py< / span > < span class = "hljs-selector-tag" > -d< / span > < span class = "hljs-selector-tag" > sonoff-4281< / span > < span class = "hljs-selector-tag" > --backup-file< / span > < span class = "hljs-selector-tag" > Config_< / span > @< span class = "hljs-keyword" > f_< / span > @< span class = "hljs-keyword" > v< / span >
< / code > < / pre > < p > If you have setup a WebPassword within Tasmota, use< / p >
< pre > < code > decode-config< span class = "hljs-selector-class" > .py< / span > -d sonoff-< span class = "hljs-number" > 4281< / span > -< span class = "hljs-selector-tag" > p< / span > < yourpassword> --backup-file Config_@f_@v
2019-01-07 17:15:11 +00:00
< / code > < / pre > < p > will create a file like < code > Config_Sonoff_6.4.0.json< / code > (the part < code > Sonoff< / code > and < code > 6.4.0< / code > will choosen related to your device configuration). Because the default backup file format is JSON, you can read and change it with any raw text editor.< / p >
2018-10-27 09:37:33 +01:00
< h3 id = "restore-backup-file" > Restore backup file< / h3 >
2019-01-07 17:15:11 +00:00
< p > Reading back a saved (and possible changed) backup file use the < code > --restore-file < filename> < / code > parameter. This will read the (changed) configuration data from this file and send it back to the source device or filename.< / p >
2018-10-27 09:37:33 +01:00
< p > To restore the previously save backup file < code > Config_Sonoff_6.2.1.json< / code > to device < code > sonoff-4281< / code > use: < / p >
< pre > < code > < span class = "hljs-selector-tag" > decode-config< / span > < span class = "hljs-selector-class" > .py< / span > < span class = "hljs-selector-tag" > -d< / span > < span class = "hljs-selector-tag" > sonoff-4281< / span > < span class = "hljs-selector-tag" > --restore-file< / span > < span class = "hljs-selector-tag" > Config_Sonoff_6< / span > < span class = "hljs-selector-class" > .2< / span > < span class = "hljs-selector-class" > .1< / span > < span class = "hljs-selector-class" > .json< / span >
< / code > < / pre > < p > with password set by WebPassword:< / p >
< pre > < code > < span class = "hljs-selector-tag" > decode-config< / span > < span class = "hljs-selector-class" > .py< / span > < span class = "hljs-selector-tag" > -d< / span > < span class = "hljs-selector-tag" > sonoff-4281< / span > < span class = "hljs-selector-tag" > -p< / span > < < span class = "hljs-selector-tag" > yourpassword< / span > > < span class = "hljs-selector-tag" > --restore-file< / span > < span class = "hljs-selector-tag" > Config_Sonoff_6< / span > < span class = "hljs-selector-class" > .2< / span > < span class = "hljs-selector-class" > .1< / span > < span class = "hljs-selector-class" > .json< / span >
2018-11-12 15:08:09 +00:00
< / code > < / pre > < h3 id = "output-to-screen" > Output to screen< / h3 >
2019-01-07 17:15:11 +00:00
< p > To force screen output use the < code > --output< / code > parameter.< / p >
< p > Output to screen is default enabled when calling the program with a source parameter (-f or -d) but without any backup or restore parameter.< / p >
2018-11-12 15:08:09 +00:00
< h4 id = "json-output" > JSON output< / h4 >
2019-01-07 17:15:11 +00:00
< p > The default output format is < a href = "decode-config.md#-json-format" > JSON< / a > . You can force JSON output using the < code > --output-format json< / code > parameter.< / p >
2018-11-12 15:08:09 +00:00
< p > Example:< / p >
< pre > < code > decode-config.py -d sonoff< span class = "hljs-number" > -4281< / span > -c my.conf -x < span class = "hljs-symbol" > Wifi< / span > --output-format json
{
...
2019-10-27 11:04:08 +00:00
< span class = "hljs-string" > "hostname"< / span > : < span class = "hljs-string" > "%s-%04d"< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "ip_address"< / span > : [
2019-10-27 11:04:08 +00:00
< span class = "hljs-string" > "0.0.0.0"< / span > ,
< span class = "hljs-string" > "192.168.12.1"< / span > ,
< span class = "hljs-string" > "255.255.255.0"< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "192.168.12.1"< / span >
2019-10-27 11:04:08 +00:00
],
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "ntp_server"< / span > : [
2019-10-27 11:04:08 +00:00
< span class = "hljs-string" > "ntp.localnet.home"< / span > ,
< span class = "hljs-string" > "ntp2.localnet.home"< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "192.168.12.1"< / span >
2019-10-27 11:04:08 +00:00
],
< span class = "hljs-string" > "sta_active"< / span > : < span class = "hljs-number" > 0< / span > ,
< span class = "hljs-string" > "sta_config"< / span > : < span class = "hljs-number" > 5< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "sta_pwd"< / span > : [
2019-10-27 11:04:08 +00:00
< span class = "hljs-string" > "myWlAnPaszxwo!z"< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "myWlAnPaszxwo!z2"< / span >
2019-10-27 11:04:08 +00:00
],
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "sta_ssid"< / span > : [
2019-10-27 11:04:08 +00:00
< span class = "hljs-string" > "wlan.1"< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "my-wlan"< / span >
2019-10-27 11:04:08 +00:00
],
< span class = "hljs-string" > "web_password"< / span > : < span class = "hljs-string" > "myPaszxwo!z"< / span > ,
2018-11-12 15:08:09 +00:00
< span class = "hljs-string" > "webserver"< / span > : < span class = "hljs-number" > 2< / span >
...
}
< / code > < / pre > < p > Note: JSON output always contains all configuration data like the backup file except you are using < code > --group< / code > arg.< / p >
< h4 id = "tasmota-command-output" > Tasmota command output< / h4 >
< p > < em > decode-config.py< / em > is able to translate the configuration data to (most all) Tasmota commands. To output your configuration as Tasmota commands use < code > --output-format cmnd< / code > or < code > --output-format command< / code > .< / p >
< p > Example:< / p >
< pre > < code > < span class = "hljs-selector-tag" > decode-config< / span > < span class = "hljs-selector-class" > .py< / span > < span class = "hljs-selector-tag" > -d< / span > < span class = "hljs-selector-tag" > sonoff-4281< / span > < span class = "hljs-selector-tag" > -c< / span > < span class = "hljs-selector-tag" > my< / span > < span class = "hljs-selector-class" > .conf< / span > < span class = "hljs-selector-tag" > -g< / span > < span class = "hljs-selector-tag" > Wifi< / span > < span class = "hljs-selector-tag" > --output-format< / span > < span class = "hljs-selector-tag" > cmnd< / span >
# < span class = "hljs-selector-tag" > Wifi< / span > :
< span class = "hljs-selector-tag" > AP< / span > 0
< span class = "hljs-selector-tag" > Hostname< / span > %< span class = "hljs-selector-tag" > s-< / span > %04< span class = "hljs-selector-tag" > d< / span >
< span class = "hljs-selector-tag" > IPAddress1< / span > 0< span class = "hljs-selector-class" > .0< / span > < span class = "hljs-selector-class" > .0< / span > < span class = "hljs-selector-class" > .0< / span >
< span class = "hljs-selector-tag" > IPAddress2< / span > 192< span class = "hljs-selector-class" > .168< / span > < span class = "hljs-selector-class" > .12< / span > < span class = "hljs-selector-class" > .1< / span >
< span class = "hljs-selector-tag" > IPAddress3< / span > 255< span class = "hljs-selector-class" > .255< / span > < span class = "hljs-selector-class" > .255< / span > < span class = "hljs-selector-class" > .0< / span >
< span class = "hljs-selector-tag" > IPAddress4< / span > 192< span class = "hljs-selector-class" > .168< / span > < span class = "hljs-selector-class" > .12< / span > < span class = "hljs-selector-class" > .1< / span >
< span class = "hljs-selector-tag" > NtpServer1< / span > < span class = "hljs-selector-tag" > ntp< / span > < span class = "hljs-selector-class" > .localnet< / span > < span class = "hljs-selector-class" > .home< / span >
< span class = "hljs-selector-tag" > NtpServer2< / span > < span class = "hljs-selector-tag" > ntp2< / span > < span class = "hljs-selector-class" > .localnet< / span > < span class = "hljs-selector-class" > .home< / span >
< span class = "hljs-selector-tag" > NtpServer3< / span > 192< span class = "hljs-selector-class" > .168< / span > < span class = "hljs-selector-class" > .12< / span > < span class = "hljs-selector-class" > .1< / span >
< span class = "hljs-selector-tag" > Password1< / span > < span class = "hljs-selector-tag" > myWlAnPaszxwo< / span > !< span class = "hljs-selector-tag" > z< / span >
< span class = "hljs-selector-tag" > Password2< / span > < span class = "hljs-selector-tag" > myWlAnPaszxwo< / span > !< span class = "hljs-selector-tag" > z2< / span >
< span class = "hljs-selector-tag" > SSId1< / span > < span class = "hljs-selector-tag" > wlan< / span > < span class = "hljs-selector-class" > .1< / span >
< span class = "hljs-selector-tag" > SSId2< / span > < span class = "hljs-selector-tag" > wlan< / span > < span class = "hljs-selector-class" > .1< / span >
< span class = "hljs-selector-tag" > WebPassword< / span > < span class = "hljs-selector-tag" > myPaszxwo< / span > !< span class = "hljs-selector-tag" > z< / span >
< span class = "hljs-selector-tag" > WebServer< / span > 2
< span class = "hljs-selector-tag" > WifiConfig< / span > 5
< / code > < / pre > < p > Note: A few very specific module commands like MPC230xx, KNX and some Display commands are not supported. These are still available by JSON output.< / p >
< h3 id = "filter-data" > Filter data< / h3 >
2018-11-14 07:03:55 +00:00
< p > The huge number of Tasmota configuration data can be overstrained and confusing, so the most of the configuration data are grouped into categories. < / p >
2018-11-12 15:08:09 +00:00
< p > With < em > decode-config.py< / em > the following categories are available: < code > Display< / code > , < code > Domoticz< / code > , < code > Internal< / code > , < code > KNX< / code > , < code > Led< / code > , < code > Logging< / code > , < code > MCP230xx< / code > , < code > MQTT< / code > , < code > Main< / code > , < code > Management< / code > , < code > Pow< / code > , < code > Sensor< / code > , < code > Serial< / code > , < code > SetOption< / code > , < code > SonoffRF< / code > , < code > System< / code > , < code > Timers< / code > , < code > Wifi< / code > < / p >
2019-10-27 11:04:08 +00:00
< p > These are similary to the categories on < a href = "Tasmota Command Wiki" > https://github.com/arendst/Tasmota/wiki/Commands< / a > .< / p >
2018-11-12 15:08:09 +00:00
< p > To filter outputs to a subset of groups use the < code > -g< / code > or < code > --group< / code > arg concatenating the grooup you want, e. g.< / p >
< pre > < code > decode-config< span class = "hljs-selector-class" > .py< / span > -d sonoff-< span class = "hljs-number" > 4281< / span > -c my< span class = "hljs-selector-class" > .conf< / span > --output-format cmnd --group Main MQTT Management Wifi
2018-10-27 09:37:33 +01:00
< / code > < / pre > < h3 id = "configuration-file" > Configuration file< / h3 >
< p > Each argument that start with < code > --< / code > (eg. < code > --file< / code > ) 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 < a href = "https://pypi.org/project/ConfigArgParse/" > https://pypi.org/project/ConfigArgParse< / a > ).< / p >
< p > 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.< / p >
< p > The http authentication credentials < code > --username< / code > and < code > --password< / code > is predestinated to store it in a file instead using it on your command line as argument:< / p >
< p > e.g. my.conf:< / p >
< pre > < code > < span class = "hljs-section" > [source]< / span >
< span class = "hljs-attr" > username< / span > = admin
< span class = "hljs-attr" > password< / span > = myPaszxwo!z
< / code > < / pre > < p > To make a backup file from example above you can now pass the config file instead using the password on command line:< / p >
< pre > < code > < span class = "hljs-selector-tag" > decode-config< / span > < span class = "hljs-selector-class" > .py< / span > < span class = "hljs-selector-tag" > -d< / span > < span class = "hljs-selector-tag" > sonoff-4281< / span > < span class = "hljs-selector-tag" > -c< / span > < span class = "hljs-selector-tag" > my< / span > < span class = "hljs-selector-class" > .conf< / span > < span class = "hljs-selector-tag" > --backup-file< / span > < span class = "hljs-selector-tag" > Config_< / span > @< span class = "hljs-keyword" > f_< / span > @< span class = "hljs-keyword" > v< / span >
< / code > < / pre > < h3 id = "more-program-arguments" > More program arguments< / h3 >
2018-11-12 15:08:09 +00:00
< p > For better reading each short written arg (minus sign < code > -< / code > ) has a corresponding long version (two minus signs < code > --< / code > ), eg. < code > --device< / code > for < code > -d< / code > or < code > --file< / code > for < code > -f< / code > (note: not even all < code > --< / code > arg has a corresponding < code > -< / code > one).< / p >
2018-10-27 09:37:33 +01:00
< p > A short list of possible program args is displayed using < code > -h< / code > or < code > --help< / code > .< / p >
< p > For advanced help use < code > -H< / code > or < code > --full-help< / code > :< / p >
2019-05-11 12:46:58 +01:00
< pre > < code > usage: < span class = "hljs-keyword" > decode< / span > -config.py [-f < filename> ] [-< span class = "hljs-keyword" > d< / span > < host> ] [-P < port> ]
[-< span class = "hljs-keyword" > u< / span > < username> ] [-p < password> ] [-i < filename> ]
[-o < filename> ] [-t json|bin|dmp] [-< span class = "hljs-keyword" > E< / span > ] [-< span class = "hljs-keyword" > e< / span > ] [-F]
[--json-indent < indent> ] [--json-compact]
[--json-hide-pw] [--json-show-pw]
[--cmnd-indent < indent> ] [--cmnd-groups]
[--cmnd-nogroups] [--cmnd-< span class = "hljs-keyword" > sort< / span > ] [--cmnd-unsort]
[-c < filename> ] [-S] [-T json|cmnd|command]
2019-10-06 13:06:23 +01:00
[-g {Control,Devices,Display,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,Timer,Wifi} [{Control,Devices,Display,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,Timer,Wifi} ...]]
2019-05-11 12:46:58 +01:00
[--ignore-warnings] [-< span class = "hljs-keyword" > h< / span > ] [-< span class = "hljs-keyword" > H< / span > ] [-v] [-V]
2018-10-27 09:37:33 +01:00
2019-10-27 11:04:08 +00:00
Backup/< span class = "hljs-keyword" > Restore< / span > Tasmota configuration data. < span class = "hljs-keyword" > Args< / span > that start with '--'
2019-05-11 12:46:58 +01:00
(eg. -f) can also be < span class = "hljs-keyword" > set< / span > < span class = "hljs-keyword" > in< / span > a config < span class = "hljs-keyword" > file< / span > (specified via -c). Config < span class = "hljs-keyword" > file< / span >
< span class = "hljs-keyword" > syntax< / span > allows: key=value, flag=true, stuff=[a,b,c] (< span class = "hljs-keyword" > for< / span > details, see < span class = "hljs-keyword" > syntax< / span > at
https:< span class = "hljs-comment" > //goo.gl/R74nmi). If an arg is specified in more than one place, then< / span >
commandline values override config < span class = "hljs-keyword" > file< / span > values < span class = "hljs-keyword" > which< / span > override defaults.
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
Source:
< span class = "hljs-keyword" > Read< / span > /Write Tasmota configuration from/to
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
-f, --< span class = "hljs-keyword" > file< / span > , --tasmota-< span class = "hljs-keyword" > file< / span > < filename>
< span class = "hljs-keyword" > file< / span > to retrieve/write Tasmota configuration from/to
(default: None)'
-< span class = "hljs-keyword" > d< / span > , --device, --host < host>
hostname or IP address to retrieve/send Tasmota
configuration from/to (default: None)
-P, --port < port> TCP/IP port number to < span class = "hljs-keyword" > use< / span > < span class = "hljs-keyword" > for< / span > the host connection
(default: 80)
-< span class = "hljs-keyword" > u< / span > , --username < username>
host HTTP access username (default: admin)
-p, --password < password>
host HTTP access password (default: None)
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
Backup/< span class = "hljs-keyword" > Restore< / span > :
Backup & < span class = "hljs-keyword" > restore< / span > specification
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
-i, --< span class = "hljs-keyword" > restore< / span > -< span class = "hljs-keyword" > file< / span > < filename>
< span class = "hljs-keyword" > file< / span > to < span class = "hljs-keyword" > restore< / span > configuration from (default: None).
Replacements: @v=firmware < span class = "hljs-keyword" > version< / span > from config,
@f=device friendly name from config, @< span class = "hljs-keyword" > h< / span > =device
hostname from config, @< span class = "hljs-keyword" > H< / span > =device hostname from device
(-< span class = "hljs-keyword" > d< / span > arg only)
-o, --backup-< span class = "hljs-keyword" > file< / span > < filename>
< span class = "hljs-keyword" > file< / span > to backup configuration to (default: None).
Replacements: @v=firmware < span class = "hljs-keyword" > version< / span > from config,
@f=device friendly name from config, @< span class = "hljs-keyword" > h< / span > =device
hostname from config, @< span class = "hljs-keyword" > H< / span > =device hostname from device
(-< span class = "hljs-keyword" > d< / span > arg only)
-t, --backup-< span class = "hljs-keyword" > type< / span > json|bin|dmp
backup filetype (default: 'json')
-< span class = "hljs-keyword" > E< / span > , --extension < span class = "hljs-keyword" > append< / span > filetype extension < span class = "hljs-keyword" > for< / span > -i and -o filename
(default)
-< span class = "hljs-keyword" > e< / span > , --< span class = "hljs-keyword" > no< / span > -extension < span class = "hljs-keyword" > do< / span > not < span class = "hljs-keyword" > append< / span > filetype extension, < span class = "hljs-keyword" > use< / span > -i and -o
2018-11-12 15:08:09 +00:00
filename < span class = "hljs-keyword" > as< / span > passed
2019-05-11 12:46:58 +01:00
-F, --force-< span class = "hljs-keyword" > restore< / span > force < span class = "hljs-keyword" > restore< / span > even configuration is identical
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
JSON output:
JSON < span class = "hljs-keyword" > format< / span > specification
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
--json-indent < indent>
pretty-printed JSON output using indent level
(default: 'None'). -1 disables indent.
--json-compact compact JSON output < span class = "hljs-keyword" > by< / span > eliminate whitespace
--json-hide-pw hide passwords
--json-show-pw, --json-unhide-pw
unhide passwords (default)
2018-11-12 15:08:09 +00:00
2019-05-11 12:46:58 +01:00
Tasmota command output:
Tasmota command output < span class = "hljs-keyword" > format< / span > specification
2018-11-12 15:08:09 +00:00
2019-05-11 12:46:58 +01:00
--cmnd-indent < indent>
Tasmota command grouping indent level (default: '2').
0 disables indent
--cmnd-groups group Tasmota commands (default)
--cmnd-nogroups leave Tasmota commands ungrouped
--cmnd-< span class = "hljs-keyword" > sort< / span > < span class = "hljs-keyword" > sort< / span > Tasmota commands (default)
--cmnd-unsort leave Tasmota commands unsorted
2018-11-12 15:08:09 +00:00
2019-05-11 12:46:58 +01:00
Common:
Optional arguments
2018-11-12 15:08:09 +00:00
2019-05-11 12:46:58 +01:00
-c, --config < filename>
< span class = "hljs-keyword" > program< / span > config < span class = "hljs-keyword" > file< / span > - can be used to < span class = "hljs-keyword" > set< / span > default
command < span class = "hljs-keyword" > args< / span > (default: None)
-S, --output < span class = "hljs-keyword" > display< / span > output regardsless of backup/< span class = "hljs-keyword" > restore< / span > usage
(default < span class = "hljs-keyword" > do< / span > not output < span class = "hljs-keyword" > on< / span > backup or < span class = "hljs-keyword" > restore< / span > usage)
-T, --output-< span class = "hljs-keyword" > format< / span > json|cmnd|command
< span class = "hljs-keyword" > display< / span > output < span class = "hljs-keyword" > format< / span > (default: 'json')
2019-10-06 13:06:23 +01:00
-g, --group {Control,Devices,Display,Domoticz,Internal,Knx,Light,Management,Mqtt,Power,Rules,Sensor,Serial,Setoption,Shutter,Sonoffrf,System,Timer,Wifi}
2019-05-11 12:46:58 +01:00
limit data processing to command groups (default < span class = "hljs-keyword" > no< / span >
filter)
--ignore-warnings < span class = "hljs-keyword" > do< / span > not < span class = "hljs-keyword" > exit< / span > < span class = "hljs-keyword" > on< / span > warnings. Not recommended, used < span class = "hljs-keyword" > by< / span > your
2018-11-12 15:08:09 +00:00
own responsibility!
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
Info:
Extra information
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
-< span class = "hljs-keyword" > h< / span > , --< span class = "hljs-keyword" > help< / span > show usage < span class = "hljs-keyword" > help< / span > message and < span class = "hljs-keyword" > exit< / span >
-< span class = "hljs-keyword" > H< / span > , --full-< span class = "hljs-keyword" > help< / span > show full < span class = "hljs-keyword" > help< / span > message and < span class = "hljs-keyword" > exit< / span >
-v, --verbose produce < span class = "hljs-keyword" > more< / span > output < span class = "hljs-keyword" > about< / span > what the < span class = "hljs-keyword" > program< / span > does
-V, --< span class = "hljs-keyword" > version< / span > show < span class = "hljs-keyword" > program< / span > 's < span class = "hljs-keyword" > version< / span > number and < span class = "hljs-keyword" > exit< / span >
2018-10-27 09:37:33 +01:00
2019-05-11 12:46:58 +01:00
Either argument -< span class = "hljs-keyword" > d< / span > < host> or -f < filename> must be given.
2018-11-12 15:08:09 +00:00
< / code > < / pre > < h3 id = "program-parameter-notes" > Program parameter notes< / h3 >
< p > < em > decode-config.py< / em > < / p >
< h3 id = "examples" > Examples< / h3 >
2018-10-27 09:37:33 +01:00
< p > The most of the examples are for linux command line. Under Windows call the program using < code > python decode-config.py ...< / code > .< / p >
< h4 id = "config-file" > Config file< / h4 >
< p > Note: The example contains .ini style sections < code > [...]< / code > . Sections are always treated as comment and serves as clarity only.
For further details of config file syntax see < a href = "https://pypi.org/project/ConfigArgParse/" > https://pypi.org/project/ConfigArgParse< / a > .< / p >
< p > < em > my.conf< / em > < / p >
< pre > < code > < span class = "hljs-string" > [Source]< / span >
username = admin
password = myPaszxwo!z
< span class = "hljs-string" > [JSON]< / span >
json-indent < span class = "hljs-number" > 2< / span >
< / code > < / pre > < h4 id = "using-tasmota-binary-configuration-files" > Using Tasmota binary configuration files< / h4 >
< ol >
< li > < p > Restore a Tasmota configuration file< / p >
< p > < code > decode-config.py -c my.conf -d sonoff --restore-file Config_Sonoff_6.2.1.dmp< / code > < / p >
< / li >
< li > < p > Backup device using Tasmota configuration compatible format< / p >
< p > a) use file extension to choice the file format< / p >
< p > < code > decode-config.py -c my.conf -d sonoff --backup-file Config_@f_@v.dmp< / code > < / p >
< p > b) use args to choice the file format< / p >
< p > < code > decode-config.py -c my.conf -d sonoff --backup-type dmp --backup-file Config_@f_@v< / code > < / p >
< / li >
< / ol >
< h4 id = "use-batch-processing" > Use batch processing< / h4 >
< pre > < code > < span class = "hljs-keyword" > for< / span > device < span class = "hljs-keyword" > in< / span > sonoff1 sonoff2 sonoff3; < span class = "hljs-keyword" > do< / span > ./decode-config.py -c my.conf -d < span class = "hljs-variable" > $device< / span > -o Config< span class = "hljs-number" > _< / span > < span class = "hljs-variable" > @f_< / span > < span class = "hljs-variable" > @v< / span >
< / code > < / pre > < p > or under windows< / p >
< pre > < code > < span class = "hljs-keyword" > for< / span > device < span class = "hljs-keyword" > in< / span > (sonoff1 sonoff2 sonoff3) < span class = "hljs-keyword" > do< / span > < span class = "hljs-keyword" > python< / span > decode-config.py -c my.conf -d %device -o Config_@f_@v
< / code > < / pre > < p > will produce JSON configuration files for host sonoff1, sonoff2 and sonoff3 using friendly name and Tasmota firmware version for backup filenames.< / p >
2018-11-14 07:03:55 +00:00
< h2 id = "notes" > Notes< / h2 >
< p > Some general notes:< / p >
< ul >
< li > Filename replacement macros < strong > @h< / strong > and < strong > @H< / strong > :< ul >
< li > < strong > @h< / strong > < br > The < strong > @h< / strong > replacement macro uses the hostname configured with the Tasomta Wifi < code > Hostname < host> < / code > command (defaults to < code > %s-%04d< / code > ). It will not use the network hostname of your device because this is not available when working with files only (e.g. < code > --file < filename> < / code > as source).< br > To prevent having a useless % in your filename, < strong > @h< / strong > will not replaced by configuration data hostname if this contains ' %' characters.< / li >
< li > < strong > @H< / strong > < br > If you want to use the network hostname within your filename, use the < strong > @H< / strong > replacement macro instead - but be aware this will only replaced if you are using a network device as source (< code > -d< / code > , < code > --device< / code > , < code > --host< / code > ); it will not work when using a file as source (< code > -f< / code > , < code > --file< / code > )< / li >
< / ul >
< / li >
< / ul >