0

Utilisation du capteur de luminosité de la squeezebox radio en domotique

Squeezebox RadioLes 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

FHEM graph of the squeezebox light sensor

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

  1. Squeezebox SSH public key authentication : Comment activer l’authentification par clefs SSH sur une Squeezebox
  2. OpenSSH: Legacy options : support des anciennes versions de SSH

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *