zwift

Ihre Zwift-Live-Trainingsdaten in iobroker

Aktueller Release
0.1.3
Entwickler
Flixhummel
Lizenz
MIT

Zwift-Adapter für ioBroker

Fragt die Zwift-API nach Live-Trainingsdaten ab und stellt diese als ioBroker-Zustände zur Verfügung. Verfolge deine Leistung, Herzfrequenz, Trittfrequenz, Geschwindigkeit und mehr in Echtzeit während deiner Fahrt auf Zwift.

Merkmale

  • Live-Fahrerdaten werden alle 5 Sekunden aktualisiert (konfigurierbar).
  • Leistungszonenberechnung in Echtzeit (Coggan 6-Zonen-Modell, FTP wird automatisch aus Ihrem Zwift-Profil ausgelesen)
  • Umfassende Zwift-Profildaten: Identität, Radsportstatistiken, Laufstatistiken, Trikots, Drops, Serien
  • Verbindungsstatusanzeige (info.connection )
  • Automatische Token-Aktualisierung mit erneuter Authentifizierung als Fallback
  • Verschlüsselte Speicherung von Anmeldeinformationen
  • Metadatenaktualisierungen werden beim Neustart des Adapters automatisch angewendet (Einheitenkorrekturen, neue Felder).

Konfiguration

EinstellungBeschreibungStandard
Zwift-E-MailIhre Zwift-Konto-E-Mail
Zwift-PasswortIhr Zwift-Kontopasswort (verschlüsselt gespeichert)
AbstimmungsintervallHäufigkeit des Datenabrufs in Sekunden (3–300)5

Staaten

Fahrerdaten (werden in jedem Umfragezyklus aktualisiert)

ZustandEinheitBeschreibung
isRidingtrue wenn aktiv in einer Zwift-Welt
powerWAktuelle Ausgangsleistung
powerZoneAktuelle Leistungszone (1-6, Coggan-Modell, siehe unten)
heartratebpmAktuelle Herzfrequenz
cadenceU/minAktuelle Kadenz
speedkm/hAktuelle Geschwindigkeit
distancekmZurückgelegte Strecke in der aktuellen Aktivität
altitudeMAktuelle Höhe
climbingMGesamter Höhengewinn in der aktuellen Aktivität
gradient%Aktuelles Gefälle/Neigung (positiv = bergauf, negativ = bergab)
calorieskJVerbrannte Kalorien (entspricht der Anzeige in Zwift im Spiel)
timeSVerstrichene Fahrzeit
lapsAbgeschlossene Runden
progressStreckenfortschritt (Rohwert von Zwift)
sportSportart (0 = Radfahren)
groupIdGruppen-/Ereignis-ID (0 = keine Gruppe)
x ,yWeltpositionskoordinaten
headingFahrtrichtung
leanSchräglage
watchingRiderIdID des beobachteten Fahrers
rideOnsRide On zählt
courseIdAktuelle Kurs-ID
roadIdAktuelle Straßenkennung

Stromzonen

DerpowerZone Der Leistungsstatus basiert auf dem Coggan-6-Zonen-Modell und wird automatisch anhand Ihrer aktuellen Leistung und Ihres FTP-Wertes berechnet. Der FTP-Wert wird aus Ihrem Zwift-Profil ausgelesen – eine manuelle Konfiguration ist nicht erforderlich.

ZoneName% der FTP
1Aktive Erholung< 55 %
2Ausdauer55-75%
3Tempo76-90%
4Laktatschwelle91-105%
5VO2 Max106-120%
6Anaerobe Kapazität> 120%

Wenn in Ihrem Zwift-Profil kein FTP-Server eingestellt ist,powerZone Der Status wird nicht aktualisiert.

Profildaten (werden einmalig beim Verbindungsaufbau abgerufen)

ZustandEinheitBeschreibung
profile.idZwift-Spieler-ID
profile.firstNameVorname
profile.lastNameNachname
profile.weightkgGewicht
profile.heightcmHöhe
profile.ageAlter
profile.maleGeschlechtsindikator
profile.countryCodeLandesvorwahl
profile.ftpWFunktionelle Schwellenleistung
profile.totalDistancekmAllzeitdistanz
profile.totalDistanceClimbedMGesamter Höhengewinn
profile.totalTimeInMinutesminGesamtfahrzeit
profile.totalWattHoursWhGesamtwattstunden
profile.totalExperiencePointsGesamt-EP
profile.targetExperiencePointsXP für die nächste Stufe erforderlich
profile.achievementLevelAktuelles Niveau
profile.totalGoldGesamte Beute (Spielwährung)
profile.totalInKomJerseyTimes worn KOM-Trikot
profile.totalInSprintersJerseyTimes getragenes Sprinters-Trikot
profile.totalInOrangeJerseyDas orangefarbene Trikot wurde so oft getragen
profile.runAchievementLevelAktueller Ausführungsstand
profile.totalRunDistancekmGesamtlaufstrecke
profile.totalRunTimeInMinutesminGesamtlaufzeit
profile.totalRunExperiencePointsGesamtlauf-XP
profile.targetRunExperiencePointsFür die nächste Stufe wird Run XP benötigt.
profile.totalRunCalorieskJKalorienverbrauch beim Laufen (gesamt)
profile.streaksCurrentLengthLänge der aktuellen Aktivitätsserie
profile.streaksMaxLengthLängste Aktivitätsserie
profile.streaksLastRideTimestampZeitstempel der letzten Fahrt in der Serie
profile.currentActivityIdAktuelle Aktivitäts-ID
profile.powerSourceArt der Stromquelle

So funktioniert es

Der Adapter authentifiziert sich bei der Zwift-API über denselben Endpunkt wie die Zwift Companion-App (client_id=Zwift_Mobile_Link Beim Start ruft es Ihr Zwift-Profil (einschließlich FTP) ab und fragt dann den Fahrerstatus über den Spiel-Relay-Server ab, dekodiert die Protobuf-Antwort, wandelt Rohwerte in für Menschen lesbare Einheiten um und aktualisiert den ioBroker-Zustandsbaum.

Wenn in Ihrem Profil ein FTP-Wert festgelegt ist, berechnet der Adapter einen Live-Wert.powerZone (1–6) bei jedem Abfragezyklus unter Verwendung des Coggan-Leistungszonenmodells. Eine manuelle FTP-Konfiguration ist nicht erforderlich.

Wenn Sie nicht aktiv in Zwift fahren, werden die AdaptersetsisRiding Zufalse und setzt die Abfrage fehlerfrei fort.

Technischer Hinweis: Statusobjekte werden erstellt mitextendObjectAsync stattsetObjectNotExistsAsync Das bedeutet, dass Metadatenänderungen (korrigierte Einheiten, umbenannte Zustände, neue Felder) bei jedem Neustart des Adapters automatisch angewendet werden. Objekte müssen nach einem Update nicht gelöscht und neu erstellt werden.

Smart-Home-Ideen

Da Ihre Zwift-Daten laut ioBroker verfügbar sind, können Sie Automatisierungen erstellen, die Ihr Indoor-Training im ganzen Haus erlebbar machen.

Immersive Beleuchtung

  • Passen Sie Ihre LED-Streifen oder Hue-Lampen an die Herzfrequenzzonen an – blau für Erholung, grün für Ausdauer, gelb für Tempo, rot für Schwellentraining, blinkend rot für VO2max.
  • Verwenden Sie diepowerZone Zustand (1-6) zur direkten Steuerung von Farbschemata – keine Skripterstellung zur Zonenberechnung erforderlich
  • Die Lichtfarbe ändert sich mit der Leistungsaufnahme – je stärker die Leistung, desto intensiver das Leuchten.
  • Höhe durch Lichthelligkeit simulieren – beim Aufstieg dimmen, beim Abstieg aufhellen.
  • Lass die Zimmerbeleuchtung blinken, wenn du ein Ride On erhältst.

Adaptives Audio

  • Automatischer Wechsel der Wiedergabelisten basierend auf Ihrer Herzfrequenzzone oder Leistung – entspannte Beats zum Aufwärmen, hohe BPM für Intervalle.
  • Spiele einen Soundeffekt ab, wenn du eine Runde abgeschlossen oder einen bestimmten Kalorienbedarf erreicht hast.
  • Geben Sie Ihre aktuellen Statistiken in regelmäßigen Abständen per Text-zu-Sprache-Ansage bekannt.

Dashboards und Anzeigen

  • Live-Leistung, Herzfrequenz, Geschwindigkeit und Trittfrequenz werden auf einem an der Wand montierten Tablet oder einem Smart-Display angezeigt.
  • Zeigen Sie Distanz, Höhenmeter und Kalorienverbrauch auf einem Infopanel in Ihrer Schmerzhöhle an.
  • Erstellen Sie ein VIS-Dashboard mit Ihren Gesamtstatistiken aus den Profildaten – Gesamtkilometer, Gesamthöhenmeter, XP-Level

Klimaanlage

  • Schalten Sie einen intelligenten Ventilator ein, sobald Ihre Herzfrequenz einen bestimmten Schwellenwert überschreitet, und schalten Sie ihn während der Ruhephasen aus.
  • Erhöhen Sie die Lüfterdrehzahl proportional zur Leistung.
  • Die Klimaanlage wird aktiviert, sobald ein bestimmter Kalorienverbrauch überschritten wird.

Heimwerkerbedarf

  • Nutzen Sie die Höhen-/Steigungsdaten, um einen selbstgebauten Trainer-Wipp- oder Neigungsmechanismus anzusteuern – bauen Sie Ihren eigenen Klettersimulator ähnlich dem Wahoo KICKR CLIMB.
  • Steuere einen Servo- oder Linearantrieb über ioBroker, um den Rahmen deines Fahrrads in Echtzeit an die sich ändernde Steigung im Spiel anzupassen.

Motivation und Gamifizierung

  • Lass eine Konfettimaschine oder Partylichter zünden, wenn du eine Fahrt beendest oder eine persönliche Bestleistung erreichst.
  • Sende dir selbst eine Telegram- oder Pushover-Benachrichtigung mit deiner Fahrtzusammenfassung, wennisRiding wechselt zufalse
  • Verfolgen Sie Ihre wöchentliche Distanz auf einer Sieben-Segment-Anzeige oder einem E-Ink-Bildschirm im Flur.
  • Ein Fortschrittsbalken (LED-Streifen) zeigt den prozentualen Fortschritt Ihrer Route an.

Familie und Haushalt

  • Bringen Sie eine „Bitte nicht stören“-Anzeigeleuchte außerhalb Ihres Zimmers an, wann immerisRiding Isttrue
  • Schalte deine Türklingel während einer Zwift-Session automatisch stumm.
  • Sende eine Nachricht an den Smart Speaker deiner Familie: „Papa fährt Zwift, voraussichtliche Ankunftszeit: X Minuten“

Changelog

0.1.3 (2026-04-19)

  • Add gradient state (current slope in %, computed from altitude/distance deltas with a 5 m threshold, clamped to ±50 %)

0.1.2 (2026-03-03)

  • Set up trusted publishing via OIDC for GitHub Actions deploy

0.1.1 (2026-03-03)

  • Fix ESLint curly and prettier errors for CI

0.1.0 (2026-03-03)

  • Poll Zwift API for live ride data (power, heartrate, cadence, speed, distance, altitude, climbing)
  • Zwift profile data (FTP, weight, height, level, total stats)
  • Power zone calculation based on FTP (Coggan 6-zone model)
  • Configurable polling interval

0.0.1 (2026-03-02)

  • (Flixhummel) initial release

License

MIT License

Copyright (c) 2026 Flixhummel hummelimages@googlemail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.