Compare commits
	
		
			8 Commits
		
	
	
		
			v1.3.97
			...
			492bf6cdb8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 492bf6cdb8 | |||
| b0317f4001 | |||
| 58ff6458b0 | |||
| d9c40f5124 | |||
| 68bc31e29a | |||
| 9b23ac5fd2 | |||
| d31bff14c3 | |||
| 150f92484a | 
							
								
								
									
										10
									
								
								.github/workflows/gitea-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/gitea-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -41,16 +41,16 @@ jobs:
 | 
				
			|||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
 | 
					        VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Build firmware and SPIFFS
 | 
					        # Build firmware and LittleFS
 | 
				
			||||||
        echo "Building firmware and SPIFFS..."
 | 
					        echo "Building firmware and LittleFS..."
 | 
				
			||||||
        pio run -e esp32dev
 | 
					        pio run -e esp32dev
 | 
				
			||||||
        pio run -t buildfs
 | 
					        pio run -t buildfs
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Copy firmware binary
 | 
					        # Copy firmware binary
 | 
				
			||||||
        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
 | 
					        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Create SPIFFS binary - direct copy without header
 | 
					        # Create LittleFS binary - direct copy without header
 | 
				
			||||||
        cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
 | 
					        cp .pio/build/esp32dev/littlefs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Create full binary
 | 
					        # Create full binary
 | 
				
			||||||
        (cd .pio/build/esp32dev && 
 | 
					        (cd .pio/build/esp32dev && 
 | 
				
			||||||
@@ -63,7 +63,7 @@ jobs:
 | 
				
			|||||||
          0x1000 bootloader.bin \
 | 
					          0x1000 bootloader.bin \
 | 
				
			||||||
          0x8000 partitions.bin \
 | 
					          0x8000 partitions.bin \
 | 
				
			||||||
          0x10000 firmware.bin \
 | 
					          0x10000 firmware.bin \
 | 
				
			||||||
          0x3D0000 spiffs.bin)
 | 
					          0x3D0000 littlefs.bin)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Verify file sizes
 | 
					        # Verify file sizes
 | 
				
			||||||
        echo "File sizes:"
 | 
					        echo "File sizes:"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								.github/workflows/github-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/github-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -39,16 +39,16 @@ jobs:
 | 
				
			|||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
 | 
					        VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Always build firmware and SPIFFS
 | 
					        # Always build firmware and LittleFS
 | 
				
			||||||
        echo "Building firmware and SPIFFS..."
 | 
					        echo "Building firmware and LittleFS..."
 | 
				
			||||||
        pio run -e esp32dev
 | 
					        pio run -e esp32dev
 | 
				
			||||||
        pio run -t buildfs
 | 
					        pio run -t buildfs
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Copy firmware binary
 | 
					        # Copy firmware binary
 | 
				
			||||||
        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
 | 
					        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Create SPIFFS binary - direct copy without header
 | 
					        # Create LittleFS binary - direct copy without header
 | 
				
			||||||
        cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
 | 
					        cp .pio/build/esp32dev/littlefs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Create full binary (always)
 | 
					        # Create full binary (always)
 | 
				
			||||||
        (cd .pio/build/esp32dev && 
 | 
					        (cd .pio/build/esp32dev && 
 | 
				
			||||||
@@ -61,7 +61,7 @@ jobs:
 | 
				
			|||||||
          0x1000 bootloader.bin \
 | 
					          0x1000 bootloader.bin \
 | 
				
			||||||
          0x8000 partitions.bin \
 | 
					          0x8000 partitions.bin \
 | 
				
			||||||
          0x10000 firmware.bin \
 | 
					          0x10000 firmware.bin \
 | 
				
			||||||
          0x3D0000 spiffs.bin)
 | 
					          0x3D0000 littlefs.bin)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Verify file sizes
 | 
					        # Verify file sizes
 | 
				
			||||||
        echo "File sizes:"
 | 
					        echo "File sizes:"
 | 
				
			||||||
@@ -131,7 +131,7 @@ jobs:
 | 
				
			|||||||
          FILES_TO_UPLOAD="$FILES_TO_UPLOAD upgrade_filaman_firmware_v${VERSION}.bin"
 | 
					          FILES_TO_UPLOAD="$FILES_TO_UPLOAD upgrade_filaman_firmware_v${VERSION}.bin"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        # Add SPIFFS and full binary only if they exist
 | 
					        # Add LittleFS and full binary only if they exist
 | 
				
			||||||
        if [ -f "upgrade_filaman_website_v${VERSION}.bin" ]; then
 | 
					        if [ -f "upgrade_filaman_website_v${VERSION}.bin" ]; then
 | 
				
			||||||
          FILES_TO_UPLOAD="$FILES_TO_UPLOAD upgrade_filaman_website_v${VERSION}.bin"
 | 
					          FILES_TO_UPLOAD="$FILES_TO_UPLOAD upgrade_filaman_website_v${VERSION}.bin"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@@ -1,54 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "files.associations": {
 | 
					 | 
				
			||||||
        "algorithm": "cpp",
 | 
					 | 
				
			||||||
        "vector": "cpp",
 | 
					 | 
				
			||||||
        "cmath": "cpp",
 | 
					 | 
				
			||||||
        "array": "cpp",
 | 
					 | 
				
			||||||
        "atomic": "cpp",
 | 
					 | 
				
			||||||
        "*.tcc": "cpp",
 | 
					 | 
				
			||||||
        "bitset": "cpp",
 | 
					 | 
				
			||||||
        "cctype": "cpp",
 | 
					 | 
				
			||||||
        "clocale": "cpp",
 | 
					 | 
				
			||||||
        "cstdarg": "cpp",
 | 
					 | 
				
			||||||
        "cstddef": "cpp",
 | 
					 | 
				
			||||||
        "cstdint": "cpp",
 | 
					 | 
				
			||||||
        "cstdio": "cpp",
 | 
					 | 
				
			||||||
        "cstdlib": "cpp",
 | 
					 | 
				
			||||||
        "cstring": "cpp",
 | 
					 | 
				
			||||||
        "ctime": "cpp",
 | 
					 | 
				
			||||||
        "cwchar": "cpp",
 | 
					 | 
				
			||||||
        "cwctype": "cpp",
 | 
					 | 
				
			||||||
        "deque": "cpp",
 | 
					 | 
				
			||||||
        "unordered_map": "cpp",
 | 
					 | 
				
			||||||
        "unordered_set": "cpp",
 | 
					 | 
				
			||||||
        "exception": "cpp",
 | 
					 | 
				
			||||||
        "functional": "cpp",
 | 
					 | 
				
			||||||
        "iterator": "cpp",
 | 
					 | 
				
			||||||
        "map": "cpp",
 | 
					 | 
				
			||||||
        "memory": "cpp",
 | 
					 | 
				
			||||||
        "memory_resource": "cpp",
 | 
					 | 
				
			||||||
        "numeric": "cpp",
 | 
					 | 
				
			||||||
        "optional": "cpp",
 | 
					 | 
				
			||||||
        "random": "cpp",
 | 
					 | 
				
			||||||
        "regex": "cpp",
 | 
					 | 
				
			||||||
        "string": "cpp",
 | 
					 | 
				
			||||||
        "string_view": "cpp",
 | 
					 | 
				
			||||||
        "system_error": "cpp",
 | 
					 | 
				
			||||||
        "tuple": "cpp",
 | 
					 | 
				
			||||||
        "type_traits": "cpp",
 | 
					 | 
				
			||||||
        "utility": "cpp",
 | 
					 | 
				
			||||||
        "fstream": "cpp",
 | 
					 | 
				
			||||||
        "initializer_list": "cpp",
 | 
					 | 
				
			||||||
        "iomanip": "cpp",
 | 
					 | 
				
			||||||
        "iosfwd": "cpp",
 | 
					 | 
				
			||||||
        "istream": "cpp",
 | 
					 | 
				
			||||||
        "limits": "cpp",
 | 
					 | 
				
			||||||
        "new": "cpp",
 | 
					 | 
				
			||||||
        "ostream": "cpp",
 | 
					 | 
				
			||||||
        "sstream": "cpp",
 | 
					 | 
				
			||||||
        "stdexcept": "cpp",
 | 
					 | 
				
			||||||
        "streambuf": "cpp",
 | 
					 | 
				
			||||||
        "cinttypes": "cpp",
 | 
					 | 
				
			||||||
        "typeinfo": "cpp"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,5 +1,19 @@
 | 
				
			|||||||
# Changelog
 | 
					# Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [1.3.99] - 2025-02-28
 | 
				
			||||||
 | 
					### Changed
 | 
				
			||||||
 | 
					- update platformio.ini for version v1.3.99
 | 
				
			||||||
 | 
					- update workflows to build firmware with LittleFS instead of SPIFFS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [1.3.98] - 2025-02-28
 | 
				
			||||||
 | 
					### Changed
 | 
				
			||||||
 | 
					- update platformio.ini for version v1.3.98
 | 
				
			||||||
 | 
					- migrate from SPIFFS to LittleFS for file handling
 | 
				
			||||||
 | 
					- remove unused VSCode settings file
 | 
				
			||||||
 | 
					- remove commented-out spoolman and filaman data from api.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [1.3.97] - 2025-02-28
 | 
					## [1.3.97] - 2025-02-28
 | 
				
			||||||
### Added
 | 
					### Added
 | 
				
			||||||
- füge Bestätigungsmeldung für Spool-Einstellung hinzu
 | 
					- füge Bestätigungsmeldung für Spool-Einstellung hinzu
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
; https://docs.platformio.org/page/projectconf.html
 | 
					; https://docs.platformio.org/page/projectconf.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[common]
 | 
					[common]
 | 
				
			||||||
version = "1.3.97"
 | 
					version = "1.3.99"
 | 
				
			||||||
##
 | 
					##
 | 
				
			||||||
[env:esp32dev]
 | 
					[env:esp32dev]
 | 
				
			||||||
platform = espressif32
 | 
					platform = espressif32
 | 
				
			||||||
@@ -33,7 +33,8 @@ lib_deps =
 | 
				
			|||||||
    digitaldragon/SSLClient @ ^1.3.2
 | 
					    digitaldragon/SSLClient @ ^1.3.2
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
; Enable SPIFFS upload
 | 
					; Enable SPIFFS upload
 | 
				
			||||||
board_build.filesystem = spiffs
 | 
					#board_build.filesystem = spiffs
 | 
				
			||||||
 | 
					board_build.filesystem = littlefs
 | 
				
			||||||
; Update partition settings
 | 
					; Update partition settings
 | 
				
			||||||
board_build.partitions = partitions.csv
 | 
					board_build.partitions = partitions.csv
 | 
				
			||||||
board_upload.flash_size = 4MB
 | 
					board_upload.flash_size = 4MB
 | 
				
			||||||
@@ -44,13 +45,13 @@ build_flags =
 | 
				
			|||||||
    -Os
 | 
					    -Os
 | 
				
			||||||
    -ffunction-sections
 | 
					    -ffunction-sections
 | 
				
			||||||
    -fdata-sections
 | 
					    -fdata-sections
 | 
				
			||||||
    -DNDEBUG
 | 
					    #-DNDEBUG
 | 
				
			||||||
    -mtext-section-literals
 | 
					    -mtext-section-literals
 | 
				
			||||||
    -DVERSION=\"${common.version}\"
 | 
					    -DVERSION=\"${common.version}\"
 | 
				
			||||||
    -DASYNCWEBSERVER_REGEX
 | 
					    -DASYNCWEBSERVER_REGEX
 | 
				
			||||||
    -DCORE_DEBUG_LEVEL=3
 | 
					    #-DCORE_DEBUG_LEVEL=3
 | 
				
			||||||
    -DCONFIG_ARDUHAL_LOG_COLORS=1
 | 
					    -DCONFIG_ARDUHAL_LOG_COLORS=1
 | 
				
			||||||
    -DOTA_DEBUG=1
 | 
					    #-DOTA_DEBUG=1
 | 
				
			||||||
    -DCONFIG_OPTIMIZATION_LEVEL_DEBUG=1
 | 
					    -DCONFIG_OPTIMIZATION_LEVEL_DEBUG=1
 | 
				
			||||||
    -DBOOT_APP_PARTITION_OTA_0=1
 | 
					    -DBOOT_APP_PARTITION_OTA_0=1
 | 
				
			||||||
    -DCONFIG_LWIP_TCP_MSL=60000
 | 
					    -DCONFIG_LWIP_TCP_MSL=60000
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								src/api.cpp
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/api.cpp
									
									
									
									
									
								
							@@ -12,31 +12,6 @@ struct SendToApiParams {
 | 
				
			|||||||
    String updatePayload;
 | 
					    String updatePayload;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
    // Spoolman Data
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "version":"1.0",
 | 
					 | 
				
			||||||
        "protocol":"openspool",
 | 
					 | 
				
			||||||
        "color_hex":"AF7933",
 | 
					 | 
				
			||||||
        "type":"ABS",
 | 
					 | 
				
			||||||
        "min_temp":175,
 | 
					 | 
				
			||||||
        "max_temp":275,
 | 
					 | 
				
			||||||
        "brand":"Overture"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // FilaMan Data
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        "version":"1.0",
 | 
					 | 
				
			||||||
        "protocol":"openspool",
 | 
					 | 
				
			||||||
        "color_hex":"AF7933",
 | 
					 | 
				
			||||||
        "type":"ABS",
 | 
					 | 
				
			||||||
        "min_temp":175,
 | 
					 | 
				
			||||||
        "max_temp":275,
 | 
					 | 
				
			||||||
        "brand":"Overture",
 | 
					 | 
				
			||||||
        "sm_id": 
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
JsonDocument fetchSingleSpoolInfo(int spoolId) {
 | 
					JsonDocument fetchSingleSpoolInfo(int spoolId) {
 | 
				
			||||||
    HTTPClient http;
 | 
					    HTTPClient http;
 | 
				
			||||||
    String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + spoolId;
 | 
					    String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + spoolId;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
#include "commonFS.h"
 | 
					#include "commonFS.h"
 | 
				
			||||||
#include <SPIFFS.h>
 | 
					#include <LittleFS.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool saveJsonValue(const char* filename, const JsonDocument& doc) {
 | 
					bool saveJsonValue(const char* filename, const JsonDocument& doc) {
 | 
				
			||||||
    File file = SPIFFS.open(filename, "w");
 | 
					    File file = LittleFS.open(filename, "w");
 | 
				
			||||||
    if (!file) {
 | 
					    if (!file) {
 | 
				
			||||||
        Serial.print("Fehler beim Öffnen der Datei zum Schreiben: ");
 | 
					        Serial.print("Fehler beim Öffnen der Datei zum Schreiben: ");
 | 
				
			||||||
        Serial.println(filename);
 | 
					        Serial.println(filename);
 | 
				
			||||||
@@ -20,7 +20,7 @@ bool saveJsonValue(const char* filename, const JsonDocument& doc) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool loadJsonValue(const char* filename, JsonDocument& doc) {
 | 
					bool loadJsonValue(const char* filename, JsonDocument& doc) {
 | 
				
			||||||
    File file = SPIFFS.open(filename, "r");
 | 
					    File file = LittleFS.open(filename, "r");
 | 
				
			||||||
    if (!file) {
 | 
					    if (!file) {
 | 
				
			||||||
        Serial.print("Fehler beim Öffnen der Datei zum Lesen: ");
 | 
					        Serial.print("Fehler beim Öffnen der Datei zum Lesen: ");
 | 
				
			||||||
        Serial.println(filename);
 | 
					        Serial.println(filename);
 | 
				
			||||||
@@ -36,12 +36,12 @@ bool loadJsonValue(const char* filename, JsonDocument& doc) {
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void initializeSPIFFS() {
 | 
					void initializeFileSystem() {
 | 
				
			||||||
    if (!SPIFFS.begin(true, "/spiffs", 10, "spiffs")) {
 | 
					    if (!LittleFS.begin(true)) {
 | 
				
			||||||
        Serial.println("SPIFFS Mount Failed");
 | 
					        Serial.println("LittleFS Mount Failed");
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Serial.printf("SPIFFS Total: %u bytes\n", SPIFFS.totalBytes());
 | 
					    Serial.printf("LittleFS Total: %u bytes\n", LittleFS.totalBytes());
 | 
				
			||||||
    Serial.printf("SPIFFS Used: %u bytes\n", SPIFFS.usedBytes());
 | 
					    Serial.printf("LittleFS Used: %u bytes\n", LittleFS.usedBytes());
 | 
				
			||||||
    Serial.printf("SPIFFS Free: %u bytes\n", SPIFFS.totalBytes() - SPIFFS.usedBytes());
 | 
					    Serial.printf("LittleFS Free: %u bytes\n", LittleFS.totalBytes() - LittleFS.usedBytes());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2,11 +2,11 @@
 | 
				
			|||||||
#define COMMONFS_H
 | 
					#define COMMONFS_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <Arduino.h>
 | 
					#include <Arduino.h>
 | 
				
			||||||
#include <SPIFFS.h>
 | 
					 | 
				
			||||||
#include <ArduinoJson.h>
 | 
					#include <ArduinoJson.h>
 | 
				
			||||||
 | 
					#include <LittleFS.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool saveJsonValue(const char* filename, const JsonDocument& doc);
 | 
					bool saveJsonValue(const char* filename, const JsonDocument& doc);
 | 
				
			||||||
bool loadJsonValue(const char* filename, JsonDocument& doc);
 | 
					bool loadJsonValue(const char* filename, JsonDocument& doc);
 | 
				
			||||||
void initializeSPIFFS();
 | 
					void initializeFileSystem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								src/main.cpp
									
									
									
									
									
								
							@@ -24,7 +24,7 @@ void setup() {
 | 
				
			|||||||
  Serial.printf("%08X\n", (uint32_t)chipid); //print Low 4bytes.
 | 
					  Serial.printf("%08X\n", (uint32_t)chipid); //print Low 4bytes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Initialize SPIFFS
 | 
					  // Initialize SPIFFS
 | 
				
			||||||
  initializeSPIFFS();
 | 
					  initializeFileSystem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Start Display
 | 
					  // Start Display
 | 
				
			||||||
  setupDisplay();
 | 
					  setupDisplay();
 | 
				
			||||||
@@ -74,6 +74,21 @@ void setup() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Safe interval check that handles millis() overflow
 | 
				
			||||||
 | 
					 * @param currentTime Current millis() value
 | 
				
			||||||
 | 
					 * @param lastTime Last recorded time
 | 
				
			||||||
 | 
					 * @param interval Desired interval in milliseconds
 | 
				
			||||||
 | 
					 * @return True if interval has elapsed
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					bool intervalElapsed(unsigned long currentTime, unsigned long &lastTime, unsigned long interval) {
 | 
				
			||||||
 | 
					  if (currentTime - lastTime >= interval || currentTime < lastTime) {
 | 
				
			||||||
 | 
					    lastTime = currentTime;
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long lastWeightReadTime = 0;
 | 
					unsigned long lastWeightReadTime = 0;
 | 
				
			||||||
const unsigned long weightReadInterval = 1000; // 1 second
 | 
					const unsigned long weightReadInterval = 1000; // 1 second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -81,9 +96,6 @@ unsigned long lastAutoSetBambuAmsTime = 0;
 | 
				
			|||||||
const unsigned long autoSetBambuAmsInterval = 1000; // 1 second
 | 
					const unsigned long autoSetBambuAmsInterval = 1000; // 1 second
 | 
				
			||||||
uint8_t autoAmsCounter = 0;
 | 
					uint8_t autoAmsCounter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long lastAmsSendTime = 0;
 | 
					 | 
				
			||||||
const unsigned long amsSendInterval = 60000; // 1 minute
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint8_t weightSend = 0;
 | 
					uint8_t weightSend = 0;
 | 
				
			||||||
int16_t lastWeight = 0;
 | 
					int16_t lastWeight = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,20 +107,13 @@ void loop() {
 | 
				
			|||||||
  unsigned long currentMillis = millis();
 | 
					  unsigned long currentMillis = millis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Überprüfe regelmäßig die WLAN-Verbindung
 | 
					  // Überprüfe regelmäßig die WLAN-Verbindung
 | 
				
			||||||
  if (millis() - lastWifiCheckTime > wifiCheckInterval) {
 | 
					  if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval)) {
 | 
				
			||||||
    checkWiFiConnection();
 | 
					    checkWiFiConnection();
 | 
				
			||||||
    lastWifiCheckTime = millis();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Send AMS Data min every Minute
 | 
					 | 
				
			||||||
  if (currentMillis - lastAmsSendTime >= amsSendInterval) 
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    lastAmsSendTime = currentMillis;
 | 
					 | 
				
			||||||
    //sendAmsData(nullptr);
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Wenn Bambu auto set Spool aktiv
 | 
					  // Wenn Bambu auto set Spool aktiv
 | 
				
			||||||
  if (autoSendToBambu && autoSetToBambuSpoolId > 0 && currentMillis - lastAutoSetBambuAmsTime >= autoSetBambuAmsInterval) 
 | 
					  if (autoSendToBambu && autoSetToBambuSpoolId > 0) {
 | 
				
			||||||
 | 
					    if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval)) 
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      if (hasReadRfidTag == 0)
 | 
					      if (hasReadRfidTag == 0)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@@ -128,7 +133,7 @@ void loop() {
 | 
				
			|||||||
        autoAmsCounter = 0;
 | 
					        autoAmsCounter = 0;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Wenn Waage nicht Kalibriert
 | 
					  // Wenn Waage nicht Kalibriert
 | 
				
			||||||
  if (scaleCalibrated == 3) 
 | 
					  if (scaleCalibrated == 3) 
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								src/ota.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/ota.cpp
									
									
									
									
									
								
							@@ -17,8 +17,8 @@ static bool isSpiffsUpdate = false;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void backupJsonConfigs() {
 | 
					void backupJsonConfigs() {
 | 
				
			||||||
    // Bambu Credentials backup
 | 
					    // Bambu Credentials backup
 | 
				
			||||||
    if (SPIFFS.exists("/bambu_credentials.json")) {
 | 
					    if (LittleFS.exists("/bambu_credentials.json")) {
 | 
				
			||||||
        File file = SPIFFS.open("/bambu_credentials.json", "r");
 | 
					        File file = LittleFS.open("/bambu_credentials.json", "r");
 | 
				
			||||||
        if (file) {
 | 
					        if (file) {
 | 
				
			||||||
            bambuCredentialsBackup = file.readString();
 | 
					            bambuCredentialsBackup = file.readString();
 | 
				
			||||||
            file.close();
 | 
					            file.close();
 | 
				
			||||||
@@ -27,8 +27,8 @@ void backupJsonConfigs() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Spoolman URL backup
 | 
					    // Spoolman URL backup
 | 
				
			||||||
    if (SPIFFS.exists("/spoolman_url.json")) {
 | 
					    if (LittleFS.exists("/spoolman_url.json")) {
 | 
				
			||||||
        File file = SPIFFS.open("/spoolman_url.json", "r");
 | 
					        File file = LittleFS.open("/spoolman_url.json", "r");
 | 
				
			||||||
        if (file) {
 | 
					        if (file) {
 | 
				
			||||||
            spoolmanUrlBackup = file.readString();
 | 
					            spoolmanUrlBackup = file.readString();
 | 
				
			||||||
            file.close();
 | 
					            file.close();
 | 
				
			||||||
@@ -40,7 +40,7 @@ void backupJsonConfigs() {
 | 
				
			|||||||
void restoreJsonConfigs() {
 | 
					void restoreJsonConfigs() {
 | 
				
			||||||
    // Restore Bambu credentials
 | 
					    // Restore Bambu credentials
 | 
				
			||||||
    if (bambuCredentialsBackup.length() > 0) {
 | 
					    if (bambuCredentialsBackup.length() > 0) {
 | 
				
			||||||
        File file = SPIFFS.open("/bambu_credentials.json", "w");
 | 
					        File file = LittleFS.open("/bambu_credentials.json", "w");
 | 
				
			||||||
        if (file) {
 | 
					        if (file) {
 | 
				
			||||||
            file.print(bambuCredentialsBackup);
 | 
					            file.print(bambuCredentialsBackup);
 | 
				
			||||||
            file.close();
 | 
					            file.close();
 | 
				
			||||||
@@ -51,7 +51,7 @@ void restoreJsonConfigs() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Restore Spoolman URL
 | 
					    // Restore Spoolman URL
 | 
				
			||||||
    if (spoolmanUrlBackup.length() > 0) {
 | 
					    if (spoolmanUrlBackup.length() > 0) {
 | 
				
			||||||
        File file = SPIFFS.open("/spoolman_url.json", "w");
 | 
					        File file = LittleFS.open("/spoolman_url.json", "w");
 | 
				
			||||||
        if (file) {
 | 
					        if (file) {
 | 
				
			||||||
            file.print(spoolmanUrlBackup);
 | 
					            file.print(spoolmanUrlBackup);
 | 
				
			||||||
            file.close();
 | 
					            file.close();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,12 +113,12 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp
 | 
				
			|||||||
// Funktion zum Laden und Ersetzen des Headers in einer HTML-Datei
 | 
					// Funktion zum Laden und Ersetzen des Headers in einer HTML-Datei
 | 
				
			||||||
String loadHtmlWithHeader(const char* filename) {
 | 
					String loadHtmlWithHeader(const char* filename) {
 | 
				
			||||||
    Serial.println("Lade HTML-Datei: " + String(filename));
 | 
					    Serial.println("Lade HTML-Datei: " + String(filename));
 | 
				
			||||||
    if (!SPIFFS.exists(filename)) {
 | 
					    if (!LittleFS.exists(filename)) {
 | 
				
			||||||
        Serial.println("Fehler: Datei nicht gefunden!");
 | 
					        Serial.println("Fehler: Datei nicht gefunden!");
 | 
				
			||||||
        return "Fehler: Datei nicht gefunden!";
 | 
					        return "Fehler: Datei nicht gefunden!";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    File file = SPIFFS.open(filename, "r");
 | 
					    File file = LittleFS.open(filename, "r");
 | 
				
			||||||
    String html = file.readString();
 | 
					    String html = file.readString();
 | 
				
			||||||
    file.close();
 | 
					    file.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -195,7 +195,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
    // Route für about
 | 
					    // Route für about
 | 
				
			||||||
    server.on("/about", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/about", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Anfrage für /about erhalten");
 | 
					        Serial.println("Anfrage für /about erhalten");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/index.html.gz", "text/html");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/index.html.gz", "text/html");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -204,7 +204,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
    // Route für Waage
 | 
					    // Route für Waage
 | 
				
			||||||
    server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Anfrage für /waage erhalten");
 | 
					        Serial.println("Anfrage für /waage erhalten");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/waage.html.gz", "text/html");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/waage.html.gz", "text/html");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -213,7 +213,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
    // Route für RFID
 | 
					    // Route für RFID
 | 
				
			||||||
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Anfrage für /rfid erhalten");
 | 
					        Serial.println("Anfrage für /rfid erhalten");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/rfid.html.gz", "text/html");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/rfid.html.gz", "text/html");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -229,7 +229,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
    // Route für WiFi
 | 
					    // Route für WiFi
 | 
				
			||||||
    server.on("/wifi", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/wifi", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Anfrage für /wifi erhalten");
 | 
					        Serial.println("Anfrage für /wifi erhalten");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/wifi.html.gz", "text/html");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/wifi.html.gz", "text/html");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -322,7 +322,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
    // Route für das Laden der CSS-Datei
 | 
					    // Route für das Laden der CSS-Datei
 | 
				
			||||||
    server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Lade style.css");
 | 
					        Serial.println("Lade style.css");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/style.css.gz", "text/css");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/style.css.gz", "text/css");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -331,7 +331,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Route für das Logo
 | 
					    // Route für das Logo
 | 
				
			||||||
    server.on("/logo.png", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/logo.png", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/logo.png.gz", "image/png");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/logo.png.gz", "image/png");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -340,7 +340,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Route für Favicon
 | 
					    // Route für Favicon
 | 
				
			||||||
    server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/favicon.ico", "image/x-icon");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/favicon.ico", "image/x-icon");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
        Serial.println("favicon.ico gesendet");
 | 
					        Serial.println("favicon.ico gesendet");
 | 
				
			||||||
@@ -348,7 +348,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Route für spool_in.png
 | 
					    // Route für spool_in.png
 | 
				
			||||||
    server.on("/spool_in.png", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/spool_in.png", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/spool_in.png.gz", "image/png");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/spool_in.png.gz", "image/png");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -357,7 +357,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Route für set_spoolman.png
 | 
					    // Route für set_spoolman.png
 | 
				
			||||||
    server.on("/set_spoolman.png", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/set_spoolman.png", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/set_spoolman.png.gz", "image/png");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/set_spoolman.png.gz", "image/png");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -367,7 +367,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
    // Route für JavaScript Dateien
 | 
					    // Route für JavaScript Dateien
 | 
				
			||||||
    server.on("/spoolman.js", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/spoolman.js", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Anfrage für /spoolman.js erhalten");
 | 
					        Serial.println("Anfrage für /spoolman.js erhalten");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/spoolman.js.gz", "text/javascript");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/spoolman.js.gz", "text/javascript");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -376,7 +376,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    server.on("/rfid.js", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
					    server.on("/rfid.js", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
				
			||||||
        Serial.println("Anfrage für /rfid.js erhalten");
 | 
					        Serial.println("Anfrage für /rfid.js erhalten");
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS,"/rfid.js.gz", "text/javascript");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS,"/rfid.js.gz", "text/javascript");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
					        response->addHeader("Cache-Control", CACHE_CONTROL);
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
@@ -385,7 +385,7 @@ void setupWebserver(AsyncWebServer &server) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Vereinfachter Update-Handler
 | 
					    // Vereinfachter Update-Handler
 | 
				
			||||||
    server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest *request) {
 | 
					    server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest *request) {
 | 
				
			||||||
        AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/upgrade.html.gz", "text/html");
 | 
					        AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/upgrade.html.gz", "text/html");
 | 
				
			||||||
        response->addHeader("Content-Encoding", "gzip");
 | 
					        response->addHeader("Content-Encoding", "gzip");
 | 
				
			||||||
        response->addHeader("Cache-Control", "no-store");
 | 
					        response->addHeader("Cache-Control", "no-store");
 | 
				
			||||||
        request->send(response);
 | 
					        request->send(response);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user