etape 8 sous le capot - arthur-expeditions/pypilot-workbook-fr GitHub Wiki

Il y a toujours un grand plaisir à regarder sous le capot, alors jetons un petit coup d'œil. Nous vous montrerons ce que vous devriez voir, afin que vous puissiez le comparer avec vos propres résultats si vous devez diagnostiquer un problème. Cette page suppose quelques connaissances de base de Linux, mais si vous n'en avez pas, essayez de suivre les exemples et vous serez plus à l'aise. Pour obtenir une invite sur openplotter, cliquez sur Raspberry→Accessoires→Terminal. À distance, à partir d'un PC Windows, téléchargez putty.exe.

Si vous ajoutez des éléments de diagnostic à vos questions sur le forum, vous avez plus de chances d'obtenir une réponse rapide. Mieux encore : si vous allez d'abord sous le capot, vous pourrez peut-être répondre à votre propre question avant même de la poser !

Services

Les logiciels qui s'exécutent en arrière-plan sont généralement organisés en "services". Sur openplotter, les définitions du service systemd de pypilot se trouvent dans /etc/systemd/system/ :

pi@openplotter:/etc/systemd/system $ ls -1 pypilot*
pypilot_boatimu.service
pypilot.service
pypilot_web.service

pypilot.service est le service principal. pypilot.boatimu est le service compas, qui peut fonctionner de manière autonome. Pypilot_web est l'interface du navigateur ; il a besoin que le service pypilot soit lancé.

Pour vérifier si un service est en cours d'exécution, utilisez systemctl. Dans cet exemple, le service pypilot est en cours d'exécution. Ne posez pas de questions si vous n'êtes pas sûr que votre service pypilot est en cours d'exécution :

pi@openplotter:~ $ systemctl status pypilot
pypilot.service - pypilot
   Loaded: loaded (/etc/systemd/system/pypilot.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-03-11 16:50:17 CET; 3s ago

Scripts de la console

Les services exécutent des scripts console python. Les scripts de la console pypilot se trouvent dans /usr/local/bin/ :

pi@openplotter:/usr/local/bin $ ls -1 pypilot*
pypilot
pypilot_boatimu
pypilot_calibration
pypilot_client
pypilot_client_wx
pypilot_control
pypilot_hat
pypilot_scope
pypilot_servo
pypilot_web

Normalement, ces scripts sont exécutés par les services, mais vous pouvez les exécuter séparément à des fins de diagnostic. Certains de ces scripts nécessitent l'exécution du service principal de pypilot, d'autres sont le service principal. Certains d'entre eux ont une interface graphique, d'autres une CLI. Je ne vais pas tous les expliquer, il y a de la documentation dans le readme de github.

Ce qui est intéressant, c'est que ces scripts pypilot utilisent par défaut le pypilot qui tourne sur localhost. Localhost désigne 'cet ordinateur'. De nombreux scripts de pypilot peuvent être invoqués avec l'adresse IP d'un autre pypilot qui fonctionne à distance, par exemple, un tinypilot. Ainsi, si vous avez un tinypilot en marche, vous pouvez lancer un scope openplotter à distance sur les données du tinypilot. Je reviendrai peut-être plus tard sur ce point, mais pour l'instant, retenez bien ceci : les composants de l'interface utilisateur d'openplotter ne sont pas limités à un pypilot qui tourne sur OpenPlotter. Voir Etape 12 : Utilisation des outils openplotter à distance

Exécuter Pypilot en ligne de commandes

Normalement, les services produisent des journaux dans /var/log, mais sur openplotter, je ne les trouve pas. Si quelque chose ne va pas, vous pouvez désactiver pypilot dans l'interface utilisateur d'openplotter (ou arrêter le service), puis l'exécuter à l'invite de l'utilisateur pi. Vous verrez des informations précieuses :

pi@openplotter:~ $ pypilot
imu process 4260
nmea process 4265
listening on port 20220 for nmea connections
loading servo calibration /home/pi/.pypilot/servocalibration
WARNING: using default servo calibration!!
Loaded Pilots: ['learning', 'basic', 'absolute', 'simple']
warning: failed to open special file /dev/watchdog0 for writing
         cannot stroke the watchdog
gps process 4267
made imu process realtime
[…] etc.

Rappelez-vous : si vous avez un problème et que personne d'autre ne peut vous aider, lancez pypilot (ou tout autre script de console) à l'invite. Lisez attentivement le résultat : pypilot vous parle, vous feriez mieux de l'écouter. Si vous voulez poster le résultat sur le forum, il est préférable de le sauvegarder dans un fichier texte, puis de joindre ce fichier texte à un message du forum. Sauf s'il s'agit d'un court extrait. Dans ce cas, placez-le entre des balises de code, afin que le lecteur sache que vous êtes sérieux et que vous simplifiez la tâche.

Processus

Le test le plus rapide consiste à rechercher les processus qui sont lancés par les scripts pypilot :

pi@openplotter:~ $ ps -ef | grep pypilot
pi  4157   805  0 14:24 00:00:02 /usr/bin/python3 /usr/bin/openplotter-pypilot
pi  4527     1  3 14:27 00:00:36 /usr/bin/python /usr/local/bin/pypilot
pi  4529     1  0 14:27 00:00:00 /usr/bin/python3 /usr/bin/openplotter-pypilot-read
pi  4535  4527  0 14:27 00:00:04 /usr/bin/python /usr/local/bin/pypilot
pi  4536  4527  1 14:27 00:00:18 /usr/bin/python /usr/local/bin/pypilot
pi  4542  4527  0 14:27 00:00:00 /usr/bin/python /usr/local/bin/pypilot
pi  4543  4527  0 14:27 00:00:00 /usr/bin/python /usr/local/bin/pypilot
pi  4546  4527  0 14:27 00:00:00 /usr/bin/python /usr/local/bin/pypilot
pi  4548  4527  0 14:27 00:00:06 /usr/bin/python /usr/local/bin/pypilot
pi  4672     1  0 14:34 00:00:01 /usr/bin/python /usr/local/bin/pypilot_web 
pi  4892  1555  0 14:47 00:00:00 grep --color=auto pypilot

Réseau

On peut aussi jeter un coup d'œil intéressant aux connexions réseau que pypilot gère :

pi@openplotter:~ $ netstat -antlp|grep python
tcp     0  0 0.0.0.0:23322     0.0.0.0:*           LISTEN      4548/python
tcp     0  0 0.0.0.0:20220     0.0.0.0:*           LISTEN      4542/python
tcp     0  0 0.0.0.0:8080      0.0.0.0:*           LISTEN      4672/python
tcp     0  0 10.10.10.1:23322  10.10.10.1:47460    ESTABLISHED 4548/python
tcp     0  0 127.0.0.1:57390   127.0.0.1:2947      ESTABLISHED 4546/python

Vous pouvez voir que pypilot écoute sur les ports 23322, 20220 et 8080. La première est la communication interne, qui est utilisée entre autres par les interfaces utilisateurs pour parler à pypilot. Le second est le trafic NMEA in/out, nous en avons déjà parlé. Faites un telnet sur ce port pour voir ce qui se passe. 8080 est l'interface du navigateur.

Vous pouvez également voir que pypilot communique avec 2947, qui est le démon GPS. Vous pouvez chercher sur Google, mais pour faire court, quand vous mettez un GPS dans une machine linux, gpsd est connecté à ce port.

Déterminer la version de Pypilot

Notez que les versions de pypilot mentionnées ici sont différentes des versions qui se trouvent dans l'écran des paramètres d'OpenPlotter (à partir duquel vous avez installé pypilot). L'outil OpenPlotter a son propre système de versions, qui n'est pas lié à celui de pypilot. Il n'y a aucun moyen de déterminer la version de pypilot dans les interfaces utilisateurs. La meilleure méthode est d'utiliser l'exécutable de pypilot :

pi@openplotter:~ $ which pypilot
/usr/local/bin/pypilot
pi@openplotter:~ $ cat /usr/local/bin/pypilot
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'pypilot==0.24','console_scripts','pypilot'

La gestion des versions de pypilot n'est pas très stricte. La numérotation des versions est une indication approximative de la génération du logiciel. Dans un numéro de version, il peut y avoir de nombreux commits intermédiaires, dont certains peuvent casser des parties du code. Ce n'est pas un verdict, juste une observation et il est bon de garder cela à l'esprit lorsque vous envisagez de mettre à jour le logiciel pypilot.

Mettre à jour Pypilot

Si vous voulez mettre à jour vers le dernier commit de développement de pypilot, utilisez les commandes suivantes. Ces commandes peuvent évoluer avec le temps, il est donc toujours bon de consulter le readme de github. Avant d'effectuer la mise à jour, c'est toujours une bonne idée d'arrêter pypilot. Après la mise à jour, exécutez pypilot à l'invite. Si quelque chose ne va pas, vous le verrez tout de suite.

cd
sudo systemctl stop pypilot pypilot_web pypilot_hat pypilot_boatimu
sudo rm -Rf pypilot/ pypilot_data/
git clone https://github.com/pypilot/pypilot
cd pypilot
sudo python3 setup.py install

Étape 9: Cabler l'arduino nano >>>