{"id":231,"date":"2022-02-11T21:45:19","date_gmt":"2022-02-11T19:45:19","guid":{"rendered":"https:\/\/tartine.linkpc.net\/?p=231"},"modified":"2022-02-11T21:45:19","modified_gmt":"2022-02-11T19:45:19","slug":"raspberry-pi-radio-partie-6-relancement-automatique","status":"publish","type":"post","link":"https:\/\/blog.nibelheim.fr\/?p=231","title":{"rendered":"Raspberry Pi Radio partie 6 : relancement automatique"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cet article suit <a href=\"https:\/\/tartine.linkpc.net\/?p=221\">celui-ci<\/a>!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequis\">Pr\u00e9requis<\/h2>\n\n\n\n<p class=\"has-black-color has-text-color wp-block-paragraph\">Avoir une source audio fonctionnelle.<\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color wp-block-paragraph\">Note : pour le moment, ce tuto ne permet d&#8217;entretenir QUE le &#8220;MPD n\u00b01&#8221;, l&#8217;original, la premi\u00e8re source que vous ayez fonctionnelle. Si vous avez plusieurs sources simultan\u00e9es, <a href=\"https:\/\/tartine.linkpc.net\/?p=218\">comme d\u00e9crit ici<\/a>, je n&#8217;ai pas encore creus\u00e9 pour relancer ces sources secondaires.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"procedure\">Proc\u00e9dure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Installer MPC<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.musicpd.org\/doc\/mpc\/html\/\">MPC<\/a> est un programme de contr\u00f4le de MPD, qui n&#8217;aime pas du tout prendre des param\u00e8tres de contr\u00f4le externes (ce qu&#8217;on appelle des arguments). Du coup, je ne sais pas comment il s&#8217;y prend, mais il y arrive, et bougrement bien.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt install mpc<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Id\u00e9e du script<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;id\u00e9e maintenant va \u00eatre de construire un script qui va surveiller que la radio tourne toujours, \u00e0 intervalles r\u00e9guliers &#8211; ce que l&#8217;on appelle un <em>watchdog<\/em>, ou chien de garde.<br>Ceci va \u00eatre fait en interrogeant MPC, en regardant sa r\u00e9ponse, et en fonction d&#8217;un mot-cl\u00e9 dedans, nous relancerons MPD via MPC.<br>Mais quelle est la r\u00e9ponse en question?<br>Nous pouvons faire le test suivant : alors que MPD tourne et donc, que vous avez une musique qui joue sur votre radio, tapez simplement :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mpc<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous devriez recevoir une r\u00e9ponse du genre :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">~\/bin$ mpc<br>Noriyasu Agematsu - Dawn<br>[playing] #1070\/3544 0:08\/3:21 (3%)<br>volume: n\/a repeat: on random: on single: off consume: off<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant, coupez la musique (autant utiliser MPC):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mpc stop<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(Notez que cette commande renvoie la m\u00eame chose que si vous tapez ensuite &#8220;mpc&#8221; tout seul) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">~\/bin$ mpc<br>volume: n\/a repeat: on random: on single: off consume: off<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Comme vous pouvez le voir, un mot-cl\u00e9 manque maintenant : <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">playing<\/mark><\/strong>. C&#8217;est donc sur lui que nous allons nous baser pour d\u00e9terminer si la radio joue quelque chose.<br><em>Note : si le mot &#8220;playing&#8221; est dans le titre ou l&#8217;artiste de la chanson, cela ne changera en fait rien : la radio sera de toute fa\u00e7on en train de jouer un morceau.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le script<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Placez-vous dans un r\u00e9pertoire d\u00e9di\u00e9 \u00e0 vos scripts (c&#8217;est plus propre, mais pas obligatoire), puis :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">touch radwatchdog.sh<br>chmod +x radwatchdog.sh<br>nano radwatchdog.sh<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons cr\u00e9\u00e9, puis autoris\u00e9 \u00e0 ex\u00e9cuter du code notre script, que voici :<\/p>\n\n\n\n<pre id=\"bin-bash\" class=\"wp-block-preformatted\">#!\/bin\/bash<br>MPCStatus = $(mpc)<br>if !( [[ $MPCStatus = *playing* ]] )<br>then<br>    mpc --format = \"%artist%|%title%|%track%|%album%\"<br>    mpc random on<br>    mpc repeat on<br>    mpc shuffle<br>    mpc play<br>fi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bien bien bien. Alors, quoi qu&#8217;on a fait?<br><strong>MPCStatus <\/strong>est une variable qui va r\u00e9cup\u00e9rer le r\u00e9sultat de la commande <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">mpc<\/mark>, telle que vous l&#8217;entrez \u00e0 la main dans la console. En l&#8217;occurrence, MPCStatus va contenir la cha\u00eene de caract\u00e8res avec, entre autres, le fameux <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">playing <\/mark><\/strong>qui nous int\u00e9resse tant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La ligne d&#8217;apr\u00e8s dit, en expression r\u00e9guli\u00e8re<em> (de la magie noire, en d&#8217;autres termes)<\/em>, <em>&#8220;si MPCStatus ne contient pas le mot <strong>playing<\/strong>&#8220;,<\/em> autrement dit, cette condition nous dit &#8220;si la radio est morte&#8221; et la ligne du dessous &#8220;alors&#8230;&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et dans ce <strong>alors<\/strong>, j&#8217;y suis all\u00e9 franco, tel James :<br>&#8211; <strong>je remets en forme les m\u00e9tadonn\u00e9es<\/strong> (que nous utiliserons dans un prochain article) envoy\u00e9es par MPD, donc artiste, titre de la musique, etc;<br>&#8211; <strong>je force la fonction al\u00e9atoire<\/strong><em> (shuffle) <\/em>\u00e0 activ\u00e9e,<br>&#8211; <strong>je force la r\u00e9p\u00e9tition de playlist<\/strong>,<br>&#8211; <strong>je randomise ladite playlist<\/strong> &#8211; sans cela, \u00e0 chaque plantage de la radio, la playlist recommencera toujours dans le m\u00eame ordre, et les fonctions al\u00e9atoires \u00e9tant connues pour renvoyer toujours les m\u00eames suites de nombres <em>(fonction shuffle ci-dessus)<\/em>, en secouant la playlist compl\u00e8te <em>tout en activant le shuffle<\/em>, je minimise les chances que les auditeurs entendent toujours le m\u00eame ordre de musiques, surtout post-plantage.<br>&#8211; enfin, <strong>je relance la lecture<\/strong> &#8211; sans pr\u00e9ciser de num\u00e9ro de piste dans la playlist, pas besoin because j&#8217;ai fait en sorte que tout soit secou\u00e9 \u00e0 chaque plantage. Sans num\u00e9ro apr\u00e8s <strong>mpc play<\/strong>, la 1\u00e8re piste est jou\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sauvegardez et quittez.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Automatiser le lancement du script<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons \u00e0 pr\u00e9sent lancer automatiquement le script, via le planificateur cron.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">crontab -e<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Choisissez Nano s&#8217;il n&#8217;est pas d\u00e9j\u00e0 l&#8217;\u00e9diteur par d\u00e9faut, puis entrez la ligne suivante au bas du fichier :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">*\/5 * * * * \/chemin\/vers\/radwatchdog.sh<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci, conform\u00e9ment aux exemples donn\u00e9es par <a href=\"https:\/\/crontab.guru\/examples.html\">Crontab Guru<\/a>, lance le script toutes les 5 minutes &#8211; comme cela, pas de trop longs silences!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conqueluzion\">Conqueluzion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons maintenant de quoi red\u00e9marrer notre radio quand elle faillit. Dans le prochain article, nous allons tenter de faire en sorte que l&#8217;ensemble de nos sources puissent \u00eatre red\u00e9marr\u00e9es de pareille fa\u00e7on!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article suit celui-ci! Pr\u00e9requis Avoir une source audio fonctionnelle. Note : pour le moment, ce tuto ne permet d&#8217;entretenir QUE le &#8220;MPD n\u00b01&#8221;, l&#8217;original, la premi\u00e8re source que vous ayez fonctionnelle. Si vous avez plusieurs sources simultan\u00e9es, comme d\u00e9crit ici, je n&#8217;ai pas encore creus\u00e9 pour relancer ces sources [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[10,13,24,25],"class_list":["post-231","post","type-post","status-publish","format-standard","hentry","category-raspberry-pi","tag-bash","tag-cron","tag-radio","tag-raspberry"],"_links":{"self":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231"}],"version-history":[{"count":0,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}