Gå til hovedinnhold

Teknisk arkitektur

Systemdiagram

Browser <──WebSocket──> Node.js <──MQTTS:8883──> Printer
Browser <──WS:9001+──> ffmpeg <──RTSPS:322───> Camera

Dashboardet kommuniserer med printeren via MQTT over TLS (port 8883) og kameraet via RTSPS (port 322). Nettleseren kobler til dashboardet over HTTPS og WebSocket.

Teknisk stack

LagTeknologi
FrontendVanilla HTML/CSS/JS — 84 komponentmoduler, ingen build-steg, ingen rammeverk
BackendNode.js 22 med 6 npm-pakker: mqtt, ws, basic-ftp, admin-lte, ssh2, @3mfconsortium/lib3mf
DatabaseSQLite (innebygd i Node.js 22 via SQLite (innebygd))
Kameraffmpeg transkoder RTSPS til MPEG1, jsmpeg rendrer i nettleseren
SanntidWebSocket-hub sender printer-tilstand til alle tilkoblede klienter
ProtokollMQTT over TLS (port 8883) med printerens LAN Access Code

Porter

PortProtokollRetningBeskrivelse
3000HTTP + WSInnDashboard (omdirigerer til HTTPS)
3443HTTPS + WSSInnSikkert dashboard (standard)
9001+WSInnKamerastrømmer (én per printer)
8883MQTTSUtTilkobling til printer
322RTSPSUtKamera fra printer

Servermoduler (74)

ModulFormål
index.jsHTTP/HTTPS-servere, auto-SSL, CSP/HSTS-headere, statiske filer, demo-modus
config.jsKonfigurasjonslasting, standardverdier, env-overstyringer og migrasjoner
database.jsRe-eksport-wrapper — faktisk logikk ligger i server/db/-modulene
api-routes.jsREST API (590+ endepunkter)
auth.jsAutentisering og sesjonsadministrasjon
backup.jsBackup og gjenoppretting
printer-manager.jsPrinter-livssyklus, MQTT-tilkoblingsadministrasjon
mqtt-client.jsMQTT-tilkobling til Bambu-printere
mqtt-commands.jsMQTT-kommandobygning (pause, fortsett, stopp, osv.)
websocket-hub.jsWebSocket-kringkasting til alle nettleserklienter
camera-stream.jsffmpeg-prosessadministrasjon for kamerastrømmer
print-tracker.jsPrint-jobsporing, tilstandsoverganger, historikk-logging
print-guard.jsPrintbeskyttelse via xcam + sensorovervåking
queue-manager.jsPrint-kø med multi-printer dispatch og lastbalansering
slicer-service.jsLokal slicer CLI-bro, filopplasting, FTPS-opplasting
telemetry.jsTelemetri-databehandling
telemetry-sampler.jsTidsserie-datasampling
thumbnail-service.jsThumbnail-henting via FTPS fra printer SD
timelapse-service.jsTimelapse-opptak og -administrasjon
notifications.js7-kanals varslingsystem (Telegram, Discord, E-post, Webhook, ntfy, Pushover, SMS)
updater.jsGitHub Releases auto-oppdatering med backup
setup-wizard.jsNettbasert oppsettveiviser for første gangs bruk
ecom-license.jsLisensadministrasjon
failure-detection.jsFeildeteksjon og -analyse
bambu-cloud.jsBambu Cloud API-integrasjon
bambu-rfid-data.jsRFID-filamentdata fra AMS
circuit-breaker.jsKretstrykksmønster for tjenestestabilitet
energy-service.jsEnergi- og strømprisberegning
error-pattern-analyzer.jsMønsteranalyse av HMS-feil
file-parser.jsParsing av 3MF/GCode-filer
logger.jsStrukturert logging
material-recommender.jsMaterialanbefalinger
milestone-service.jsMilepæl- og prestasjonssporing
plugin-manager.jsPlugin-system for utvidelser
power-monitor.jsStrømmåler-integrasjon (Shelly/Tasmota)
price-checker.jsStrømpris-henting (Tibber/Nordpool)
printer-discovery.jsAutomatisk printer-oppdagelse på LAN
remote-nodes.jsFler-node-administrasjon
report-service.jsRapportgenerering
seed-filament-db.jsSeeding av filamentdatabase
spoolease-data.jsSpoolEase-integrasjon
validate.jsInndata-validering
gcode-toolpath.jsGcode toolpath-parser for 3D-forhåndsvisning
lib3mf-parser.jslib3mf WASM-wrapper for 3MF-parsing
printer-capabilities.jsPer-merke/modell printerkonfigurasjon
moonraker-client.jsMoonraker/Klipper WebSocket-klient
moonraker-camera.jsMoonraker kameraintegrasjon
moonraker-history-sync.jsMoonraker printhistorikk-synkronisering
wear-prediction.jsSlitasjepredikering for komponenter
forge-slicer-client.jsNode HTTP-klient mot skynett81/OrcaSlicer-fork i tjenestemodus (probe, slice, SSE-streaming, profiler)
forge-slicer-sync.jsSynkronisering av fork-profilkatalog inn i lokal slicer_profiles (5 min intervall)
slicer-resolver.jsFelles innfallsport for slicer-valg: forge → CLI-bro → native motor

Frontend-komponenter (84)

Alle komponenter er vanilla JavaScript-moduler uten build-steg. De lastes direkte i nettleseren via <script type="module">.

KomponentFormål
print-preview.js3D-modellviser + MakerWorld-bildeavsløring
model-viewer.jsWebGL 3D-rendring med laganimasjon
temperature-gauge.jsAnimerte SVG-ringgauger
sparkline-stats.jsGrafana-style statistikkpaneler
ams-panel.jsAMS-filamentvisualisering
camera-view.jsjsmpeg-videospiller med fullskjerm
controls-panel.jsPrinterkontroll UI
history-table.jsPrinthistorikk med søk, filtre, CSV-eksport
filament-tracker.jsFilamentlager med favoritter, fargefiltring
queue-panel.jsPrint-kø-administrasjon
knowledge-panel.jsKunnskapsbase-leser og -editor

Database

SQLite-databasen er innebygd i Node.js 22 og krever ingen ekstern instalasjon. Skjemaet håndteres av 112 migrasjoner i db/migrations.js.

Hoveddatabeller:

  • printers — printerkonfigurasjon
  • print_history — alle printjobber
  • filaments — filamentlager
  • ams_slots — AMS-sporkobling
  • queue — print-kø
  • notifications_config — varselinnstillinger
  • maintenance_log — vedlikeholdslogg

Sikkerhet

  • HTTPS med auto-generert sertifikat (eller ditt eget)
  • JWT-basert autentisering
  • CSP og HSTS-headere
  • Rate limiting (200 req/min)
  • Ingen ekstern sky-avhengighet for kjernefunksjoner