Цвифт

ваши данные обучения zwift в реальном времени в iobroker

Текущий релиз
0.1.3
Разработчик
Flixhummel
Лицензия
MIT

Адаптер Zwift для ioBroker

Опрашивает API Zwift для получения данных о тренировках в режиме реального времени и делает их доступными, как указано в описании ioBroker. Отслеживайте свою мощность, частоту сердечных сокращений, частоту вращения педалей, скорость и многое другое в режиме реального времени во время езды на Zwift.

Функции

  • Данные о пассажирах обновляются в режиме реального времени каждые 5 секунд (настраивается).
  • Расчет зон мощности в реальном времени (6-зонная модель Coggan, FTP автоматически считывается из вашего профиля Zwift).
  • Подробные данные профиля Zwift: личность, статистика езды на велосипеде, статистика бега, майки, отрывы, серии побед.
  • Индикатор состояния соединения (info.connection )
  • Автоматическое обновление токена с резервным вариантом повторной аутентификации.
  • Зашифрованное хранилище учетных данных
  • Обновления метаданных применяются автоматически при перезапуске адаптера (исправления единиц измерения, добавление новых полей).

Конфигурация

ПараметрОписаниеПо умолчанию
Электронная почта ZwiftАдрес электронной почты вашей учетной записи Zwift
Пароль ZwiftПароль от вашей учетной записи Zwift (хранится в зашифрованном виде)
Интервал опросаКак часто следует получать данные, в секундах (3–300)5

Штаты

Данные о пассажирах (обновляются при каждом опросе)

СостояниеЕдиницаОписание
isRidingtrue при активном участии в мире Zwift
powerВТекущая выходная мощность
powerZoneТекущая зона мощности (1-6, модель Коггана, см. ниже)
heartrateударов в минутуТекущая частота сердечных сокращений
cadenceоб/минТекущий темп
speedкм/чТекущая скорость
distanceкмРасстояние, пройденное в ходе текущей активности
altitudeмТекущая высота
climbingмОбщий набор высоты в ходе текущей активности
gradient%Текущий уклон/градиент (положительное значение = подъем, отрицательное значение = спуск)
caloriesкДжКоличество сожженных калорий (соответствует внутриигровому отображению Zwift)
timeсПрошедшее время в пути
lapsКруги завершены
progressПройденный маршрут (исходные данные из Zwift)
sportВид спорта (0 = велоспорт)
groupIdИдентификатор группы/события (0 = группа отсутствует)
x ,yМировые координаты положения
headingНаправление движения
leanУгол наклона
watchingRiderIdИдентификатор наблюдаемого мотоциклиста
rideOnsКоличество поездок
courseIdТекущий идентификатор курса
roadIdТекущий идентификатор дороги

Зоны мощности

ОнpowerZone В режиме State используется 6-зонная модель Coggan, которая рассчитывается автоматически на основе вашей текущей мощности и FTP. Значение FTP считывается из вашего профиля Zwift — ручная настройка не требуется.

ЗонаИмя% от FTP
1Активное восстановление< 55%
2Выносливость55-75%
3Темп76-90%
4Лактатный порог91-105%
5VO2 Max106-120%
6Анаэробная емкость> 120%

Если в вашем профиле Zwift не указан FTP, тоpowerZone Состояние обновляться не будет.

Данные профиля (получаются один раз при подключении)

СостояниеЕдиницаОписание
profile.idИдентификатор игрока Zwift
profile.firstNameИмя
profile.lastNameФамилия
profile.weightкгМасса
profile.heightсмВысота
profile.ageВозраст
profile.maleГендерный индикатор
profile.countryCodeКод страны
profile.ftpВФункциональная пороговая мощность
profile.totalDistanceкмАбсолютная дистанция
profile.totalDistanceClimbedмАбсолютный прирост высоты за все время
profile.totalTimeInMinutesминОбщее время поездки
profile.totalWattHoursЧтоОбщее количество ватт-часов за все время
profile.totalExperiencePointsОбщее количество XP
profile.targetExperiencePointsДля перехода на следующий уровень требуется XP.
profile.achievementLevelТекущий уровень
profile.totalGoldОбщее количество выпавших предметов (внутриигровая валюта)
profile.totalInKomJerseyФутболка KOM, которую носили много раз
profile.totalInSprintersJerseyФутболка команды «Спринтеры», которую носили много раз.
profile.totalInOrangeJerseyФутболка оранжевого цвета, которую носили много раз.
profile.runAchievementLevelТекущий уровень выполнения
profile.totalRunDistanceкмРекордная дистанция за всю историю
profile.totalRunTimeInMinutesминОбщее время выполнения
profile.totalRunExperiencePointsОбщее количество очков опыта за прохождение
profile.targetRunExperiencePointsДля перехода на следующий уровень требуется опыт за прохождение заданий.
profile.totalRunCaloriesкДжКалорийность за все время бега
profile.streaksCurrentLengthТекущая длина серии активности
profile.streaksMaxLengthСамая длинная серия активности
profile.streaksLastRideTimestampОтметка времени последней поездки в серии
profile.currentActivityIdИдентификатор текущей активности
profile.powerSourceтип источника питания

Как это работает

Адаптер выполняет аутентификацию в API Zwift, используя ту же конечную точку, что и приложение Zwift Companion.client_id=Zwift_Mobile_Link При запуске он получает ваш профиль Zwift (включая FTP), затем опрашивает статус райдера через игровой релейный сервер, декодирует ответ protobuf, преобразует необработанные значения в удобочитаемые единицы измерения и обновляет дерево состояний ioBroker.

Если в вашем профиле указано значение FTP, адаптер вычисляет значение в реальном времени.powerZone (1-6) при каждом цикле опроса с использованием модели энергетических зон Коггана. Ручная настройка FTP не требуется.

Когда вы не катаетесь активно в Zwift, адаптер комплектуется.isRiding кfalse и продолжает опрос без ошибок.

Техническое примечание: Объекты состояния создаются с помощьюextendObjectAsync скорее, чемsetObjectNotExistsAsync Это означает, что изменения метаданных (исправленные единицы измерения, переименованные состояния, новые поля) применяются автоматически при каждом перезапуске адаптера. Вам не нужно удалять и создавать объекты заново после обновления.

Идеи для «умного дома»

Как заявляет ioBroker, благодаря доступу к данным Zwift вы можете создавать автоматизации, которые позволят вам тренироваться в помещении по всему дому.

Иммерсивное освещение

  • Меняйте цвет светодиодных лент или ламп Hue в зависимости от зон сердечного ритма — синий для восстановления, зеленый для выносливости, желтый для темпа, красный для пороговой нагрузки, мигающий красный для VO2max.
  • ИспользуйтеpowerZone Используйте значения (1-6) для непосредственного управления цветовыми схемами — для самостоятельного расчета зон не требуется никаких скриптов.
  • Изменяйте цвет подсветки в зависимости от мощности — чем сильнее вы нажимаете, тем интенсивнее свечение.
  • Имитируйте высоту с помощью яркости освещения — приглушайте свет при наборе высоты и увеличивайте его при снижении.
  • Включите свет в комнате, когда получите Ride On.

Адаптивное аудио

  • Автоматическое переключение плейлистов в зависимости от вашей зоны частоты сердечных сокращений или мощности — расслабляющая музыка для разминки, высокий темп для интервальных тренировок.
  • При пересечении круга или достижении определенного количества сожженных калорий будет воспроизводиться звуковой эффект.
  • Регулярно озвучивайте свои текущие статистические данные с помощью функции преобразования текста в речь.

Приборные панели и дисплеи

  • Отображайте в режиме реального времени мощность, частоту сердечных сокращений, скорость и частоту вращения педалей на настенном планшете или смарт-дисплее.
  • Отображайте пройденное расстояние, набор высоты и количество сожженных калорий на информационной панели в вашей «зоне боли».
  • Создайте панель мониторинга VIS с вашей общей статистикой на основе данных профиля — общее количество километров, общий набор высоты, уровень XP.

Климат-контроль

  • Включайте «умный» вентилятор, когда частота сердечных сокращений превышает пороговое значение, и выключайте его во время перерывов между ударами сердца.
  • Увеличивайте скорость вращения вентилятора пропорционально потребляемой мощности.
  • Включайте кондиционер, когда количество сожженных калорий превысит определенное значение.

Самодельное оборудование

  • Используйте данные о высоте/градиенте для управления самодельным механизмом качания или наклона тренажера — создайте свой собственный симулятор подъема в гору, похожий на Wahoo KICKR CLIMB.
  • Управляйте сервоприводом или линейным актуатором через ioBroker, чтобы наклонять раму велосипеда в реальном времени в зависимости от изменения градиента в игре.

Мотивация и геймификация

  • Запустите машину для конфетти или праздничную подсветку, завершив поездку или установив личный рекорд.
  • Отправьте себе уведомление в Telegram или Pushover с кратким описанием поездки, когдаisRiding переключается наfalse
  • Отслеживайте пройденное расстояние за неделю на семисегментном дисплее или экране на электронных чернилах в коридоре.
  • Загорится индикатор выполнения (светодиодная лента), показывающий процент завершения маршрута.

Семья и домохозяйство

  • Включайте индикатор «Не беспокоить» снаружи своей комнаты всякий раз, когдаisRiding являетсяtrue
  • Автоматическое отключение звука дверного звонка во время тренировки в Zwift.
  • Отправьте сообщение на умную колонку вашей семьи: «Папа катается в Zwift, ориентировочное время финиша: X минут».

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.