Image Sonos
Envoyer du son sur Sonos via Crontab

Posséder des enceintes connectées et une domotique, c’est avoir la possibilité d’automatiser des annonces.

Image Sonos
Image Sonos

Au quotidien, il y a des choses que nous ne voulons pas rater, et je vais parler pour un exemple bête, du jour ou il faut sortir les poubelles pour que le camion les récupère. Chez moi, c’est le lundi soir pour une levée le mardi matin.

Le lien avec la domotique, l’automatisation : quoi qu’il se passe dans ma journée, le soir, une annonce sera diffusée dans la maison et ce grâce à python et au module « soco-cli »

Les pré requis, du moins dans ma version : une enceinte sonos et un actionneur domotique (j’utilise une tache Cron) , voici la préparation du puzzle :

A- Installer les outils sonos et trouver la commande

sudo apt-get update
sudo apt-get install -y pip
sudo -H pip install -U soco-cli 

B- Créer les sons et les tester

À défaut d’avoir un mp3 qui vous plaise, vous pouvez créer un son vous même avec une voix de synthèse. Pour cela, utilisons la commande espeak : (qui peut etre installée via « apt-get install espeak »)

espeak -v fr "les enfants, il faut mettre le couvert !" --stdout | ffmpeg -y -i - -acodec libmp3lame mettrelecouvert.mp3

Pour jouer ce mp3, il faut une enceinte, alors exécutez la commande « sonos-discover » pour lister les enceintes du réseau local. Un beau tableau avec le nom, l’adresse IP, le modèle apparaîtra..

Ensuite, par exemple, pour envoyer le fichier mettrelecouvert.mp3 sur l’enceinte Bureau :

sonos Bureau play_file mettrelecouvert.mp3

Il existe plein d’options, pour ajouter une temporisation, grouper ou séparer des enceintes, gérer le volume.. par exemple pour grouper, gérer le volume, lancer un mp3, les re-séparer et remettre un volume acceptable (j’ai ajouté une pause d’une seconde à chaque fois pour les délais liés aux commandes) :

sonos Cuisine if_stopped party_mode : wait 1s : _all_ volume 45 : wait 1s : Cuisine if_stopped play_file ilest20h30.mp3 : wait 1s : _all_ volume  15 : wait 1s : Parent ungroup : wait 1s : Chambre ungroup

Lister les favoris et jouer le premier :
sonos Cuisine list_favourite
sonos Cuisine play_favourite 1

C- Ajouter les taches dans Cron

Pour la v1 de mon installation, j’utilisais intégralement Cron, comme ce ci :

# Sonos Crontab pour rappel - sortir les poubelles -
## Le lundi soir 20h05 et 20h30
0,25 20 * * 1  /usr/local/bin/sonos Kitchen play_file  /home/pi/firewalla/config/ilfautsortirlapoubelle.mp3 

A titre d’information, voici les autres entrée ..

## Programme du matin en semaine
0 7 * * 1-5  sonos Kitchen if_stopped play_file ilest7hBonjour.mp3
0 8 * * 1-5  sonos Kitchen play_file ilest8h.mp3
## Programme du soir en semaine
30 18 * * 1-5  sonos Kitchen play_file ilest18h20.mp3 
0 19 * * 1-5  sonos Kitchen play_file mettrelatable.mp3
## Programme du weekend
0 19 * * 6,0  sonos Kitchen play_file ilest19h.mp3 
30 20 * * *    sonos Kitchen play_file ilest20h30.mp3 
45 11 * * 6,0  sonos Kitchen 

J’ai vite rencontré des limites car sur mon système, la Crontab est chargée au démarrage et nést ensuite, pas modifiable. Pour la prendre en compte, il basiquement, redémarrer le PC pour qu’elle soit actualisée.

J’ai donc décidé de lancer une commande bash chaque 10 minutes, ce bash va lui vérifier l’heure et effectuer la tache souhaitée. Voici la tache Cron

*/10 * * * *    /home/pi/sonos.sh  > /dev/null

Et le fichier sonos.sh :

#!/bin/bash
# Programme du matin en semaine

alias sbd="sonos Cuisine : 'living room' group Cuisine : wait 1s : Cheminee group Cuisine : wait 1s : Bureau group Cuisine"
alias bye="sonos Cuisine if_stopped volume 10 : wait 1s : Bureau if_stopped ungroup : wait 1s : Chambre if_stopped ungroup"

#Set default configuration
sonos 'living room' group Cuisine : wait 1s : Cheminee group Cuisine 

if [[ $(date +%u) -le 5 ]]; then
    if [[ $(date +%H%M) -eq 700 ]]; then
        sonos Cuisine play_file ilest7hBonjour.mp3
    elif [[ $(date +%H%M) -eq 800 ]]; then
		sonos Cuisine 31 : Cuisine play_file ilest8h.mp3
    fi
fi

# Programme de tous les midis & soirs
if [[ $(date +%H%M) -eq 1150 ]]; then
	sonos Bureau group Cuisine
	sonos Cuisine if_stopped volume 40 : Cuisine if_stopped play_file mettrelatable.mp3
elif [[ $(date +%H%M) -eq 2030 ]]; then
	sonos Cuisine if_stopped volume 31 : Cuisine if_stopped play_file ilest20h30.mp3
fi

# Programme du weekend
#if [[ $(date +%u) -eq 6 || $(date +%u) -eq 7 ]]; then
    #if [[ $(date +%H%M) -eq 1145 ]]; then
    #fi
#fi

# Le lundi soir 19h10 et 19h20 et 20h10 et 20h20
if [[ $(date +%u) -eq 1 ]]; then
    if [[ $(date +%H%M) -eq 1940 || $(date +%H%M) -eq 2010 || $(date +%H%M) -eq 2020 ]]; then
		sonos Cuisine if_stopped volume 12 : Cuisine if_stopped play_file ilfautsortirlapoubelle.mp3
    fi
fi
#Reset default configuration
sonos Cuisine if_stopped volume 10 : wait 1s : Bureau if_stopped ungroup : wait 1s : Chambre if_stopped ungroup

C’est déjà pas mal, mais c’est tout.. vous pouvez maintenant il n’y a qu’à profiter 😉

Domotique de Volets roulants Solaires Velux

Passionné de domotique et automatisation, j’ai déjà quelques challenges à mon actif…

  • Participation aux trophées de my-domotique – 2014 : inclut la motorisation et utilisation de relais Fibaro pour la gestion de volets, de scripting LUA sur box Vera, de contrôle de lumières, de flux vidéos, visualisation des consommations d’énergie, et un lapin Nabaztag (Karotz) pour ‘autonomiser’ les enfants via le contrôle de l’éclairage et des lumières (inversement des états en journée = volets, soirs = lumière ), chacun ayant son tag RFID. Plus tard, j’ai ajouté des tags RFID assignés à une ouverture de ports firewall pour 1h d’accès Web, chacun son tag.
  • Jeedom sur Android – 2017 : installation d’un serveur web et serveur de base de données sur un vieux smartphone afin d’y faire tourner un serveur domotique avec comme but, de réutiliser l’existant plutôt que de racheter un serveur pour héberger la domotique de la maison.

Depuis, ma vie à un peu changé tant géographiquement que familialement. Cette maison équipée RJ45 fait partie de mon passé mais je suis resté proche de la technologie.

Mais.. revenons-en au présent..

Dans ma nouvelle vie, je n’ai pas souhaité refaire tout le placo de ma nouvelle maison pour y passer du câble domotique; Je n’ai actuellement je n’ai qu’une installation minime permettant de contrôler en Zigbee

  • L’éclairage du couloir+escalier (luminosité) selon horaire et capteurs de mouvements
  • L’éclairage et la sonnerie sur présence au pas de la porte
  • La planification d’éléments (éclairages d’ambiance, aspirateur, prises connectées, pompe piscine)
  • Récemment.. les volets des fenêtres de toit Velux -but de cet article 🙂

Retour rapide en 2021, lors de l’installation de quatre fenêtres de toit, et la rénovation de deux autres; Concernant les volets roulants, j’avais hésité : Volets Filaire Velux avec possibilité de contrôle à distance via Somfy ou box propriétaire, ou bien.. volets ‘solaires’ sans fils. Par anticipation, lors de l’aménagement des combles, j’avais passé les gaines pour l’électricité pour des potentiels nouveaux Velux. Les deux volets velux à remplacer étaient aussi électriques..

Les deux solutions tant filaire que sans fils, étaient possible et financièrement, sans ajout de contrôle à distance, les deux solutions étaient concurrentes en prix. Reste :

  • La mise en domotique d’un volet Velux filaire demande l’achat en supplément d’un module qui consomme 20w en permanence par volet et demande une app supplémentaire dédiée..
  • La solution sans fil est plus facile et rapide à installer, ne permettait pas de domotique; Sur les 20 prochaines années, la batterie sera surement à changer.

Avec un peu de réflexion, j’ai préféré ne pas ajouter de conso électrique à la maison.. risquant pour les batteries.. c’est un risque mais je suis parti là dessus me disant que le [hack] d’une télécommande Velux ne devait pas être si compliqué !

Volets installés, il y a donc, une télécommande par volet. Le matin et le soir, c’est le tour des volets pour faire l’action…

Fainéant par nature, j’ai donc commencé à simplifier mon quotidien en groupant les volets d’une même pièce ou d’une même exposition, sur une seule télécommande. Voici selon Velux, comment configurer les télécommandes avec le seul pré requis, qu’elles soient de model identique :

Avoir groupé les quatre volets du second étage, et descendu la télécommande, déjà la vie était facilitée par un appui unique le matin et le soir. En effet, une seule télécommande, pour un groupe de volets.. c’est une seule action..

Mais moi je ne veux pas d’actions.. j’ai déjà plein de choses à faire et je suis très fatigué. Pour aller plus loin, j’ai ouvert une des télécommande (du coup inutilisée) avec mon multimètre en main pour en analyser les commandes. Voici, sur différents appuis ce qu’il en ressort :

Intérieur d’une télécommande Velux avec repérages monter – descendre – stop- masse
Tests avec soudures sur carte mère

À savoir, on peut shunter un bouton mais on ne peut pas envoyer du 3.3v ou 5v dessus au risque de froisser les composants en amont/aval; Pour passer une commande il faut un relais de puissance qui fera un contact sec.

Afin de piloter cette carte, j’ai donc investi (une vingtaine d’euros) pour sur une carte relais « Connectée » pour être pilotée via un assistant (Alexa / « Ok Google ») munie de 4 relais pour pour piloter montée (1) descente (2) et stop (3). Deux auraient été suffisants le stop étant accessoire car les interrupteurs, mais au même prix et dimensions similaires, je me suis dit que cela ne valait pas la peine de se priver… (qui sait, stopper les volets après un temps donné de descente ou montée peut être un cas d’utilisation? )

Note 1: Cette carte relais permet une configuration avancée, évitant les actions sur les entrées simultanées (évite un appui simultané sur monter+descendre par exemple) ou permettant de simuler un appui simple (contact simple type bouton de télécommande) vs contact long type interrupteur luminaire.

Note 2: Nous sommes ici en électronique. Chaque action que ce soit montée, descente ou stop, nécessite le fil conducteur (+) et la masse (-) en retour

Étape suivante : le design et l’impression en 3D, d’un boitier de protection pour ces relais alimentés en micro USB. Après la prise des dimensions extérieures de la carte relais, prenant en compte les soudures du dessous, les blocs en hauteur, j’ai dessiné le boitier de la carte relais sur Autodesk Fusion360. Je vous passe le slicer Cura et les photos de l’impression… voici le premier jet.

Version Beta de la télécommande avec boitier

Passons à l’étape logicielle : installer l’application pour contrôler la carte (eWeLink – une des deux majeures avec Smart Life pour les objets connectés) >> Appairer la carte relais au smartphone, la connecter au WiFi de la maison (accessoirement ajouter une règle sur le firewall) >> Donner un nom et une pièce au périphérique >> Créer une scène pour la commande « ouvre les velux » >> Faire une découverte par votre assistant >> tester.. « Ok Google, ouvre les Velux » pour voir la magie opérer.

Par expérience, je déconseille de forcer l’ouverture des Velux le matin.. un jour férié vous fera détester votre installation par contre, via l’appli dédiée de la carte j’ai créé un scénario pour fermer les velux lors du coucher du soleil. La boucle est bouclée.

Finalement, pour rendre le tout plus WAF (Women Acceptance Factor) j’ai repris le boitier imprimé en PLA, et ait l’ai redessiné pour y intégrer la télécommande Velux. Bien plus compact, je n’ai plus qu’un câble micro USB à brancher.

Carte relais rangée dans son boitier. La trappe verticale verrouille le tout
Télécommande Velux version finale incluant la carte relais, il ne manque que l’alimentation micro USB

Après plusieurs jours de satisfaction, j’ai encore optimisé le tout : une nouvelle commande « Ouvre les Volets » dans l’assistant, qui monte les Velux ET les Volets roulants de la maison. Ainsi, optionnellement, d’une simple commande, vocale le matin, toute la maison se réveille !!

Cet article sur la mise en place de mes Velux connectés est terminé.. au final, cela m’aura coûté une petite heure ainsi qu’une 20 aine d’euros, moins de temps que prévu, mais surtout, beaucoup de plaisir à décortiquer et trouver une solution .. !

Si cet article vous à plu.. et que vous avez des idées de domotique, de bricolage… n’hésitez pas à partager votre projet, ou juste votre bonne humeur et vos ondes positives, via le formulaire de contact et donnons vie à vos idées ! !