Publicité

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

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

Tu pouvez faites-le avec un système Sonos et un peu de magie du bricolage Raspberry Pi. Aujourd'hui, je vais vous montrer comment configurer des notifications vocales sur votre système Sonos, en présentant quelques recettes IFTTT utiles, des intégrations OpenHAB, etc., pour utiliser la fonction de notification.

Notez qu'il existe une liaison Sonos native pour OpenHAB, mais elle est connue 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 de ce tutoriel à la place.

Un Raspberry Pi exécutant Raspian linux est idéal pour ce didacticiel, mais il devrait également fonctionner sur n'importe quel serveur domestique basé sur linux que vous utilisez. Dans ce cas, j'utilise le même Raspberry Pi qui fonctionne

OpenHAB, le système domotique open source Premiers pas avec OpenHAB Home Automation sur Raspberry PiOpenHAB est une plate-forme domotique open source 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 n'importe quel matériel domotique du marché aujourd'hui. Lire la suite . Le reste de ce didacticiel suppose que vous exécutez également cela sur un Raspberry Pi et que vous avez une fenêtre de terminal locale ouverte sur le bureau ou connecté à distance via SSH Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSHLe 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 la SSH vont au-delà du bouleversement du 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 pris en charge, il s'agit d'un didacticiel pour Sonos uniquement)
  • Compte gratuit sur VoiceRSS.org [n'est plus disponible]. Inscrivez-vous ensuite trouver votre clé API, dont nous aurons besoin plus tard pour générer les messages vocaux.

Installer le dernier nœud

Vérifiez la version de Node dont vous disposez en tapant:

noeud -v. 

Notez que la version 6 n'est pas prise en charge. Si vous disposez du nœud 6, vous devez d'abord le supprimer, puis suivre les instructions ci-dessous pour installer la v5.5.

Si vous n'avez pas la v5 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. cd node-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 version que vous avez téléchargée).

Ensuite, nous avons quelques modules Node à installer. Nous voulons également le Node Package Manager.

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

Voilà les pré-requis à l'écart, maintenant sur les trucs amusants.

API HTTP Sonos

le API HTTP Sonos crée un serveur web sur le réseau local, ce qui nous permet de cingler une URL avec un message à annoncer sur un Sonos (et pour le contrôler à distance si vous le souhaitez, bien que ce didacticiel se concentre uniquement sur la notification vocale aspect).

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

Si vous voyez un message sur tel ou tel module introuvable, faites simplement une autre installation de npm et le nom du module, puis essayez npm start encore. Si vous rencontrez des erreurs concernant "Nécessite un compilateur C ++ 11", corrigez 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 maintenant en cours d'exécution et s'interface avec Sonos. Le format de cette API est simple:

http://[SERVER IP]: 5005 / [NOM DE LA CHAMBRE] / [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, alors saisissez ce qui suit et collez votre clé API comme appropriée:

nano settings.json

{

"voicerss": "YOURAPIKEY" }

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

Redémarrez le serveur et exécutez une nouvelle requête ping à l'URL. Après quelques secondes, vous devriez entendre une charmante voix anglaise (bien que vous changiez la fin de l'URL en en-nous si vous préférez). Pour faire redémarrer le serveur Sonos HTTP API au redémarrage du Pi:

sudo nano /etc/rc.local

Ajoutez une ligne avant le sortie 0:

noeud sudo /home/pi/sonos/server.js  dev / null &

Vous avez maintenant la possibilité de créer un message vocal 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. Si vous avez du mal à trouver 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. Il s'agit d'un cas d'utilisation courant pour activer les lumières, mais vous voudrez peut-être aussi une notification vocale s'il s'agit d'un détecteur de mouvement dans une zone à faible trafic, ou peut-être comme un avertissement avant que quelqu'un arrive dans le jardin chemin.

règle "Mouvement de jardin détecté" lorsque l'élément Garden_Motion a changé, alors var String message = "Vous avez un visiteur" sendHttpGetRequest (" http://localhost: 5005 / cuisine / say / "+ message.encode (" UTF-8 ") +" / fr-fr ") fin.

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.

Bulletin météo quotidien de IFTTT à OpenHAB à Sonos

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

Vous aurez besoin du My. La liaison OpenHAB est 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 référer à partie 1 de notre guide OpenHAB Premiers pas avec OpenHAB Home Automation sur Raspberry PiOpenHAB est une plate-forme domotique open source 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 n'importe quel matériel domotique du 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 cela ne soit visible dans le My. Canal OpenHAB, nous devons l'initialiser avec une variable par défaut. Ping l'URL suivante (changer raspberrypi.local à votre serveur OpenHAB, ou utilisez simplement son adresse IP, et La météo d'aujourd'hui à ce que vous avez nommé la chaîne):

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

Connectez-vous à My. OpenHAB [URL cassée supprimée] et vérifiez le Articles pour vous assurer que la variable a bien été exportée.

mon chèque d'exportation d'articles openhab

De retour sur IFTTT, créez une nouvelle recette et utilisez le Canal météo comme déclencheur à votre heure préférée. Vous devrez d'abord définir votre position si vous ne l'avez jamais utilisée auparavant.

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

météo ifttt

Pour l'instant, il vous suffit de choisir la prochaine demi-heure pour les tests - vous pouvez mettre à jour la recette plus tard une fois que vous savez qu'elle fonctionne.

Effectivement, au moment du test (en fait, un peu avant), j'ai réussi à mettre à jour les prévisions d'aujourd'hui.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Commande reçue principalement nuageux aujourd'hui! Avec un maximum de 7C et un minimum de 1C. Répéter. Les conditions seront principalement nuageuses aujourd'hui, avec un maximum 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] - store (Todays_Weather), state = Mostly Cloudy today! Avec un maximum de 7C et un minimum de 1C. Répéter. Les conditions seront principalement nuageuses aujourd'hui, avec un maximum de 7C et un minimum de 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:

règle "Annoncer la météo quotidienne" lorsque l'élément Todays_Weather a reçu une mise à jour. puis envoyerHttpGetRequest (" http://localhost: 5005 / cuisine / 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 (ce qui sera automatiquement à 8h tous les jours), ping sur l'URL. Nous utilisons encoder («UTF-8») Fonction de chaîne pour rendre la phrase de IFTTT adaptée à une utilisation 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 un risque de boulettes de viande. 

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

Enfin, voyons comment se connecter à partir de n'importe quelle recette IFTTT sans l'intermédiaire d'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 atténuons cela en n'exécutant pas une pile de serveurs complète, juste une petite service spécifique qui n'accepte que certaines commandes dans un format de paquet de données JSON sûr (donc aucune injection SQL ou attaque d'authentification ne sera possible). 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 Les 5 meilleurs fournisseurs de DNS dynamiques gratuitsUn service DDNS peut vous aider à vous connecter à votre ordinateur personnel lors de vos déplacements. Voici les meilleurs fournisseurs de DNS dynamiques gratuits à considérer. Lire la suite là-bas - je recommande DuckDNS, en particulier parce qu'il donne un ensemble simple de instructions pour Raspberry Pi, lui permettant de mettre à jour votre adresse IP automatiquement. Suivez-les et mémorisez votre URL pour les étapes suivantes. Votre routeur peut également 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, trouvez votre routeur redirection de port 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 redirection de port et c'est pourquoi votre nouvelle application brillante ne fonctionnera pas? Votre Xbox ne vous laissera pas jouer à des jeux, vos téléchargements de torrent refusent ... Lire la suite page de configuration; c'est ici que nous allons lui dire quoi faire avec les demandes entrantes. Transférez toutes les requêtes HTTP (port 80) vers le port 1337 sur 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 configuration de votre routeur page pour les adresses IP réservées pendant que vous y êtes, car vous ne voulez pas que cela change la semaine prochaine et que le serveur s'arrête soudainement travail.

redirection de port de configuration du routeur

Maintenant, pour installer le dernier morceau du logiciel serveur.

https://github.com/sebauer/if-this-then-node.git. cd si-ce-alors-nœud / npm install. nœud server.js.

Vous devriez voir ce qui suit.

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

C'est bon, cela signifie simplement que nous devons mettre à jour nos coordonnées. S'ouvrir config.js dans Nano et modifiez ces détails autrement que par défaut, puis enregistrez. Lorsque vous exécutez à nouveau 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 - La version 2.0.1 de if-this-then-node est opérationnelle!" sera affiché dans votre navigateur. Encore une fois, pour exécuter ce script au démarrage, modifiez le /etc/rc.local déposer et ajouter:

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

If-This-Then-Node fonctionne via des plugins - il y en a quelques-uns par défaut fournis, mais cela ne nous intéresse 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. 

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

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

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

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

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

Pour tester cela, j'utilise l'application du bouton "Do" IFTTT. Créez une nouvelle recette, parcourez les chaînes et sélectionnez Fabricant canal.

bouton faire

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 PUBLIER demande, application / json le 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", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Message entrant pour tout le monde: le dîner est prêt! Répéter. Le dîner est prêt. Mets tes culs à l'étage maintenant. "}

J'ai maintenant un bouton facilement accessible qui annoncera le message sur chaque appareil Sonos de la maison. Vous pouvez bien sûr associer cela à n'importe quel canal IFTTT que vous souhaitez créer un message personnalisé en utilisant des variables de ce canal. Vous devriez même être en mesure de répliquer le bulletin 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 se produit tout le temps, mais si vous consultez des journaux, cela peut sembler alarmant. Ci-dessous, vous pouvez voir quelqu'un essayer systématiquement de vérifier si l'une des interfaces PHPMyAdmin standard était accessible. Ce qu'ils n'étaient pas. Ne vous inquiétez pas si vous voyez quelque chose de similaire. C'est l'équivalent d'Internet d'appeler à froid des numéros de téléphone aléatoires pour voir s'il y a quelqu'un.

tentatives de piratage du serveur Web

Qu'allez-vous annoncer?

Vous devriez maintenant avoir les outils et les connaissances nécessaires pour baigner constamment toute votre maison dans 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 environ une toutes les 4 minutes, donc vous devriez aller bien.

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

James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.