Zwift Setup

31.1.2020 detaillierte Beschreibung des Raspberry Pi Ant+

Grundlegend wird auf der Website von Zwift alles beschieben was man braucht, um selber „zwiften“ zu können.

Mein aktuelles Zwift Setup:

Trainingsrolle:

Wahoo Kickr Snap Hersteller Infos

Velo auf der Rolle:

älteres Wheeler Rennvelo, den Rennlenker habe ich durch einen Bikelenker ersetzt

PC:

Mainboard: ASUS PRIME X470-PRO

CPU: AMD Ryzen 7 2700X/3700MHz, AM4 8-Core, 20MB Cache

Grafikkarte: Phoenix Geforce GTX 1080ti 😉

RAM: Kingston DDR4 16GB 2666MHz

SSD: Samsung 970 EVO Plus, 250GB, M.2 2280

Netzteil: Chieftec, BDF-750C, 750W

Case: Cooler Master MasterBoX MB520 black

Lautsprecher: Logitech Z-333

Maus und Tastatur: Logitech wireless Desktop MK270

Monitor:

Samung UJ590 32″ 4K

Fan:

Xiaomi Standing Fan

Gestell für den PC, Monitor und die Lautsprecher:

Das Gestell ist ein Eigenbau aus MDF Platten

Beleuchtung:

Philips Hue Entertainment: 3x Philips Hue Play hinter dem Monitor und 2x Philips Hue White & Color Ambiance an der Decke.

LED Stripe an der Decke.

Weitere Komponenten:

Raspberry PI

Ubunut Server mit ioBrocker Instanz

Beschreibung des Systems:

Das ganze System wird per App, das auf dem Smartphone läuft, gestartet. (GUI in NodeRed programmiert, Logik in ioBroker)

Mit der App kann der Fan manuell, stufenlos gesteuert werden. Im automatischen Modus wird der Fan in Abhängigkeit der getretenen Leistung gesteuert. Die Leistung und Herzfrequenz wir per Ant+ von dem Raspberry empfangen und per MQTT an den ioBroker gesendet. Der ioBroker steuert dann entsprechend den Fan mit der gewünschten Geschwindigkeit an.

Der LED Stipe an der Decke zeigt in verschiedenen Farben die aktuelle Herzfrequenz Zone an. Dieser wird ebenfalls vom ioBroker angesteuert.

Die Philips Hue Lampen an der Decke und hinter dem Monitor passen sich der Farbe dem aktuellen Bild auf dem Monitor an, dies ergibt ein sehr coole Atmosphäre während dem „zwiften“.

Mit diesem Setup kann man bei einer Auflösung von 4K@60FPS zwiften. (Der Monitor begrenzt die Bildwiederholrate auf 60FPS ansonsten wäre mit der Hardware sicher noch mehr möglich)

Facebooktwittermail

14 Kommentare

  1. Hallo Reto,

    habe versucht deinen Ansatz zu „kopieren“. Ziel Plattform ist ein Intel NUC mit Proxmox und einer VM mit Linux/Debian. Auf einer weiteren VM läuft ioBroker. NodeJS, NPM und die Libs sind installiert. Jedoch mein USB/ANT+ Stick wird wohl nicht erkannt mit lsusb. Habe den Stick in mein Zwift Rechner gesteckt. Dort wird er sofort in der Systemsteuerung/System erkannt/angezeigt.
    Es werden lediglich zwei Devices angezeigt
    002: ID … Adomax Technology Co., Ltd
    001: ID … Linus Foundation 1.1 root hub
    Habt ihr eine Idee warum der Stick im Windows PC erkannt wird, unter Linux nicht?

    1. Hallo Em,

      Zu deiner Umgebung, nur dass ich es richtig verstehe:

      Du hast Proxmox auf einem Intel NUC am laufen.
      Auf dem Proxmox hast du zwei VMs am laufen, auf der einen VM möchtest du den ANT+ USB-Stick nutzen.
      Den ANT+ USB-Stick hast du physisch am Intel NUC angeschlossen.

      Falls deine Umgebung so aufgebaut ist:

      Hast du den ANT+ USB-Stick an die VM in Proxmos weiter gegeben?
      siehe hier: https://pve.proxmox.com/wiki/USB_Devices_in_Virtual_Machines

      Aus Erfahrung weiss ich aber, dass USB-Sticks je nach Art und Funktion, die in eine VM gereicht werden sollen, da nicht unbedingt auch funktionieren wie an „physischen“ „echten“ Maschinen.

      Gruess Reto

    2. Hallo Reto,

      Ja, meine Konfiguration sieht so aus VM1: ioBroker, läuft schon ne ganze Weile, nunauf einer weiteren „ZwiftApp“. HW/USB Stick ist nun weiter gegeben und erschein bei lsusb Nun geht es weiter..

      Mich würde dennoch der Zugriff direkt auf Zwift mit der api interessieren. Frage ist nur ob und wo man einen Dev Account bekommt.

      Danke und Gruß Em

  2. Hallo Reto
    Hattest du dir auch überlegt, direkt über Tools oder Skripts von thisisant.com über den PC ohne Raspy auf die Ant+ Daten zuzugreifen? Ich überlege mir gerade diesen Ansatz, da ich für den Raspy einen zusätzlichen USB Dongle anschaffen müsste und ohne Raspy auch ein Gerät weniger integriert wäre, was aus meiner Sicht, die Fehlerquellen weiter reduzieren würde. Wie stabil läuft deine Steuerung? Worauf betreibst du iobroker, auch auf einem Raspy?
    PS: Einen Raspy hätte ich zur Verfügung.
    LG Stefan

    1. Hallo Stefan,

      Ich hatte vor der Raspberry-Lösung auch mit Windows rumgespielt, allerdings nicht mit den Tools, Skripts von thisisant.com.
      Sondern mit der Node.js Umgebung auf Win10. Das lief grundsätzlich aber da ich Zwift ebenfalls auf dem gleichen Win10 PC laufen lasse, gab es Probleme mit den Ant+ USB-Sticks.
      Mit einem USB-Stick alleine konnte ich entweder die Ant+ Daten in Zwift reichen oder an die Node.js Anwendung, nicht aber gleichzeitig an beide Anwendungen.
      Mit zwei Ant+ USB-Sticks hatte ich unter Win10 auch kein Erfolg, entweder lief Zwift oder die Node.js Anwendung, daher habe ich für mich jetzt die Raspberry-Lösung am laufen.

      Der ioBroker läuft bei mir in einer VM (Ubuntu Server 18.04.4 LTS), die VM läuft wiederum auf einem ESXi-Host.
      Der ioBroker übernimmt schon seit ein paar Jahren, sehr zuverlässig, viele andere Homeautomatisierungsaufgaben bei uns, daher kam bei mir nie was anders in Frage.

      Die ganze Steuerung ist natürlich für jemanden der viel Freude an solchen Sachen hat gedacht und will mit viel Liebe gehegt und gepflegt werden;-)
      Aber grundsätzlich läuft die Steuerung recht zufriedenstellend.

      Mit sportlichen Grüssen
      Reto

    2. Hoi Reto
      ja der Ant+ Dongle erlaubt nur einer Applikation gleichzeitig darauf aufzubauen, dies hatte ich ein paar Minuten nach dem absenden der Frage an dich auf thisisant irgendwo gelesen. Ich habe nun auch den Umweg über den Raspi gemacht – habe hier auch zwei rumstehen und die Inbetriebnahme des Raspi hat soweit gut funktioniert. ioBroker kenne ich aus früheren Tagen – ich hatte damit vor ein paar Jahren erste Erfahrungen gesammelt.
      Kannst du noch etwas genauer auf die MQTT Schnittstelle eingehen? Ich glaube die funktioniert bei mir nicht sauber, ohne verbunden Sensoren müssten doch einfach die Werte 0 übertragen werden oder nicht? Ich habe auch einen Error in den Log Dateien:
      /home/pi/npm/zwiftapp/node_modules/bindings/bindings.js:121
      throw e;
      ^
      Hast du mir einen Tipp? Muss das bindings.js ausführbar gemacht werden?
      LG Stefan

    3. Hallo Stefan,

      hast du schon mal versucht, die Daten direkt vom Zwift Server über https://github.com/Ogadai/zwift-mobile-api zu holen und dann z.B. per MQTT/ioBroker zur Verfügung zu stellen. Wäre eine elegante Methode – ganz ohne Sensor. Weiterhin stehen auch wesentlich mehr Daten zur Verfügung, siehe API Quellcode „Profile.js“. Aufgrund meiner nicht vorhandenen JavaScript Kenntnisse komme ich nicht an die Daten ran. Ich scheitere bei den paar Demo-Zeilen bzw. ernte nur Fehlermeldungen.

      Gruß Em

    4. Hoi Reto
      der Raspy läuft nun mit der mqtt-Schnittstelle. Ich habe das Image nochmals neu eingespielt. Die SD-Karte hatte zuwenig Speicher, als ich noch zusätzlich den ioBroker drauf packen wollte, dies hat offenbar zu einer defekten nodeJS Installation geführt.

      Dein Vorschlag führte dazu, dass ich mich heute Abend mit der Zwift-Mobile-API auseinandergesetzt habe. Ich kann aber keine Daten abholen. Ich kriege immer ein 403, dies bedeutet wohl in http ein „forbidden“. Der Ansatz hätte mir auch gepasst, aber offenbar benötigt man tatsächlich seit 2018 einen Dev-Account von Zwift.

      Der Umweg über die Ant+ Schnittstelle hat natürlich den Vorteil, dass dies auch ohne Zwift funktioniert. Ist also eigentlich flexibler einsetzbar und dürfte theoretisch mit einem Stryd Power Footpod oder einem HR-Brustgurt auf dem Laufband auch funktionieren. Aktuell bin ich noch am abwägen zwischen Smart Lüfter oder Eigenbau mittels Arduino etc. Was waren deine Beweggründe für den Smartlüfter?
      LG Stefan

    5. Hallo Stefan,

      Nun für den Xiaomi Standing Fan habe ich mich entschieden, weil ich schon andere Geräte von Xiaomi per ioBrocker ansteure. Allerdings ist es nicht ganz einfach, an den zwingend benötigten „API token“ des Xiaomi Standing Fans zu kommen. Wenn man aber mal den „API token“ hat, kann man relativ einfach per ioBroker und dem entsprechenden Adapter im ioBroker, den Fan ansteuern. Eine Lösung mit Arduino oder ähnliches wäre sicher auch möglich.

      Bin gespannt auf deine finale Lösung.

      Gruess Reto

    6. Hoi Reto
      nach etwas Recherche und Nachdenken habe ich die Realisation über die Zwift API definitiv verworfen. Sollte dies später mal offiziell möglich sein, kann ich das Thema wieder aufnehmen. Ich habe aber einen neuen Ansatz, um mir einen zusätzlichen ANT+ Dongle zu ersparen: Ich habe einen Raspi 3 mit WLAN und BLE an Board und versuche nun eine BLE-mqtt Bridge aufzubauen. Einen zweiten Raspi habe ich da. Mit den Einschränkungen, dass ich damit aktuell nur die Powerwerte und Kadenz (Powermeter am Rad, Power von der Smartrolle, Stryd Footpod) auswerten kann reichen mir. Der nächste Brustgurt wird bestimmt auch BLE können. Zuerst hatte ich noch die Idee über ein altes Android Smartphone zu gehen, aber dies stelle ich mir mit den Abdroid Services und dem SDK komplizierter vor als über einen (vorhandenen) Raspi, da ich ja nur den ANT+-Teil durch den BLE ersetzen muss.
      Zuerst muss ich mir aber jetzt den Fan organisieren, kannst du noch ein paar Worte über das API token des Fan verlieren?

      @Em: ich kenne Proxmox nicht, aber könntest du die ANT mqtt Schnittstelle nicht auf der Proxmox Instanz einrichten? Die von dir und Reto besprochene Thematik mit dem weiterleiten ist ja in VM’s jeglicher Plattformen immer wieder ein Problem. Da der ANT+ Dongle tatsächlich nur eine Applikation erlaubt, frage ich mich, ob dies überhaupt problemlos funktionieren würde? Dies ist ja mitunter bei Lizenz Dongles für Software auch so, da behilft man sich ja mit USB-IP Schnittstellen (USBAnywhere etc) wäre ev auch noch einen Versuch wert?

      Gruss Stefan

    7. Hallo Stefan,

      Um den Fan via ioBroker, mit dem Adapter miio https://www.npmjs.com/package/iobroker.miio steuern zu können, braucht man den API token des Fans.
      Um an diesen API token zu kommen, gibt es anscheinend verschiedene Möglichkeiten.
      Ich kam per spez. App für Android (natürlich nur für Testzwecke) an den API token heran.
      Diesen API token kann man dann im miio Adapter im ioBroker eintagen und der Fan nimmt ab sofort Befehle vom ioBroker an.

      Gruess Reto

  3. Hallo Em,

    Die Beleuchtungsfarben werden mit dem Philips Hue Entertainment System, 3x Philips Hue Play hinter dem Monitor und 2x Philips Hue White & Color Ambiance an der Decke, realisiert.

    Es gibt eine App von Philips für den PC, die dann die Farben auf dem Bildschirm erfasst und an die Philips-Huebridge weiterleitet.
    Die Huebridge wiederum steuert dann die Lampen mit den entsprechenden Farben an.
    https://www2.meethue.com/de-ch/entertainment/sync-with-pc

    Die Herzfrequenz wie auch der Wattwert werden per Ant+ vom Raspberry empfangen und per MQTT an den ioBroker gesendet.

    Vor der Lösung mit dem Raspberry hatte ich natürlich die zwift-mobile-api getestet.
    Meines Wissens braucht es aber ein spezielles Entwicklerkonto um die API von Zwift zu benutzen (Stand 27.01.2020)
    Daher habe ich diesen Ansatz wieder verworfen und habe es mit dem Raspberry umgesetzt.

    Den Code dazu werde ich hier später veröffentlichen.

    Ein Adapter für den ioBroker wäre natürlich der Hammer, aber ich habe zur Zeit keine freien Ressourcen um einen entsprechenden Adapter zu schreiben.

    Mit sportlichen Grüssen
    Reto

  4. Hallo,
    cool umgesetzt. Bin auch Zwifter. Lüftersteuerung erfolgt manuell über Drehencoder, siehe
    https://forum.arduino.cc/index.php?topic=372623.msg4206739#msg4206739
    Stellst du auch den Code vom Raspi bereit? Wie erfasst du die „Farbe“ des aktuellen Bildschirminhalt?
    Wenn ich richtig verstehe, kommt Herzfrequenz über ANT+. Hast du dir auch mal überlegt, die Daten direkt aus Zwift zu übernehmen und per MQTT bereitzustellen. Damit könnten vielfältige Daten für Lüfter, Licht etc. verwendet werden (Watt, …) https://www.npmjs.com/package/zwift-mobile-api
    Habe jedoch keine JS Erfahrung. Eine Portierung in einen ioBroker Adapter wäre super flexibel.
    Freue mich auf Antwort

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.