Compare commits

..

14 Commits

Author SHA1 Message Date
0ccc67f4b2 feat: update release workflow trigger and increment version to 1.0.6
Some checks failed
Create Release / build (push) Has been cancelled
2025-02-16 12:11:30 +01:00
a027dfb54e chore: remove unnecessary blank line in release workflow configuration 2025-02-16 12:07:14 +01:00
07741f2a52 feat: enhance release workflow by adding permissions for issues and pull requests, and updating GitHub CLI installation method 2025-02-16 12:05:50 +01:00
3e9b89f69b feat: streamline GitHub Actions release workflow by consolidating permissions and enhancing GitHub CLI installation step 2025-02-16 12:01:41 +01:00
bf67a635f6 feat: add GitHub CLI installation step to release workflow 2025-02-16 11:59:34 +01:00
84cccd5014 feat: update release workflow to include version in asset naming for firmware binaries 2025-02-16 11:58:04 +01:00
e983b0fcfd feat: update release workflow to use new asset naming and streamline release creation process 2025-02-16 11:53:49 +01:00
e01bb9b1f9 feat: enhance GitHub Actions workflow by adding permissions for discussions and packages 2025-02-16 11:50:51 +01:00
17b6051da0 feat: update GitHub Actions workflow for firmware release and add partition configuration 2025-02-16 11:47:20 +01:00
84617ebc53 feat: add German translation of README and link to it from the English version
Some checks failed
Create Release / build (push) Has been cancelled
2025-02-16 11:18:43 +01:00
8ac6ba57a4 docs: update changelog for version 1.0.5 2025-02-16 10:47:26 +01:00
cc17140dc4 feat: update version to 1.0.5 and enhance changelog update process with automatic git push 2025-02-16 10:47:18 +01:00
8741216374 feat: update changelog script to categorize commits and handle new changelog creation 2025-02-16 10:45:12 +01:00
7bdebeab03 feat: improve changelog update script to handle absolute paths and create new changelog if missing 2025-02-16 10:38:12 +01:00
7 changed files with 357 additions and 32 deletions

View File

@ -5,29 +5,73 @@ on:
tags:
- 'v*'
permissions:
contents: write # Required for creating releases
issues: read # Required for reading changelog
pull-requests: read # Required for reading changelog
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write # Required for creating releases at job level
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install --upgrade platformio
- name: Build Firmware
run: |
pio run -t buildfs # Build SPIFFS
pio run # Build firmware
- name: Install esptool
run: |
pip install esptool
- name: Merge firmware and SPIFFS
run: |
esptool.py --chip esp32 merge_bin \
--flash_mode dio \
--flash_freq 40m \
--flash_size 4MB \
-o .pio/build/esp32dev/filaman.bin \
0x10000 .pio/build/esp32dev/firmware.bin \
0x290000 .pio/build/esp32dev/spiffs.bin
- name: Get version from tag
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/}
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Read CHANGELOG.md
id: changelog
run: |
CHANGELOG=$(awk "/## \[${{ steps.get_version.outputs.VERSION }}\]/{p=1;print;next} /## \[/{p=0} p" CHANGELOG.md)
echo "::set-output name=CHANGES::$CHANGELOG"
- name: Create Release
uses: actions/create-release@v1
CHANGELOG=$(awk "/## \\[${{ steps.get_version.outputs.VERSION }}\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md)
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGELOG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Install and Configure GitHub CLI
run: |
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
- name: Create Release with GitHub CLI
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ steps.get_version.outputs.VERSION }}
body: ${{ steps.changelog.outputs.CHANGES }}
draft: false
prerelease: false
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Changed from GITHUB_TOKEN to GH_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"

View File

@ -1,5 +1,27 @@
# Changelog
## [1.0.5] - 2025-02-16
### Added
- update version to 1.0.5 and enhance changelog update process with automatic git push
- update changelog script to categorize commits and handle new changelog creation
- improve changelog update script to handle absolute paths and create new changelog if missing
## [1.0.4] - 2025-02-16
### Added
- improve changelog update script to handle absolute paths and create new changelog if missing
## [1.0.3] - 2025-02-16
### Added
-
### Changed
-
### Fixed
-
## [1.0.2] - 2025-02-16
### Added
- Feature 1

155
README.de.md Normal file
View File

@ -0,0 +1,155 @@
# FilaMan - Filament Management System
FilaMan ist ein Filament-Managementsystem für den 3D-Druck. Es verwendet ESP32-Hardware für Gewichtsmessungen und NFC-Tag-Management.
Benutzer können Filamentspulen verwalten, den Status des Automatic Material System (AMS) von Bablulab Druckern überwachen und Einstellungen über eine Weboberfläche vornehmen.
Das System integriert sich nahtlos mit der [Spoolman](https://github.com/Donkie/Spoolman) Filamentverwaltung, zusätzlich mit [Bambulab](https://bambulab.com/en-us) 3D-Druckern und sowie dem [Openspool](https://github.com/spuder/OpenSpool) NFC-TAG Format.
![Scale](./img/scale_trans.png)
Weitere Bilder finden Sie im [img Ordner](/img/)
oder auf meiner Website: [FilaMan Website](https://www.filaman.app)
Deutsches Erklärvideo: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62zaOHU)
### ESP32 Hardware-Funktionen
- **Gewichtsmessung:** Verwendung einer Wägezelle mit HX711-Verstärker für präzise Gewichtsverfolgung.
- **NFC-Tag Lesen/Schreiben:** PN532-Modul zum Lesen und Schreiben von Filamentdaten auf NFC-Tags.
- **OLED-Display:** Zeigt aktuelles Gewicht, Verbindungsstatus (WiFi, Bambu Lab, Spoolman).
- **WLAN-Konnektivität:** WiFiManager für einfache Netzwerkkonfiguration.
- **MQTT-Integration:** Verbindet sich mit Bambu Lab Drucker für AMS-Steuerung.
- **NFC-Tag NTAG215:** Verwendung von NTAG215 wegen ausreichendem Speicherplatz auf dem Tag
### Weboberflächen-Funktionen
- **Echtzeit-Updates:** WebSocket-Verbindung für Live-Daten-Updates.
- **NFC-Tag-Verwaltung:**
- Filamentdaten auf NFC-Tags schreiben.
- Verwendet das NFC-Tag-Format von [Openspool](https://github.com/spuder/OpenSpool)
- Ermöglicht automatische Spulenerkennung im AMS
- **Bambulab AMS-Integration:**
- Anzeige der aktuellen AMS-Fachbelegung.
- Zuordnung von Filamenten zu AMS-Slots.
- Unterstützung für externe Spulenhalter.
- **Spoolman-Integration:**
- Auflistung verfügbarer Filamentspulen.
- Filtern und Auswählen von Filamenten.
- Automatische Aktualisierung der Spulengewichte.
- Verfolgung von NFC-Tag-Zuweisungen.
### Wenn Sie meine Arbeit unterstützen möchten, freue ich mich über einen Kaffee
<a href="https://www.buymeacoffee.com/manuelw" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 30px !important;width: 108px !important;" ></a>
## Detaillierte Funktionalität
### ESP32-Funktionalität
- **Druckaufträge steuern und überwachen:** Der ESP32 kommuniziert mit dem Bambu Lab Drucker.
- **Drucker-Kommunikation:** Nutzt MQTT für Echtzeit-Kommunikation mit dem Drucker.
- **Benutzerinteraktionen:** Das OLED-Display bietet sofortiges Feedback zum Systemstatus.
### Weboberflächen-Funktionalität
- **Benutzerinteraktionen:** Die Weboberfläche ermöglicht Benutzern die Interaktion mit dem System.
- **UI-Elemente:** Enthält Dropdown-Menüs für Hersteller und Filamente, Buttons zum Beschreiben von NFC-Tags und Echtzeit-Statusanzeigen.
## Hardware-Anforderungen
### Komponenten
- **ESP32 Entwicklungsboard:** Jede ESP32-Variante.
[Amazon Link](https://amzn.eu/d/aXThslf)
- **HX711 Wägezellen-Verstärker:** Für Gewichtsmessung.
[Amazon Link](https://amzn.eu/d/1wZ4v0x)
- **OLED Display:** 128x64 SSD1306.
[Amazon Link](https://amzn.eu/d/dozAYDU)
- **PN532 NFC Modul:** Für NFC-Tag-Operationen.
[Amazon Link](https://amzn.eu/d/8205DDh)
- **NFC-Tag:** NTAG215
[Amazon Link](https://amzn.eu/d/fywy4c4)
### Pin-Konfiguration
| Komponente | ESP32 Pin |
|-------------------|-----------|
| HX711 DOUT | 16 |
| HX711 SCK | 17 |
| OLED SDA | 21 |
| OLED SCL | 22 |
| PN532 IRQ | 32 |
| PN532 RESET | 33 |
| PN532 SCK | 14 |
| PN532 MOSI | 13 |
| PN532 MISO | 12 |
| PN532 CS/SS | 15 |
## Software-Abhängigkeiten
### ESP32-Bibliotheken
- `WiFiManager`: Netzwerkkonfiguration
- `ESPAsyncWebServer`: Webserver-Funktionalität
- `ArduinoJson`: JSON-Verarbeitung
- `PubSubClient`: MQTT-Kommunikation
- `Adafruit_PN532`: NFC-Funktionalität
- `Adafruit_SSD1306`: OLED-Display-Steuerung
- `HX711`: Wägezellen-Kommunikation
## Installation
### Voraussetzungen
- **Software:**
- [PlatformIO](https://platformio.org/) in VS Code
- [Spoolman](https://github.com/Donkie/Spoolman) Instanz
- **Hardware:**
- ESP32 Entwicklungsboard
- HX711 Wägezellen-Verstärker
- Wägezelle (Gewichtssensor)
- OLED Display (128x64 SSD1306)
- PN532 NFC Modul
- Verbindungskabel
### Schritt-für-Schritt Installation
1. **Repository klonen:**
```bash
git clone https://github.com/ManuelW77/Filaman.git
cd FilaMan
```
2. **Abhängigkeiten installieren:**
```bash
pio lib install
```
3. **ESP32 flashen:**
```bash
pio run --target upload
```
4. **Ersteinrichtung:**
- Mit dem "FilaMan" WLAN-Zugangspunkt verbinden.
- WLAN-Einstellungen über das Konfigurationsportal vornehmen.
- Weboberfläche unter `http://filaman.local` oder der IP-Adresse aufrufen.
## Dokumentation
### Relevante Links
- [PlatformIO Dokumentation](https://docs.platformio.org/)
- [Spoolman Dokumentation](https://github.com/Donkie/Spoolman)
- [Bambu Lab Drucker Dokumentation](https://www.bambulab.com/)
### Tutorials und Beispiele
- [PlatformIO erste Schritte](https://docs.platformio.org/en/latest/tutorials/espressif32/arduino_debugging_unit_testing.html)
- [ESP32 Webserver Tutorial](https://randomnerdtutorials.com/esp32-web-server-arduino-ide/)
## Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Siehe [LICENSE](LICENSE) Datei für Details.
## Materialien
### Nützliche Ressourcen
- [ESP32 Offizielle Dokumentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/)
- [Arduino Bibliotheken](https://www.arduino.cc/en/Reference/Libraries)
- [NFC Tag Informationen](https://learn.adafruit.com/adafruit-pn532-rfid-nfc/overview)
### Community und Support
- [PlatformIO Community](https://community.platformio.org/)
- [Arduino Forum](https://forum.arduino.cc/)
- [ESP32 Forum](https://www.esp32.com/)
## Verfügbarkeit
Der Code kann getestet und die Anwendung kann vom [GitHub Repository](https://github.com/ManuelW77/Filaman) heruntergeladen werden.
### Wenn Sie meine Arbeit unterstützen möchten, freue ich mich über einen Kaffee
<a href="https://www.buymeacoffee.com/manuelw" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 30px !important;width: 108px !important;" ></a>

View File

@ -1,5 +1,7 @@
# FilaMan - Filament Management System
[Deutsche Version](README.de.md)
FilaMan is a filament management system for 3D printing. It uses ESP32 hardware for weight measurement and NFC tag management.
Users can manage filament spools, monitor the status of the Automatic Material System (AMS) and make settings via a web interface.
The system integrates seamlessly with [Bambulab](https://bambulab.com/en-us) 3D printers and [Spoolman](https://github.com/Donkie/Spoolman) filament management as well as the [Openspool](https://github.com/spuder/OpenSpool) NFC-TAG format.

5
partitions.csv Normal file
View File

@ -0,0 +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,
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.2"
version = "1.0.6"
[env:esp32dev]
platform = espressif32
@ -33,6 +33,7 @@ lib_deps =
board_build.filesystem = spiffs
board_build.spiffs.partition = 2M
board_build.spiffs.upload_size = 2M
board_build.partitions = partitions.csv
build_flags =
-Os

View File

@ -1,36 +1,132 @@
import os
import re
import subprocess
from datetime import datetime
def get_version():
with open('../platformio.ini', 'r') as f:
script_dir = os.path.dirname(os.path.abspath(__file__))
project_dir = os.path.dirname(script_dir)
platformio_path = os.path.join(project_dir, 'platformio.ini')
with open(platformio_path, 'r') as f:
content = f.read()
version_match = re.search(r'version\s*=\s*"([^"]+)"', content)
return version_match.group(1) if version_match else None
def get_last_tag():
try:
result = subprocess.run(['git', 'describe', '--tags', '--abbrev=0'],
capture_output=True, text=True)
return result.stdout.strip()
except subprocess.CalledProcessError:
return None
def categorize_commit(commit_msg):
"""Categorize commit messages based on conventional commits"""
lower_msg = commit_msg.lower()
if any(x in lower_msg for x in ['feat', 'add', 'new']):
return 'Added'
elif any(x in lower_msg for x in ['fix', 'bug']):
return 'Fixed'
else:
return 'Changed'
def get_changes_from_git():
"""Get changes from git commits since last tag"""
changes = {
'Added': [],
'Changed': [],
'Fixed': []
}
last_tag = get_last_tag()
# Get commits since last tag
git_log_command = ['git', 'log', '--pretty=format:%s']
if last_tag:
git_log_command.append(f'{last_tag}..HEAD')
try:
result = subprocess.run(git_log_command, capture_output=True, text=True)
commits = result.stdout.strip().split('\n')
# Filter out empty commits and categorize
for commit in commits:
if commit:
category = categorize_commit(commit)
# Clean up commit message
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?:', '', commit).strip()
changes[category].append(clean_msg)
except subprocess.CalledProcessError:
print("Error: Failed to get git commits")
return None
return changes
def push_changes(version):
"""Push changes to upstream"""
try:
# Stage the CHANGELOG.md
subprocess.run(['git', 'add', 'CHANGELOG.md'], check=True)
# Commit the changelog
commit_msg = f"docs: update changelog for version {version}"
subprocess.run(['git', 'commit', '-m', commit_msg], check=True)
# Push to origin (local)
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():
version = get_version()
today = datetime.now().strftime('%Y-%m-%d')
changelog_template = f"""## [{version}] - {today}
### Added
-
### Changed
-
### Fixed
-
"""
script_dir = os.path.dirname(os.path.abspath(__file__))
project_dir = os.path.dirname(script_dir)
changelog_path = os.path.join(project_dir, 'CHANGELOG.md')
with open('../CHANGELOG.md', 'r') as f:
content = f.read()
# Get changes from git
changes = get_changes_from_git()
if not changes:
print("No changes found or error occurred")
return
# Insert new version template after the header
updated_content = content.replace("# Changelog\n", f"# Changelog\n\n{changelog_template}")
# Create changelog entry
changelog_entry = f"## [{version}] - {today}\n"
for section, entries in changes.items():
if entries: # Only add sections that have entries
changelog_entry += f"### {section}\n"
for entry in entries:
changelog_entry += f"- {entry}\n"
changelog_entry += "\n"
with open('../CHANGELOG.md', 'w') as f:
f.write(updated_content)
if not os.path.exists(changelog_path):
with open(changelog_path, 'w') as f:
f.write(f"# Changelog\n\n{changelog_entry}")
push_changes(version)
else:
with open(changelog_path, 'r') as f:
content = f.read()
if f"[{version}]" not in content:
updated_content = content.replace("# Changelog\n", f"# Changelog\n\n{changelog_entry}")
with open(changelog_path, 'w') as f:
f.write(updated_content)
push_changes(version)
else:
print(f"Version {version} already exists in changelog")
if __name__ == "__main__":
update_changelog()