VELOBOX API

Interne API-Schnittstellen der VELOBOX

Health

Liefert einen kompakten Systemstatus mit Station-ID, Hostname, Gerätetyp, Version, Port und primärer IP-Adresse.

Liefert erweiterte Geräte-, Netzwerk- und vmkstationd-Informationen.

Systemressourcen

Liefert aktuelle Informationen zur CPU-Auslastung, zum Arbeitsspeicher und zum Speicherplatz der VELOBOX.

Speichergrößen werden in Bytes zurückgegeben. Die Umrechnung in MB, GB oder andere Anzeigeformate erfolgt im Frontend.
{
  "ts": "2026-07-23T08:20:00.000Z",
  "cpu": {
    "cores": 4,
    "load1": 0.42,
    "load5": 0.31,
    "load15": 0.28,
    "usagePercent": 17.4
  },
  "memory": {
    "total": 8051236864,
    "used": 2153648128,
    "available": 5897588736,
    "usedPercent": 26.75
  },
  "storage": {
    "mount": "/",
    "total": 62547517440,
    "used": 17324597248,
    "available": 42618163200,
    "usedPercent": 27.7
  }
}
CPU: Anzahl Kerne, Load Average für 1, 5 und 15 Minuten sowie aktuelle CPU-Auslastung in Prozent.
RAM: Gesamtspeicher, verwendeter Speicher, verfügbarer Speicher und prozentuale Belegung.
Speicher: Gesamtgröße, verwendeter und verfügbarer Speicherplatz des Root-Dateisystems sowie prozentuale Belegung.

Einstellungen

Liest alle gespeicherten Einstellungen aus der settings.json.

Antwort: Vollständiges Settings-Objekt. Existiert die Datei noch nicht, wird ein leeres Objekt zurückgegeben.
{
  "success": true,
  "settings": {
    "system": {
      "language": "de"
    }
  }
}
POST /api/settings

Ersetzt die vollständige settings.json durch das übermittelte JSON-Objekt.

Achtung: Bereits vorhandene Einstellungen werden vollständig überschrieben.
{
  "system": {
    "language": "de",
    "theme": "dark"
  }
}
GET /api/settings/key/:system/:key

Liest einen einzelnen Wert aus einem Settings-Bereich.

Beispiel: /api/settings/key/system/language
{
  "success": true,
  "key": "system.language",
  "path": [
    "system",
    "language"
  ],
  "value": "de"
}
Frontend: apiSettingsGet('language', 'system')
PATCH /api/settings/key/:system/:key

Erstellt oder aktualisiert einen einzelnen Settings-Wert. Andere gespeicherte Keys bleiben unverändert.

Existiert die settings.json noch nicht, wird sie automatisch erstellt.
{
  "value": "de"
}
Frontend: apiSettingsSet('language', 'system', 'de')
Als Wert können Strings, Zahlen, Booleans, Arrays, Objekte oder null gespeichert werden.
DELETE /api/settings/key/:system/:key

Entfernt einen einzelnen Settings-Key. Andere Einstellungen bleiben unverändert.

Beispiel: /api/settings/key/system/language
{
  "success": true,
  "deleted": true,
  "key": "system.language",
  "path": [
    "system",
    "language"
  ],
  "previousValue": "de"
}
Frontend: apiSettingsDel('language', 'system')
Frontend-Funktionen

Vereinfachte Funktionen für den Zugriff aus der Benutzeroberfläche.

const language = await apiSettingsGet(
  'language',
  'system'
);

await apiSettingsSet(
  'language',
  'system',
  'de'
);

await apiSettingsDel(
  'language',
  'system'
);

Dateisystem

Listet Dateien und Verzeichnisse innerhalb von FS_ROOT auf.

Query: path – relativer Verzeichnispfad.
GET /api/fs/raw?path=Datei

Liefert eine Datei direkt über sendFile() aus.

Query: path – relativer Dateipfad.
GET /api/fs/read?path=Datei

Liest eine Textdatei und liefert deren Inhalt als JSON.

Standardlimit: 25 MB.
POST /api/fs/write

Schreibt eine Textdatei innerhalb von FS_ROOT.

{
  "filePath": "ClientData/123/test.json",
  "content": "{\"ok\":true}",
  "mkdir": true
}
POST /api/fs/upload

Lädt eine Datei per multipart/form-data hoch.

Felder: file und optional path. Standardlimit: 25 MB.
DELETE /api/fs/delete?path=Datei

Löscht eine Datei oder ein Verzeichnis rekursiv.

Das Löschen von FS_ROOT selbst wird blockiert.

Backup und Wiederherstellung

Liefert den aktuellen Backup- und Restore-Status.

Erstellt ein vollständiges Backup als tar.gz-Download.

Enthält das Dateiverzeichnis sowie vlbclients.sl3db und vlbsettings.sl3db.
POST /api/fs-backup/upload

Stellt ein Backup wieder her. Das Archiv wird direkt als binärer Request-Body übertragen.

Content-Type: application/gzip, application/x-gzip oder application/octet-stream
Maximale Uploadgröße: 500 MB
Die Wiederherstellung ersetzt Dateien und Datenbanken und startet anschließend vmkstationd neu.

VMK-System

Liefert den aktuellen Status von vmkstationd.

Ruft die Developer-Statusinformationen von vmkstationd ab.

Liefert Statistiken zur Client-Datenbank.

Listet verfügbare Dateien aus /var/local/log auf.

GET /api/vmk/logs/:name

Liefert den vollständigen Inhalt einer Logdatei als Text.

GET /api/vmk/logs/:name/live

Öffnet einen Server-Sent-Events-Stream und liefert zunächst die letzten 100 Logzeilen sowie anschließend neue Einträge.

Content-Type: text/event-stream
ACTION /api/vmk/restart-vmkstationd

Startet vmkstationd neu.

Dieser Endpunkt verändert den Systemzustand.

Telemetrie

Erstellt und liefert die aktuellen Telemetriedaten, ohne sie zu übertragen.

POST /api/telemetry/send

Erstellt die aktuellen Telemetriedaten und sendet sie an den konfigurierten Telemetrie-Server.

WLAN

Technische Backend-Testoberfläche für WLAN-Status, Scan, gespeicherte Netzwerke sowie Connect und Disconnect.

Diese Seite dient zur Diagnose und zum Testen der WLAN-API und ist nicht die eigentliche VELOBOX-Benutzeroberfläche.

Liefert eine kombinierte WLAN-Übersicht mit vorhandenen WLAN-Interfaces, aktuellem Verbindungsstatus und gespeicherten Netzwerken.

{
  "interfaces": [
    "wlan0"
  ],
  "status": {
    "available": true,
    "interface": "wlan0",
    "connected": true,
    "ssid": "Velometrik",
    "accessPoint": "E4:C3:2A:91:A6:9A",
    "ip": "10.1.11.35"
  },
  "savedNetworks": [
    {
      "ssid": "Velometrik",
      "keyMgmt": "WPA-PSK",
      "saved": true
    }
  ]
}
WLAN-Interfaces werden über das Linux-Netzwerksystem erkannt und sind nicht auf Namen wie wlan0 beschränkt. Auch Interfaces wie wlx... werden unterstützt.

Liefert den aktuellen WLAN-Verbindungsstatus.

{
  "available": true,
  "interface": "wlan0",
  "connected": true,
  "ssid": "Velometrik",
  "accessPoint": "E4:C3:2A:91:A6:9A",
  "ip": "10.1.11.35"
}
Ist kein WLAN-Interface vorhanden, wird dies als gültiger Zustand mit available: false zurückgegeben und nicht als Serverfehler.

Scannt über das aktuelle WLAN-Interface nach verfügbaren Access Points.

{
  "available": true,
  "scanAvailable": true,
  "interface": "wlan0",
  "networks": [
    {
      "cell": 1,
      "address": "E4:C3:2A:91:A6:9A",
      "essid": "Velometrik",
      "level": "-42"
    }
  ]
}
Ohne verfügbares WLAN-Interface wird ein leeres networks-Array mit available: false geliefert.

Liefert die gespeicherten WLAN-Netzwerke.

{
  "networks": [
    {
      "ssid": "Velometrik",
      "keyMgmt": "WPA-PSK",
      "saved": true
    }
  ]
}
Gespeicherte WLAN-Passwörter werden nicht an den Browser oder über die API zurückgegeben.
POST /api/network/wifi/connect

Verbindet die VELOBOX mit einem WLAN und speichert die Zugangsdaten in der WLAN-Konfiguration.

{
  "ssid": "Velometrik",
  "psk": "WLAN-Passwort",
  "hidden": false
}
ssid: Name des WLAN-Netzwerks.
psk: WLAN-Passwort.
hidden: Optional. Bei versteckten SSIDs auf true setzen.
POST /api/network/wifi/connect-saved

Verbindet die VELOBOX mit einem bereits gespeicherten WLAN. Das Passwort muss nicht erneut übermittelt werden.

{
  "ssid": "Velometrik"
}
Das Netzwerk muss bereits in der lokalen WLAN-Konfiguration vorhanden sein.
POST /api/network/wifi/disconnect

Trennt die aktuelle WLAN-Verbindung. Das gespeicherte Netzwerk und dessen Zugangsdaten bleiben erhalten.

{
  "success": true,
  "interface": "wlan0",
  "disconnectedFrom": "Velometrik",
  "configPreserved": true
}
Beim Trennen einer WLAN-Verbindung kann der Netzwerkzugriff auf die VELOBOX verloren gehen, wenn kein weiterer Zugriffsweg vorhanden ist.

Offline Update

Weboberfläche zum manuellen Einspielen lokaler Updatepakete.

Liefert den aktuellen Status eines laufenden oder abgeschlossenen Offline-Updates.

Enthält Status, Version, Gerätetyp, Start-/Endzeitpunkt, Exit-Code und Logausgaben.
POST /api/offline-update/upload

Lädt ein lokales Updatepaket hoch und startet die Installation automatisch.

Content-Type: multipart/form-data
Feldname: update
Maximale Dateigröße: 500 MiB
Dateiname:

<gerät>_update_<version>.tar.gz
      
Beispiele:

velobox_update_3.2.0.tar.gz
cube_update_2.4.0.tar.gz
smartcube_update_1.8.5.tar.gz
      
Das Archiv muss ein Shell-Skript mit identischem Versionsnamen enthalten. Beispiel:

velobox_update_3.2.0.sh