Comment envoyer des notifications vocales aux haut-parleurs Sonos

Aujourd'hui, je vais vous montrer comment configurer les notifications vocales sur votre système Sonos, en utilisant les recettes IFTTT, les intégrations OpenHAB, et plus encore.

Aujourd'hui, je vais vous montrer comment configurer les notifications vocales sur votre système Sonos, en utilisant les recettes IFTTT, les intégrations OpenHAB, et plus encore.
Publicité

Le rêve de tout amateur de maison intelligente est une maison que vous pouvez parler, mais la réalité est loin de cela.

Amazon Echo, par exemple, vous permet d'utiliser un nombre illimité de fonctions contrôlées par la voix, mais vous devez lancer une boîte de dialogue avec une question - vous ne pouvez pas simplement lui demander d'annoncer un message important.

Vous pouvez le faire avec un système Sonos et un peu de magie DIY Raspberry Pi. Aujourd'hui, je vais vous montrer comment configurer des notifications vocales sur votre système Sonos, en introduisant quelques recettes IFTTT utiles, des intégrations OpenHAB, et bien d'autres, pour utiliser la fonction de notification.

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

Un Raspberry Pi exécutant Raspian Linux est idéal pour ce tutoriel, mais il devrait également fonctionner sur n'importe quel serveur domestique basé sur linux que vous avez exécuté. Dans ce cas, j'utilise le même Raspberry Pi qu'OpenHAB, le système domotique open source. Démarrer avec OpenHAB Home Automation sur Raspberry Pi Démarrer avec OpenHAB Home Automation sur Raspberry Pi OpenHAB est une plate-forme domotique mature et open source qui fonctionne sur une variété de matériel et est agnostique de protocole, ce qui signifie qu'il peut se connecter à presque n'importe quel matériel de domotique sur le marché aujourd'hui. 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 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 (par 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 ... Lire la suite.

Tu auras besoin

  • Raspberry Pi 2 (les anciens modèles devraient fonctionner, mais vérifiez les changements spécifiques dans les instructions)
  • Au moins un haut-parleur Sonos (les autres systèmes audio ne sont pas supportés, ceci est un tutoriel pour Sonos uniquement)
  • 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.

Installer le nœud le plus récent

Vérifiez la version de Node que vous avez en tapant:

node -v 

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

Si vous n'avez pas v5 ou si vous obtenez une erreur non trouvée, suivez ces instructions pour installer Node. La commande suivante suppose un Raspberry Pi 2; Pour les anciens modèles, 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 cd node-v5.12.0-linux-armv7l sudo cp -R * /usr/local 

Confirmez à nouveau en tapant:

 node -v 

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

Ensuite, nous avons quelques modules Node à installer. Nous voulons également le gestionnaire de paquet de noeud.

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

Ce sont les pré-requis à l'écart, maintenant sur les choses amusantes.

API HTTP Sonos

L'API HTTP de 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 la notification vocale).

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

Si vous voyez un message à propos de tel ou tel module non trouvé, faites juste une autre installation de npm et le nom du module, puis essayez à nouveau de démarrer npm . Si vous rencontrez des erreurs relatives à "nécessite un compilateur C ++ 11", corrigez-vous avec les commandes suivantes:

 sudo apt-get install gcc-4.8 g++-4.8 sudo update-alternatives --install/usr/bin/gccgcc/usr/bin/gcc-4.6 20 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50 

Finalement, vous devriez voir quelque chose comme ceci:

sonos-http-api fonctionne

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

 http: // [IP SERVEUR]: 5005 / [ROOM NAME] / [ACTION] 

Ou comme exemple spécifique:

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

L'action qui nous intéresse est la commande "say", 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 inscrire à une clé API sur VoiceRSS.org. Vous devriez déjà avoir fait cela, tapez donc ce qui suit et collez dans votre clé API comme approprié:

 nano settings.json 

{

 "voicerss":"YOURAPIKEY" } 

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

Redémarrez le serveur et envoyez une nouvelle requête ping à l'URL. Après quelques secondes, vous devriez entendre une voix anglaise délicieuse (bien que vous changiez la fin de l'URL en-nous si vous préférez). Pour que le serveur API HTTP Sonos redémarre lorsque le Pi est redémarré:

 sudo nano /etc/rc.local 

Ajouter une ligne avant la sortie 0 :

 sudo node /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 URL, de sorte que les possibilités sont grandes ouvertes à ce stade. Cependant, si vous avez des idées, lisez la suite pour 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 activer les lumières, mais vous pouvez aussi avoir besoin d'une notification vocale si c'est un détecteur de mouvement dans une zone à faible trafic, ou peut-être comme un avertissement avant que quelqu'un arrive dans le jardin.

 rule "Garden motion detected" when Item Garden_Motion changed then var String message = "You have a visitor" sendHttpGetRequest("http://localhost:5005/kitchen/say/"+message.encode("UTF-8")+"/en-gb") end 

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

Météo quotidiennes à IFHT avec OpenHAB à Sonos

Dans cette recette, Sonos annonce un bulletin météo quotidien à l'heure que vous préférez.

Vous devez activer la liaison My.OpenHAB, car cela crée une connexion sécurisée entre votre serveur OpenHAB interne et le service IFTTT externe. Configurez cela si vous ne l'avez pas déjà fait - vous pouvez consulter la première partie de notre guide OpenHAB Démarrer avec OpenHAB Home Automation sur Raspberry Pi Démarrer avec OpenHAB Home Automation sur Raspberry Pi OpenHAB est une plate-forme domotique mature et open source qui fonctionne sur une variété de matériel et est agnostique de protocole, ce qui signifie qu'il peut se connecter à presque n'importe quel matériel de domotique sur le marché aujourd'hui. Lire la suite 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.

Ensuite, créez un nouvel élément String dans votre installation OpenHAB, qui stockera le rapport météo quotidien. Avant que ce soit visible dans le canal My.OpenHAB, nous devrons l'initialiser avec une variable par défaut. Ping l'URL suivante (changer raspberrypi.local à votre serveur OpenHAB, ou simplement utiliser son adresse IP, et Todays_Weather à tout ce que vous avez appelé la chaîne):

 http://raspberrypi.local:8080/CMD?Todays_Weather=Sunny 

Connectez-vous à My.OpenHAB et vérifiez la liste des éléments pour vous assurer que la variable a été exportée.

mon chèque d'exportation d'item openhab

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 devez d'abord définir votre position si vous ne l'avez jamais utilisée auparavant.

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

bulletin météo ifttt

Pour l'instant, il suffit de choisir l'emplacement de la demi-heure suivante pour le 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), j'ai eu les prévisions d'aujourd'hui mises à jour avec succès.

 2016-02-27 10:28:01.689 [DEBUG] [ooimiMyOpenHABServiceImpl] - Received command Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. for item Todays_Weather 2016-02-27 10:28:01.697 [DEBUG] [ooimiMyOpenHABServiceImpl] - store(Todays_Weather), state = Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. 

Ensuite, nous avons besoin d'une règle OpenHAB pour envoyer cette variable à l'URL "say" de Sonos. Ce qui suit devrait le faire:

 rule "Announce daily weather report" when Item Todays_Weather received update then sendHttpGetRequest("http://localhost:5005/kitchen/say/"+Todays_Weather.state.toString.encode("UTF-8")+"/en-gb") end 

C'est assez simple: chaque fois que la variable Todays_Weather est mise à jour (ce qui sera automatiquement, à 8h tous les jours), envoyez une requête ping à l'URL. Nous utilisons la fonction String encoder ("UTF-8") pour rendre la phrase d'IFTTT utilisable dans une URL. Pour tester manuellement cette partie du système, utilisez à nouveau l'API HTTP OpenHAB:

 http://raspberrypi.local:8080/CMD?Todays_Weather=Cloudy, with a chance of meatballs. 

Connectez-vous à IFTTT sans OpenHAB, en utilisant If-This-Then-Node

Enfin, regardons comment se connecter à partir de 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 de sécurité, mais nous limitons cela en n'exécutant pas une pile serveur complète, juste un petit service spécifique qui n'accepte que certaines commandes dans un format de paquet de données JSON sécurisé. Des attaques SQL ou d'authentification seront possibles). Une fois que nous aurons terminé, vous aurez une URL publique à laquelle vous pourrez envoyer des messages depuis le canal IFTTT Maker.

Commencez par mettre en place l'un des nombreux services DNS dynamiques gratuits 5 Best DNS fournisseurs dynamiques que vous pouvez rechercher gratuitement aujourd'hui 5 meilleurs fournisseurs DNS dynamiques que vous pouvez rechercher gratuitement aujourd'hui DynDNS a toujours été une mention majeure lorsque les DNS dynamiques libres ont été soulevées. Mais maintenant que c'est parti, y a-t-il de bonnes alternatives? Bien sûr. En savoir plus - je recommande DuckDNS, en particulier parce qu'il donne un ensemble simple d'instructions pour Raspberry Pi, lui permettant de mettre à jour automatiquement votre adresse IP. Suivez ces étapes et n'oubliez pas votre URL pour les prochaines étapes. Votre routeur peut également avoir une fonction DNS dynamique intégrée, donc vérifiez d'abord. Dans mon cas, je peux obtenir une URL * .mynetgear.com gratuitement, donc je l'ai utilisé.

Ensuite, trouvez la redirection de port de votre routeur Qu'est-ce que le transfert de port et comment cela peut-il m'aider? [MakeUseOf explique] Qu'est-ce que le transfert de port et comment cela peut-il m'aider? [MakeUseOf Explains] Pleurez-vous un peu à l'intérieur quand quelqu'un vous dit qu'il y a un problème de redirection de port et que votre nouvelle application brillante ne fonctionnera pas? Votre Xbox ne vous laissera pas jouer à des jeux, vos téléchargements de torrent refusent ... Read More page de configuration; C'est là que nous allons lui dire quoi faire avec les demandes entrantes. Transférer toutes les demandes HTTP (port 80) au port 1337 sur votre serveur Raspberry Pi. Je suppose que vous avez une adresse IP déjà réservée pour votre Raspberry Pi - si ce n'est pas le cas, vérifiez la page de configuration de votre routeur pour les adresses IP réservées pendant que vous êtes là, comme vous ne le changez pas la semaine prochaine et pour que le serveur arrête brusquement de fonctionner.

routeur config port forwarding

Maintenant, pour installer le dernier bit du logiciel serveur.

 https://github.com/sebauer/if-this-then-node.git cd if-this-then-node/ npm install node server.js 

Vous devriez voir ce qui suit.

si cela alors erreur de valeurs par défaut du nœud

C'est correct, cela signifie simplement que nous devons mettre à jour nos détails. Ouvrez config.js dans Nano et modifiez ces détails à autre chose que la valeur par défaut, puis enregistrez-les. Lorsque vous réexécutez le serveur, vous devriez voir ceci:

si cela alors le serveur de noeud en cours d'exécution

Génial. Testez votre machine est accessible depuis le monde extérieur en tapant votre nom d'hôte DNS dynamique, et ajoutez / ifttn / à la fin de l'URL. Si tout fonctionne, le message "IFTTN - if-this-then-node Version 2.0.1 est opérationnel!" S'affichera dans votre navigateur. Encore une fois, pour que ce script s'exécute au démarrage, éditez le fichier /etc/rc.local et ajoutez:

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

If-This-Then-Node fonctionne à travers les plugins - il y en a quelques uns par défaut, 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.

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

Vous devrez également installer le module de requête .

 npm install request 

Puis redémarrez le serveur. Le plugin est assez simple, mais un peu différent de l'URL que nous utilisons jusqu'ici. Dans ce cas, j'ai utilisé l'action spéciale "sayall", qui envoie le message à chaque appareil Sonos.

 request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body) 

Si vous préférez cibler des appareils spécifiques, remplacez cette ligne par:

 request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body) 

Ajoutez un autre paramètre de ligne appelé périphérique à la demande JSON ci-dessous dans lequel spécifier le nom du périphérique Sonos.

Pour tester cela, j'utilise l'application bouton "Do" IFTTT. Créez une nouvelle recette, naviguez jusqu'aux canaux et sélectionnez le canal Maker .

faire le bouton

Créer une nouvelle recette Entrez dans l'URL que vous avez configuré 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électionnez la requête POST, le contenu de l' application / json et le corps du message comme suit, en remplaçant toutes les variables nécessaires par celles que vous avez précédemment configurées:

 { "action":"sonos", "user":"YOURUSER", "pw":"YOURPASSWORD", "message":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." } 

Maintenant, j'ai un bouton facilement accessible qui annoncera le message sur chaque appareil Sonos dans la maison. Vous pouvez bien sûr coupler ceci avec n'importe quel canal IFTTT que vous voulez faire un message personnalisé en utilisant des variables de ce canal. Vous devriez même être en mesure de reproduire le rapport météo d'en haut sans utiliser OpenHAB maintenant, même si cela a pris l'effort supplémentaire d'installer un autre serveur.

Remarque: les pirates vous scanneront automatiquement . Cela arrive tout le temps, mais si vous consultez des journaux, cela peut sembler alarmant. Ci-dessous vous pouvez voir quelqu'un systématiquement essayé de vérifier si l'une des interfaces standard de PHPMyAdmin était accessible. Ce qu'ils n'étaient pas. Ne vous inquiétez pas si vous voyez quelque chose de similaire. C'est l'équivalent Internet des numéros de téléphone aléatoires pour voir si quelqu'un est là.

tentatives de piratage du serveur Web

Que vas-tu annoncer?

Vous devriez maintenant avoir les outils et connaissances nécessaires pour constamment baigner votre maison entière dans les notifications vocales sur tout ce que vous pourriez penser. Qui a besoin de musique? Votre seule limite est de 350 demandes quotidiennes de VoiceRSS.org - mais c'est environ une toutes les 4 minutes, alors ça devrait aller.

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

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

In this article