@ -191,5 +191,8 @@ Everything that can be controlled via RFID-tags and buttons, can also be control
### Supported file/stream-types
Please refer [ESP32-audioI2S](https://github.com/schreibfaul1/ESP32-audioI2S), as this is the library I used for music-decoding.
### Backups
As all assignments between RFID-IDs and actions (playmode, file to play...) is saved in ESP's NVS, the problem is that it's all gone when the ESP is broken. So that's where a backup comes into play. So every time you change or add a new assignment between a RFID-tag and an action via GUI, a backup-file is saved on the uSD-card. The file's name can be changed via `backupFile`. Again using the GUI you can use the upload-form to import such a file. To be honest: Sometimes I had some issues with Firefox doing this whereas Safari turned out to do it right. Don't know why :-(.
## Smarthome (optional)
As already described, MQTT is supported. In order to use it it's necessary to run a MQTT-broker; [Mosquitto](https://mosquitto.org/) for instance. After connecting to it, Tonuino subscribes to all command-topics. State-topics are used to push states to the broker in order to inform others if anything changed (change of volume, new playlist, new track... name it). Others, like openHAB, subscribe to state-topics end send commands via command-topics. So it's not just limited to openHAB. It's just necessary to use a platform, that supports MQTT.
charstringDelimiter[]="#";// Character used to encapsulate data in linear NVS-strings (don't change)
charstringOuterDelimiter[]="^";// Character used to encapsulate encapsulated data along with RFID-ID in backup-file
voidnotFound(AsyncWebServerRequest*request){
request->send(404,"text/plain","Not found");
}
@ -262,6 +263,10 @@ AsyncWebServer wServer(80);
AsyncWebSocketws("/ws");
AsyncEventSourceevents("/events");
staticconstcharbackupRecoveryWebsite[]PROGMEM="<p>Das Backup-File wird eingespielt...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zurückkehren</a>.</p>";
staticconstcharrestartWebsite[]PROGMEM="<p>Der Tonuino wird neu gestartet...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zurückkehren</a>.</p>";
request->send(200,"text/html","<p>Der Tonuino wird neu gestartet...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zurückkehren</a>.</p>");