Compare commits

..

15 Commits

Author SHA1 Message Date
3cd0798186 docs: update changelog for version 1.2.0
Some checks failed
Create Release / build (push) Has been cancelled
2025-02-17 12:41:44 +01:00
2a67d8f67c feat: implement OTA functionality and update build scripts; change upgrade link to OTA in HTML 2025-02-17 12:41:25 +01:00
240795a2d0 feat: update version to v1.2.0 and modify build scripts in platformio.ini; remove unused includes in scale.cpp and website.cpp 2025-02-17 11:49:39 +01:00
4e384d777e feat: update version to v1.2.0 and add upgrade link in HTML files 2025-02-17 10:46:56 +01:00
03cbf82275 feat: add esp_wifi.h and set maximum transmit power in WiFi initialization 2025-02-16 21:46:06 +01:00
0c1a222636 fix: update version number in header to v1.1.0 2025-02-16 21:45:57 +01:00
8716b4ad73 docs: update changelog for version 1.1.0 2025-02-16 16:26:58 +01:00
6fcfefec8f chore: clean up changelog and update script execution in platformio.ini 2025-02-16 16:26:54 +01:00
b696a79f4b docs: update changelog for version 1.1.0 2025-02-16 16:14:26 +01:00
61ed765d87 fix: correct version number in nav bar 2025-02-16 16:12:07 +01:00
2703689e4e feat: update version to 1.1.0 and modify gzip compression handling for /spoolman route
Some checks failed
Create Release / build (push) Has been cancelled
2025-02-16 13:00:42 +01:00
b24c50722f chore: increment version to 1.0.9 in platformio.ini
Some checks failed
Create Release / build (push) Has been cancelled
2025-02-16 12:54:55 +01:00
3ec23a9f79 feat: implement gzip compression for /spoolman route response 2025-02-16 12:54:24 +01:00
75fe6b55ad chore: increment version to 1.0.8 in platformio.ini
Some checks failed
Create Release / build (push) Has been cancelled
2025-02-16 12:30:19 +01:00
fa2f980312 fix: update partition settings and version in platformio.ini, and enhance release workflow 2025-02-16 12:29:12 +01:00
21 changed files with 178 additions and 92 deletions

View File

@ -43,9 +43,16 @@ jobs:
--flash_mode dio \
--flash_freq 40m \
--flash_size 4MB \
-o .pio/build/esp32dev/filaman.bin \
-o .pio/build/esp32dev/filaman_full.bin \
0x1000 .pio/build/esp32dev/bootloader.bin \
0x8000 .pio/build/esp32dev/partitions.bin \
0x10000 .pio/build/esp32dev/firmware.bin \
0x290000 .pio/build/esp32dev/spiffs.bin
- name: Prepare OTA firmware
run: |
# Use PlatformIO to create a proper OTA image
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin
- name: Get version from tag
id: get_version
@ -69,9 +76,10 @@ jobs:
- name: Create Release with GitHub CLI
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Changed from GITHUB_TOKEN to GH_TOKEN
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "${{ github.ref_name }}" \
--title "Release ${{ steps.get_version.outputs.VERSION }}" \
--notes "${{ steps.changelog.outputs.CHANGES }}" \
".pio/build/esp32dev/filaman.bin#filaman.bin"
".pio/build/esp32dev/filaman_full.bin#filaman_full.bin" \
".pio/build/esp32dev/filaman_ota.bin#filaman_ota.bin"

View File

@ -1,5 +1,31 @@
# Changelog
## [1.2.0] - 2025-02-17
### Added
- implement OTA functionality and update build scripts; change upgrade link to OTA in HTML
- update version to v1.2.0 and modify build scripts in platformio.ini; remove unused includes in scale.cpp and website.cpp
- update version to v1.2.0 and add upgrade link in HTML files
- add esp_wifi.h and set maximum transmit power in WiFi initialization
### Changed
- update changelog for version 1.1.0
- clean up changelog and update script execution in platformio.ini
- update changelog for version 1.1.0
### Fixed
- update version number in header to v1.1.0
- correct version number in nav bar
## [1.1.0] - 2025-02-16
### Changed
- clean up changelog and update script execution in platformio.ini
- update changelog for version 1.1.0
### Fixed
- correct version number in nav bar
## [1.0.5] - 2025-02-16
### Added
- update version to 1.0.5 and enhance changelog update process with automatic git push

View File

@ -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.0.2</span></h1>
<h1>FilaMan<span class="version">v1.2.0</span></h1>
<h4>Filament Management Tool</h4>
</div>
</div>
@ -21,6 +21,7 @@
<a href="/waage">Scale</a>
<a href="/spoolman">Spoolman/Bambu</a>
<a href="/about">About</a>
<a href="/ota">Upgrade</a>
</nav>
<div class="status-container">
<div class="status-item">

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!-- head --><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
@ -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.0.2</span></h1>
<h1>FilaMan<span class="version">v1.2.0</span></h1>
<h4>Filament Management Tool</h4>
</div>
</div>
@ -21,6 +21,7 @@
<a href="/waage">Scale</a>
<a href="/spoolman">Spoolman/Bambu</a>
<a href="/about">About</a>
<a href="/upgrade">Upgrade</a>
</nav>
<div class="status-container">
<div class="status-item">
@ -33,7 +34,7 @@
</div>
</div>
<!-- head -->
<div class="container">
<h1>FilaMan</h1>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!-- head --><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
@ -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.0.2</span></h1>
<h1>FilaMan<span class="version">v1.2.0</span></h1>
<h4>Filament Management Tool</h4>
</div>
</div>
@ -21,6 +21,7 @@
<a href="/waage">Scale</a>
<a href="/spoolman">Spoolman/Bambu</a>
<a href="/about">About</a>
<a href="/upgrade">Upgrade</a>
</nav>
<div class="status-container">
<div class="status-item">
@ -33,6 +34,7 @@
</div>
</div>
<!-- head -->
<div class="connection-status hidden">
<div class="spinner"></div>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!-- head --><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
@ -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.0.2</span></h1>
<h1>FilaMan<span class="version">v1.2.0</span></h1>
<h4>Filament Management Tool</h4>
</div>
</div>
@ -21,6 +21,7 @@
<a href="/waage">Scale</a>
<a href="/spoolman">Spoolman/Bambu</a>
<a href="/about">About</a>
<a href="/upgrade">Upgrade</a>
</nav>
<div class="status-container">
<div class="status-item">
@ -33,6 +34,7 @@
</div>
</div>
<!-- head -->
<script>
window.onload = function() {

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!-- head --><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
@ -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.0.2</span></h1>
<h1>FilaMan<span class="version">v1.2.0</span></h1>
<h4>Filament Management Tool</h4>
</div>
</div>
@ -21,6 +21,7 @@
<a href="/waage">Scale</a>
<a href="/spoolman">Spoolman/Bambu</a>
<a href="/about">About</a>
<a href="/upgrade">Upgrade</a>
</nav>
<div class="status-container">
<div class="status-item">
@ -33,6 +34,7 @@
</div>
</div>
<!-- head -->
<div class="content">
<h1>Scale Configuration Page</h1>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!-- head --><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
@ -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.0.2</span></h1>
<h1>FilaMan<span class="version">v1.2.0</span></h1>
<h4>Filament Management Tool</h4>
</div>
</div>
@ -21,6 +21,7 @@
<a href="/waage">Scale</a>
<a href="/spoolman">Spoolman/Bambu</a>
<a href="/about">About</a>
<a href="/upgrade">Upgrade</a>
</nav>
<div class="status-container">
<div class="status-item">
@ -33,6 +34,7 @@
</div>
</div>
<!-- head -->
<div class="content">
<h1>WiFi Configuration Page</h1>

View File

@ -1,5 +1,5 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x280000,
spiffs, data, spiffs, 0x290000,0x170000,
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x280000,
spiffs, data, spiffs, 0x290000, 0x170000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 app0 app ota_0 0x10000 0x280000
5 spiffs data spiffs 0x290000 0x170000

View File

@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html
[common]
version = "1.0.7"
version = "1.2.0"
[env:esp32dev]
platform = espressif32
@ -29,12 +29,16 @@ lib_deps =
bblanchon/ArduinoJson @ ^7.3.0
knolleary/PubSubClient @ ^2.8
digitaldragon/SSLClient @ ^1.3.2
ipdotsetaf/ESPAsyncHTTPUpdateServer @ ^2.0.0
; Enable SPIFFS upload
board_build.filesystem = spiffs
board_build.spiffs.partition = 2M
board_build.spiffs.upload_size = 2M
; Update partition settings
board_build.partitions = partitions.csv
board_upload.flash_size = 4MB
; Remove these as they're now defined in partitions.csv
; board_build.spiffs.partition = 2M
; board_build.spiffs.upload_size = 2M
build_flags =
-Os
@ -45,9 +49,16 @@ build_flags =
'-D VERSION="${common.version}"'
extra_scripts =
pre:scripts/combine_html.py
pre:scripts/pre_build.py
pre:scripts/pre_spiffs.py
pre:scripts/gzip_files.py
pre:scripts/extra_script.py
pre:scripts/update_changelog.py
scripts/extra_script.py
pre:scripts/pre_build.py ; wird zuerst ausgeführt
pre:scripts/pre_spiffs.py ; wird als zweites ausgeführt
pre:scripts/combine_html.py ; wird als drittes ausgeführt
scripts/gzip_files.py
; Remove or comment out the targets line
;targets = buildfs, build
; Add a custom target to build both
[platformio]
default_envs = esp32dev

View File

@ -1,7 +1,10 @@
Import("env")
import os
import re
def combine_html_files(source, target, env):
print("COMBINE HTML FILES")
html_dir = "./html"
header_file = os.path.join(html_dir, "header.html")
@ -18,14 +21,14 @@ def combine_html_files(source, target, env):
with open(file_path, 'r') as f:
content = f.read()
# Replace placeholder with header content
if '{{header}}' in content:
new_content = content.replace('{{header}}', header_content)
# Write back combined content
with open(file_path, 'w') as f:
f.write(new_content)
print(f"Combined header with {filename}")
# Replace content between head comments with header content
pattern = r'(<!-- head -->).*?(<!-- head -->)'
new_content = re.sub(pattern, r'\1' + header_content + r'\2', content, flags=re.DOTALL)
# Write back combined content
with open(file_path, 'w') as f:
f.write(new_content)
print(f"Combined header with {filename}")
# Register the script to run before building SPIFFS
env.AddPreAction("buildfs", combine_html_files)

View File

@ -13,6 +13,9 @@ def copy_file(input_file, output_file):
shutil.copy2(input_file, output_file)
def should_compress(file):
# Skip compression for spoolman.html
if file == 'spoolman.html':
return False
# Komprimiere nur bestimmte Dateitypen
return file.endswith(('.js', '.png', '.css', '.html'))

View File

@ -22,4 +22,4 @@ def replace_version(source, target, env):
with open(header_file, 'w') as file:
file.write(content)
env.AddPreAction("buildfs", replace_version)
env.AddPreAction("buildfs", replace_version)

View File

@ -78,19 +78,15 @@ def push_changes(version):
subprocess.run(['git', 'push', 'origin'], check=True)
print("Successfully pushed to origin")
# Ask for upstream push
response = input("Do you want to push to GitHub (upstream)? (y/n): ").lower()
if response == 'y':
subprocess.run(['git', 'push', 'upstream'], check=True)
print("Successfully pushed to upstream")
except subprocess.CalledProcessError as e:
print(f"Error during git operations: {e}")
return False
return True
def update_changelog():
print("Starting changelog update...") # Add this line
version = get_version()
print(f"Current version: {version}") # Add this line
today = datetime.now().strftime('%Y-%m-%d')
script_dir = os.path.dirname(os.path.abspath(__file__))

View File

@ -1,10 +1,10 @@
#include <Arduino.h>
#include <WiFi.h>
#include <DNSServer.h>
#include <WiFiManager.h>
#include <ESPmDNS.h>
#include <Wire.h>
#include <WiFi.h>
#include "wlan.h"
#include "config.h"
#include "website.h"
#include "api.h"
@ -15,12 +15,6 @@
#include "esp_task_wdt.h"
#include "commonFS.h"
// ***** WIFI initialisieren
WiFiManager wm;
bool wm_nonblocking = false;
void initWiFi();
// ################### Functions
// ##### SETUP #####
void setup() {
Serial.begin(115200);
@ -96,9 +90,6 @@ void loop() {
unsigned long currentMillis = millis();
// Falls WifiManager im nicht blockenden Modus ist
//if(wm_nonblocking) wm.process();
// Send AMS Data min every Minute
if (currentMillis - lastAmsSendTime >= amsSendInterval) {
lastAmsSendTime = currentMillis;
@ -164,38 +155,3 @@ void loop() {
yield();
esp_task_wdt_reset();
}
// ##### Funktionen für Konfiguration #####
void initWiFi() {
WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
if(wm_nonblocking) wm.setConfigPortalBlocking(false);
wm.setConfigPortalTimeout(320); // Portal nach 5min schließen
oledShowTopRow();
oledShowMessage("WiFi Setup");
bool res;
// res = wm.autoConnect(); // auto generated AP name from chipid
res = wm.autoConnect("FilaMan"); // anonymous ap
// res = wm.autoConnect("spoolman","password"); // password protected ap
if(!res) {
Serial.println("Failed to connect or hit timeout");
// ESP.restart();
oledShowTopRow();
oledShowMessage("WiFi not connected Check Portal");
}
else {
wifiOn = true;
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
oledShowTopRow();
display.display();
}
}
// ##### Funktionen für Konfiguration Ende #####

11
src/ota.cpp Normal file
View File

@ -0,0 +1,11 @@
#include <Arduino.h>
#include "ota.h"
#include <ESPAsyncWebServer.h>
#include <ESPAsyncHTTPUpdateServer.h>
ESPAsyncHTTPUpdateServer updateServer;
void setupOTA(AsyncWebServer &server) {
updateServer.setup(&server, "/ota", "admin", "admin");
//updateServer.setup(&server);
}

8
src/ota.h Normal file
View File

@ -0,0 +1,8 @@
#ifndef OTA_H
#define OTA_H
#include <ESPAsyncWebServer.h>
void setupOTA(AsyncWebServer &server);
#endif

View File

@ -5,7 +5,6 @@
#include "HX711.h"
#include <EEPROM.h>
#include "display.h"
#include "nfc.h"
#include "esp_task_wdt.h"
HX711 scale;

View File

@ -3,11 +3,11 @@
#include "api.h"
#include <ArduinoJson.h>
#include <ESPAsyncWebServer.h>
//#include <AsyncWebSocket.h>
#include "bambu.h"
#include "nfc.h"
#include "scale.h"
#include "esp_task_wdt.h"
#include "ota.h"
// Cache-Control Header definieren
#define CACHE_CONTROL "max-age=31536000" // Cache für 1 Jahr
@ -161,6 +161,8 @@ void setupWebserver(AsyncWebServer &server) {
Serial.print("Geladene Spoolman-URL: ");
Serial.println(spoolmanUrl);
setupOTA(server);
// Route für about
server.on("/about", HTTP_GET, [](AsyncWebServerRequest *request){
Serial.println("Anfrage für /about erhalten");

45
src/wlan.cpp Normal file
View File

@ -0,0 +1,45 @@
#include <Arduino.h>
#include "wlan.h"
#include <WiFi.h>
#include <esp_wifi.h>
#include <WiFiManager.h>
#include "display.h"
#include "config.h"
WiFiManager wm;
bool wm_nonblocking = false;
void initWiFi() {
WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
esp_wifi_set_max_tx_power(72); // Setze maximale Sendeleistung auf 20dBm
if(wm_nonblocking) wm.setConfigPortalBlocking(false);
wm.setConfigPortalTimeout(320); // Portal nach 5min schließen
oledShowTopRow();
oledShowMessage("WiFi Setup");
bool res;
// res = wm.autoConnect(); // auto generated AP name from chipid
res = wm.autoConnect("FilaMan"); // anonymous ap
// res = wm.autoConnect("spoolman","password"); // password protected ap
if(!res) {
Serial.println("Failed to connect or hit timeout");
// ESP.restart();
oledShowTopRow();
oledShowMessage("WiFi not connected Check Portal");
}
else {
wifiOn = true;
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
oledShowTopRow();
display.display();
}
}

8
src/wlan.h Normal file
View File

@ -0,0 +1,8 @@
#ifndef WLAN_H
#define WLAN_H
#include <Arduino.h>
void initWiFi();
#endif