Skip to content

etape 13 connexions signalk

Guillaume Ponçon edited this page May 30, 2022 · 1 revision

Tout d'abord et pour tous : SignalK est un grand sujet. C'est un magnifique logiciel qui a récemment été intégré à openplotter, opencpn et pypilot, et qui permet d'échanger des données nautiques entre les appareils et les composants logiciels. Si vous voulez, vous pouvez l'appeler un multiplexeur, mais c'est bien plus que cela. Il remplace cependant le kplex. Si vous voulez établir une connexion avec pypilot, vous devriez d'abord vous renseigner sur SignalK.

Il y a trois façons d'obtenir les données des capteurs de pypilot dans SignalK : nmea, openplotter background script et signalk zeroconf.

NMEA

L'ancienne méthode consiste à faire en sorte que signalk tire les données du port nmea 20220/TCP de pypilot. L'outil openplotter pypilot dispose de cette connexion toute prête ; si vous ajoutez la connexion dans cet outil, il ajoute une connexion client nmea dans signalk qui extrait ces données de pypilot. Cette connexion NMEA/TCP semble faire apparaître seulement navigation.headingMagnetic dans le navigateur de données de signalk. Bien que le tangage et le roulis soient disponibles dans les messages NMEA, il semble que signalk ne puisse pas les traiter car ils sont enveloppés dans des phrases XDR. Je pense. Bien qu'openplotter ait cette facilité pour faire cette connexion dans signalk pour vous, vous pourriez tout aussi bien configurer manuellement une telle connexion dans SignalK vous-même.

Script d'arrière-plan d'openplotter

Le script d'arrière-plan openplotter est un processus d'arrière-plan openplotter qui prend le tangage et le roulis de pypilot et le met dans signalk. Le script est toujours en cours d'exécution avec pypilot, mais vous ne voyez pas les données à moins qu'il y ait une connexion signalk écoutant sur '20220/UDP', et c'est ce que l'autre 'connexion' crée. Cela semble être une solution de contournement pour obtenir l'assiette longitudinale et l'assiette latérale en signale, parce que la méthode NMEA ne fonctionne pas.

Le script openplotter a une fonction différente lorsque vous mettez le pypilot en mode 'only compass'. Dans ce mode, seul le processus boatimu fonctionne, ce qui signifie qu'il n'y a pas de processus pypilot qui sert nmea sur 20220/TCP. Dans ce cas, le script openplotter ajoute navigation.headingMagnetic, ce qui lui donne toute sa valeur.

Les données qui proviennent du script d'arrière-plan openplotter s'identifient avec la source 'OpenPlotter.I2C.pypilot', donc si vous voyez cela dans le navigateur de données signalk, vous savez d'où elles proviennent :

Signalk zeroconf

La manière moderne d'interfacer pypilot à signalk, est de faire en sorte que pypilot se connecte à signalk à la place. Cette méthode a été introduite en mars 2020 (v0.21) et nécessite une version récente de pypilot ; les tests effectués ici ont été réalisés avec la v0.24. D'un point de vue technique, cette méthode est exquise : il n'y a pas d'envoi insensé de messages nmea au monde entier - non - il y a un seul magasin opérationnel de données nautiques, et en tant que client, vous vous abonnez aux mises à jour des seules données dont vous avez besoin.

Cette connexion signalk fonctionne avec un mécanisme de configuration zéro : pypilot trouvera le serveur signalk tout seul en émettant une "demande de découverte de service" sur le réseau. Un agent (nous y reviendrons plus tard) répond à pypilot avec l'adresse de signalk, et pypilot se connecte alors à signalk sur cette adresse. Pypilot émettra alors une demande d'accès à signalk, et lorsque vous approuverez cette demande manuellement dans signalk, une connexion permanente sera établie.

Cela nécessite la mise en place de certains éléments, qui ne sont pas présents par défaut.

Sur openplotter, vous devez installer quelques paquets :

sudo pip3 install zeroconf
sudo apt install python3-zeroconf python3-websocket

Comment pouvez-vous le savoir ? Si vous exécutez pypilot à l'invite et lisez la sortie ligne par ligne, c'est là. C'est la seule façon de résoudre ce type de problème.

Lorsque vous démarrez pypilot, vous verrez alors que pypilot est capable d'envoyer une demande de service pour signalk :

signalk zeroconf service add myrouter._http._tcp.local. _http._tcp.local.

S'il n'y a personne pour répondre à cette demande de service, rien ne se passe. L'agent qui devrait répondre, est un serveur mdns : 'multicast dns service discovery'. Ce service n'est normalement pas disponible sur votre réseau, mais il est fourni par SignalK, si vous avez coché Server->Settings->mdns. Rappelez-vous que vous devez redémarrer le serveur SignalK pour cela.

Avec mdns activé, votre serveur pypilot trouvera signalk :

signalk server found 10.10.10.1:3000

Lorsque pypilot se connecte à signalk (via le service web à 3000/signalk), il se trouve non autorisé et envoie donc une demande d'accès (requestId).

signalk probe... 10.10.10.1:3000
signalk found ws://10.10.10.1:3000/signalk/v1/stream?subscribe=none
signak failed to connect Handshake status 401 Unauthorized
signalk post {'state': 'PENDING', 'requestId': '384b3471-9e76-401c-a663-c84f2fc30cad', 'statusCode': 202, 'href': '/signalk/v1/requests/384b3471-9e76-401c-a663-c84f2fc30cad', 'ip': '::ffff:10.10.10.1'}
signalk request access url http://10.10.10.1:3000/signalk/v1/requests/384b3471-9e76-401c-a663-c84f2fc30cad
signalk see if token is ready http://10.10.10.1:3000/signalk/v1/requests/384b3471-9e76-401c-a663-c84f2fc30cad {'state': 'PENDING', 'requestId': '384b3471-9e76-401c-a663-c84f2fc30cad', 'statusCode': 202, 'href': '/signalk/v1/requests/384b3471-9e76-401c-a663-c84f2fc30cad', 'ip': '::ffff:10.10.10.1'}

Dans signalK, vous verrez cette demande d'accès apparaître dans le menu Sécurité. Lors de l'approbation, vous devez définir les permissions à Read/Write, sinon pypilot ne peut toujours pas écrire ses mesures dans signalk. Après une interrogation périodique ('see if token is ready'), pypilot recevra un jeton de sécurité et sera capable d'établir la connexion :

signalk received token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXZpY2UiOiJweXBpbG90LTg4NzQ2NDg3OTQ4IiwiaWF0IjoxNjE2MTQ2NTMzLCJleHAiOjE2NDc3MDQxMzN9.KSADIUWyEYKB9Go4_kltxidwb8fIj_u9EwI6mlyh_RI
signalk connected to ws://10.10.10.1:3000/signalk/v1/stream?subscribe=none

À partir de ce moment, vous trouverez également navigation.attitude dans votre navigateur de données signalk.


Cette connexion signalk initiée par pypilot devrait pouvoir remplacer tous les échanges de données nautiques avec pypilot : vous ne devriez plus avoir besoin d'envoyer des données NMEA (vent, route, gps) à pypilot. Lorsque cette connexion fonctionne, le port 20220 est obsolète.

Donc en résumé, pour faire fonctionner signalk zeroconf :

  • installer les paquets
  • allumer les mdns
  • Approuver la demande d'accès, en lecture-écriture

Étape 14 : Le contrôleur de moteur Pypilot >>>