Lancer automatiquement notre webradio depuis un PI2b

Bonjour à tous,

Je suis nouveau sur ce forum. Je programme pour notre association Radio Les Floralies, une webradio chaurienne.

Je souhaite lancer automatiquement le flux de notre webradio au démarrage d’un pi2b. Pour cela le Pi est équipé d’une antenne wifi, est dans un boitier. Il est alimenté par un transformateur qui dispose sur son fil d’un interrupteur marche/arrêt, son Os est Rasbian 32 bits.

J’ai deux PI2b avec la même antenne wifi. Sur un mon processus fonctionne et sur l’autre la webradio ne se lance pas !
Dans les deux cas, le script fonctionne j’ai vérifié, c’est le lancement au démarrage qui ne s’effectue pas pour le second PI.

Avez vous des idées ? Quelque chose à vérifier ou à configurer sur le pi qui ne fonctionne pas ? Merci !

Contenu du fichier : /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
cd /
cd home
cd webradio 
cd Documents
cd webradio
./scriptradio.sh
exit 0

Et voici mon script (avec chmod exécution réalisé :

#!/bin/bash
mpc add http://lesfloralies.ovh:8000/floralies.ogg
mpc play

Au démarrage, le PI se connecte au wifi. (sudo nano /etc/wpa_supplicant/wpa_supplicant.conf)

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=FR

network={
ssid=« BoxOrange »
psk=« motDePasse »
}

Sur le second Pi, si je tape mpc après lé démarrage dans une console, j’ai le message suivant :

webradio@raspberrypi:~ $ mpc
volume: n/a repeat: off random: off single: off consume: off
ERROR: Failed to decode http://lesfloralies.ovh:8000/floralies.ogg; CURL failed: Couldn't connect to server

Ton problème n’est pas le script au démarrage, mais le script en lui même.

Ont peux tu voir ton scriptradio.sh ?

Ce message d’indique qu’il n’arrive pas à rejoindre l’hôte (soit lesfloralies.ovh). Alors ton script peut ce lancer au démarrage mais vu cette erreur, il se ferme auto, comme quand tu test ta commande.

Si tu veux tester un autre adresse pour t’aider à débug ton problème, tu peux tester avec ma radio qui roule depuis 7 ans déjà…

http://radio.levelkro.net:8000/radio.ogg

Car l’une de mes hypothèse est un bug avec l’extension .ovh ( qui n’est pas très répendu).

Merci levelKro pour ta réponse. Les deux Rasperry Pi utilisent cette même adresse « http://lesfloralies.ovh:8000/floralies.ogg » (qui fonctionne et est en ligne, puisque le site de la webradio l’utilise). Pourquoi l’un accède à l’adresse et pas l’autre. Et pourquoi le deuxième qui ne le fait pas au démarrage, fonctionne quand je lance directement le script ?
Je me demande surtout si dans ma démarche d’un pi2 à l’autre j’ai oublié un paramétrage.

J’utilise cette extension .ovh et son nom de domaine depuis 2 ans, pas de soucis particulier avec.

Le script est indiqué dans le premier message :
Et voici mon script (avec chmod exécution réalisé) :

#!/bin/bash
mpc add http://lesfloralies.ovh:8000/floralies.ogg
mpc play

Problème : Pas possible de joindre un hôte distant
Tests à faires;

  • Tester avec la commande « ping ».
  • Tenter de télécharger la réponse avec « wget », le service Shoutcast suit le protocole HTTP et peut dont télécharger.

Résultats;
Si tout devrais marcher, tu réussiras les Ping, et tu arrivera a télécharger le stream de la radio. Si tu as des problèmes de connectivités, tu devra pousser le debug plus loin.

Mais avec Ping, tu auras déjà un message si il n’arrive pas à obtenir l’adresse IP. Si tu n’arrive pas à télécharger avec Wget, tu verras également un message, soit un code HTTP, soit une explication un peu plus détaillés.


Problème : Lancement au démarrage
Hypothèse : Le service Wifi/networking n’est pas démarré ou le lien n’est pas établie

Il ce peut que pour une raison, le lien au Wifi soit plus lent qu’espéré. Pour remédier au problème, tout en ajoutant un mode de lecture continue, tu peux songer à vérifier la présence du process.

En effectuant un surveillance d’un process, tu peu le redémarrer automatiquement si il ferme. ceci peut aussi résoudre le problème en cas de redémarrage de la lecture ou de la perte du lien (wifi comme avec la radio par l’application). Copie ce code et avec un cron job, fait un « run » à tout les 1 minute (ou au délais que tu veux).

#!/bin/bash
if pgrep -f "mpc play" > /dev/null 
then
	#is running
	exit 
else
	#not running, restart them
	nohup /home/webradio/documents/webradio/scriptradio.sh >/dev/null 2>&1 &
fi

Merci beaucoup. Sur la même idée. Pourriez vous m’indiquer comment automatiser le lancement de mon script par exemple 2 minutes après le lancement du Raspberry PI (avec du code).

J’ai ajouté un sleep d’une minute au démarrage de mon script et cela fonctionne. L’hypothèse que le wifi ne soit pas lancé avant l’exécution du script est très probable.

#!/bin/bash
sleep 1m
mpc add http://lesfloralies.ovh:8000/floralies.ogg
mpc play

Great!

Selon l’appareil, la force du signal et ou est lancé la demande de connection, le délais peut être long ou court.

Même sous Windows, en filaire, le réseau prend un 15aine de seconde, pour démarrer les services et établir les liens (vitesse en SSD). Pour éviter de fausse erreur par exemple pour mes lecteurs connectés (réseau), j’attend toujours un peu au login avant d’aller sur le bureau.

En Wifi c’est encore un peu plus long, vu le préambule requis au moment du login, ce qui n’existe pas comme tel en filaire.

Copie ce code et avec un cron job, fait un « run » à tout les 1 minute (ou au délais que tu veux).

Le dispositif fonctionne bien désormais. Pour autant il arrive que du côté de la diffusion elle soit stoppée puis redémarrée. Le dispositif ne relance pas la lecture automatiquement aujourd’hui. LevelKro pouvez vous m’expliquer le code que vous avec écrit. Et éventuellement quel ligne de commande utiliser pour le lancer par exemple toutes les minutes (cronjob). Merci

#!/bin/bash
if pgrep -f "mpc play" > /dev/null 
then
	#is running
	exit 
else
	#not running, restart them
	nohup /home/webradio/documents/webradio/scriptradio.sh >/dev/null 2>&1 &
fi

Le principe est simple…

Crée le fichier SH comme suit et place le par exemple dans /home/webradio pour donner genre /home/webradio/check.sh

#!/bin/bash
if pgrep -f "mpc play" > /dev/null 
then
	#is running
	exit 
else
	#not running, restart them
	nohup /home/webradio/documents/webradio/scriptradio.sh >/dev/null 2>&1 &
fi

Dans ce code, le « mpc play » est la commande a trouver dans les process
Si il le trouve, y fait rien, sinon (else), il lance la commande pour lancer le processus, via le script que tu as fait.

Ouvre l’éditeur des crons Jobs avec crontab -e, il va te demander quel éditeur de texte tu veux, prend nano (1).

Dans le document, place à la fin ceci; * * * * * /home/webradio/check.sh sauvegarde avec CTRL+X , répond ‹ y › (oui) .

Et voilà!

Merci. Super. Il n’y a pas de notion de délai d’exécution à ajouter. Du genre exécute check.sh toutes les minutes ?

Oups pardon j’ai ma réponse, je peux choisir ici le temps.

Un Cron s’actualise lui même a chaque minute. Tu ne peut pas le faire à la seconde.

Pour chaque minute c’est que des astérisque (*). Le temps d’exécution et instantané (!). Après, le script cron se fou un peu si l’application a réussi sont lien pour écouter ou est en train de le faire, il regarde que la liste des process, un peux comme si tu fait ps -ax et tu cherche ton process dans la liste.

Après, c’est de le rendre au 2, 3, 5 etc… minutes si tu veux éviter des répétitions trop rapproché, mais en principe, une link se fait dans les 15 secondes (du au buffering et vitesse du rpi) et te donne dont 45 seconde « idle » si le programme re-plante, faute de stream ou erreur. Après tu peux diriger (>) un log vers un fichier du output pour voir l’erreur.

Si tu as besoin de quoi de plus poussé, il faut voir à coder un « surveillant », mais c’est un autre sujet.


Tout cela fonctionne bien désormais. Une autre question. Existe t-il une commande pour lire directement un fichier sonore .mp3 (ou wav ou autre) au lancement d’un pi. Histoire de faire patienter l’auditeur, le temps de la connexion wifi et l’accès au flux de la webradio. Le fichier sonore dirai ‹ Bienvenue à vous ›.
Merci.

regarde du côté de « aplay » si je me trompe pas

J’ai fais de quoi du genre avec Raspbian Desktop et le son de Windows 95, lol.

C’est parfait avec aplay. Merci beaucoup !