La montre ne diffuse pas parce qu'elle est déjà connectée : la chercher ailleurs

4020 advertisements vus — HomePod, Furbo, des sans-nom — et aucune Polar. Le
scan marchait donc parfaitement depuis le correctif précédent. C'est la montre
qui ne s'annonce pas.

Et c'est normal : un appareil BLE connecté cesse d'émettre. La Vantage est liée
à l'iPhone par l'app Flow, donc invisible au scan par conception. Tous les
correctifs de scan qui ont précédé ne pouvaient rien y changer — on cherchait
dans le seul endroit où elle ne pouvait pas être.

`search()` prévoit exactement ce cas, mais seulement si on lui passe des UUID :
`manager.retrieveConnectedPeripherals(withServices: uuids!)` rend les
périphériques DÉJÀ connectés exposant le service, et leur fabrique une session.
Je passais `nil`, donc cette branche n'était jamais empruntée.

Au passage, déduplication des sessions : AllowDuplicates est armé côté SDK, d'où
les 4020 pour une poignée d'appareils réels — sans quoi on ouvrirait quarante
fois la même session.

Ce que la journée aura montré : chaque message d'erreur qui affirmait une cause
unique a fait perdre du temps, et chaque message qui RAPPORTAIT ce qu'il avait vu
a fait avancer. La liste des appareils vus valait tous les raisonnements.

84 tests au vert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-08-31 13:40:12 +00:00
parent 60dd22eaeb
commit 3cc7d935ad
2 changed files with 45 additions and 1 deletions

View File

@@ -227,6 +227,30 @@ et garder le câble.
**Le câble, lui, fonctionne intégralement** : `tools/polar/README.md` du dépôt
`coach_sportif`. Rien de ce qui a été livré côté serveur n'est perdu.
## 🔑 La montre ne s'annonce pas : elle est déjà connectée
Mesuré le 31/08 : **4020 advertisements vus** (HomePod, Furbo…), **aucune
Polar**. Le scan fonctionne parfaitement — la Vantage ne diffuse simplement pas.
C'est le comportement normal du BLE : **un appareil connecté cesse d'émettre**.
La montre est liée à l'iPhone par l'app Flow, donc elle est invisible au scan,
par conception. L'attendre était sans espoir, et tous les correctifs de scan qui
ont précédé ne pouvaient rien y changer.
`search()` prévoit ce cas, mais seulement quand on lui passe des UUID :
```swift
foundPeripherals = self.manager.retrieveConnectedPeripherals(withServices: uuids!)
```
⇒ **Appeler `search([BlePsFtpClient.PSFTP_SERVICE], identifiers: nil,
fetchKnownDevices: true)`**, et non `search(nil, …)` : c'est cette branche qui
rend les périphériques déjà connectés exposant PsFTP et leur fabrique une
session.
⚠️ Dédupliquer aussi les sessions vues : `AllowDuplicates` est armé côté SDK, le
même appareil revient à chaque advertisement.
## Ce qui reste inconnu, et ne se lèvera qu'ici
1. **La V3 accepte-t-elle une connexion BLE tierce** alors qu'elle est appairée