Skip to content

fdenzer/bambuapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bambu Lab Druckerstatus Backend

Dieses Node.js-Backend dient als sichere Schnittstelle zur Bambu Lab Cloud API, um den Echtzeitstatus Ihres 3D-Druckers abzurufen und über einfache HTTP-Endpunkte für eine Frontend-Anwendung bereitzustellen. Es löst das Problem des direkten Zugriffs auf die Bambu Lab API vom Browser aus, indem es die Authentifizierung und die API-Kommunikation serverseitig handhabt.

Funktionen

  • Sichere 2FA-Authentifizierung : Implementiert einen zweistufigen Login-Prozess für die Bambu Lab Cloud API:
    1. Schritt 1: E-Mail und Passwort-Eingabe
    2. Schritt 2: Verifikationscode aus der E-Mail (falls von Bambu Lab angefordert)
  • Token-Management : Speichert den erhaltenen Access Token in der Server-Session, um wiederholte Logins während einer Browsersitzung zu vermeiden.
  • Druckerstatus-Abruf : Ruft den aktuellen Status Ihres Bambu Lab Druckers ab (Druckstatus, Fortschritt, geschätzte Fertigstellungszeit, Temperaturen etc.).
  • CORS-Konfiguration : Ermöglicht den Zugriff von einer spezifischen Frontend-Domain (z.B. GitHub Pages).
  • Fehlerbehandlung : Behandelt API-Fehler und Token-Ablauf, fordert bei Bedarf einen erneuten Login an.

Benutzer-Workflow

Die Anwendung führt den Benutzer durch einen intelligenten 2FA-Login-Prozess:

  1. Initiale Anmeldung: Benutzer gibt E-Mail und Passwort ein
  2. Automatische Erkennung: Das System erkennt, ob Bambu Lab eine Zwei-Faktor-Authentifizierung erfordert
  3. Direkte Anmeldung: Falls keine 2FA erforderlich → direkter Zugang zum Druckerstatus
  4. 2FA-Verifikation: Falls 2FA erforderlich → Verifikationsformular wird angezeigt
  5. E-Mail-Verifizierung: Benutzer erhält Verifikationscode per E-Mail und gibt diesen ein
  6. Abschluss: Nach erfolgreicher Verifikation → Zugang zum Druckerstatus
  7. Status-Überwachung: Kontinuierliche Überwachung des 3D-Drucker-Status mit Aktualisierungsmöglichkeit

Voraussetzungen

  • Node.js : empfohlen: LTS-Version
  • npm : wird mit Node.js installiert

Installation

  • Repository klonen (oder Dateien herunterladen): :
    git clone https://github.com/fdenzer/your-repo-name.git # Ersetzen Sie dies durch Ihr tatsächliches Repo
    cd your-repo-name
  • Abhängigkeiten installieren: : Navigieren Sie in das Verzeichnis, in dem sich Ihre package.json und server.js befinden, und führen Sie aus:
    npm install

Konfiguration

  • Session Secret: : Ändern Sie den secret-Wert in der Session-Konfiguration. Dies sollte ein langes, zufälliges und sicheres Geheimnis sein. Ändern Sie dies unbedingt in einer Produktionsumgebung! : Führen Sie den folgenden Einzeiler in Ihrem Terminal aus, um ein sicheres Geheimnis zu generieren und es direkt in Ihre server.js-Datei einzufügen. Erstellen Sie vorher eine Sicherungskopie von server.js!
    cp server.js server.js.bak && SECRET=$(openssl rand -base64 32) && sed -i.bak "s|secret: 'your_super_secret_key_for_sessions',|secret: '$SECRET',|" server.js
    : Dieser Befehl erstellt zuerst eine Sicherungskopie (server.js.bak), generiert dann ein 32 Byte langes, base64-kodiertes Zufallsgeheimnis und ersetzt den Platzhalter in server.js damit.
  • CORS Origin: : Die Access-Control-Allow-Origin ist bereits auf https://fdenzer.github.io gesetzt. Wenn Ihr Frontend unter einer anderen Domain gehostet wird, passen Sie diese Zeile entsprechend an:
    res.header('Access-Control-Allow-Origin', 'https://fdenzer.github.io') // Spezifische Frontend-Domain

Ausführung des Backends

  • Starten Sie den Server mit folgendem Befehl im Terminal (im Projektverzeichnis): :
    npm start
  • Oder direkt: :
    node server.js
    : Der Server wird auf http://localhost:3000 gestartet. Sie sehen Konsolenmeldungen, die die Verfügbarkeit der Endpunkte bestätigen.

API-Endpunkte

Das Backend stellt die folgenden HTTP-Endpunkte bereit:

  • POST /api/login : Beschreibung : Meldet sich bei der Bambu Lab Cloud API an mit zweistufiger Authentifizierung. Dieser Endpunkt verarbeitet sowohl den ersten Schritt (E-Mail/Passwort) als auch den zweiten Schritt (Verifikationscode) je nach übergebenen Parametern.

    : Schritt 1 - Initiale Anmeldung:

    {
        "email": "[email protected]",
        "password": "ihr_passwort"
    }

    Antwort bei direktem Login-Erfolg:

    { "message": "Login erfolgreich!", "accessTokenAvailable": true }

    Antwort wenn 2FA erforderlich:

    { "message": "Verifikationscode wurde gesendet. Bitte geben Sie den Code ein.", "needsVerification": true }

    : Schritt 2 - Verifikation (falls erforderlich):

    {
        "email": "[email protected]",
        "password": "ihr_passwort",
        "verificationCode": "123456"
    }

    Antwort bei erfolgreicher Verifikation:

    { "message": "Verifikation erfolgreich!", "accessTokenAvailable": true }
  • GET /api/printer-status : Beschreibung : Ruft den aktuellen Status des Bambu Lab Druckers ab, der mit dem in der Session gespeicherten Access Token verknüpft ist. : Voraussetzung : Ein gültiger Access Token muss in der Session vorhanden sein (d.h., der Login-Endpunkt muss zuvor erfolgreich aufgerufen worden sein). : Antwort : Gibt ein JSON-Objekt mit dem Druckerstatus zurück, das relevante Informationen wie formatted_status, progress, estimated_finish_time etc. enthält. Bei fehlendem oder abgelaufenem Token wird ein 401 Unauthorized zurückgegeben.

Frontend-Integration

Ihr Frontend (z.B. die bambulab-printer-status.html-Datei) sollte HTTP-Anfragen an diese Backend-Endpunkte senden.

  • Für den Login: : Senden Sie eine POST-Anfrage an http://localhost:3000/api/login mit den Benutzerdaten.
  • Für den Druckerstatus: : Senden Sie eine GET-Anfrage an http://localhost:3000/api/printer-status.

Stellen Sie sicher, dass Ihre Frontend-Anwendung die credentials: 'include'-Option in ihren fetch-Anfragen verwendet, damit Session-Cookies korrekt gesendet werden.

// Beispiel für einen Frontend-Fetch-Aufruf
fetch('http://localhost:3000/api/printer-status', {
    method: 'GET',
    credentials: 'include' // Wichtig für Session-Cookies
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

Wichtige Hinweise

  • Produktionseinsatz: : Für den Produktionseinsatz dieses Backends sollten Sie:
    • Ein sicheres, langes Geheimnis für die Session-Konfiguration verwenden, das nicht im Code gespeichert, sondern z.B. über Umgebungsvariablen geladen wird.
    • HTTPS für die Kommunikation zwischen Frontend und Backend implementieren.
    • Einen persistenten Session-Store (z.B. Redis, PostgreSQL) in express-session konfigurieren, wenn Sie möchten, dass Sessions Server-Neustarts überleben oder wenn Sie mehrere Server-Instanzen betreiben. Der Standard MemoryStore ist nur für die Entwicklung geeignet.
  • Token-Gültigkeit: : Die Bambu Lab Access Tokens sind laut Dokumentation etwa 3 Monate gültig. Da der Refresh-Token-Endpunkt als "nutzlos" beschrieben wird, muss sich der Benutzer nach Ablauf des Tokens erneut anmelden. Die Session-Dauer (maxAge des Cookies) sollte dies widerspiegeln.
  • Drucker-Auswahl: : Das Backend ruft derzeit den Status des ersten in Ihrem Konto gefundenen Druckers ab. Wenn Sie mehrere Drucker haben, müssten Sie die Logik im Backend erweitern, um eine spezifische dev_id zu akzeptieren und den Status des entsprechenden Druckers zurückzugeben.

Netlify Deployment

Diese Anwendung kann auch auf Netlify als serverlose Anwendung bereitgestellt werden. Die Projektstruktur wurde erweitert, um sowohl lokale Entwicklung als auch Netlify-Deployment zu unterstützen.

Projektstruktur für Netlify

bambuapi/
├── client_static/          # Statische Frontend-Dateien (von Netlify bereitgestellt)
│   ├── index.html          # Haupt-HTML-Datei
│   ├── css/
│   │   └── styles.css      # Benutzerdefinierte Styles
│   └── js/
│       └── client.mjs      # Frontend JavaScript-Modul
├── server/                 # Original Express.js Server (für lokale Entwicklung)
│   ├── server.js           # Express Server
│   └── package.json        # Server-Abhängigkeiten
├── netlify/
│   └── functions/          # Netlify Serverless Functions
│       ├── server.js       # Serverless Function Wrapper
│       └── package.json    # Function-Abhängigkeiten
├── netlify.toml            # Netlify-Konfiguration
└── package.json            # Root package.json mit Deployment-Skripten

Netlify Deployment-Optionen

Option 1: Netlify CLI (Empfohlen)

  1. Netlify CLI global installieren:
npm install -g netlify-cli
  1. Bei Netlify anmelden:
netlify login
  1. Site initialisieren:
netlify init
  1. Für Vorschau deployen:
npm run deploy
  1. Für Produktion deployen:
npm run deploy-prod

Option 2: Git-Integration

  1. Code zu GitHub/GitLab/Bitbucket pushen
  2. Repository mit Netlify verbinden
  3. Build-Einstellungen konfigurieren:
    • Build command: echo "No build required"
    • Publish directory: client_static
    • Functions directory: netlify/functions

Umgebungsvariablen für Netlify

Setzen Sie diese in Ihrem Netlify Dashboard unter Site Settings > Environment Variables:

  • SESSION_SECRET: Ein sicherer zufälliger String für Session-Verschlüsselung

Funktionsweise auf Netlify

  • Frontend: Statische Dateien aus client_static werden direkt von Netlify bereitgestellt
  • Backend: Der Express.js Server wird als Netlify Function ausgeführt
  • API-Endpunkte: Alle /api/* Routen werden von der serverless Function verarbeitet
  • Sessions: Werden mit express-session und Memory Store verwaltet

Verfügbare NPM-Skripte

npm run install-all        # Installiert alle Abhängigkeiten
npm run dev                # Startet lokalen Entwicklungsserver
npm run deploy             # Deployt zu Netlify (Vorschau)
npm run deploy-prod        # Deployt zu Netlify (Produktion)

Unterschiede zwischen lokaler Entwicklung und Netlify

  • Lokal: Verwendet den Express Server direkt auf Port 3000
  • Netlify: Verwendet Netlify Functions (serverless) mit automatischem HTTPS
  • Sessions: Beide Umgebungen teilen sich dieselbe Codebase und API-Struktur
  • CORS: Automatisch für Netlify-Domains konfiguriert

About

3d-Printer state as website

Topics

Resources

License

Stars

Watchers

Forks

Contributors