Radio DIY intégrée à Jeedom en SSH

Aujourd’hui je laisse Sylvain vous présentez une réalisation d’une radio DIY qu’il a fait pour une enceinte connectée à base de Pi Zéro et le tout piloté par Jeedom via mon plugin SSH Commander.

 

sshcommander_icon

 

 

 

Bonjour,

je souhaiterais vous présenter une réalisation rendue possible grâce notamment à Jeedom et à son plugin SSH Commander, développé par Lunarok : une radio intégrée au bandeau de lumière de notre salle de bain, contrôlée au choix grâce à un interrupteur Enocean double ou via une page web.

Le Cahier des charges de la radio DIY

Nous souhaitions avoir la radio dans notre salle de bain, avec les contraintes suivantes :

– invisible ou presque (intégrée au mobilier conçu et fabriqué pour l’occasion)

– consomme très peu

– pouvoir lire les radios internet et la musique stockée sur notre NAS

– contrôlable simplement à l’aide d’un interrupteur local (avant la douche du matin, les paupières encore cimentées, pas facile de sortir son smartphone pour lancer la musique !)

– intégrée à Jeedom et contrôlable via des scénarios

– si nécessaire on puisse en avoir un contrôle plus poussé par une appli/une page web.

Le matériel

Après pas mal de recherches, le matériel le plus adapté nous a semblé être :

– un raspberry pi zero WH ~15 €

– son alimentation officielle ~8 €

– un Hifiberry MiniAmp ~15 €

– le boîtier Hifiberry correspondant ~10 €

– des hauts-parleur large bande encastrables Visaton 3W ~30 €

– un hub USB/Ethernet pour éviter d’avoir recours au Wifi ~8 €

– un bouton TriO2Sys Enocean double ~30 €

Le tout nous a donc coûté environ 115 €, mais il y a possibilité de réduire la facture si vous avez un adaptateur secteur usb qui traîne, si une connexion wifi ne vous dérange pas, si des haut-parleurs de moindre qualité vous semblent suffisants, si vous optez pour un interrupteur Xiaomi … La note pourra alors descendre aux alentours de 70 €.

Le logiciel

Encore un peu de tâtonnements, pour arriver à la solution suivante, qui a l’avantage d’être très légère, très souple et très fiable (merci au passage à un membre du forum framboise314.fr qui me l’a proposée) :

– une distribution Raspbian lite (donc sans interface graphique)

– un serveur de musique mpd. Il a l’énorme avantage de fonctionner en tant que daemon, c’est-à-dire de tourner en tâche de fond et de pouvoir être sollicité par plusieurs clients en même temps.

– son client en lignes de commandes intégré par défaut, à savoir mpc (un client en lignes de commandes, tiens tiens, à quoi ça pourrait bien nous servir 🙂 ? Suspense !)

– un client web très léger, ympd.

L’installation

* Raspbian

installation tout ce qu’il y a de plus classique, documentée sur de nombreux sites (par exemple https://raspbian-france.fr/raspberry-pi-sans-ecran-sans-clavier/ )

– En résumé, on télécharge la dernière image dans sa version « lite », on la « grave » sur la carte SD par exemple grâce à un logiciel du type Etcher. On ajoute un fichier vide nommé « ssh » dans la racine de la partition « boot », pour pouvoir se connecter au Pi zero par ssh. On ajoute la ligne suivante dans le fichier /boot/config.txt (pour que le hifiberry miniamp soit reconnu) :

dtoverlay=hifiberry-dac

et les lignes suivantes si l’on souhaite désactiver ces interfaces :

dtoverlay=pi3-disable-wifi

dtoverlay=pi3-disable-bt

Pour plus de détails sur la configuration des modules du config.txt, voir https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README

– On connecte le Hifiberry Miniamp sur les GPIO du Pi zero, on met la carte SD, on installe le tout dans le boitier, on connecte les câbles haut-parleur, puis le hub USB/RJ45 sur le port micro-usb données, et enfin l’alimentation sur le port micro-usb PWR.

– On laisse passer un peu de temps pour que le système se lance, puis on trouve l’adresse IP de notre joujou (pour ma part, trouvée par l’interface de ma freebox, menu « périphériques réseau »).

– Puis on s’y connecte en ssh avec l’utilisateur pi et le mot de passe par défaut « raspberry ». On s’empresse alors de modifier ce mot de passe, en passant par l’interface de gestion « raspi-config ».

– Pour fixer l’adresse IP de votre radio, il faut déterminer le nom de votre interface réseau (à l’aide de la commande ifconfig), puis ça se passe dans le fichier /etc/dhcpcd.conf, dans lequel il faut renseigner les lignes suivantes :

section : interface [nom de votre interface réseau, souvent eth0]

ligne1 : static ip_address=192.168.x.x [adresse ip que vous souhaitez donner à votre pi zero]

ligne2 : static routers=192.168.x.x [adresse ip de la passerelle, généralement la box internet]

ligne3 : static domain_name_servers=192.168.1.1 [adresse ip du serveur DNS, généralement la box internet]

– On fait en sorte que le volume du Miniamp puisse être réglé via alsa, en modifiant le fichier /etc/asound.conf comme suit (sudo nano /etc/asound.conf ) :

pcm.!default {
type hw card 0
}
ctl.!default {
type hw card 0
}

pcm.hifiberry {
type softvol
slave.pcm « plughw:0 »
control.name « Master »
control.card 0
}

pcm.!default {
type             plug
slave.pcm       « hifiberry »
}

– Si la musique à lire est stockée ailleurs que sur la carte SD du Pi zero, on crée les montages disques nécessaires, via fstab ou autre méthode (cf ci-dessous pour celle que j’ai adoptée).

* Accès à la musique

– Mes fichiers musicaux sont stockés sur un NAS. Suite à quelques difficultés de montage par la voie classique (inscription en dur dans fstab), dues au fait que le montage était demandé avant la connexion effective au réseau, et faute d’avoir trouvé une solution plus élégante (elle doit exister, mais je n’ai pas assez cherché !), j’ai pris une voie détournée : j’ai créé un dossier scripts dans mon dossier home (cd /home/pi puis mkdir scripts), puis créé dedans un script avec la commande ad hoc :

nano montagenas.sh

Puis dans le fichier ainsi créé :

#!/bin/bash
#montage_nas

sudo mount -t nfs 192.168.1.xx:/chemin/vers/le/dossier/source /mnt/nas

Alors je l’ai rendu exécutable

chmod +x montagenas.sh

J’ai ajouté mon dossier scripts aux chemins contenant des executables

nano /home/pi/.bashrc

Enfin ajout de la ligne suivante à la fin de ce fichier :

PATH="$PATH:/home/pi/scripts

et … la suite dans la partie Jeedom !

* mpd/mpc

– On met à jour le système

sudo apt-get update

sudo apt-get upgrade

– on installe mpd

sudo apt-get install mpd

– on adapte le fichier de configuration de mpd, à savoir /etc/mpd.conf

sudo nano /etc/mpd.conf

notamment les lignes suivantes :

music_directory        « /mnt/nas/musique »  # si votre musique est stockée dans un sous-dossier « musique » du montage NAS que vous avez effectué

playlist_directory        « /mnt/nas/musique/playlists » # il faut penser à créer avant un dossier « playlist » dans votre dossier musique, pour y mettre les listes de lecture, notamment celle des radios (cf ci-dessous)

sticker_file                   « /mnt/nas/musique/sticker.sql »

bind_to_address        « any »

audio_output {
type        « alsa »
name        « My ALSA Device »
device        « hw:0,0 »    # optional
mixer_type      « software »      # optional
mixer_device    « default »    # optional
mixer_control    « Master »        # optional
mixer_index    « 0 »        # optional

* ympd

C’est la page web qui permet d’accéder à toutes les fonctions de mpd, et notamment choisir une liste de lecture spécifique, un album ou un titre particulier à lire … Qu’on utilise donc quand on est suffisamment éveillés et qu’on a suffisamment de temps pour sortir le smartphone/ouvrir la page sur un ordinateur quelconque, et qu’on veut écouter un artiste/album/morceau spécifique.

pour l’installer, rendez-vous sur le site suivant : https://ympd.org/. Télécharger la version raspbian, et exécuter la commande mentionnée pour décompresser l’archive :

tar -xvf ympd-1.2.3-armhf.tar.bz2

Il faut savoir qu’il existe aussi de nombreux clients mpd, que ce soit sous la forme de logiciel pour les PC ou d’applis pour les smartphones. Elles présentent d’ailleurs souvent mieux que ympd (affichage des pochettes, des paroles, de l’article wikipedia lié …).

Jeedom

Enfin, la raison première de cet article ! J’ai adopté Jeedom il y a quelques mois, et comme beaucoup, j’ai maintenant comme réflexe systématique de me poser la question « Comment je relie ça à Jeedom ? » à chaque fois que je bricole ou achète quelque-chose. Et pareil pour cette radio DIY.

Etant équipé principalement en modules Enocean, j’y voyais la possibilité de contrôler les fonctions principales de ma radio grâce à un interrupteur double TriO2sys style Céliane. Celui-ci permet en effet de déclencher jusqu’à 8 actions différentes (4 appuis simples et 4 appuis multiples). Parfait pour lire la liste de lecture des radios, la faire défiler, augmenter et baisser le volume, stopper la lecture ; en plus de l’allumage/extinction de la VMC que je lui avais déjà assignée. Et honnêtement c’est amplement suffisant la plupart du temps, parce que dans ces circonstances, on a tendance à toujours écouter une de nos 4 radios préférées …

L’autre intérêt de Jeedom est de pouvoir contrôler totalement la radio, via des scenarios : extinction systématique la nuit et en cas d’absence (avec en plus du matériel déjà cité un micromodule ON/OFF Nodon/Evology sur l’alimentation du Pi zero), allumage peu de temps avant notre réveil ou à notre retour, notifications TTS, et quelques raffinements supplémentaires présentés ci-dessous.

Voici les différentes étapes pour l’intégration :

– installer le génial plugin « SSH commander » développé par Lunarok

– créer un équipement, nommé « Pi zero » par exemple (ou « radio salle de bain » …)

– le paramétrer avec la bonne IP, le bon port (22 si vous ne l’avez pas modifié) les identifiants/mot de passe raspbian (pi/votre nouveau mot de passe)

– l’activer et le rendre visible

– sauvegarder

– et puis on entre dans le vif du sujet, à savoir la création des commandes. Pour ce faire, rendez-vous dans l’onglet « commandes » (logique, non 🙂 ?), puis bouton « ajouter une commande », choisir le type « action », et « défaut », la nommer, la sauvegarder, puis dans le champ « commande » qui est alors apparu, écrire la commande ssh que vous souhaitez utiliser. Pour ma part, j’ai créé des commandes générales pour gérer le pi zero, un appel du script de montage du NAS en NFS, et toutes les commandes liées à MPD/MPC. Voici le détail :

– une fois que c’est fait, il n’y a plus qu’à appeler ces commandes intelligemment. Dans notre cas, voici les scenarios réalisés :

– extinction à 23h ou au passage au mode « absence »

– allumage à 6h30 ou au passage au mode « présence »,

– lancement de la lecture

– défilement de la liste de lecture et changement du volume

 

– arrêt de la lecture

 

Et puis le widget qui est visible sur notre design :

 

 

Bilan

Ce qui est super avec ce fonctionnement, c’est que la plupart du temps, un unique appui sur un interrupteur mural permet de lancer la radio qu’on écoute le plus souvent, et ce au volume idéal. Si un jour vous souhaitez écouter une musique précise sur votre radio DIY issue de votre riche bibliothèque musicale, vous passez par ympd (ou une appli client mpd) pour la lancer (« allez les enfants, si vous venez prendre votre douche je vous mets « Au feu les pompiers » en version électro ! »), et en fait vous préférez écouter la piste suivante (« Londres Brûle » 8-D ), un appui sur l’interrupteur mural et hop ! Et quand vous quittez la pièce, un autre appui sur l’inter mural et zou ! Enfin le silence 😀 .

Ca nous a semblé être le parfait compromis entre une utilisation quotidienne très fluide, et le fait de ne pas se priver de toutes les possibilités offertes par une radio connectée « moderne ». A l’usage, ça s’avère très pratique, la qualité sonore est au rendez-vous pour un usage de ce type, et la puissance largement suffisante (notre salle de bain fait environ 5 m²)..

En conclusion, merci Jeedom et merci Lunarok !

Sylvain.