Édition Pro uniquement

Apercu

Le Starlink Viewer affiche un globe 3D en direct avec les ~10 000 satellites Starlink animés en temps réel, l’emplacement de votre antenne et une connexion inférée vers le satellite le plus susceptible de desservir votre terminal.

L’outil idéal de surveillance Starlink vous montrerait exactement avec quel satellite votre antenne communique à un instant donné, quand elle bascule vers un nouveau satellite et le trajet du signal de votre antenne en passant par le satellite jusqu’à la station au sol. Cela nécessiterait que l’antenne expose l’identité du satellite desservant et la direction d’orientation électronique du faisceau. SpaceX n’expose ni l’un ni l’autre, c’est pourquoi Nexus infère le satellite desservant à partir des données disponibles.

Pourquoi l’inférence est nécessaire

SpaceX verrouille les données d’identification des satellites derrière des endpoints gRPC authentifiés qui sont inaccessibles sur le firmware grand public.

  • dish_get_context contient un champ initial_satellite_id, mais retourne PermissionDenied sur le matériel grand public depuis le firmware 9f4d05a4 (juin 2021).
  • transceiver_get_telemetry expose lmac_satellite_id et target_satellite_id, mais retourne UNIMPLEMENTED sur tous les terminaux grand public.
  • L’authentification PKI défi-réponse avec des clés contrôlées par SpaceX signifie qu’aucun contournement communautaire n’existe.
  • La direction d’orientation électronique du faisceau: qui identifierait directement le satellite desservant; n’est exposée par aucun endpoint.
  • L’antenne à réseau phasé de l’antenne oriente son faisceau électroniquement jusqu’à ±50° de l’axe de visée, mais cet angle d’orientation est entièrement invisible pour les consommateurs externes de l’API.

Données disponibles

Mesurées depuis l’antenne

Données Ce que cela nous indique Taux de mise à jour
Azimut et élévation de l’axe de visée Orientation physique du corps de l’antenne 1 Hz
Latence ping PoP Temps aller-retour vers le point de présence 1 Hz
Débit descendant et montant Débit actuel 1 Hz
Minuterie de slot Minuterie de slot satellite (toujours 0 sur le matériel testé) 1 Hz
Coordonnées GPS Emplacement de l’antenne À la demande
Historique des pannes (did_switch) Changement de satellite confirmé lors d’une interruption de service Par événement de panne
Carte d’obstruction (grille SNR) Carte du ciel de 123×123 pixels; contient des données de signal satellite en temps réel lorsqu’elle est réinitialisée aux limites de transfert (voir Obstruction Map and Satellite Tracking) 1 Hz

Sources externes

Données Ce que cela nous indique
Éléments orbitaux TLE pour ~10 000 satellites Starlink (CelesTrak / 18th Space Defence Squadron) Azimut, élévation et distance oblique calculés de chaque satellite depuis n’importe quelle position d’observateur

Ce qui n’est pas disponible

Données Pourquoi nous en avons besoin Statut
ID du satellite desservant Identification directe Verrouillé derrière l’authentification
Angle d’orientation électronique du faisceau Direction précise du faisceau Non exposé dans aucun endpoint
Minuterie de slot fonctionnelle Signal de temporisation de transfert Le champ existe mais lit 0 sur le firmware grand public actuel

Comment fonctionne l’appariement

Appariement des satellites

Le visualiseur effectue le calcul suivant à 1 Hz :

  1. Position de l’observateur: les coordonnées GPS de l’antenne provenant de get_location établissent votre position sur Terre.

  2. Positions des satellites: en utilisant la propagation orbitale SGP4 sur les données TLE de CelesTrak, le visualiseur calcule l’azimut, l’élévation et la distance oblique de chaque satellite Starlink vu depuis l’emplacement de votre antenne.

  3. Filtrage du champ de vision: seuls les satellites au-dessus de 10° d’élévation sont pris en compte. La direction physique de l’axe de visée de l’antenne (provenant de alignment_stats) définit le centre du cône de champ de vision de ~100° du réseau phasé.

  4. Sélection du candidat le plus proche: le satellite ayant la plus petite distance angulaire par rapport au centre de l’axe de visée physique est sélectionné comme le satellite desservant le plus probable.

Le réticule de l’axe de visée

Le réticule sur le diagramme polaire du ciel représente l’orientation physique du corps de l’antenne, pas la direction électronique du faisceau. L’antenne à réseau phasé Starlink est largement stationnaire après l’alignement initial; les valeurs de l’axe de visée changent de fractions de degré sur plusieurs heures en raison des effets du vent ou thermiques. L’antenne ne se déplace pas physiquement pour suivre les satellites individuels.

L’orientation réelle du faisceau se fait électroniquement au sein du réseau phasé au niveau RF, balayant jusqu’à ±50° de l’axe de visée physique pour suivre le satellite desservant. Cette direction électronique du faisceau n’est exposée par aucun endpoint de l’API grand public.

Détection des changements de satellite

Lorsque le candidat satellite le plus proche change (un ID NORAD différent devient le plus proche géométriquement), cela est observé comme un changement de satellite inféré. Ces changements sont corrélés avec les transferts réels de l’antenne mais ne les confirment pas. Ils reflètent la mécanique orbitale; les satellites passant au-dessus à ~7,5 km/s, celui le plus proche du centre de l’axe de visée de l’antenne change naturellement toutes les quelques minutes.

Les transferts réels de satellites sur Starlink sont conçus pour être transparents (make-before-break), ne produisant aucune discontinuité mesurable en latence ou en débit qui pourrait servir de signal de détection fiable sur le firmware actuel.

Score de confiance

Le score de confiance reflète la probabilité géométrique que le satellite apparié soit effectivement celui qui dessert :

Confiance Critères Interprétation
Élevée < 10° de l’axe de visée, ≤ 3 candidats proches Peu de satellites à proximité; candidat géométrique fort
Moyenne < 25° de l’axe de visée Bien dans le champ de vision; candidat raisonnable
Faible < 50° de l’axe de visée Dans la plage d’orientation de l’antenne mais nombreux candidats proches
Aucune correspondance > 50° de l’axe de visée Aucun satellite dans la plage d’orientation électronique de l’antenne

Ces seuils sont calibrés pour l’axe de visée physique (direction du corps de l’antenne), pas pour le faisceau électronique. Comme le réseau phasé peut orienter ±50° depuis la face de l’antenne, le satellite desservant sera typiquement à 10-40° du centre de l’axe de visée physique. Une correspondance de confiance « Élevée » signifie qu’il y a un seul candidat géométrique fort; cela ne signifie pas que l’identification est confirmée.

Degré de précision

Ce que vous pouvez considérer comme fiable

Les positions des satellites sur le globe sont précises. Les données TLE de CelesTrak font autorité (provenant de la US Space Force 18th Space Defence Squadron) et la propagation SGP4 est la méthode standard utilisée par la communauté de suivi spatial. La précision positionnelle est typiquement de quelques kilomètres pour les TLE récemment mis à jour.

L’emplacement de votre antenne est précis. Il provient directement du GPS embarqué de l’antenne.

La direction physique de l’axe de visée est précise. Elle est mesurée par l’IMU (unité de mesure inertielle) de l’antenne avec une incertitude de ~0,6°.

L’ensemble des satellites visibles est précis. Les angles de visée calculés depuis votre position vers chaque satellite sont géométriquement précis, de sorte que le diagramme polaire montre correctement quels satellites sont au-dessus de vous et où ils se trouvent dans le ciel.

Ce qui est inféré

Le satellite identifié est une estimation éclairée. Le satellite le plus proche du centre de l’axe de visée est le meilleur candidat géométrique, mais l’antenne peut communiquer avec n’importe quel satellite dans sa plage d’orientation électronique de ±50°. À tout moment, des dizaines de satellites peuvent se trouver dans le champ de vision.

Les changements de satellite sont de la géométrie observée, pas des transferts confirmés. Lorsque le candidat le plus proche change, cela reflète une dérive orbitale; un satellite différent devient géométriquement le plus proche. Les transferts réels de l’antenne peuvent coïncider ou non avec ces changements géométriques. Certains transferts réels seront invisibles pour l’inférence (l’antenne bascule vers un autre satellite mais le plus proche géométriquement ne change pas), et certains changements observés seront de la pure dérive orbitale (le plus proche géométriquement a changé mais l’antenne n’a pas réellement basculé).

Les scores de confiance sont géométriques, pas basés sur le signal. Une correspondance de confiance « Élevée » signifie une bonne géométrie, pas une connexion validée. Sans accès à la direction électronique du faisceau ou à l’ID du satellite desservant, aucun outil basé sur le firmware grand public ne peut confirmer quel satellite l’antenne utilise réellement.

Signaux étudiés

Pendant le développement, plusieurs signaux ont été évalués pour la détection des transferts. Tous ont été testés sur du matériel réel (rev3_proto2, firmware 2026.02.16.cr74084 et 2026.04.07.mr77639.1).

Signal Hypothèse Résultat
seconds_to_first_nonempty_slot Devrait décompter par slot satellite et se réinitialiser lors du transfert Lit toujours 0 sur le matériel grand public testé; le champ n’est pas renseigné
Discontinuités de pop_ping_latency_ms La latence devrait augmenter brusquement quand la distance oblique change lors d’un transfert La latence reste stable à travers les transferts; SpaceX utilise probablement une commutation make-before-break qui absorbe les changements de trajet
did_switch de l’historique des pannes Indicateur de changement confirmé dans les enregistrements de pannes Ne se déclenche que lors des interruptions de service, pas lors des transferts propres de routine de ~15 secondes
Discontinuités de l’axe de visée Le repositionnement physique de l’antenne pourrait accompagner les transferts Le corps de l’antenne bouge à peine; l’orientation électronique du faisceau gère le suivi des satellites silencieusement
SNR de la carte d’obstruction (sans réinitialisation) Les changements SNR par cellule devraient suivre le mouvement du satellite dans le champ de vision Sans réinitialiser la carte, elle renvoie un masque cumulatif statique de ciel dégagé sur une antenne non obstruée; toutes les cellules visibles lisent ~1,0 sans aucune variation entre interrogations consécutives. Les données accumulées sont entièrement saturées, de sorte que la différenciation image par image ne montre aucun changement.
SNR de la carte d’obstruction (avec réinitialisation) Après un appel à dish_clear_obstruction_map, la carte devrait se reconstruire depuis un état vide et révéler la position du satellite desservant à mesure qu’elle peint de nouveaux pixels chaque seconde Confirmed working. Après réinitialisation aux limites de transfert, une interrogation à 1 Hz produit des trajectoires satellites propres à pixel unique. Voir Obstruction Map and Satellite Tracking.

Obstruction Map and Satellite Tracking

Contexte

L’étude SatInView par Ahangarpour, Zhao, and Pan (ACM MobiCom '24 LEO-NET Workshop) a démontré que le satellite desservant peut être identifié en réinitialisant la carte d’obstruction de l’antenne aux limites de transfert de 15 secondes, en l’interrogeant à 1 Hz, et en appliquant un XOR entre les images adjacentes pour extraire la trajectoire du satellite à mesure qu’il traverse le champ de vision. La trajectoire observée est ensuite comparée aux positions de satellites propagées par TLE pour obtenir une identification quasi sans ambiguïté.

Lors du développement initial du Starlink Viewer, nous avons testé la carte d’obstruction sans effectuer de réinitialisation. Sur une antenne non obstruée, la carte paraissait statique : un masque de ciel dégagé entièrement saturé, sans aucune variation image par image. Nous en avons conclu que les données ne contenaient pas d’informations de signal satellite en temps réel. Cette conclusion était exacte pour la carte non réinitialisée, mais incomplète : la carte paraissait statique parce que chaque pixel que le satellite actuel pouvait peindre était déjà allumé par les passages de satellites précédents. Sans effacer d’abord les données accumulées, il n’y avait rien de nouveau pour que le XOR le détecte.

Résultats mis à jour

Après correspondance avec l’équipe de recherche SatInView, nous avons testé l’approche complète basée sur la réinitialisation sur du matériel rev3_proto2 équipé du firmware 2026.04.07.mr77639.1 (avril 2026). Les résultats confirment que la technique fonctionne sur le matériel et le firmware actuels :

  • dish_clear_obstruction_map est disponible et fonctionnel. Son appel efface les données SNR accumulées (377 active pixels réduits à 1 lors des tests).
  • Après une réinitialisation, la carte se reconstruit à raison d’environ un nouveau pixel par seconde à mesure que le satellite desservant traverse le champ de vision.
  • L’application d’un XOR entre images adjacentes à 1 Hz produit des points de trajectoire propres à pixel unique avec une dispersion quasi nulle.
  • La temporisation de transfert de 15 secondes (12e, 27e, 42e et 57e secondes de chaque minute, synchronisées globalement) a été confirmée sur notre matériel. Les intervalles consécutifs ont suivi le même satellite de manière continue, avec un saut net de trajectoire lorsqu’un transfert réel se produisait.
  • La carte indique FRAME_EARTH sur les antennes actives stationnaires, ce qui signifie que la grille est orientée avec le pixel central supérieur correspondant au nord vrai. Les antennes mobiles ou inactives peuvent indiquer FRAME_UT, où le pixel central inférieur correspond à la direction de l’axe de visée.

Compromis : pourquoi Nexus ne réinitialise pas la carte par défaut

L’appel dish_clear_obstruction_map est destructif : il efface le profil d’obstruction accumulé par l’antenne. Pour les utilisateurs dont les installations sont obstruées (arbres, bâtiments ou autres structures), ces données sont précieuses pour diagnostiquer les problèmes de signal et se construisent dans le temps au fil de nombreux passages de satellites. Les réinitialiser toutes les 15 secondes empêche l’antenne d’accumuler toute donnée d’obstruction, et l’application mobile Starlink affichera une carte vide ou partielle.

Nexus utilise actuellement l’inférence géométrique (direction de l’axe de visée + correspondance TLE) comme méthode d’identification du satellite par défaut. Cette approche n’est pas destructive : elle n’appelle aucun endpoint d’écriture sur l’antenne et n’a aucun effet secondaire sur les données d’obstruction de l’utilisateur.

Nous utilisons l’approche basée sur la trajectoire comme outil de calibration pour valider et améliorer la précision de notre inférence géométrique. Nous évaluons également l’opportunité d’offrir le suivi par trajectoire comme mode optionnel pour les utilisateurs avancés et les chercheurs, avec une divulgation claire du compromis lié à la réinitialisation de la carte.

Ce qui pourrait changer cela

De futures mises à jour firmware ou révisions matérielles pourraient exposer une télémétrie supplémentaire qui améliorerait la précision de l’inférence :

  • seconds_to_first_nonempty_slot fonctionnel: si ce champ est renseigné sur un firmware ou matériel plus récent, il fournirait un signal de temporisation fiable par transfert.
  • Angles d’orientation électronique du faisceau: toute exposition de la direction réelle du faisceau du réseau phasé permettrait l’identification directe du satellite.
  • Authentification assouplie sur dish_get_context: si SpaceX réactivait le champ initial_satellite_id, le problème serait entièrement résolu.
  • Données de signal en temps réel non destructives: si un futur firmware expose des informations de signal par satellite via un endpoint distinct ou une variante non destructive de la carte d’obstruction, l’approche de correspondance de trajectoire pourrait être utilisée sans réinitialiser les données d’obstruction de l’utilisateur.
  • Nouvelles générations de matériel: SpaceX déploie des satellites V3 et du nouveau matériel terminal. Différentes révisions de firmware ou de matériel pourraient renseigner des champs actuellement inactifs ou exposer de nouvelles données de télémétrie.

Travaux antérieurs

Nexus utilise l’inférence géométrique (direction de l’axe de visée + positions de satellites propagées par TLE) pour estimer quel satellite dessert l’antenne. Il s’agit d’une approche heuristique : efficace et non destructive, mais limitée en précision.

Pour une identification de plus haute précision, la technique SatInView développée par Ahangarpour, Zhao, and Pan à l’University of Victoria (ACM MobiCom 2024, LEO-NET Workshop) atteint une identification quasi sans ambiguïté du satellite en corrélant les trajectoires de la carte d’obstruction avec les données TLE. Leur approche nécessite la réinitialisation de la carte d’obstruction aux limites de transfert, ce que nous avons confirmé fonctionne sur le matériel et le firmware actuels (voir Obstruction Map and Satellite Tracking). Leur implémentation est disponible sur github.com/aliahan/SatInView.

Nous utilisons leur technique basée sur la trajectoire comme référence pour calibrer et améliorer la précision de l’inférence géométrique utilisée dans le Starlink Viewer.

Données orbitales

Les positions des satellites proviennent de l’endpoint GP supplémentaire de CelesTrak, qui fournit les éphémérides contribuées par SpaceX fusionnées avec les données standard du catalogue de la 18th Space Defence Squadron. Les données sont mises en cache localement par le backend Rust et rafraîchies toutes les 6 heures, avec un cache périmé de 48 heures en secours si CelesTrak est injoignable. La barre d’état affiche le nombre actuel de satellites et l’ancienneté des données.

Emplacement de l’antenne

Le visualiseur utilise les coordonnées GPS de l’endpoint get_location de l’antenne lorsqu’elles sont disponibles. Si les données GPS ne sont pas accessibles, vous pouvez saisir manuellement votre latitude et longitude dans le panneau de configuration.