#25016·Tasmota

Tasmota device backup ignores non-default files (Berry scripts, Matter state, custom JSON)

Author: ntninjaCreated Sep 8, 2026Updated Sep 10, 2026
Labelsenhancement

PROBLEM DESCRIPTION

A clear and concise description of what the problem is. Exporting a Tasmota backup and later importing it into a factory reset device (there was a problem during upgrade) results in most settings being correctly restored, except:

  • Files other than /.drvset???
    • No Matter state
    • No custom Berry scripts
    • No custom JSON state files of Berry scripts or installed Berry Extensions
  • Files in the /.drvset??? group appear to be miss any content after the first NUL byte Was a bug specific to /.drvset027 (ESP32 Shutters), that is now fixed.

This is true for backups going back to at least 15.3.0.3.

REQUESTED INFORMATION

Make sure your have performed every step and checked the applicable boxes before submitting your issue. Thank you!

  • Read the Contributing Guide and Policy and the Code of Conduct
  • Searched the problem in issues
  • Searched the problem in discussions
  • Searched the problem in the docs
  • Searched the problem in the chat – not going to use this privacy-hostile service
  • Problem is not scripter related, in this case open a discussion and tag gemu2015
  • Device used (e.g., Sonoff Basic): wESP32
  • Tasmota binary firmware version number used: 15.6.0.1
    • Pre-compiled
    • Self-compiled
  • Flashing tools used: Tasmota Chromium Installer
  • Provide the output of command: Backlog Template; Module; GPIO 255:
lua
  Configuration output here:

01:50:33.840 CMD: Backlog Template; Module; GPIO 255
01:50:33.840 SRC: WebConsole from 10.2.0.1
01:50:33.842 CMD: Grp 0, Cmd 'BACKLOG', Idx 1, Len 26, Pld -99, Data 'Template; Module; GPIO 255'
01:50:33.858 SRC: Backlog
01:50:33.859 CMD: Grp 0, Cmd 'TEMPLATE', Idx 1, Len 0, Pld -99, Data ''
01:50:33.866 MQT: stat/tasmota_244670/RESULT = {"NAME":"wESP32","ARCH":"ESP32","GPIO":[0,0,1,0,1,1,0,0,1,1,1,1,5568,5600,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
01:50:34.090 SRC: Backlog
01:50:34.090 CMD: Grp 0, Cmd 'MODULE', Idx 1, Len 0, Pld -99, Data ''
01:50:34.095 MQT: stat/tasmota_244670/RESULT = {"Module":{"0":"wESP32"}}
01:50:34.294 SRC: Backlog
01:50:34.294 CMD: Grp 0, Cmd 'GPIO', Idx 1, Len 3, Pld 255, Data '255'
01:50:34.308 MQT: stat/tasmota_244670/RESULT = {"GPIO0":{"None":0},"GPIO1":{"None":0},"GPIO2":{"None":0},"GPIO3":{"None":0},"GPIO4":{"I2C SCL1":608},"GPIO5":{"I2C SCL2":609},"GPIO6":{"None":0},"GPIO7":{"None":0},"GPIO8":{"None":0},"GPIO9":{"None":0},"GPIO10":{"None":0},"GPIO11":{"None":0},"GPIO12":{"None":0},"GPIO13":{"None":0},"GPIO14":{"Relay3":226},"GPIO15":{"I2C SDA1":640},"GPIO16":{"ETH MDC1":5568},"GPIO17":{"ETH MDIO":5600},"GPIO18":{"Relay4":227},"GPIO19":{"None":0},"GPIO20":{"None":0},"GPIO21":{"None":0},"GPIO22":{"None":0},"GPIO23":{"Relay2":225},"GPIO24":{"None":0},"GPIO25":{"None":0},"GPIO26":{"None":0},"GPIO27":{"None":0},"GPIO32":{"Relay1":224},"GPIO33":{"I2C SDA2":641},"GPIO34":{"None":0},"GPIO35":{"Input1":7648},"GPIO36":{"ADC Strom1":11296},"GPIO37":{"None":0},"GPIO38":{"None":0},"GPIO39":{"None":0}}

(Already in the process of restoring Shutter functionality, but it will still takes several hours to get all the clibration done again…)

  • If using rules, provide the output of this command: Backlog Rule1; Rule2; Rule3:
lua
  Rules output here:

  • Provide the output of this command: Status 0:
lua
  STATUS 0 output here:

01:52:34.441 MQT: stat/tasmota_244670/STATUS1 = {"StatusPRM":{"Baudrate":115200,"SerialConfig":"8N1","GroupTopic":"tasmotas","OtaUrl":"http://ota.tasmota.com/tasmota32/release/tasmota32-DE.bin","RestartReason":"Software reset CPU","Uptime":"0T00:48:51","StartupUTC":"2026-09-07T23:03:43","Sleep":50,"CfgHolder":4617,"BootCount":13,"BCResetTime":"2025-09-18T10:33:32","SaveCount":29}}
01:52:34.452 MQT: stat/tasmota_244670/STATUS2 = {"StatusFWR":{"Version":"15.6.0.1(76eafeb-tasmota32)","BuildDateTime":"2026.09.07 12:03:29","Core":"3.3.8","SDK":"5.5.4.260407","CpuFrequency":160,"Hardware":"ESP32-D0WD-V3 v3.1","CR":"481/699"}}
01:52:34.463 MQT: stat/tasmota_244670/STATUS3 = {"StatusLOG":{"SerialLog":0,"WebLog":3,"MqttLog":2,"FileLog":0,"SysLog":0,"LogHost":"","LogPort":514,"SSId":["",""],"TelePeriod":10,"Resolution":"558A82C2","SetOption":["0000C009","2805C80001000600003C5A0A192800000000","400000A0","00204000","00044000","00000020"]}}
01:52:34.486 MQT: stat/tasmota_244670/STATUS4 = {"StatusMEM":{"ProgramSize":2132,"Free":747,"Heap":78,"StackLowMark":2,"PsrMax":0,"PsrFree":0,"ProgramFlashSize":16384,"FlashSize":16384,"FlashChipId":"1840A1","FlashFrequency":80,"FlashMode":"DIO","Features":["0407","9F9AD7DF","0015A001","B7F7BFCF","05DA9BC4","E0360DC7","480840D2","20200000","D4BC482D","810A80F1","00200814"],"Drivers":"1,2,!3,!4,!5,7,!8,9,10,11,12,!14,!16,!17,!20,!21,!24,26,27,29,!34,!35,38,50,52,!59,!60,62,!63,!66,!67,!68,!73,!75,82,!86,!87,!88,!91,!121","Sensors":"1,2,3,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,26,31,34,37,39,40,42,43,45,51,52,55,56,58,59,64,66,67,74,85,92,95,98,103,105,109,119,127","I2CDriver":"7,8,9,10,11,12,13,14,15,17,18,20,24,29,31,36,41,42,44,46,48,58,62,65,69,76,77,82,89,97"}}
01:52:34.501 MQT: stat/tasmota_244670/STATUS5 = {"StatusNET":{"Hostname":"tasmota-244670-1648","IPAddress":"0.0.0.0","Gateway":"10.1.0.138","Subnetmask":"255.255.0.0","DNSServer1":"10.2.0.1","DNSServer2":"0.0.0.0","Mac":"F8:B3:B7:24:46:70","IP6Global":"","IP6Local":"","Ethernet":{"Hostname":"tasmota-244670-1648-eth","IPAddress":"10.2.0.20","Gateway":"10.2.0.1","Subnetmask":"255.255.0.0","DNSServer1":"10.2.0.1","DNSServer2":"0.0.0.0","Mac":"––––––––","IP6Global":"––––––––––","IP6Local":"––––––––%en1"},"Webserver":2,"HTTP_API":1,"WifiConfig":4,"WifiPower":16.0}}
01:52:34.514 MQT: stat/tasmota_244670/STATUS6 = {"StatusMQT":{"MqttHost":"10.2.0.1","MqttPort":8883,"MqttClientMask":"DVES_%06X","MqttClient":"DVES_244670","MqttUser":"blinds-controller","MqttCount":1,"MqttTLS":1,"MAX_PACKET_SIZE":1200,"KEEPALIVE":30,"SOCKET_TIMEOUT":4}}
01:52:34.524 MQT: stat/tasmota_244670/STATUS7 = {"StatusTIM":{"UTC":"2026-09-07T23:52:34Z","Local":"2026-09-08T01:52:34","StartDST":"2026-03-29T02:00:00","EndDST":"2026-10-25T03:00:00","Timezone":99,"Sunrise":"06:26","Sunset":"19:23"}}
01:52:34.571 MQT: stat/tasmota_244670/STATUS10 = {"StatusSNS":{"Time":"2026-09-08T01:52:34","ANALOG":{"Current1":0.1},"BH1750":{"Illuminance":0},"SCD30":{"CarbonDioxide":516,"Temperature":26.7,"Humidity":51.9,"DewPoint":16.0},"HIH":{"Temperature":18.6,"Humidity":77.9,"DewPoint":14.6},"Shutter1":{"Position":100,"Direction":0,"Target":100,"Tilt":0},"Shutter2":{"Position":100,"Direction":0,"Target":100,"Tilt":0},"TempUnit":"C"}}
01:52:34.585 MQT: stat/tasmota_244670/STATUS11 = {"StatusSTS":{"Time":"2026-09-08T01:52:34","Uptime":"0T00:48:51","UptimeSec":2931,"Heap":73,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":25,"MqttCount":1,"Berry":{"HeapUsed":21,"Objects":319},"POWER1":"OFF","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF","Hostname":"tasmota-244670-1648-eth","IPAddress":"10.2.0.20"}}
01:52:34.596 MQT: stat/tasmota_244670/STATUS13 = {"StatusSHT":{"SHT0":{"Relay1":1,"Relay2":2,"Open":220,"Close":200,"50perc":50,"Delay":0,"Opt":"0000","Calib":[300,500,700,900,1000],"Mode":"1","TiltConfig":[0,0,0,0,0]},"SHT1":{"Relay1":3,"Relay2":4,"Open":223,"Close":200,"50perc":50,"Delay":0,"Opt":"0000","Calib":[300,500,700,900,1000],"Mode":"1","TiltConfig":[0,0,0,0,0]}}}
  • Set weblog to 4 and then, when you experience your issue, provide the output of the Console log:
lua
  Console output here:

TO REPRODUCE

Steps to reproduce the behavior:

  1. Ensure Tasmota device has any Shutter configuration and some non-default UFS files present
  2. In Tasmota WebUI, go to SettingsExport/Save (don’t have English labels)
  3. Save file somewhere
  4. Analyze the exported dump file using decode-config.py -s Config_tasmota_*.dmp or import into factory reset device

EXPECTED BEHAVIOUR

A clear and concise description of what you expected to happen. The mentioned information should be included in backups. For Shutters this is clearly a bug (the fields are present, just all 0). (Shutter bug fixed.) For UFS files, it is at least a highly unexpected design decision if they shouldn’t be included, in which case the Export/Save button should clearly state Export/Safe (without UFS files)

SCREENSHOTS

If applicable, add screenshots to help explain your problem.

Exported shutter configuration always looks like this in all backups ever created: Misunderstanding! ESP32 shutter information is in .drvset027!

json
 "shutter_accuracy": 0,
 "shutter_button": [{"enabled": 0,
                     "mqtt_broadcast_all": 0,
                     "mqtt_broadcast_double": 0,
                     "mqtt_broadcast_hold": 0,
                     "mqtt_broadcast_single": 0,
                     "mqtt_broadcast_triple": 0,
                     "press_double": "-",
                     "press_hold": "-",
                     "press_single": "-",
                     "press_triple": "-",
                     "shutter": 1},
                    {"enabled": 0,
                     "mqtt_broadcast_all": 0,
                     "mqtt_broadcast_double": 0,
                     "mqtt_broadcast_hold": 0,
                     "mqtt_broadcast_single": 0,
                     "mqtt_broadcast_triple": 0,
                     "press_double": "-",
                     "press_hold": "-",
                     "press_single": "-",
                     "press_triple": "-",
                     "shutter": 1},
                    {"enabled": 0,
                     "mqtt_broadcast_all": 0,
                     "mqtt_broadcast_double": 0,
                     "mqtt_broadcast_hold": 0,
                     "mqtt_broadcast_single": 0,
                     "mqtt_broadcast_triple": 0,
                     "press_double": "-",
                     "press_hold": "-",
                     "press_single": "-",
                     "press_triple": "-",
                     "shutter": 1},
                    {"enabled": 0,
                     "mqtt_broadcast_all": 0,
                     "mqtt_broadcast_double": 0,
                     "mqtt_broadcast_hold": 0,
                     "mqtt_broadcast_single": 0,
                     "mqtt_broadcast_triple": 0,
                     "press_double": "-",
                     "press_hold": "-",
                     "press_single": "-",
                     "press_triple": "-",
                     "shutter": 1}],
 "shutter_closetime": [0, 0, 0, 0],
 "shutter_mode": 0,
 "shutter_motordelay": [0, 0, 0, 0],
 "shutter_motorstop": 0,
 "shutter_opentime": [0, 0, 0, 0],
 "shutter_options": [0, 0, 0, 0],
 "shutter_position": [0, 0, 0, 0],
 "shutter_pwmrange": [[0, 0, 0, 0], [0, 0, 0, 0]],
 "shutter_set50percent": [0, 0, 0, 0],
 "shutter_startrelay": [0, 0, 0, 0],
 "shutter_tilt_config": [[0, 0, 0, 0],
                         [0, 0, 0, 0],
                         [0, 0, 0, 0],
                         [0, 0, 0, 0],
                         [0, 0, 0, 0]],
 "shutter_tilt_pos": [0, 0, 0, 0],
 "shuttercoeff": [[0, 0, 0, 0],
                  [0, 0, 0, 0],
                  [0, 0, 0, 0],
                  [0, 0, 0, 0],
                  [0, 0, 0, 0]],

ADDITIONAL CONTEXT

Add any other context about the problem here.

(Please, remember to close the issue when the problem has been addressed)