diff --git a/tools/decode-config.py b/tools/decode-config.py index 1eb991d11..a09fbfb5d 100644 --- a/tools/decode-config.py +++ b/tools/decode-config.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -VER = '2.0.0000' +VER = '2.0.0002' """ decode-config.py - Backup/Restore Sonoff-Tasmota configuration data @@ -201,7 +201,7 @@ DEFAULTS = { 'jsonsort': True, 'jsonrawvalues':False, 'jsonrawkeys': False, - 'jsonhidepw': True, + 'jsonhidepw': False, }, } args = {} @@ -250,21 +250,27 @@ Settings dictionary describes the config file fields definition: negative shift the result left bits datadef - Define the field interpretation different from simple - standard types (like char, byte, int) e. g. lists or bit fields - Can be None, a single integer, a list or a dictionary - None: - None must be given if the field contains a simple value - desrcibed by the prefix - n: - Same as [n] below - [n]: - Defines a one-dimensional array of size - [n, n <,n...>] - Defines a multi-dimensional array + Data definition, is either a array definition or a + tuple containing an array definition and min/max values + Format: arraydef|(arraydef, min, max) + arraydef: + None: + None must be given if the field contains a + simple value desrcibed by the prefix + n: + [n]: + Defines a one-dimensional array of size + [n, m <,o...>] + Defines a multi-dimensional array + min: + defines a minimum valid value or None if all values + for this format is allowed. + max: + defines a maximum valid value or None if all values + for this format is allowed. converter (optional) - Conversion methode(s): ()|'xxx'|func + Conversion methode(s): 'xxx'|func or ('xxx'|func, 'xxx'|func) Read conversion is used if args.jsonrawvalues is False Write conversion is used if jsonrawvalues from restore json file is False or args.jsonrawvalues is False. @@ -845,7 +851,25 @@ Setting_6_2_1_19.update({ 'weight_max': ('= cfg[0]: + template = cfg + size = template[1] + setting = template[2] + break except: - return None,None,None,None - - # search setting definition - template = None - setting = None - size = None - for cfg in Settings: - if version >= cfg[0]: - template = cfg - size = template[1] - setting = template[2] - break + pass return version, template, size, setting @@ -1652,6 +1677,9 @@ def GetField(dobj, fieldname, fielddef, raw=False, addroffset=0): result = None + if fieldname == 'raw' and not args.jsonrawkeys: + return result + # get field definition _format, baseaddr, bits, bitshift, datadef, convert = GetFieldDef(fielddef) @@ -1662,7 +1690,7 @@ def GetField(dobj, fieldname, fielddef, raw=False, addroffset=0): for i in range(0, datadef[0]): subfielddef = GetSubfieldDef(fielddef) length = GetFieldLength(subfielddef) - if length != 0 and (fieldname != 'raw' or args.jsonrawkeys): + if length != 0: result.append(GetField(dobj, fieldname, subfielddef, raw=raw, addroffset=addroffset+offset)) offset += length @@ -1722,6 +1750,9 @@ def SetField(dobj, fieldname, fielddef, restore, raw=False, addroffset=0, filena _format, baseaddr, bits, bitshift, datadef, convert = GetFieldDef(fielddef) fieldname = str(fieldname) + if fieldname == 'raw' and not args.jsonrawkeys: + return dobj + # do not write readonly values if isinstance(convert, (list,tuple)) and len(convert)>1 and convert[1]==None: if args.debug: