ioBroker.bluetti
ioBroker-Adapter mit Lesezugriff für BLUETTI- Kraftwerke – Telemetrie von Batterie, Solarstrom, Netz und Last aus der BLUETTI-Cloud.
Integrieren Sie die Live-Daten Ihrer BLUETTI-Powerstation in ioBroker: Ladezustand, PV-/Netzeingang und AC/DC-Ausgangsleistung sowie Verbindungs- und Statusanzeigen für USV-ähnliche Automatisierungen. Die Authentifizierung erfolgt über denselben BLUETTI-Cloud-Login wie bei der offiziellen Home Assistant-Integration – keine App-Passwörter, kein Scraping.
Status: Funktioniert einwandfrei und wurde umfassend mit einem Live-BLUETTI-Konto (Elite 30 V2) auf js-controller 7.0.7 verifiziert. Noch nicht in den ioBroker-Repositories veröffentlicht. Die Kerntelemetrie ist stabil; die detailliertere modellspezifische Telemetrie wird derzeit noch mit realen Daten validiert.
✨ Funktionen
- 🔋 Batterie- und Leistungstelemetrie – Ladezustand, PV-Eingang, Netzeingang, AC/DC-Ausgangsleistung
- 🔐 Sichere Cloud-Anmeldung – BLUETTI OAuth mit integrierten Anmeldeinformationen; das Token wird verschlüsselt gespeichert und automatisch aktualisiert
- 🔎 Geräteerkennung – Wählen Sie Ihr Gerät nach dem Anmelden aus einer Liste aus.
- 🩺 Gesundheits- und Verbindungsstatus – Erreichbarkeit, aufeinanderfolgende Ausfälle und ein konservatives Ausfallverdachtssignal für USV-Automatisierungen
- 👀 Nur lesend & sicher – der Adapter schreibt niemals auf Ihr Gerät (keine Modus-/AC/DC-/Firmware-Änderungen).
🔌 Unterstützte Geräte
| Modell | Produktcodes | Status |
|---|---|---|
| BLUETTI Elite 30 V2 | EL30V2 ,PR30V2 | ✅ Verifiziert |
Andere BLUETTI-Modelle, die dieselbe Cloud-API bereitstellen, funktionieren wahrscheinlich, sind aber noch nicht validiert. Bereinigtere, reale Nutzdaten sind willkommen, um die Unterstützung zu erweitern.
📦 Anforderungen
- ioBroker mit js-controller ≥ 6.0.11 und admin ≥ 7.6.20
- Ein BLUETTI-Konto, dessen Gerät in der BLUETTI-App verknüpft ist.
- Das Gerät ist mit der BLUETTI-Cloud verbunden (online in der App).
🚀 Installation & Einrichtung
Der Adapter ist noch nicht im ioBroker-Repository verfügbar. Nach der Genehmigung können Sie ihn direkt über die ioBroker-Admin-Oberfläche installieren ( Adapter → nach „bluetti“ suchen).
- Installieren Sie den Adapter und erstellen Sie eine
bluetti.0Beispiel. - Öffnen Sie die Instanzkonfiguration in ioBroker Admin.
- Klicken Sie auf „Mit BLUETTI authentifizieren“ und schließen Sie die Anmeldung im sich öffnenden Browserfenster ab. Der Adapter verwendet seine integrierten BLUETTI-Client-Anmeldeinformationen, daher werden in der Administratoroberfläche keine Felder für Client-ID/Client-Geheimnis angezeigt.
- Wählen Sie Ihr Gerät im Geräteauswahlmenü aus.
- Speichern. Die Umfrage startet automatisch;
info.connectionWendungentruesobald die erste Abstimmung erfolgreich war.
Sie authentifizieren sich nur einmal – das Token wird verschlüsselt gespeichert.auth.tokenJson Status und Aktualisierung im Hintergrund.
Sicherheitshinweis: Das OAuth-Token wird in einem verschlüsselten ioBroker-Status gespeichert (
auth.tokenJson) mitread: false, write: falseDie Verschlüsselung schützt vor versehentlichem Zugriff und dem Zugriff auf Backups/Dateisysteme. Jeder ioBroker-Administrator kann den Status weiterhin per Skript oder über die REST-API lesen und entschlüsseln, da der Verschlüsselungsschlüssel instanzweit gilt. Dies ist ein akzeptabler Kompromiss: ioBroker-Administratoren haben bereits vollen Systemzugriff, daher schwächt der verschlüsselte Status die allgemeine Sicherheitslage nicht.
Wenn Sie die integrierten Client-Anmeldeinformationen für die Verwendung im Experten-/Debug-Modus überschreiben müssen, bearbeiten Sie das native Objekt der Instanz direkt in ioBroker. Der Adapter greift weiterhin auf seine Standardeinstellungen zurück, wenn diese nativen Werte leer sind.
📊 Objekte & Zustände
Alle Zustände sind schreibgeschützt .
info
| Zustand | Typ | Beschreibung |
|---|---|---|
info.connection | boolean | Trifft zu, wenn die Authentifizierung erfolgreich war und das ausgewählte Gerät verwendbare Daten liefert. |
device
| Zustand | Typ | Beschreibung |
|---|---|---|
device.serial | string | Geräteseriennummer |
device.model | string | Gerätemodell |
device.name | string | Gerätename |
device.online | boolean | Ob das Gerät in der BLUETTI-Cloud online ist |
device.workMode | string | Aktueller Betriebsmodus, wie vom Gerät gemeldet (Roh-Enumeration, z. B.workmode_3 ) |
battery
| Zustand | Typ | Beschreibung |
|---|---|---|
battery.soc | number % | Batterieladezustand |
battery.dischargeRemaining | number min | Geschätzte Restlaufzeit bei aktueller Beladung |
battery.chargeRemaining | number min | Geschätzte Ladezeit in Minuten; 0 Minuten, wenn nicht geladen wird |
power
| Zustand | Typ | Beschreibung |
|---|---|---|
power.pvInput | number W | Photovoltaische (solare) Eingangsleistung |
power.gridInput | number W | Netzeingangsleistung |
power.acOutput | number W | Wechselstromausgangsleistung (Last) |
power.dcOutput | number W | Gleichstromausgangsleistung (Last) |
power.acOutputActive | boolean | Ob der Wechselstromausgang aktuell eingeschaltet ist |
power.dcOutputActive | boolean | Ob der Gleichstromausgang aktuell eingeschaltet ist |
power.acEco | boolean | Ob der AC ECO-Energiesparmodus aktiviert ist |
power.dcEco | boolean | Ob der DC ECO-Energiesparmodus aktiviert ist |
health
| Zustand | Typ | Beschreibung |
|---|---|---|
health.outageSuspected | boolean | Auslöser für konservativen Stromausfallverdacht |
health.consecutiveFailures | number | Aufeinanderfolgende Fehlschläge bei Umfragen |
health.authFailed | boolean | Ob der letzte Fehler ein Authentifizierungsproblem war |
status
| Zustand | Typ | Beschreibung |
|---|---|---|
status.lastUpdate | string | Zeitstempel der letzten erfolgreichen Umfrage |
status.lastError | string | Letzte bereinigte Fehlermeldung |
⚙️ Konfiguration
| Option | Standard | Beschreibung |
|---|---|---|
| Umfrageintervall | 300 s | Wie oft die BLUETTI-Cloud nach aktuellen Telemetriedaten abgefragt wird |
| OAuth-Client-ID / -Geheimnis | eingebaut | Im Adminbereich nicht sichtbar; Expertenüberschreibungen bleiben über die direkte Bearbeitung nativer Objekte verfügbar. |
⚠️ Cloud-Abhängigkeit & USV-Hinweis
Dieser Adapter liest Daten aus der BLUETTI-Cloud , daher ist er davon abhängig, dass Ihre Internetverbindung besteht und die Server von BLUETTI erreichbar sind.
Ein reiner Cloud-Adapter kann einen Stromausfall nicht allein nachweisen . Er kann lediglich Indizien liefern – veraltete Telemetriedaten, Erreichbarkeit von Cloud und Gerät sowie wiederholte Abfragefehler. Für zuverlässige Automatisierungen bei Stromausfällen sollten diese Zustände mit mindestens einem lokalen Signal kombiniert werden, beispielsweise einem Router-/Ping-Test, einem Smart Meter, einem Shelly-/Energiezähler oder einem dedizierten USV-Signal.
🛠️ Entwicklung
Der Adapter ist ein TypeScript-basierter, klassenbasierter ioBroker-Adapter mit einer JSON-Admin-Konfiguration, der mit folgendem Code erstellt wurde:@iobroker/create-adapter Die
| Skript | Zweck |
|---|---|
npm run build | TypeScript-Quellen kompilieren |
npm run check | Typüberprüfung ohne Ausgabe |
npm run lint | ESLint ausführen |
npm test | Führen Sie Unit- und Pakettests durch |
npm run test:integration | Führen Sie den ioBroker-Startintegrationstest aus |
npm run test:repo | Führen Sie den ioBroker-Repository-Checker lokal aus. |
Architektur- und Forschungsnotizen:
- BLUETTI Home Assistant API-Notizen – Quellcodebasierte Upstream-OAuth-, Token-, Geräte- und Telemetrie-Ergebnisse.
- Ablauf von Authentifizierung, Token und Geräteauswahl – die OAuth/Token/Gerätearchitektur, wobei der aktuelle Implementierungsstatus oben angegeben ist.
Bis der Adapter veröffentlicht und getaggt ist,
npm run test:repoBerichtet über erwartete Ergebnisse vor der Veröffentlichung (Paket nicht auf npm, Release nicht getaggt, Adapter noch nicht im ioBroker-Repository).
Changelog
WORK IN PROGRESS
- (ioBroker-Bot) Adapter requires admin >= 7.8.23 now.
1.0.0
- First stable release: full repochecker compliance, OIDC trusted publishing with provenance signing.
- All pre-release repochecker findings resolved (#103–#107, #123, #124).
- Object structure dump validated and attached to ioBroker repository submission (#108).
- Adapter submitted to ioBroker latest repository (#81).
0.0.2
- Trusted publishing setup: OIDC-based npm publish with provenance signing, registry-url and npm 11 in CI.
- Populate
device.modelanddevice.namefromgetUserProductscache; resolveworkModelabels viasupportModeValues. - Device selector always visible; empty list signals unauthenticated state.
- Degrade gracefully when persisted OAuth token is corrupt instead of crashing the adapter.
- Refresh device list after OAuth completes without reopening the config dialog.
- Redact device serial in info-level polling log line.
- Repo cleanup: remove non-adapter files, redundant
publishConfig, and GitHub/npm install instructions from README. - Remove
preparelifecycle script and setcommon.nogitto suppress repochecker warnings. - Add local repochecker audit results and prepare
ioBroker.repositoriessubmission entry.
0.0.1
- Initial release: BLUETTI cloud OAuth login, device discovery/selection, and read-only telemetry polling for the Elite 30 V2.
- Added verified Elite 30 V2 telemetry from a real
deviceStatespayload: battery discharge/charge time remaining, AC/DC output and ECO status, and working mode.
Older entries are kept in CHANGELOG_OLD.md.
License
MIT License
Copyright (c) 2026 Percy2Live