Raspberry Pi Radio partie 6 : relancement automatique

Cet article suit celui-ci!

Prérequis

Avoir une source audio fonctionnelle.

Note : pour le moment, ce tuto ne permet d’entretenir QUE le “MPD n°1”, l’original, la première source que vous ayez fonctionnelle. Si vous avez plusieurs sources simultanées, comme décrit ici, je n’ai pas encore creusé pour relancer ces sources secondaires.

Procédure

Installer MPC

MPC est un programme de contrôle de MPD, qui n’aime pas du tout prendre des paramètres de contrôle externes (ce qu’on appelle des arguments). Du coup, je ne sais pas comment il s’y prend, mais il y arrive, et bougrement bien.

sudo apt update && sudo apt install mpc

Idée du script

L’idée maintenant va être de construire un script qui va surveiller que la radio tourne toujours, à intervalles réguliers – ce que l’on appelle un watchdog, ou chien de garde.
Ceci va être fait en interrogeant MPC, en regardant sa réponse, et en fonction d’un mot-clé dedans, nous relancerons MPD via MPC.
Mais quelle est la réponse en question?
Nous pouvons faire le test suivant : alors que MPD tourne et donc, que vous avez une musique qui joue sur votre radio, tapez simplement :

mpc

Vous devriez recevoir une réponse du genre :

~/bin$ mpc
Noriyasu Agematsu - Dawn
[playing] #1070/3544 0:08/3:21 (3%)
volume: n/a repeat: on random: on single: off consume: off

Maintenant, coupez la musique (autant utiliser MPC):

mpc stop

(Notez que cette commande renvoie la même chose que si vous tapez ensuite “mpc” tout seul) :

~/bin$ mpc
volume: n/a repeat: on random: on single: off consume: off

Comme vous pouvez le voir, un mot-clé manque maintenant : playing. C’est donc sur lui que nous allons nous baser pour déterminer si la radio joue quelque chose.
Note : si le mot “playing” est dans le titre ou l’artiste de la chanson, cela ne changera en fait rien : la radio sera de toute façon en train de jouer un morceau.

Le script

Placez-vous dans un répertoire dédié à vos scripts (c’est plus propre, mais pas obligatoire), puis :

touch radwatchdog.sh
chmod +x radwatchdog.sh
nano radwatchdog.sh

Nous avons créé, puis autorisé à exécuter du code notre script, que voici :

#!/bin/bash
MPCStatus = $(mpc)
if !( [[ $MPCStatus = *playing* ]] )
then
mpc --format = "%artist%|%title%|%track%|%album%"
mpc random on
mpc repeat on
mpc shuffle
mpc play
fi

Bien bien bien. Alors, quoi qu’on a fait?
MPCStatus est une variable qui va récupérer le résultat de la commande mpc, telle que vous l’entrez à la main dans la console. En l’occurrence, MPCStatus va contenir la chaîne de caractères avec, entre autres, le fameux playing qui nous intéresse tant.

La ligne d’après dit, en expression régulière (de la magie noire, en d’autres termes), “si MPCStatus ne contient pas le mot playing“, autrement dit, cette condition nous dit “si la radio est morte” et la ligne du dessous “alors…”

Et dans ce alors, j’y suis allé franco, tel James :
je remets en forme les métadonnées (que nous utiliserons dans un prochain article) envoyées par MPD, donc artiste, titre de la musique, etc;
je force la fonction aléatoire (shuffle) à activée,
je force la répétition de playlist,
je randomise ladite playlist – sans cela, à chaque plantage de la radio, la playlist recommencera toujours dans le même ordre, et les fonctions aléatoires étant connues pour renvoyer toujours les mêmes suites de nombres (fonction shuffle ci-dessus), en secouant la playlist complète tout en activant le shuffle, je minimise les chances que les auditeurs entendent toujours le même ordre de musiques, surtout post-plantage.
– enfin, je relance la lecture – sans préciser de numéro de piste dans la playlist, pas besoin because j’ai fait en sorte que tout soit secoué à chaque plantage. Sans numéro après mpc play, la 1ère piste est jouée.

Sauvegardez et quittez.

Automatiser le lancement du script

Nous allons à présent lancer automatiquement le script, via le planificateur cron.

crontab -e

Choisissez Nano s’il n’est pas déjà l’éditeur par défaut, puis entrez la ligne suivante au bas du fichier :

*/5 * * * * /chemin/vers/radwatchdog.sh

Ceci, conformément aux exemples données par Crontab Guru, lance le script toutes les 5 minutes – comme cela, pas de trop longs silences!

Conqueluzion

Nous avons maintenant de quoi redémarrer notre radio quand elle faillit. Dans le prochain article, nous allons tenter de faire en sorte que l’ensemble de nos sources puissent être redémarrées de pareille façon!

Leave a Reply

Your email address will not be published. Required fields are marked *