mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-20 17:50:12 +02:00
v0.2.2b3
155
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b3a91d7314 |
Revert "v0.2.2b1 (#602)" (#603)
This reverts commit
|
||
|
|
3dd1ffb485 |
v0.2.2b1 (#602)
* feat(queue): show spool grams left in filament slot mapping
* Bumped version
* Add SpoolBuddy AMS slot config, external slots, and dashboard redesign
- AMS page: external spool slots (Ext/Ext-L/Ext-R), click-to-configure
modal on all slots, temperature/humidity threshold-colored indicators,
nozzle L/R badges for dual-nozzle printers, compact AMS-HT layout
- Dashboard: two-column layout with device status + printers list (left)
and current spool card (right), state-colored scale/NFC icons, dashed
border card styling
- Daemon: suppress redundant scale reports (±2g threshold + stability
state change detection) to prevent weight display bouncing
- TopBar: auto-select online printers only, SpoolBuddy logo
* Fix SpoolBuddy daemon crash when read_tag module is missing
NFCReader.__init__ imported read_tag and instantiated PN5180() outside
the try/except block, so a missing module crashed the entire daemon.
Moved the import inside the existing try/except so the daemon gracefully
skips NFC polling — matching the scale reader's existing behavior.
* Fix SpoolBuddy daemon failing to import hardware drivers
The daemon imports read_tag and scale_diag as bare modules, but they
live in spoolbuddy/scripts/ which isn't on sys.path when systemd runs
the daemon. Added scripts/ to sys.path at startup, resolved relative
to the module file. Also moved the read_tag import inside NFCReader's
try/except (was crashing the daemon instead of skipping gracefully)
and demoted hardware-not-available messages from ERROR to INFO.
* Increase scale moving average window to reduce weight bouncing
5 samples at 100ms (500ms window) wasn't enough to smooth NAU7802 ADC
noise — the averaged value still varied by >2g between 1s report
intervals, and the stability state kept flipping, triggering a report
every cycle. Increased to 20 samples (2s window) so noise is smoothed
before reaching the reporting layer.
* Remove stability flipping as scale report trigger
When ADC noise kept the spread hovering around the 2g stability
threshold, the stable flag toggled every cycle, forcing a report with
a slightly different weight each time. Now only actual weight changes
of >=2g trigger reports. The stable flag is still included in each
report for consumers that need it.
* Fix formatting of option elements in FilamentMapping
* Minor Spoolbuddy frontend improvements
* Updated Spoolbuddy install script to strip down Raspbian
* Updated Spoolbuddy install script
* Add API key auth support to /auth/me for SpoolBuddy kiosk
When Bambuddy auth is enabled, the SpoolBuddy kiosk gets redirected to
the login page because ProtectedRoute requires a user from GET /auth/me,
which only handled JWT tokens. The kiosk daemon already has an API key
but couldn't use it to satisfy the frontend auth check.
- Backend: /auth/me now accepts API keys (Bearer bb_xxx or X-API-Key)
and returns a synthetic admin UserResponse with all permissions
- Frontend: AuthContext reads ?token= from URL on first load, stores in
localStorage, and strips from URL (prevents history/referrer leakage)
- Install script: kiosk URL now includes ?token=${API_KEY}
- Tests: 3 new integration tests (Bearer API key, X-API-Key header,
invalid key rejection)
* SpoolBuddy touch-friendly UI overhaul for 1024x600 kiosk display
Enlarge all interactive elements across 9 SpoolBuddy components to meet
44px minimum tap targets on the RPi touchscreen. Increase nav icons
(20→24px), labels (10→12px), bar heights, section headers, printer
buttons, spool visualizations, fill bars, and status indicators.
Compact the dashboard stats bar and remove the printers card. Add
fullScreen prop to ConfigureAmsSlotModal with two-column layout
(filament list left, K-profile + color right) to eliminate scrolling.
* Updated CI
* Fix naive-vs-aware datetime crash from 0.2.1 timezone migration
The timezone fix (
|
||
|
|
662cedef5d | Updated README | ||
|
|
1271e79717 | Updated README | ||
|
|
b2bf8c7100 | Updated README | ||
|
|
6317e7adce | Updated README | ||
|
|
38af5df050 |
Add filament override for model-based queue assignment (#486)
When scheduling a print to "any printer" (model-based assignment), users can now override the 3MF's original filament choices per slot. The override dropdown shows compatible filaments loaded across all printers of the selected model, filtered by type and nozzle (H2D). The scheduler matches against overridden type/color instead of the original 3MF values, preferring printers with exact color matches. Backend: - New GET /printers/available-filaments endpoint (aggregates loaded filaments across printers of a model, includes extruder_id for dual-nozzle nozzle-aware filtering) - New filament_overrides JSON column on print_queue table - Scheduler applies overrides before AMS mapping, clears tray_info_idx on overridden slots so color matching takes priority - Printer selection prefers printers with most override color matches Frontend: - New FilamentOverride component with per-slot override dropdowns - Type-filtered options (PLA slots only show PLA) - Nozzle-aware filtering (H2D: only shows filaments on correct extruder) - Integrated into PrintModal for model-based queue mode Tests: - 11 backend unit tests (color match counting, override application) - 12 frontend tests (rendering, type/nozzle filtering, interactions) i18n: All 6 locales (en, de, fr, it, ja, pt-BR) |
||
|
|
16fa84bc16 |
Add bulk spool addition and stock spools
Add Quick Add mode to the spool form for simplified entry (material + color + weight only), and a quantity field (1-100) for creating multiple identical spools at once. Stock spools (no slicer profile) are computed rather than stored — any spool without slicer_filament shows an amber "Stock" badge. New filter chips (All/Stock/Configured) on the inventory page. Backend bulk endpoint creates N spools in one transaction. Backend: - SpoolBulkCreate schema with quantity validation (1-100) - POST /inventory/spools/bulk endpoint Frontend: - Quick Add toggle in SpoolFormModal (create mode only) - Quantity field in FilamentSection (both modes) - bulkCreateSpools API method and bulkCreateMutation - Stock column (hidden by default) and stock filter chips - Inline error rendering moved into FilamentSection - CellCtx extended with t() for translatable cell content Tests: - 13 backend tests (schema validation + endpoint logic) - 10 frontend tests (validateForm quickAdd + UI behavior) i18n: 6 locales (en, de, fr, it, ja, pt-BR) Docs: CHANGELOG, README, website features, wiki inventory |
||
|
|
6ab48fa338 | Updated CI | ||
|
|
e4e6e9f8c4 |
Decouples file uploads and print start commands so that they run in the background asynchronously. When a print is started, the print modal no longer waits for the print to upload and start. Instead, a new toast-based UI appears with the status of prints being dispatched. Prints being dispatched can be cancelled during upload. If cancelled, the partially-uploaded gcode is deleted from the printer automatically before the FTP connection is closed.
This allows users sending particularly large prints to slow printers such as the P1-series to start a print and then move onto another task in Bambuddy immediately (such as starting more prints on more printers). It also gives the user visibility into what's happening instead of a loading indicator appearing for an indefinite period of time. The new toast-based UI uses websockets to update in real time. It will also appear for other users / instances of Bambuddy, not just the user who started the prints, allowing more transparency and handling cases where the user closes the page and then comes back wanting to know the status of the dispatching. fix: review fixes for background dispatch PR #408 - Restore missing imports in main.py (inventory, print_log, virtual_printers, mqtt_smart_plug_service) - Guard voidresp() for A1 printers to prevent hang after upload - Don't fail upload on voidresp() error since data transfer already completed - Add ams_mapping to register_expected_print calls for Spoolman usage tracking - Fix cancel_job TOCTOU race by using single lock acquisition - Fix batch counter reset TOCTOU by re-checking condition inside second lock - Add backgroundDispatch translations to fr.ts and pt-BR.ts - Remove dead upload_progress_callback definitions - Skip redundant "Print queued" toast in reprint mode (dispatch toast handles it) - 5 backend tests: cancel_job single-lock TOCTOU, batch reset re-check, job lifecycle - 2 FTP regression tests: voidresp error handling (upload-loop fix), A1 model voidresp skip - 1 frontend test: reprint toast suppression - CHANGELOG: background dispatch feature + test coverage entries - README: add background dispatch to Scheduling & Automation - Website: add feature item to Automation section - Wiki: add Background Print Dispatch section to print-queue.md |
||
|
|
bc78f3f456 |
feat(timelapse): add upload and remove timelapse management (#406)
When the auto-scan attached the wrong timelapse (e.g. from a different print), there was no way to fix it — the file couldn't be removed and re-scanning was disabled once a timelapse was attached. |
||
|
|
c82521efc9 |
fix(timelapse): support AVI format from P1-series printers (#405)
P1S/P1P save timelapses as AVI (MJPEG), but the scanner only looked for MP4 files — so P1-series timelapses were never found or attached. |
||
|
|
bc15d49a7e |
feat: add clear HMS errors button to dismiss stale print errors
Add a "Clear Errors" button to the HMS error modal that sends clean_print_error via MQTT and locally clears hms_errors for immediate UI feedback. Useful for dismissing stale print_error values that persist after print cancellation or transient events. |
||
|
|
27cecbed87 |
feat: add print log timeline view in archives page
Add a chronological, table-based print log as a 4th view mode in the Archives page. Log entries are stored in a separate print_log_entries table — clearing the log never touches archives or queue items. Backend: - New PrintLogEntry model with independent table - GET /print-log/ endpoint with search, printer, user, status, date filters - DELETE /print-log/ clears only log entries - Thumbnail serving endpoint for log entries - write_log_entry() service called on print completion - Auth: ARCHIVES_READ for viewing, ARCHIVES_DELETE_ALL for clearing Frontend: - New 'log' ViewMode with ClipboardList icon toggle - Filterable/searchable table with pagination (10/25/50/100 rows) - Colored status badges, duration formatting, filament color swatches - Clear button with confirmation modal - All filter state persisted to localStorage - i18n: EN, DE, JA, FR, IT translations |
||
|
|
53a4933c36 |
feat: add bed cooled notification after print completes (#378)
Notify users when the print bed cools below a configurable threshold (default 35°C) after a print finishes, so they know when to remove parts. - Backend: DB migration, model, schemas, notification template, service method, background cooldown monitor (polls every 15s, 30min timeout) - Frontend: event toggle in provider card/modal, threshold setting in Settings > Notifications, i18n keys for all 5 locales - Tests: 4 backend + 4 frontend tests - Docs: README, website, wiki updated |
||
|
|
a37dfaf7fb |
feat: dual external spool support, AMS slot model filtering & pre-population
Backend: - Add dual external spool support for H2D (vt_tray as list: Ext-L/Ext-R) - Add cloud filament ID map endpoint (/cloud/filament-id-map) - Fix RFID spool data erased by periodic AMS updates (skip tag matcher for RFID-tagged trays) - Fix AMS slot config overwrites RFID spool state - Fix K-profile selection corrupts existing profiles on X1C/P1S - Resolve K-profiles filament name via cloud filament ID map - Update print scheduler and usage tracker for dual external spools Frontend: - Add printer model filtering to ConfigureAmsSlotModal (cloud/local/builtin presets filtered by @BBL model suffix and compatible_printers) - Add pre-population for configured slots (preset, color, K-profile) - Add K-Profiles view with accurate filament name resolution - Internationalize all ConfigureAmsSlotModal strings (en/de/fr/it/ja — 21 keys) - Add 5 new ConfigureAmsSlotModal tests (model filtering, pre-selection, color pre-population, i18n) - Update PrintersPage for dual external spool rendering Docs: - Update CHANGELOG, README, website features, and wiki AMS docs |
||
|
|
2d989bc6e8 |
Unified 3MF-based filament tracking and notification usage variables (#336)
3MF slicer estimates are now the primary tracking source for ALL spools (BL and non-BL), with AMS remain% delta as fallback. Per-layer G-code analysis provides accurate partial usage for failed/cancelled prints. Fix wrong-spool tracking bug: 3MF slot_id was mapped directly to AMS tray position, but the printer remaps slicer slots at print time. Now uses queue ams_mapping for queue prints and tray_now from printer state for single-filament non-queue prints. Add filament_grams, filament_details, and progress template variables to print_complete, print_failed, and print_stopped notification events. Webhook payloads include per-slot filament breakdown. Per-slot data stored in archive extra_data during 3MF parsing. |
||
|
|
f9b47282a1 |
Nozzle-aware AMS mapping for dual-nozzle printers, BL spool detection fix, AMS startup fix, SQLite WAL (#318)
Dual-nozzle H2D/H2D Pro: filament matching now respects nozzle assignments from the 3MF file. Each AMS unit feeds a specific nozzle (L/R), and the scheduler/frontend constrain matching to only trays on the correct nozzle. Falls back to unfiltered matching when no trays exist on the target nozzle. L/R badges shown in the filament mapping UI. Translated in en/de/ja/it. Fix AMS slot config overwritten on startup: on_ams_change unconditionally unlinked BL spool assignments on every MQTT pushall, then re-assigned them sending ams_filament_setting without setting_id — clearing the printer's filament preset. Now compares spool RFID identifiers before unlinking. Fix BL spool detection false positives: removed tray_info_idx from detection logic in both backend is_bambu_lab_spool() and frontend isBambuLabSpool(). Third-party spools using Bambu generic presets had GF-prefixed tray_info_idx values, causing misidentification. Now uses only tray_uuid and tag_uid. SQLite WAL mode with 5s busy timeout reduces "database is locked" errors. |
||
|
|
44df253c67 | Merge branch '0.2.0b' into feature/inventory | ||
|
|
e6e62f2a68 |
Add spool inventory: AMS slot assignment, usage tracking, and remaining weight editing
Built-in spool inventory with AMS slot assignment for non-BL spools, automatic filament usage tracking via 3MF estimates, and remaining weight editing in the spool form. Inventory features: - AMS slot assignment: assign/unassign manual spools to AMS tray slots - Filter out Bambu Lab spools (RFID-managed) from assignment modal - Filter out already-assigned spools (one spool per slot) - Auto-unlink manual assignments when a BL spool is inserted - Hide assign/unassign UI on BL-occupied slots - Case-insensitive fingerprint matching for auto-unlink logic Usage tracking: - 3MF-based filament consumption tracking for non-BL spools - Extract per-filament used_g from archived 3MF slice_info - Map 3MF slot_id to AMS (ams_id, tray_id) positions - Scale estimates by print progress for failed/aborted prints - Skip BL spools (tracked via AMS remain% delta, Path 1) - Prevent double-counting with handled_trays set Other: - Add remaining weight field to spool edit form - Fix hardcoded "Empty" string in AssignSpoolModal (now i18n) - Add backend unit tests for usage_tracker (11 tests) - Add frontend tests for AssignSpoolModal filters (5 tests) - Update CHANGELOG, README, wiki docs, and website |
||
|
|
aa87e5598b |
Add clear plate confirmation between queued prints
The print scheduler previously treated FINISH/FAILED as idle states and would auto-start the next queued print before the user cleared the build plate. Now requires explicit user confirmation via a "Clear Plate & Start Next" button on the printer card. Uses an in-memory plate-cleared flag — no MQTT command needed since the scheduler's start_print overrides the printer state. |
||
|
|
2080665773 | Updated CHANGELOG and README | ||
|
|
cc7bbd6fbe |
Firmware version badge on printer cards (#311)
- Show firmware version badge on printer card (green=up to date, orange=update available) with click to view release notes or start update workflow - Badge only shown when firmware checking is enabled in settings - Modal adapts: info-only view when up to date (release notes auto-expanded), update workflow when update available - Gate badge query with firmware:read permission, upload button with firmware:update permission |
||
|
|
37158b0600 |
Update supported printers docs — all models including H2C
Remove outdated "Testers Needed" messaging and Tested/Needs Testing distinctions from README, website, and wiki. All 12 Bambu Lab printer models (X1, X1C, X1E, P1P, P1S, P2S, A1, A1 Mini, H2D, H2D Pro, H2C, H2S) are now uniformly listed as supported. |
||
|
|
516841a7f5 |
Fix virtual printer IP override ignored in server mode (#52)
The remote_interface_ip setting only worked in proxy mode but was completely ignored in server modes (immediate/review/print_queue). Users with multiple NICs (LAN + Tailscale, Docker bridges) got wrong auto-detected IP in SSDP broadcasts and TLS certificates. |
||
|
|
8d42b05f62 |
Add configurable slicer preference — Bambu Studio or OrcaSlicer (#313)
Users can now choose their preferred slicer (Bambu Studio or OrcaSlicer) in Settings → General. All "Open in Slicer" buttons across Archives, 3D Preview, and context menus use the correct protocol for the selected slicer. OrcaSlicer uses orcaslicer://open?file=<URL> on all platforms; Bambu Studio uses bambustudio:// (Windows) or bambustudioopen:// (macOS/ Linux). Default remains Bambu Studio for backward compatibility. |
||
|
|
edf244c469 |
Add local profiles — import OrcaSlicer presets without Bambu Cloud (#310)
Users who use OrcaSlicer without Bambu Cloud can now import slicer presets directly into Bambuddy. Supports .orca_filament, .bbscfg, .bbsflmt, .zip, and .json exports with automatic inheritance resolution via OrcaSlicer's GitHub base profiles (cached with 7-day TTL). |
||
|
|
8449e1c2e2 |
Extend support bundle with comprehensive diagnostics
Add 10 new diagnostic sections to _collect_support_info(): printer connectivity/firmware, integration status (Spoolman, MQTT, HA), network interfaces (subnets only), Python package versions, database health, Docker environment, WebSocket connections, and log file info. All data properly anonymized — no IPs, names, or serials included. |
||
|
|
14ae442af7 | Updated README | ||
|
|
d73da5e0ef |
Auto-detect subnet for printer discovery
The Add Printer dialog previously required users to manually enter their network subnet for scanning (defaulting to 192.168.1.0/24). Now the backend detects available network interfaces and returns their subnets via the /discovery/info endpoint. The frontend auto-selects the first detected subnet and shows a dropdown when multiple subnets are available, falling back to a text input if none are detected. |
||
|
|
9cbd66593e |
Show Spoolman fill level for AMS Lite and external spools (#293)
AMS Lite units (A1 series) have no weight sensor and always report 0% fill level. When a spool is linked to Spoolman with weight data, use Spoolman's remaining weight as a fallback. External spools also show fill level from Spoolman data instead of always showing unknown. Backend: Enrich GET /spoolman/spools/linked response with remaining_weight and filament_weight alongside spool ID. Frontend: Add getSpoolmanFillLevel() helper. Update regular AMS, HT AMS, and external spool fill computations to use Spoolman fallback when AMS reports 0%. Show "(Spoolman)" indicator in hover card when fill data comes from Spoolman. |
||
|
|
f1fc8b60ed | Updated README and CHANGELOG | ||
|
|
0d0ed0e4c1 | Updated README | ||
|
|
2c8f1e449f | Updated README | ||
|
|
f51795ac4f | Updated README | ||
|
|
0f0ddde929 | Updated README | ||
|
|
91a4e2a0f5 | Windows Portable Launcher | ||
|
|
601f906339 | Updated REAME | ||
|
|
583c374f01 |
Add Virtual Printer Proxy Mode for remote printing
Introduces a new "Proxy Mode" for the Virtual Printer that enables remote printing from anywhere in the world without VPN, port forwarding, or Bambu Cloud dependency. Bambuddy acts as a TLS relay between a remote slicer (Bambu Studio/ OrcaSlicer) and the local Bambu Lab printer: Remote Slicer → Internet → Bambuddy Server → Local Network → Printer The slicer connects to Bambuddy using the real printer's serial number and access code. Bambuddy authenticates and relays all FTP (file transfer) and MQTT (commands/status) traffic with end-to-end TLS encryption. - No port forwarding required - printer stays safely on local network - No VPN needed - connect from coffee shops, hotels, work, anywhere - No Bambu Cloud dependency - fully self-hosted solution - End-to-end TLS encryption on FTP (port 9990) and MQTT (port 8883) - Works with Bambu Studio and OrcaSlicer - Uses real printer credentials for authentication - Automatic printer selection from connected printers - Add SlicerProxyManager class for TLS relay (tcp_proxy.py) - TLS termination with auto-generated certificates - Concurrent FTP and MQTT proxy servers - Connection lifecycle management with proper cleanup - Extend VirtualPrinterManager with proxy mode support - New 'proxy' mode alongside archive/review/queue modes - Target printer selection and credential management - Add proxy configuration endpoints to settings API - Add permission checks for proxy endpoints - Add Proxy Mode card to Virtual Printer settings - Target printer dropdown for proxy destination - Real-time proxy status display (ports, target, running state) - Full i18n support (English, German) - Add network architecture diagram - Add proxy mode section to README - Add comprehensive guide to wiki - Add prominent feature section to website - Backend unit tests for SlicerProxyManager - Backend unit tests for proxy mode configuration - Frontend tests for proxy mode UI components Closes #207 #170 |
||
|
|
3fa9ed2b91 |
Add authentication to 200+ API endpoints (CVE-2026-25505)
Security fix for critical vulnerability (CVSS 9.8) where API endpoints were accessible without authentication when auth was enabled. Changes: - Add RequirePermissionIfAuthEnabled() to all unprotected route files: archives, projects, settings, api_keys, groups, cloud, github_backup, support, notifications, notification_templates, maintenance, filaments, external_links, smart_plugs, discovery, firmware, kprofiles, camera, ams_history, pending_uploads, updates, spoolman, system, print_queue, printers - Keep image-serving endpoints (thumbnails, timelapse, photos, camera streams, icons) unauthenticated since <img> tags cannot send headers - Add backend integration tests for endpoint auth enforcement - Add frontend tests for ownership-based permissions (canModify) Fixes: CVE-2026-25505 |
||
|
|
018a744475 |
Location filter for queue and auth fixes (Issue #220)
Features:
- Add location filter for "Any {Model}" queue assignments
- Queue items can target a specific location (e.g., "Any X1C in Workshop")
- Location dropdown filter on Queue page to view jobs by location
- Scheduler considers location when assigning model-based jobs
Closes #220
|
||
|
|
81cc8412ac |
Add user tracking for prints, archives, library files, and queue (Issue #206)
Track and display who performs key actions in Bambuddy: - Archives: who uploaded each archive file - Library: who uploaded each file in File Manager - Queue: who added each print job to the queue - Printers: who started the current print (reprint tracking) Backend changes: - Add created_by_id column to print_archives, library_files, print_queue tables - Add database migrations for new columns (auto-run on startup) - Update archive, library, and queue routes to capture current user - Add current-print-user endpoint for printer reprint tracking - Track reprint user in PrinterManager in-memory state - Fix file uploads not sending auth headers (FormData requires explicit headers) Frontend changes: - Display username on archive cards, library files, queue items - Show "Started by" on printer cards during active prints - Add auth headers to all 12 FormData upload functions - Update TypeScript types for user tracking fields Tests: - Add unit tests for PrinterManager user tracking methods (7 tests) - Add integration tests for current-print-user endpoint (3 tests) - Add integration tests for library file user tracking (3 tests) Works when authentication is enabled; gracefully hidden when disabled. Closes #206 |
||
|
|
001e328ce8 |
Add configurable FPS and status-only mode to streaming overlay
- Add ?fps=N parameter to control camera frame rate (1-30, default 15) - Add ?camera=false parameter for status-only overlay without camera feed - Increase default camera FPS from 10 to 15 across all camera views - Add comprehensive tests for new overlay parameters Resolves user request on Issue #164 for higher FPS and status-only option. |
||
|
|
391214be79 | Merge branch '0.1.6-final' into feature/auth_details | ||
|
|
8a4b318dbf | Merge branch '0.1.6-final' into feature/164 | ||
|
|
a965afa6cb |
Merge branch '0.1.6-final' into feature/173
Merged MQTT smart plug support with latest 0.1.6-final features. Kept MQTT plug functionality (separate topics, multipliers, etc.) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
||
|
|
89229a5ecc |
Add group-based permissions system with granular access control
Implement a full permissions system replacing simple admin/user roles: Backend: - Add Group model with many-to-many user relationship - Add 50+ granular permissions (resource:action pattern) - Create default groups: Administrators, Operators, Viewers - Add permission-checking dependencies for route protection - Add groups API endpoints (CRUD, user assignment) - Add change password endpoint for users - Update backup/restore to include groups - Migrate existing users to groups on startup Frontend: - Add GroupsPage for managing groups and permissions - Add permission helpers to AuthContext (hasPermission, hasAnyPermission) - Add PermissionRoute component for protected routes - Disable buttons/features based on permissions (with tooltips) - Add change password modal in sidebar for all users - Add forgot password info modal on login page - Show user groups in UsersPage with group assignment Testing: - Add integration tests for groups API - Add tests for user-group assignments - Add tests for change password endpoint - Seed default groups in test fixtures Closes #28 #161 |
||
|
|
2795694e5b |
Add tag management feature (Issue #183)
Implement centralized tag management for print archives:
- GET /archives/tags endpoint to list all tags with usage counts
- PUT /archives/tags/{name} endpoint to rename tags across archives
- DELETE /archives/tags/{name} endpoint to delete tags from archives
- TagManagementModal component with search, sort, rename, and delete
- Gear icon button next to tag filter dropdown on Archives page
- Fix tag autocompletion in EditArchiveModal using dedicated getTags API
Closes #183
|
||
|
|
7382ee1b20 |
Add frontend tests for STL thumbnails, update README and CHANGELOG
- Add 9 frontend tests for STL thumbnail generation - Update CHANGELOG with STL thumbnail feature details - Update README File Manager section Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
04f4dccd41 |
Enhanced MQTT support with separate topics and multipliers (#173)
- Add separate MQTT topics for power, energy, and state monitoring - mqtt_power_topic, mqtt_power_path, mqtt_power_multiplier - mqtt_energy_topic, mqtt_energy_path, mqtt_energy_multiplier - mqtt_state_topic, mqtt_state_path, mqtt_state_on_value - Support different MQTT topics per data type (e.g., Zigbee2MQTT with separate power/energy/state topics) - Individual multipliers for power and energy (e.g., mW→W, Wh→kWh) - Configurable ON value for state monitoring (e.g., "ON", "true", "1") - Maintain backward compatibility with legacy mqtt_topic/mqtt_multiplier - Database migration auto-copies legacy fields to new fields - Update backup/restore to handle new MQTT fields - Add backend tests for new MQTT configurations - Update frontend form with organized Power/Energy/State sections Closes #173 |