Compare commits
	
		
			9 Commits
		
	
	
		
			v1.2.87
			...
			cefa81030b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| cefa81030b | |||
| 62052927d2 | |||
| 933a84f8ce | |||
| db3c19ff2e | |||
| ae9eb4cc6b | |||
| 89d40832c5 | |||
| c161216c04 | |||
| 6a016b6ac4 | |||
| 44dd485e17 | 
							
								
								
									
										34
									
								
								.github/workflows/providers/gitea-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/workflows/providers/gitea-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -46,32 +46,36 @@ jobs:
 | 
			
		||||
        
 | 
			
		||||
    - name: Prepare binaries
 | 
			
		||||
      run: |
 | 
			
		||||
        # Ensure we're in the project root
 | 
			
		||||
        cd $GITHUB_WORKSPACE
 | 
			
		||||
        
 | 
			
		||||
        # Create SPIFFS directory if it doesn't exist
 | 
			
		||||
        mkdir -p .pio/build/esp32dev/spiffs
 | 
			
		||||
        
 | 
			
		||||
        # Copy firmware to SPIFFS directory
 | 
			
		||||
        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/spiffs/firmware.bin
 | 
			
		||||
        
 | 
			
		||||
        # Build new SPIFFS image with firmware included
 | 
			
		||||
        pio run -t buildfs
 | 
			
		||||
        
 | 
			
		||||
        cd .pio/build/esp32dev
 | 
			
		||||
        
 | 
			
		||||
        # Create OTA binary (already has correct magic byte)
 | 
			
		||||
        cp firmware.bin filaman.bin
 | 
			
		||||
        # Create release files
 | 
			
		||||
        cp spiffs.bin filaman_spiffs.bin
 | 
			
		||||
        
 | 
			
		||||
        # Create a magic byte prepended binary for the bootloader
 | 
			
		||||
        echo -ne '\xE9' > bootloader_with_magic.bin
 | 
			
		||||
        cat bootloader.bin >> bootloader_with_magic.bin
 | 
			
		||||
        
 | 
			
		||||
        echo "Creating full binary with magic byte..."
 | 
			
		||||
        # Create full binary
 | 
			
		||||
        echo "Creating full binary..."
 | 
			
		||||
        esptool.py --chip esp32 merge_bin \
 | 
			
		||||
          --fill-flash-size 4MB \
 | 
			
		||||
          --flash_mode dio \
 | 
			
		||||
          --flash_freq 40m \
 | 
			
		||||
          --flash_size 4MB \
 | 
			
		||||
          -o filaman.bin \
 | 
			
		||||
          0x0000 bootloader_with_magic.bin \
 | 
			
		||||
          -o filaman_full.bin \
 | 
			
		||||
          0x0000 bootloader.bin \
 | 
			
		||||
          0x8000 partitions.bin \
 | 
			
		||||
          0x10000 firmware.bin \
 | 
			
		||||
          0x390000 spiffs.bin
 | 
			
		||||
        
 | 
			
		||||
        # Verify magic bytes
 | 
			
		||||
        echo "Checking magic bytes:"
 | 
			
		||||
        echo "Full binary first bytes:"
 | 
			
		||||
        xxd -l 16 filaman.bin
 | 
			
		||||
        
 | 
			
		||||
        # Verify file sizes
 | 
			
		||||
        echo "File sizes:"
 | 
			
		||||
        ls -lh *.bin
 | 
			
		||||
@@ -103,7 +107,7 @@ jobs:
 | 
			
		||||
          
 | 
			
		||||
          # Upload binaries
 | 
			
		||||
          cd .pio/build/esp32dev
 | 
			
		||||
          for file in filaman.bin; do
 | 
			
		||||
          for file in filaman_ota.bin filaman_spiffs.bin filaman_full.bin; do
 | 
			
		||||
            echo "Uploading $file..."
 | 
			
		||||
            curl -k -s \
 | 
			
		||||
              -X POST \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								.github/workflows/providers/github-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/workflows/providers/github-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -35,32 +35,36 @@ jobs:
 | 
			
		||||
        
 | 
			
		||||
    - name: Prepare binaries
 | 
			
		||||
      run: |
 | 
			
		||||
        # Ensure we're in the project root
 | 
			
		||||
        cd $GITHUB_WORKSPACE
 | 
			
		||||
        
 | 
			
		||||
        # Create SPIFFS directory if it doesn't exist
 | 
			
		||||
        mkdir -p .pio/build/esp32dev/spiffs
 | 
			
		||||
        
 | 
			
		||||
        # Copy firmware to SPIFFS directory
 | 
			
		||||
        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/spiffs/firmware.bin
 | 
			
		||||
        
 | 
			
		||||
        # Build new SPIFFS image with firmware included
 | 
			
		||||
        pio run -t buildfs
 | 
			
		||||
        
 | 
			
		||||
        cd .pio/build/esp32dev
 | 
			
		||||
        
 | 
			
		||||
        # Create OTA binary (already has correct magic byte)
 | 
			
		||||
        cp firmware.bin filaman.bin
 | 
			
		||||
        # Create release files
 | 
			
		||||
        cp spiffs.bin filaman_spiffs.bin
 | 
			
		||||
        
 | 
			
		||||
        # Create a magic byte prepended binary for the bootloader
 | 
			
		||||
        echo -ne '\xE9' > bootloader_with_magic.bin
 | 
			
		||||
        cat bootloader.bin >> bootloader_with_magic.bin
 | 
			
		||||
        
 | 
			
		||||
        echo "Creating full binary with magic byte..."
 | 
			
		||||
        # Create full binary
 | 
			
		||||
        echo "Creating full binary..."
 | 
			
		||||
        esptool.py --chip esp32 merge_bin \
 | 
			
		||||
          --fill-flash-size 4MB \
 | 
			
		||||
          --flash_mode dio \
 | 
			
		||||
          --flash_freq 40m \
 | 
			
		||||
          --flash_size 4MB \
 | 
			
		||||
          -o filaman.bin \
 | 
			
		||||
          0x0000 bootloader_with_magic.bin \
 | 
			
		||||
          -o filaman_full.bin \
 | 
			
		||||
          0x0000 bootloader.bin \
 | 
			
		||||
          0x8000 partitions.bin \
 | 
			
		||||
          0x10000 firmware.bin \
 | 
			
		||||
          0x390000 spiffs.bin
 | 
			
		||||
        
 | 
			
		||||
        # Verify magic bytes
 | 
			
		||||
        echo "Checking magic bytes:"
 | 
			
		||||
        echo "Full binary first bytes:"
 | 
			
		||||
        xxd -l 16 filaman.bin
 | 
			
		||||
        
 | 
			
		||||
        # Verify file sizes
 | 
			
		||||
        echo "File sizes:"
 | 
			
		||||
        ls -lh *.bin
 | 
			
		||||
@@ -86,4 +90,4 @@ jobs:
 | 
			
		||||
        gh release create "${{ github.ref_name }}" \
 | 
			
		||||
          --title "Release ${{ steps.get_version.outputs.VERSION }}" \
 | 
			
		||||
          --notes "${{ steps.changelog.outputs.CHANGES }}" \
 | 
			
		||||
          .pio/build/esp32dev/filaman.bin
 | 
			
		||||
          .pio/build/esp32dev/filaman_full.bin
 | 
			
		||||
							
								
								
									
										20
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,5 +1,25 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [1.2.90] - 2025-02-20
 | 
			
		||||
### Changed
 | 
			
		||||
- update webpages for version v1.2.90
 | 
			
		||||
- update Gitea and GitHub release workflows to include SPIFFS directory creation and firmware copying
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [1.2.89] - 2025-02-20
 | 
			
		||||
### Changed
 | 
			
		||||
- update webpages for version v1.2.89
 | 
			
		||||
- enhance OTA update process with SPIFFS support and improved error handling
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [1.2.88] - 2025-02-20
 | 
			
		||||
### Changed
 | 
			
		||||
- update webpages for version v1.2.88
 | 
			
		||||
 | 
			
		||||
### Fixed
 | 
			
		||||
- improve OTA update handling and logging for better error reporting
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [1.2.87] - 2025-02-20
 | 
			
		||||
### Changed
 | 
			
		||||
- update webpages for version v1.2.87
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
        <div style="display: flex; align-items: center; gap: 2rem;">
 | 
			
		||||
            <img src="/logo.png" alt="FilaMan Logo" class="logo">
 | 
			
		||||
            <div class="logo-text">
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.87</span></h1>
 | 
			
		||||
                <h1>FilaMan<span class="version">v1.2.90</span></h1>
 | 
			
		||||
                <h4>Filament Management Tool</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
; https://docs.platformio.org/page/projectconf.html
 | 
			
		||||
 | 
			
		||||
[common]
 | 
			
		||||
version = "1.2.87"
 | 
			
		||||
version = "1.2.90"
 | 
			
		||||
 | 
			
		||||
[env:esp32dev]
 | 
			
		||||
platform = espressif32
 | 
			
		||||
@@ -45,7 +45,7 @@ build_flags =
 | 
			
		||||
    -mtext-section-literals
 | 
			
		||||
    '-D VERSION="${common.version}"'
 | 
			
		||||
    -DASYNCWEBSERVER_REGEX
 | 
			
		||||
    -DCORE_DEBUG_LEVEL=1
 | 
			
		||||
    -DCORE_DEBUG_LEVEL=3
 | 
			
		||||
    -DCONFIG_ARDUHAL_LOG_COLORS=1
 | 
			
		||||
    -DOTA_DEBUG=1
 | 
			
		||||
    -DARDUINO_RUNNING_CORE=1
 | 
			
		||||
@@ -66,6 +66,7 @@ build_flags =
 | 
			
		||||
    -DCONFIG_PARTITION_TABLE_OFFSET=0x8000
 | 
			
		||||
    -DCONFIG_PARTITION_TABLE_MD5=y
 | 
			
		||||
    -DBOOT_APP_PARTITION_OTA_0=1
 | 
			
		||||
    -DCONFIG_LOG_DEFAULT_LEVEL=3
 | 
			
		||||
    
 | 
			
		||||
extra_scripts = 
 | 
			
		||||
    scripts/extra_script.py
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										130
									
								
								src/ota.cpp
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								src/ota.cpp
									
									
									
									
									
								
							@@ -20,58 +20,150 @@ void stopAllTasks() {
 | 
			
		||||
    Serial.println("All tasks stopped");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void performStageTwo() {
 | 
			
		||||
    if (!SPIFFS.begin(true)) {
 | 
			
		||||
        Serial.println("Error: Could not mount SPIFFS for stage 2");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    File firmwareFile = SPIFFS.open("/firmware.bin", "r");
 | 
			
		||||
    if (!firmwareFile) {
 | 
			
		||||
        Serial.println("Error: Could not open firmware.bin from SPIFFS");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    size_t firmwareSize = firmwareFile.size();
 | 
			
		||||
    size_t maxAppSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
 | 
			
		||||
 | 
			
		||||
    Serial.printf("Stage 2 - Firmware size: %u bytes\n", firmwareSize);
 | 
			
		||||
    Serial.printf("Available space: %u bytes\n", maxAppSpace);
 | 
			
		||||
 | 
			
		||||
    if (firmwareSize > maxAppSpace) {
 | 
			
		||||
        Serial.printf("Error: Not enough space for firmware. Need %u bytes but only have %u bytes\n", 
 | 
			
		||||
                    firmwareSize, maxAppSpace);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!Update.begin(firmwareSize)) {
 | 
			
		||||
        Update.printError(Serial);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    size_t written = Update.writeStream(firmwareFile);
 | 
			
		||||
    if (written != firmwareSize) {
 | 
			
		||||
        Update.printError(Serial);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!Update.end(true)) {
 | 
			
		||||
        Update.printError(Serial);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    firmwareFile.close();
 | 
			
		||||
    SPIFFS.remove("/firmware.bin"); // Cleanup
 | 
			
		||||
    Serial.println("Stage 2 update successful, restarting...");
 | 
			
		||||
    delay(500);
 | 
			
		||||
    ESP.restart();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void checkForStagedUpdate() {
 | 
			
		||||
    if (!SPIFFS.begin(true)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (SPIFFS.exists("/firmware.bin")) {
 | 
			
		||||
        Serial.println("Found staged firmware update, initiating stage 2...");
 | 
			
		||||
        performStageTwo();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void handleOTAUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
 | 
			
		||||
    static File stagingFile;
 | 
			
		||||
    
 | 
			
		||||
    if (!index) {
 | 
			
		||||
        bool isFullImage = true;
 | 
			
		||||
        Serial.printf("Update Start: %s (type: %s)\n", filename.c_str(), isFullImage ? "full" : "OTA");
 | 
			
		||||
        bool isSpiffsUpdate = filename.endsWith("_spiffs.bin");
 | 
			
		||||
        Serial.printf("Update Start: %s (type: %s)\n", filename.c_str(), isSpiffsUpdate ? "SPIFFS" : "OTA");
 | 
			
		||||
        
 | 
			
		||||
        if (request->contentLength() == 0) {
 | 
			
		||||
            request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Invalid file size\"}");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Stop tasks before update
 | 
			
		||||
        if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) {
 | 
			
		||||
            stopAllTasks();
 | 
			
		||||
            tasksAreStopped = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool success;
 | 
			
		||||
        if (isFullImage) {
 | 
			
		||||
            // Full image update ohne Magic Byte Check, aber mit U_FLASH
 | 
			
		||||
            success = Update.begin(UPDATE_SIZE_UNKNOWN, U_FLASH);
 | 
			
		||||
        } else {
 | 
			
		||||
            // Normales OTA update mit Magic Byte Check
 | 
			
		||||
            if (data[0] != 0xE9) {
 | 
			
		||||
                Serial.printf("Wrong magic byte: 0x%02X (expected 0xE9)\n", data[0]);
 | 
			
		||||
                request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Invalid firmware format\"}");
 | 
			
		||||
        size_t updateSize = request->contentLength();
 | 
			
		||||
        
 | 
			
		||||
        if (isSpiffsUpdate) {
 | 
			
		||||
            if (!SPIFFS.begin(true)) {
 | 
			
		||||
                request->send(400, "application/json", 
 | 
			
		||||
                            "{\"status\":\"error\",\"message\":\"Could not mount SPIFFS\"}");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            success = Update.begin(request->contentLength());
 | 
			
		||||
        }
 | 
			
		||||
            
 | 
			
		||||
        if (!success) {
 | 
			
		||||
            // Start SPIFFS update
 | 
			
		||||
            if (!Update.begin(updateSize, U_SPIFFS)) {
 | 
			
		||||
                Update.printError(Serial);
 | 
			
		||||
            request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Update start failed\"}");
 | 
			
		||||
                request->send(400, "application/json", 
 | 
			
		||||
                            "{\"status\":\"error\",\"message\":\"SPIFFS update initialization failed\"}");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            // Regular OTA update
 | 
			
		||||
            stagingFile = SPIFFS.open("/firmware.bin", "w");
 | 
			
		||||
            if (!stagingFile) {
 | 
			
		||||
                request->send(400, "application/json", 
 | 
			
		||||
                            "{\"status\":\"error\",\"message\":\"Could not create staging file\"}");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (stagingFile) {
 | 
			
		||||
        // Stage 1: Write to SPIFFS
 | 
			
		||||
        if (stagingFile.write(data, len) != len) {
 | 
			
		||||
            stagingFile.close();
 | 
			
		||||
            SPIFFS.remove("/firmware.bin");
 | 
			
		||||
            request->send(400, "application/json", 
 | 
			
		||||
                        "{\"status\":\"error\",\"message\":\"Write to SPIFFS failed\"}");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        // Direct SPIFFS update
 | 
			
		||||
        if (Update.write(data, len) != len) {
 | 
			
		||||
            Update.printError(Serial);
 | 
			
		||||
        request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Write failed\"}");
 | 
			
		||||
            request->send(400, "application/json", 
 | 
			
		||||
                        "{\"status\":\"error\",\"message\":\"Write failed\"}");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (final) {
 | 
			
		||||
        if (stagingFile) {
 | 
			
		||||
            // Finish Stage 1
 | 
			
		||||
            stagingFile.close();
 | 
			
		||||
            Serial.println("Stage 1 complete - firmware staged in SPIFFS");
 | 
			
		||||
            request->send(200, "application/json", 
 | 
			
		||||
                        "{\"status\":\"success\",\"message\":\"Update staged successfully! Starting stage 2...\"}");
 | 
			
		||||
            performStageTwo();
 | 
			
		||||
        } else {
 | 
			
		||||
            // Finish direct SPIFFS update
 | 
			
		||||
            if (!Update.end(true)) {
 | 
			
		||||
                Update.printError(Serial);
 | 
			
		||||
            request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Update failed\"}");
 | 
			
		||||
                request->send(400, "application/json", 
 | 
			
		||||
                            "{\"status\":\"error\",\"message\":\"Update failed\"}");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        Serial.println("Update successful, restarting...");
 | 
			
		||||
        request->send(200, "application/json", "{\"status\":\"success\",\"message\":\"Update successful! Device will restart...\",\"restart\":true}");
 | 
			
		||||
            Serial.println("SPIFFS update successful, restarting...");
 | 
			
		||||
            request->send(200, "application/json", 
 | 
			
		||||
                        "{\"status\":\"success\",\"message\":\"SPIFFS update successful! Device will restart...\",\"restart\":true}");
 | 
			
		||||
            delay(500);
 | 
			
		||||
            ESP.restart();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user