7
votes

Écriture de BLE sur un point de contrôle de cyclisme - Ajout de résistance

Je travaille avec BLE depuis un moment maintenant, mais principalement pour lire et notifier les caractéristiques.

Les appareils sont spécifiquement des entraîneurs de cycle virtuels qui prennent en charge GATTS Cycling Power Service - 0x1818 lien

I sachez qu'il est possible d'augmenter la résistance sur cet entraîneur, mais j'ai lu la documentation sur Cycling Power Control Point - 0x2A66 [lien] [2] qui est le seul avec des fonctions d'écriture obligatoires, mais non de la documentation semble logique.

Formateur: Cycleops Magnus

Caractéristiques de lecture et d'écriture strong >

// Reads all descriptors
var descriptors = characteristic.descriptors;
for(BluetoothDescriptor d in descriptors) {
    List<int> value = await device.readDescriptor(d);
    print(value);
}

// Writes to a descriptor
await device.writeDescriptor(d, [0x12, 0x34])

Lecture et écriture de descripteurs

// Reads all characteristics
var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
    List<int> value = await device.readCharacteristic(c);
    print(value);
}

// Writes to a characteristic
await device.writeCharacteristic(c, [0x12, 0x34])

Le plus proche que je peux voir est de définir le la longueur de la manivelle ou le poids de la chaîne, mais à ce stade, je ne fais que deviner et je cherche un guide ce.

La question est la suivante.

Quelle caractéristique ou quel descripteur dois-je utiliser pour régler Virtual Power résistance des entraîneurs et quelle est la meilleure façon de le faire?

Tout langage de codage est bon, je peux le transposer.

Capture d'écran des services disponibles pour l'appareil

[2]: https://www.bluetooth.com/specifications /gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.cycling_power_control_point.xml entrez la description de l'image ici


2 commentaires

Malheureusement, le code source de l'application utilisée pour le Cycleops Magnus n'est pas disponible. Par conséquent, il semble que la seule façon d'obtenir la réponse est de faire de la rétro-ingénierie qui ne sera pas simple. Vous auriez besoin d'un renifleur pour voir exactement les paquets ATT qui sont envoyés et ensuite essayer de déduire ce qu'ils sont. Une autre solution consiste à utiliser l'application nRF Toolbox de Nordic pour laquelle la source est disponible sur GitHub, mais vous devrez faire beaucoup d'essais et d'erreurs que vous souhaitez éviter. La seule autre méthode possible consiste à contacter le support Magnus et à demander l'application.


Salut @YoussifSaeed, Merci pour le commentaire. Toutes vos suggestions sont bonnes, mais malheureusement, j'ai déjà contacté Saris / Cycleops deux fois sans réponse et essayé l'outil Nordics et consulté le code source (cela ne prend pas en charge cette fonction). J'ai également passé pas mal de temps à essayer de faire de l'ingénierie inverse, mais c'est comme une aiguille dans une botte de foin sans quelques conseils. C'était l'espoir de cette question, mais elle semble spécifique à une question. Merci encore.


3 Réponses :


2
votes

Vous ne pouvez pas utiliser le point de contrôle du cyclisme (CPP) pour ajouter de la résistance. CPP ne peut être utilisé que pour copier des données telles que Wheel Revolution de l'ancien périphérique vers le nouveau ou si vous souhaitez réinitialiser les données du périphérique, vous pouvez utiliser cpp.

Si vous voulez ajouter de la résistance, vous devez vérifier la machine de fitness que j'utilise élite et élite.

Peu de fournisseurs prenant en charge les machines de fitness et autres ont donné leur API ou leur code source que vous pouvez utiliser pour ajouter de la résistance et d'autres choses du même genre.


2 commentaires

J'ai testé un entraîneur de service cycliste Power avec Zwift / Bkool et d'autres et tous sont capables d'ajuster la résistance via un mécanisme. Si vous regardez les services du GATT, le seul avec des fonctions d'écriture est CPP, donc des fonctions comme setChainWeight etc. semblent logiques. L'API n'aidera pas car il s'agit d'une intégration BT et non d'un service Web. En ce qui concerne le code source, les services susmentionnés sont privés et non open source ou accessibles au public. Merci d'avoir pris le temps de répondre, mais dans ce cas, je ne pense pas que ce soit la bonne réponse.


J'ai également testé ces applications avec plusieurs entraîneurs tels que Tacx, Elite, Cyclops. Les cyclopes n'ont pas 2A66 qui est contrôlable mais Swift toujours capable d'ajouter de la résistance. J'ai compris votre point mais la plupart des formateurs ne prennent pas en charge SetChainWeight, GetChainWeight J'ai lu toute leur liste de drapeaux pour vérifier. En fin de compte, j'ai deviné l'entraîneur comme Wahoo, Tacx a donné son code source que vous pouvez utiliser pour ajouter de la résistance et d'autres fournir FTCP comme l'élite, vous pouvez utiliser FTCP pour ajouter de la résistance. si vous avez trouvé un autre moyen, faites-le moi savoir pour référence future. Vous pouvez utiliser l'application Bluelight pour vérifier les services. Cordialement,



2
votes

Je pense que vous utilisez le mauvais service Bluetooth pour cela. Le service Cycling Power sert à collecter des données à partir de compteurs d'énergie cycliques comme celui-ci: https://www.cyclist.co.uk/reviews/6705/long-term-review-fsa-powerbox-carbon-power-cranks

Pour vos besoins, je pense que vous devriez utiliser le service Fitness Machine (0x1826) qui inclut la caractéristique Indoor Bike Data (0x2AD2) et surtout pour vous, la caractéristique Fitness Machine Control Point. Jetez un œil à la section 4.16.1 de la spécification du service Fitness Machine et vous verrez les détails des opérations prises en charge par le point de contrôle, y compris une référence à la procédure de définition du niveau de résistance cible 4.16.2.5. Je pense que c'est ce dont vous avez besoin.


10 commentaires

Salut Martin. Merci d'avoir pris le temps d'examiner ce problème. Malheureusement, Magnus ne semble pas prendre en charge le service 0x1826. Selon l'application nRF connect, les services pris en charge sont 1818, 1801


Salut Yonkee. Comment savez-vous qu'il est possible de modifier la résistance via Bluetooth? Pouvez-vous publier votre capture d'écran nRF Connect ici ou dans notre système d'assistance pour me montrer les services? Si ce sont vraiment les deux seuls répertoriés, il manque un service obligatoire (1800).


Salut Martin. J'ai ajouté la capture d'écran pour montrer les services. La raison pour laquelle je pense que la résistance peut être modifiée ou mimée est que lorsque j'utilise Swift / BKool, Rouvy et autres, je peux sentir le changement de résistance en montée. Je pense que s'ils peuvent le faire, cela doit être possible, mais la façon dont cela se fait m'a laissé perplexe.


Merci d'avoir ajouté la capture d'écran. Je pense que la réponse est qu'ils utilisent le service personnalisé avec l'UUID 128 bits pour le contrôle de la résistance. Je suis certain que Cycling Power ne prend pas en charge cette fonctionnalité et que c'est le seul autre service candidat répertorié. Malheureusement, cela signifie qu'à moins que le fabricant ne veuille vous divulguer des informations, votre seule autre option est d'utiliser un analyseur de renifleur / de protocole pour faire de l'ingénierie inverse.


J'ai un BKool Pro 2. Il utilise également le service Cycling Power ainsi qu'un service personnalisé. L'une des caractéristiques de ce service peut être écrite, de sorte que ce doit être celle utilisée pour exercer le contrôle. Voir imgur.com/a/EkhgV9b


Ça doit être ça, il semble étrange qu'un fournisseur rende si difficile l'utilisation de son produit. Merci encore pour votre aide Martin, c'est très apprécié.


Le service et le profil de Fitness Machine ne sont pas si anciens, c'est probablement pourquoi ces produits ne l'ont pas. Si je trouve l'heure, je pourrais enquêter sur mon BKool Pro 2.


Ce serait formidable si vous pouviez Martin. Je ne suis pas sûr d'avoir les outils pour snif et rétro-ingénierie du service.


Vous pouvez obtenir des renifleurs assez bon marché ces jours-ci ... recommandés pour ce que vous essayez de faire. Cela dit, avez-vous envoyé un courriel aux fabricants pour leur demander les informations dont vous avez besoin? Je n'ai pas le temps d'enquêter complètement sur cela, mais voici quelques données d'une session avec mon BKool. J'ai changé de résistance un total de 6 fois. Voyez si vous pouvez comprendre comment cela est représenté dans les différentes commandes d'écriture sans réponse: imgur.com/a/GHe2FbN < / a>


Je pourrais juste investir dans un. J'ai envoyé un courrier électronique à Saris / Cyclops à plusieurs reprises et j'ai également signalé des incidents avec leur centre de support. Tout cela sans réponse. Merci pour la capture d'écran, je devrais pouvoir le faire fonctionner avec un peu de piste et d'erreur maintenant.



0
votes

Les entraîneurs en salle ont quelques services:

  1. Cycling Power Service (ANT + ou BT ont également)
  2. ANT + FEC (ANT uniquement)
  3. Contrôle BTLE Fitness (FTMS)
  4. TACX ANT + FEC. via Bluetooth ( https://blog.lazerwalker.com /2019/02/15/bike-game-part-2.html )

Pour ajouter de la résistance à l'entraîneur, vous devez avoir un entraîneur intelligent qui prend en charge soit 2/3/4. En avoir un qui prend en charge le # 1 ne sera pas coupé.

Le n ° 4 est en fait un protocole que Tacx a mis au point avant que FTMS ne devienne une norme et que certains formateurs l'utilisent encore.


0 commentaires