Les squeezebox sont dotées d’un capteur de luminosité qui leur permet d’adapter le rétroéclairage de l’écran en fonction de de la luminosité ambiante. Malheureusement l’information ne remonte pas dans les événements de l’API CLI squeezebox, qui est utilisée dans le plugin squeezebox FHEM.
Une petite recherche google m’a amené sur ce lien : Squeezebox Radio Ambient Light Sensor , où Hessel Schut décrit comment accéder à l’info sur une squeezebox radio, qui rappelons-le est dotée d’un noyau Linux. J’ai créé un petit module FHEM utilisant ce hack.
A quoi ça sert ?
En domotique, on peut imaginer quelques utilisations pratiques? Par exemple:
- retour d’état sur l’allumage d’une pièce, si on utilise comme moi des actionneurs de base type Chacon
- allumer et éteindre la squeezebox radio de sa salle de bain quand on y entre (voir A bathroom-ready Squeezebox: hack de 2011 qui permet de réaliser cet petit automatisme directement sur la squeezebox. Celui-ci ne fait que passer la squeezebox en mute/unmute ce qui n’est pas optimum. FHEM offre plus de possibilités).
- vérifier que les volets sont bien fermés quand il fait chaud l’été …
- analyser son sommeil (sur le graphe plus bas on voit que je me suis levé tôt pour aller au boulot…)
Configuration préalable
On va mettre en place la possibilité d’interroger la squeezebox en SSH avec une authentification par clefs 1.
Activation du serveur SSH de la squeezebox
Commencer par ouvrir l’accès SSH sur la squeezebox radio :
Paramètres > Avancés > Connexion à Distance > Activer SSH
Le mot de passe est alors 1234
# ssh root@squeezeboxradio root@squeezeboxradio's password: This network device is for authorized use only. Unauthorized or improper use of this system may result in you hearing very bad music. If you do not consent to these terms, LOG OFF IMMEDIATELY. Ha, only joking. Now you have logged in feel free to change your root password using the 'passwd' command. You can safely modify any of the files on this system. A factory reset (press and hold add on power on) will remove all your modifications and revert to the installed firmware. Enjoy!
Sécuriser l’accès en changeant le mot de passe
$ passwd
Mise en place de l’authentification par clefs pour l’utilisateur fhem
Ça va permettre à FHEM d’interroger la squeezebox sans donner de mot de passe.
Sur la machine FHEM :
De manière à faire simple, on va d’abord autoriser le login sur l’utilisateur fhem. Pour cela il faut d’abord modifier le fichier /etc/passwd pour remplacer /bin/false par /bin/sh (on le rétablira après avoir fait cette config). La ligne correspondante est celle-ci :
fhem:x:999:20::/opt/fhem:/bin/false
On peut maintenant avoir un accès shell à l’environnemnt fhem :
# su - fhem $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/opt/fhem/.ssh/id_rsa): /opt/fhem/.ssh/id_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /opt/fhem/.ssh/id_rsa. Your public key has been saved in /opt/fhem/.ssh/id_rsa.pub. The key fingerprint is: ...
Copier la clef sur la squeezebox :
$ ssh-copy-id -i /opt/fhem/.ssh/id_rsa root@squeezeboxradio
Vérifier que ça marche : la commande qui suit doit nous permettre de nous connecter sans demande de mot de passe.
$ ssh -i /var/log/fhem/.ssh/id_rsa root@squeezeboxradio
Allons un peu plus loin :
$ ssh root@${HOST} 'cat /sys/bus/i2c/drivers/msp430/1-0010/ambient' |\
awk '{ printf "%4.4f\n",(11.51293 - log($1 + 1)) }'
renvoie la luminosité de la pièce sur une échelle de 0 à 10 (je reprend l’algorithme donné par Hessel Schut dans son article pour redresser approximativement les données du capteur qui ne sont pas linéaires).
Intégration dans FHEM
Il ne reste plus qu’à créer un petit module FHEM, téléchargeable ici : 98_SB_sensor.pm
Pour l’appeler, c’est très simple :
define SB_ambient SB_sensor squeezebox-radio attr SB_ambient alias luminosité cuisine attr SB_ambient icon weather_light_meter attr SB_ambient room Cuisine define FileLog_SB_ambient FileLog /var/log/fhem/FileLog_SB_ambient-%Y-%m.log SB_ambient attr FileLog_SB_red_ambient logtype text define weblink_SB_ambient SVG FileLog_SB_radio_sensor:EnO_brightness4:CURRENT attr weblink_SB_ambient alias luminosité cuisine attr weblink_SB_ambient label "Min $data{min1}, Max $data{max1}, Last $data{currval1}"
Remarques
La squeezebox Radio dispose d’autres capteurs, comme par exemple les indicateurs relatifs à la batterie, au chargeur et à l’alimentation. Le module FHEM peut être adapté au besoin pour intégrer ces infos.
Le mécanisme de récupération avec SSH est bloquant et ralentit la boucle d’évènements de FHEM. Sur mon Dockstar, ça posait problème, mais sur la cubieboard c’est OK. Il serait intéressant de mettre en place un autre mécanisme pour récupérer les données (MQTT ou serveur web sur la squeezebox ?)
Update 14/07/2017
S’il y a le message d’erreur suivant dans la log FHEM, il faut patcher le module
Unable to negotiate with 192.168.0.17 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
L’algorithme de chiffrement supporté par la squeezebox ne l’est plus par les dernières versions de la commande, par défaut 2. Il faut modifier le module pour passer la commande ssh avec la bonne option :
$cmd .= ' root\@';
est à remplacer par
$cmd .= '-oKexAlgorithms=+diffie-hellman-group1-sha1 root\@';
Références
- Squeezebox SSH public key authentication : Comment activer l’authentification par clefs SSH sur une Squeezebox ↩
- OpenSSH: Legacy options : support des anciennes versions de SSH ↩