mirror of https://github.com/arendst/Tasmota.git
357 lines
30 KiB
HTML
357 lines
30 KiB
HTML
<h1 id="decode-config-py">decode-config.py</h1>
|
|
<p><em>decode-config.py</em> is able to backup and restore Sonoff-Tasmota configuration.</p>
|
|
<p>In comparison with the Tasmota build-in "Backup/Restore Configuration" function <em>decode-config.py</em></p>
|
|
<ul>
|
|
<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>
|
|
</ul>
|
|
<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>
|
|
<th style="text-align:center">Sonoff-Tasmota<br />*.dmp file</th>
|
|
</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>
|
|
<p><em>decode-config.py</em> is compatible with Tasmota version from v5.10.0 up to now.</p>
|
|
<h1 id="content">Content</h1>
|
|
<ul>
|
|
<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>
|
|
</ul>
|
|
</li>
|
|
<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>
|
|
</ul>
|
|
</li>
|
|
<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>
|
|
</ul>
|
|
</li>
|
|
<li><a href="decode-config.md#notes">Notes</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2 id="prerequisite">Prerequisite</h2>
|
|
<ul>
|
|
<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>
|
|
</li>
|
|
<li><p><a href="https://github.com/arendst/Sonoff-Tasmota">Sonoff-Tasmota</a> <a href="https://github.com/arendst/Sonoff-Tasmota/releases">Firmware</a> with Web-Server enabled:</p>
|
|
<ul>
|
|
<li>To backup or restore configurations from or to a Sonoff-Tasmota device you need a firmare with enabled web-server in admin mode (command <a href="https://github.com/arendst/Sonoff-Tasmota/wiki/Commands#wifi">WebServer 2</a>). This is the Tasmota default.</li>
|
|
<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>
|
|
</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>
|
|
<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>
|
|
<h3 id="-bin-format">.bin Format</h3>
|
|
<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/Sonoff-Tasmota/blob/master/sonoff/settings.h">settings.h</a> in decrypted format.</p>
|
|
<h4 id="file-extensions">File extensions</h4>
|
|
<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>
|
|
<h2 id="usage">Usage</h2>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
</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>{
|
|
<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>,
|
|
...
|
|
<span class="hljs-string">"ws_width"</span>: [
|
|
<span class="hljs-number">1</span>,
|
|
<span class="hljs-number">3</span>,
|
|
<span class="hljs-number">5</span>
|
|
]
|
|
}
|
|
</code></pre><h3 id="save-backup-file">Save backup file</h3>
|
|
<p>To save the output as backup file use <code>--backup-file <filename></code>, you can use placeholder for Version, Friendlyname and Hostname: </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">--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
|
|
</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>
|
|
<h3 id="restore-backup-file">Restore backup file</h3>
|
|
<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>
|
|
<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>
|
|
</code></pre><h3 id="output-to-screen">Output to screen</h3>
|
|
<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>
|
|
<h4 id="json-output">JSON output</h4>
|
|
<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>
|
|
<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
|
|
|
|
{
|
|
...
|
|
<span class="hljs-string">"hostname"</span>: <span class="hljs-string">"%s-%04d"</span>,
|
|
<span class="hljs-string">"ip_address"</span>: [
|
|
<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>,
|
|
<span class="hljs-string">"192.168.12.1"</span>
|
|
],
|
|
<span class="hljs-string">"ntp_server"</span>: [
|
|
<span class="hljs-string">"ntp.localnet.home"</span>,
|
|
<span class="hljs-string">"ntp2.localnet.home"</span>,
|
|
<span class="hljs-string">"192.168.12.1"</span>
|
|
],
|
|
<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>,
|
|
<span class="hljs-string">"sta_pwd"</span>: [
|
|
<span class="hljs-string">"myWlAnPaszxwo!z"</span>,
|
|
<span class="hljs-string">"myWlAnPaszxwo!z2"</span>
|
|
],
|
|
<span class="hljs-string">"sta_ssid"</span>: [
|
|
<span class="hljs-string">"wlan.1"</span>,
|
|
<span class="hljs-string">"my-wlan"</span>
|
|
],
|
|
<span class="hljs-string">"web_password"</span>: <span class="hljs-string">"myPaszxwo!z"</span>,
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<p>These are similary to the categories on <a href="Tasmota Command Wiki">https://github.com/arendst/Sonoff-Tasmota/wiki/Commands</a>.</p>
|
|
<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
|
|
</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>
|
|
<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>
|
|
<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>
|
|
<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]
|
|
[-<span class="hljs-keyword">g</span> {Control,Devices,<span class="hljs-keyword">Display</span>,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,<span class="hljs-keyword">Timer</span>,Wifi} [{Control,Devices,<span class="hljs-keyword">Display</span>,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,<span class="hljs-keyword">Timer</span>,Wifi} ...]]
|
|
[--ignore-warnings] [-<span class="hljs-keyword">h</span>] [-<span class="hljs-keyword">H</span>] [-v] [-V]
|
|
|
|
Backup/<span class="hljs-keyword">Restore</span> Sonoff-Tasmota configuration data. <span class="hljs-keyword">Args</span> that start with '--'
|
|
(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.
|
|
|
|
Source:
|
|
<span class="hljs-keyword">Read</span>/Write Tasmota configuration from/to
|
|
|
|
-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)
|
|
|
|
Backup/<span class="hljs-keyword">Restore</span>:
|
|
Backup & <span class="hljs-keyword">restore</span> specification
|
|
|
|
-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
|
|
filename <span class="hljs-keyword">as</span> passed
|
|
-F, --force-<span class="hljs-keyword">restore</span> force <span class="hljs-keyword">restore</span> even configuration is identical
|
|
|
|
JSON output:
|
|
JSON <span class="hljs-keyword">format</span> specification
|
|
|
|
--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)
|
|
|
|
Tasmota command output:
|
|
Tasmota command output <span class="hljs-keyword">format</span> specification
|
|
|
|
--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
|
|
|
|
Common:
|
|
Optional arguments
|
|
|
|
-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')
|
|
-<span class="hljs-keyword">g</span>, --group {Control,Devices,<span class="hljs-keyword">Display</span>,Domoticz,Internal,KNX,Light,MQTT,Management,Power,Rules,Sensor,Serial,SetOption,SonoffRF,System,<span class="hljs-keyword">Timer</span>,Wifi}
|
|
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
|
|
own responsibility!
|
|
|
|
Info:
|
|
Extra information
|
|
|
|
-<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>
|
|
|
|
Either argument -<span class="hljs-keyword">d</span> <host> or -f <filename> must be given.
|
|
</code></pre><h3 id="program-parameter-notes">Program parameter notes</h3>
|
|
<p><em>decode-config.py</em></p>
|
|
<h3 id="examples">Examples</h3>
|
|
<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>
|
|
<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>
|