Spotnik V4.1 & Spotnik2HMI V3 light: le mariage presque impossible
Ludo | 13 novembre 2021
Ayant quelques restes de relais pro TAIT T800 Series II un peu fatigués, mais toujours fonctionnels, je m’en sers pour quelques expérimentations avec le RRF (Réseau des Répéteurs Francophones). Si vous faites à minima un peu d’écoute, principalement en VHF 2m et UHF 70cm, vous vous êtes déjà probablement arrêté sur une fréquence diffusant les émissions d’opérateurs francophones situés un peu partout dans le monde, ou vous avez au moins une fois entendu des opérateurs locaux débattre sur le fait que ce n’est pas de la vraie radio 🙂 Quel que soit votre avis, l’expérimentation reste intéressante et elle m’a amené à utiliser pour la première fois un de ces « mini PC » type Raspberry Pi, baptisé Orange Pi: une première expérience qui a bien failli me faire regretter l’achat de cette carte. Si vous avez lu mon billet traitant du MMDVM, vous savez que je ne suis pas du genre à m’avouer vaincu aussi rapidement. Le titre du présent billet laisse quand à lui peu de mystère sur la raison de cette mauvaise première impression… |
Autant le dire tout de suite, je ne me suis pas réellement documenté sur le fonctionnement de l’interface « homme / machine » proposée par F0DEI, F5SWB et F8ASB, ni même sur les éventuelles incompatibilités entre versions. L’image de SPotnik V4.1 pour carte Orange Pi ayant été préalablement téléchargé depuis le serveur officiel (ICI) et copiée sur une carte SD, il me fallait un moyen d’installer Spotnik2HMI sur un système déjà fonctionnel, et c’est là que l’histoire se complique.
Petite note au sujet du re-partitionnement de la carte SD: le fichier image téléchargé ne contient que les données utiles, et sa taille est inférieure à celle de votre carte SD. Ainsi, après avoir copié le contenu de cette image sur votre carte, vous constaterez au premier démarrage que le système ne voit pas la totalité de l’espace mémoire disponible. Il faut donc procéder en premier lieu à un re-partitionnement de cette carte mémoire, à l’aide de la commande suivante dont le fonctionnement a été validé avec l’image V4.1 et V3.1.1 de Spotnik pour les cartes Orange Pi:
sudo systemctl start armbian-resize-filesystem
Donc, concernant Spotnik2HMI:
- La V4 n’existe que sous forme d’image de carte SD prête à l’emploi, certes, mais pour Raspberry PI uniquement. Zut, j’ai misé sur le mauvais cheval!
- La V3.5 n’est disponible que pour le modèle d’écran Nextion NX4832K035. Je n’ai pas ce modèle dans mes tiroirs, il va falloir se rabattre sur une version plus ancienne…
- La V3 light fonctionne avec une multitude d’écrans Nextion, ouf! Je suis sauvé, enfin presque.
Avec cette dernière version (dans l’ordre d’apparition ci-dessus) qui ne bénéficie plus de mise à jour depuis deux ans, d’après ce qu’indique le suivi sur la page Github, il est probable que le bon fonctionnement de l’ensemble ne soit plus assuré, puisque j’utilise la dernière version en date de Spotnik au moment où j’écris ces lignes (V4.1 pour rappel).
Les étapes d’installation décrites sur la page Github du projet sont toujours valables, ce qui limite déjà le casse tête. Une fois la carte Orange Pi redémarrée par contre, le système devient très instable:
- Console inaccessible par le port série dédié (ttyS0). Seul l’accès en SSH continue de fonctionner, heureusement
- Page web d’administration de Spotnik inaccessible de façon aléatoire
- Navigation dans l’IHM (Interface Homme Machine) de l’écran Nextion aboutissant à des plantages de Spotnik
- Paramétrage de rétroéclairage de l’écran perdu après un redémarrage
Étant totalement novice concernant l’interface matérielle et logicielle vers le RRF, j’ai tout d’abord incriminé la carte Orange Pi. Puisque c’est un clone de la Raspberry PI, au moins dans le concept, c’est possiblement un loupé de la part de ses concepteurs. En passant quelques jours à tenter de cibler la source des dysfonctionnements, j’ai fini par écarter cette piste du « mauvais clone asiatique », pour pencher du côté des programmes python de Spotnik2HMI.
Soyons bien d’accord, le travail réalisé par l’équipe assurant la développement et le support de cette interface utilisateur est énorme. Tout ceci est fait bénévolement et malgré tout cela, l’évolution de fonctionnement de Spotnik qui s’effectue en parallèle apporte inexorablement des incompatibilités.
Pour appréhender toute la problématique, il faut connaître la base des échanges entre le RRF et Spotnik2HMI:
Tout est basé sur les « API » (Application Programming Interface) du RRF. Dans le cas du RRF, ce sont des données relatives aux salons, indiquant par exemple les indicatifs d’appel des stations répétitrices, touts types confondus, et celui du répéteur diffusant l’émission d’un opérateur sur le RRF. Ce sont les seules données qui intéressent Spotnik2HMI, qui lui permettent d’indiquer sur l’écran Nextion l’activité sur le salon sélectionné. Le reste, comme l’affichage de l’heure ou du logo du département du répéteur RRF actif, est le résultat d’un traitement propre à Spotnik2HMI, que ce soit au niveau des programmes Python ou au niveau du logiciel dédié chargé dans l’écran Nextion.
L’instabilité observée suite à l’installation de Spotnik2HMI a donc finalement été ciblée grâce aux traces de debug Python, affichées sur la console à chaque anomalie de traitement dans les fichiers spotnik2hmi.py et fonctions.py présentes dans /opt/spotnik/spotnik2hmi:
Pour rappel, le mot de passe par défaut est spotnik.
Après avoir procédé à une petite séance d’homogénéisation de l’indentation du code, puis à sa mise à jour pour être raccord avec les API actuelles, et enfin en réorganisant le code pour refaire fonctionner la gestion des différents niveaux de rétroéclairage de l’écran Nextion, j’ai fini par retrouver un fonctionnement stable de l’ensemble.
Je joins ci-dessous les fichiers réactualisés pour la compatibilité avec la version 4.1 de Spotnik, qu’il suffit de déposer en lieu et place de ceux créés lors de l’installation de Spotnik2HMI, à l’aide de WinSCP par exemple. Il s’agit de fichiers permettant un bon fonctionnement, mais cependant toujours en cours d’amélioration, notamment au niveau de l’adaptation du code source. J’indiquerai dans l’en-tête de ce billet les dates de mise à jour. L’objectif n’est pas de créer un version parallèle de Spotnik2HMI, ni même de m’approprier ce projet. J’espère que vous l’aurez compris.
Télécharger fonctions.py
Télécharger spotnik2hmi.py
Autres sources d’ennuis
Vérifier que tout est OK dans votre fichier /boot/armbianEnv.txt:
verbosity=1
logo=disabled
console=ttyS0,115200 loglevel=7
disp_mode=1366x768p60
overlay_prefix=sun8i-h3
overlays=analog-codec uart1 uart2 usbhost2 usbhost3
rootdev=UUID=c6d5c841-3071-4135-aaa0-bc86a16801f5
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
Vérifier que vous n’avez pas plusieurs interfaces série déclarées pour Spotnik2HMI dans /etc/rc.local:
#!/bin/sh -e
#
## demarrage VPN Hamnet
# pon hamnet
#Voie radio1 7 = ptt / 10 = squelch
echo "7" > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio7/direction
echo "10" > /sys/class/gpio/export
sleep 1
echo in > /sys/class/gpio/gpio10/direction
#Voie radio2 6 = ptt / 2 = squelch
echo "6" > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio6/direction
echo "2" > /sys/class/gpio/export
sleep 1
echo in > /sys/class/gpio/gpio2/direction
#sleep 1
## demarrage svxreflctor a configurer salon regional
## svxreflector --config=/etc/spotnik/svxreflector.conf --daemon --logfile=/tmp/svxreflector.log
sleep 1
## demarrage svxlink sur le dernier salon utilise voir network
/etc/spotnik/restart
sleep 5
## demarrage GUI
cd /opt/spotnik/gui
make start
sleep 10
python /opt/spotnik/spotnik2hmi/spotnik2hmi.py ttyS1 9600 &
#sleep 10
#python /opt/spotnik/spotnik2hmi/spotnik2hmi.py ttyS1 9600
#sleep 10
#python /opt/spotnik/spotnik2hmi/spotnik2hmi.py ttyAMA0 9600
## demarrage du RRFRaptor
# /opt/RRFRaptor/RRFRaptor.sh start
exit 0
Ci-dessus, il faut vérifier qu’une seule ligne contenant le texte python /opt/spotnik/spotnik2hmi/spotnik2hmi.py n’est pas précédée du caractère #.
On voit que la ligne 30 est celle qui permet d’exécuter Spotnik2HMI dans mon fichier, alors que les lignes 32 et 34 sont mises en commentaire (donc non exécutées) à l’aide du caractère # en début de chaque ligne.