Comment envoyer des notifications vocales aux haut-parleurs Sonos

Comment envoyer des notifications vocales aux haut-parleurs Sonos / Maison intelligente

Le rêve de tout amateur de maison intelligente est une maison à laquelle on peut parler, mais la réalité est bien loin de cela..

Amazon Echo, par exemple, vous permet d'utiliser un nombre illimité de fonctionnalités à commande vocale, mais vous devez ouvrir une boîte de dialogue avec une question - vous ne pouvez pas lui demander d'annoncer un message important..

Vous pouvez Pour ce faire, utilisez un système Sonos et un peu de magie DIY Raspberry Pi. Aujourd'hui, je vais vous montrer comment configurer les notifications vocales sur votre système Sonos, en vous présentant quelques recettes utiles IFTTT, des intégrations OpenHAB, etc., pour utiliser la fonction de notification..

Notez qu’une liaison Sonos native pour OpenHAB est disponible, mais elle est connue pour provoquer des problèmes de mémoire en raison d’une bibliothèque uPnP défectueuse. Je suggérerais de sauter cela pour l'instant et d'utiliser la méthode de ce tutoriel à la place..

Un Raspberry Pi exécutant Linux Raspian est idéal pour ce didacticiel, mais il devrait également fonctionner sur tout serveur domestique basé sur Linux que vous exécutez. Dans ce cas, j'utilise le même Raspberry Pi que celui qui exécute OpenHAB, le système domotique open source Mise en route d'OpenHAB Home Automation sur Raspberry Pi Mise en route d'OpenHAB Home Automation sur Raspberry Pi OpenHAB est une plate-forme de domotique ouverte et mature. qui fonctionne sur une variété de matériel et est indépendant du protocole, ce qui signifie qu'il peut se connecter à presque tout matériel de domotique actuellement disponible sur le marché. Lire la suite . Le reste de ce didacticiel suppose que vous l'exécutez également sur un Raspberry Pi et que vous avez une fenêtre de terminal locale ouverte sur le bureau, ou que vous êtes connecté à distance à l'aide de SSH. Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSH Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSH Le Raspberry Pi peut accepter les commandes SSH lorsqu'il est connecté à un réseau local (via Ethernet ou Wi-Fi), ce qui vous permet de le configurer facilement. Les avantages de SSH vont au-delà de perturber le dépistage quotidien… En savoir plus .

Tu auras besoin

  • Raspberry Pi 2 (les anciens modèles devraient fonctionner, mais vérifiez les modifications dans les instructions)
  • Au moins un haut-parleur Sonos (les autres systèmes audio ne sont pas pris en charge, il s'agit d'un didacticiel destiné uniquement à Sonos)
  • Compte gratuit sur VoiceRSS.org. Inscrivez-vous puis trouvez votre clé API, dont nous aurons besoin plus tard pour générer les messages vocaux.

Dernier noeud d'installation

Vérifiez quelle version de Node vous avez en tapant:

noeud -v 

Notez que la version 6 n'est pas supportée. Si vous avez le nœud 6, vous devrez d'abord le supprimer, puis suivez les instructions ci-dessous pour installer la v5.5.

Si vous n'avez pas la version 5 ou si vous obtenez une erreur introuvable, suivez ces instructions pour installer Node. La commande suivante suppose un Raspberry Pi 2; pour les modèles plus anciens, utilisez armv6l au lieu de armv7l.

wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz tar -xvf node-v5.12.0-linux-armv7l.tar.gz noeud cd -v5.12.0-linux-armv7l sudo cp -R * / usr / local 

Confirmez à nouveau en tapant:

noeud -v

Et vous devriez voir la v5.12 (ou la dernière que vous avez téléchargée).

Ensuite, nous avons quelques modules de nœuds à installer. Nous voulons aussi le gestionnaire de paquets de nœuds.

sudo apt-get installer npm sudo npm installer -g npm sudo npm installer -g node-gyp 

Ce sont les pré-requis sur le chemin, maintenant sur le truc amusant.

API HTTP Sonos

L'API HTTP Sonos crée un serveur Web sur le réseau local, ce qui nous permet de faire un ping sur une URL avec un message à annoncer sur un Sonos (et de le contrôler à distance si vous le souhaitez, bien que ce tutoriel se concentre uniquement sur l'aspect de notification vocale)..

git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm installer --production npm start 

Si vous voyez un message sur tel ou tel module introuvable, faites-en un autre npm installer et le nom du module, puis essayez npm start encore. Si vous rencontrez des erreurs liées à “nécessite un compilateur C ++ 11”, corriger avec les commandes suivantes:

sudo apt-get install gcc-4,8 g ++ - 4,8 solutions sudo update-alternatives --installez / usr / bin / gccgcc / usr / bin / gcc-4.6 21 autres options sudo update-alternatives --installez / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 alternatives de sudo update --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 alternatives de sudo update -install --install / usr / bin / g ++ g ++ / usr / bin / g ++ - 4,8 50 

Finalement, vous devriez voir quelque chose comme ça:

Le serveur est maintenant en cours d'exécution et s'interface avec Sonos. Le format de cette API est simple:

http: // [IP du serveur]: 5005 / [NOM DE LA PIÈCE] / [ACTION]

Ou comme exemple spécifique:

http://192.168.1.99:5005/kitchen/playlist/chillout

L'action qui nous intéresse est la “dire” commande, utilisée comme suit:

http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb

Vous entendrez un message d'erreur indiquant que vous devez vous enregistrer sur une clé d'API sur VoiceRSS.org. Vous devriez déjà avoir fait cela, alors tapez ce qui suit et collez-le dans votre clé d'API en tant que approprié:

nano settings.json
 "voicerss": "YOURAPIKEY"

(Appuyez sur CTRL-X, Y pour enregistrer le fichier)

Redémarrez le serveur et cinglez à nouveau l'URL. Après quelques secondes, vous devriez entendre une charmante voix anglaise (même si vous modifiez la fin de l'URL en en-nous si vous préférez) Pour que le serveur API HTTP Sonos redémarre au redémarrage du Pi:

sudo nano /etc/rc.local

Ajouter une ligne avant le sortie 0:

nœud sudo /home/pi/sonos/server.js < /dev/null &

Vous avez maintenant la possibilité de créer un message vocal à partir de n’importe où sur le réseau local simplement en envoyant une requête ping à une adresse URL. Les possibilités sont donc grandes ouvertes à ce stade. Si vous avez du mal à trouver des idées, continuez pour lire quelques notifications utiles que j'ai configurées..

Notifications OpenHAB sur les événements

Prenons d’abord un exemple simple: la détection de mouvement. C’est un cas d’utilisation courant pour l’activation des lumières, mais vous voudrez peut-être aussi une notification vocale s’il s’agit d’un détecteur de mouvement situé dans une zone à faible trafic, ou peut-être en guise d’avertissement indiquant que quelqu'un monte dans l'allée du jardin..

règle "mouvement de jardin détecté" lorsque l'élément Garden_Motion est modifié, puis var String message = "vous avez un visiteur" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + " / fr-fr ") fin 

Vous devriez voir comment intégrer ces notifications vocales simples dans n’importe laquelle de vos règles, mais essayons quelque chose de plus complexe..

Météo du jour d'IFTTT à OpenHAB à Sonos

Dans cette recette, nous demanderons à Sonos de vous annoncer un bulletin météorologique quotidien à l'heure que vous préférez..

La liaison My.OpenHAB doit être activée, car cela crée une connexion sécurisée entre votre serveur OpenHAB interne et le service IFTTT externe. Configurez-le si vous ne l'avez pas déjà fait - vous pouvez vous reporter à la partie 1 de notre guide OpenHAB Mise en route d'OpenHAB Home Automation sur Raspberry Pi Mise en route d'OpenHAB Home Automation sur Raspberry Pi OpenHAB est une plate-forme de domotique ouverte et mature qui s'exécute sur une variété de matériel et est agnostique de protocole, ce qui signifie qu'il peut se connecter à presque tout matériel de domotique sur le marché aujourd'hui. Lisez Plus pour des instructions complètes, sinon je suppose que vous l'avez déjà configuré avec la persistance activée pour tous les éléments.

Créez ensuite un nouvel élément String dans votre installation OpenHAB, qui stockera le bulletin météo quotidien. Avant que cela ne soit visible dans le canal My.OpenHAB, nous devrons l'initialiser avec une variable par défaut. Cinglez l’URL suivante (changez raspberrypi.local sur votre serveur OpenHAB, ou utilisez simplement son adresse IP, et La météo d'aujourd'hui à tout ce que vous avez appelé la chaîne):

http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Ensoleillé 

Connectez-vous à My.OpenHAB et vérifiez le Articles liste pour s'assurer que la variable a maintenant été exportée.

De retour sur IFTTT, créez une nouvelle recette et utilisez le canal Météo comme déclencheur à l’heure de votre choix. Vous devrez d'abord définir votre emplacement si vous ne l'avez jamais utilisé auparavant.

Sélectionnez My.OpenHAB comme action et choisissez le Todays_Weather comme variable à mettre à jour..

Pour l'instant, il suffit de sélectionner la prochaine demi-heure de test - vous pouvez mettre à jour la recette plus tard une fois que vous savez que cela fonctionne.

Effectivement, au moment du test (en fait, un peu avant), les prévisions d'aujourd'hui ont été mises à jour avec succès.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - Commande reçue Mostly Cloudy aujourd'hui! Avec un maximum de 7C et un minimum de 1C. Répéter. Le temps sera nuageux aujourd'hui, avec des témperatures de 7C et un minimum de 1C. pour l'article Todays_Weather 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - magasin (Todays_Weather), state = presque nuageux aujourd'hui! Avec un maximum de 7C et un minimum de 1C. Répéter. Le temps sera nuageux aujourd'hui, avec des témperatures de 7C et un minimum de 1C. 

Ensuite, nous avons besoin d’une règle OpenHAB pour envoyer cette variable à Sonos. “dire” URL Ce qui suit devrait le faire:

règle "Annonce quotidienne de la météo" lorsque Item Todays_Weather a reçu la mise à jour, puis sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ en-gb ") fin 

C’est assez simple: chaque fois que la variable Todays_Weather est mise à jour (qu’elle sera automatiquement mise à jour tous les jours à 8 heures), envoyez une requête ping à l’URL. Nous utilisons encoder(“UTF-8”) Fonction de chaîne permettant à la phrase IFTTT de pouvoir être utilisée dans une URL. Pour tester manuellement cette partie du système, utilisez à nouveau l'API HTTP OpenHAB:

http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Nuageux, avec une chance de boulettes de viande. 

Se connecter à IFTTT sans OpenHAB, en utilisant If-This-Then-Node

Enfin, voyons comment se connecter depuis n’importe quelle recette IFTTT sans l’intermédiaire OpenHAB. Au lieu de cela, nous allons installer un autre serveur Web et l'exposer à Internet ouvert. Ce n'est pas sans risque: tout type de serveur ouvert est un risque pour la sécurité, mais nous l'atténuons en n'exécutant pas une pile de serveurs complète, mais simplement un petit service spécifique qui n'accepte que certaines commandes dans un format de paquet de données JSON sûr Des attaques par injection SQL ou par authentification seront possibles). Une fois que nous aurons terminé, vous aurez une URL publique à laquelle vous pourrez envoyer des messages à partir du canal IFTTT Maker..

Commencez par configurer l’un des nombreux services DNS dynamiques gratuits. 5 meilleurs fournisseurs de DNS dynamiques que vous pouvez rechercher gratuitement aujourd'hui. 5 meilleurs fournisseurs de DNS dynamiques que vous pouvez rechercher gratuitement. DynDNS a toujours été une des grandes priorités lorsque les DNS dynamiques gratuits ont été créés. Mais maintenant qu'il est parti, y a-t-il de bonnes alternatives? Il y en a bien sûr. En savoir plus - Je recommande DuckDNS, en particulier parce qu'il fournit un ensemble d'instructions simples pour Raspberry Pi, lui permettant de mettre à jour votre adresse IP automatiquement. Suivez-les et souvenez-vous de votre URL pour les prochaines étapes. Votre routeur peut aussi avoir une fonction DNS dynamique intégrée, alors vérifiez-le d'abord. Dans mon cas, je peux obtenir un * .mynetgear.com URL gratuitement, donc je l'ai utilisé.

Ensuite, recherchez la redirection de port de votre routeur. Qu'est-ce que la redirection de port et comment peut-il m'aider? [MakeUseOf explique] Qu'est-ce que la redirection de port et comment peut-elle m'aider? [MakeUseOf explique] Pleurez-vous un peu à l'intérieur quand quelqu'un vous dit qu'il y a un problème de transfert de port et que c'est la raison pour laquelle votre nouvelle application brillante ne fonctionnera pas? Votre Xbox ne vous laissera pas jouer à des jeux, vos téléchargements torrent refusent… Lire la suite page de configuration; C'est ici que nous dirons quoi faire avec les demandes entrantes. Transférez toutes les requêtes HTTP (port 80) sur le port 1337 de votre serveur Raspberry Pi. Je suppose que vous avez déjà une adresse IP réservée pour votre Raspberry Pi. Si ce n’est pas le cas, vérifiez la page de configuration de votre routeur pour connaître les adresses IP réservées lorsque vous y êtes. pour que le serveur cesse soudainement de fonctionner.

Maintenant, installez le dernier morceau du logiciel serveur.

https://github.com/sebauer/if-this-then-node.git cd if-this-then-node / npm noeud d'installation server.js 

Vous devriez voir ce qui suit.

Ce n'est pas grave, cela signifie simplement que nous devons mettre à jour nos coordonnées. S'ouvrir config.js dans Nano et modifiez ces détails pour qu’ils ne soient pas la valeur par défaut, puis enregistrez. Lorsque vous exécutez à nouveau le serveur, vous devriez voir ceci:

Génial. Testez votre machine est accessible depuis le monde extérieur en tapant votre nom d’hôte DNS dynamique, puis ajoutez /si / à la fin de l'URL. Si tout fonctionne, le message “IFTTN - la version 2.0.1 du noeud if-this-then-then-then est en cours d'exécution!” sera affiché dans votre navigateur. De nouveau, pour que ce script s’exécute au démarrage, éditez le /etc/rc.local déposer et ajouter:

nœud sudo /home/pi/if-this-then-node/server.js < /dev/null &

If-This-Then-Node fonctionne avec des plugins. Quelques-uns par défaut sont fournis, mais ils ne nous intéressent pas. Au lieu de cela, téléchargez ce plugin personnalisé que j'ai écrit pour vous avec les commandes suivantes.

plugins cd wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js 

Vous devrez également installer le demande module.

demande d'installation npm 

Puis redémarrez le serveur. Le plugin est assez simple, mais un peu différent de l'URL que nous avons utilisé jusqu'à présent. Dans ce cas, j'ai utilisé le spécial “dire tout” action, qui envoie le message à chaque périphérique Sonos.

request ('http: // localhost: 5005 / sayall /' + params.message + '/ en-gb', fonction (erreur, réponse, corps) 

Si vous préférez pouvoir cibler des périphériques spécifiques, remplacez cette ligne par:

request ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb', fonction (erreur, réponse, corps) 

Ajouter un autre paramètre de ligne appelé dispositif à la requête JSON ci-dessous pour spécifier le nom du périphérique Sonos.

Pour tester cela, j'utilise l'IFTTT “Faire” bouton app. Créez une nouvelle recette, accédez aux canaux et sélectionnez le Fabricant canal.

Créez une nouvelle recette. Entrez l'URL que vous avez configurée précédemment à partir d'un fournisseur DNS dynamique gratuit (y compris / ifttn / à la fin de l'URL. N'oubliez pas ces barres obliques). Sélectionner POSTER demande, application / json contenu et le corps du message comme suit, en remplaçant toutes les variables selon vos besoins par celles que vous avez précédemment configurées:

"action": "sonos", "utilisateur": "VOTRE UTILISATEUR", "pw": "VOTRE MOT DE PASSE", "message": "Message entrant pour tout le monde: le dîner est prêt! Répétez. Le dîner est prêt. Obtenez vos culs en haut maintenant . "  

J'ai maintenant un bouton facilement accessible qui annoncera le message sur chaque périphérique Sonos de la maison. Vous pouvez bien sûr coupler ceci avec n’importe quel canal IFTTT pour lequel vous souhaitez créer un message personnalisé en utilisant des variables de ce canal. Vous devriez même pouvoir répliquer le bulletin météo d'en haut sans utiliser OpenHAB maintenant, bien que cela ait demandé l'effort supplémentaire d'installer un autre serveur..

Remarque: les pirates vous analyseront automatiquement. Cela se produit tout le temps, mais si vous consultez des journaux, cela peut sembler alarmant. Vous trouverez ci-dessous une personne qui essaie systématiquement de vérifier si l’une des interfaces PHPMyAdmin standard est accessible. Ce qu'ils n'étaient pas. Ne vous inquiétez pas si vous voyez quelque chose de similaire. C'est l'équivalent Internet d'appeler à froid des numéros de téléphone aléatoires pour voir si quelqu'un s'y trouve..

Qu'allez-vous annoncer?

Vous devriez maintenant avoir les outils et les connaissances nécessaires pour envoyer constamment à votre maison entière des notifications vocales sur tout ce à quoi vous pourriez penser. Qui a besoin de musique? Votre seule limite est de 350 demandes quotidiennes de VoiceRSS.org - mais c'est à peu près une fois toutes les 4 minutes..

Alors, que ferez-vous avec cela? Partagez vos idées ou recette IFTTT dans les commentaires!

Crédits image: café et femme par S_Photo via Shutterstock

En savoir plus sur: Domotique, Sonos.