OpenHAB Beginner's Guide Partie 2: ZWave, MQTT, Règles et Graphiques

OpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques sur le marché - mais il n'est pas facile de se mettre en place. En fait, cela peut être carrément frustrant.

OpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques sur le marché - mais il n'est pas facile de se mettre en place.  En fait, cela peut être carrément frustrant.
Publicité

Free ne signifie pas toujours "pas aussi bien que payé", et OpenHAB ne fait pas exception. Le logiciel domotique open source dépasse de loin les capacités de tout autre système domotique sur le marché - mais il n'est pas facile de se mettre en place. En fait, cela peut être carrément frustrant.

Ce guide peut être téléchargé en format PDF gratuit. Télécharger OpenHAB Beginner's Guide Partie 2: ZWave, MQTT, Règles et Graphiques maintenant . N'hésitez pas à copier et partager ceci avec vos amis et votre famille.

Dans la partie 1 du guide, je vous ai expliqué comment installer OpenHAB sur un Raspberry Pi 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, présenté les concepts de base de OpenHAB, et vous a montré comment ajouter vos premiers éléments dans le système. Aujourd'hui nous irons plus loin:

  • Ajout de périphériques ZWave
  • Ajout d'un contrôleur Harmony Ultimate
  • Introduire des règles
  • Présentation MQTT, et l'installation d'un courtier MQTT sur votre Pi, avec des capteurs sur un Arduino
  • Enregistrement de données et représentation graphique

Introduction à Z-Wave

Z-Wave est le protocole dominant de la domotique depuis des années: il est fiable, a été largement développé et fonctionne sur une gamme beaucoup plus longue que tout autre produit domestique intelligent. Des centaines de capteurs Z-Wave sont à votre disposition pour effectuer un large éventail de tâches. OpenHAB peut fonctionner avec Z-Wave, mais c'est un problème à régler, et la fiabilité n'est pas garantie.

Si vous envisagez l'achat d'une maison pleine de capteurs Z-Wave spécifiquement pour OpenHAB, je vous invite à reconsidérer. Cela peut fonctionner très bien pour vous, ou il peut être en proie à de petits problèmes persistants. Au moins, n'achetez pas une maison remplie de capteurs avant d'en avoir essayé quelques-uns. La seule raison de choisir Z-Wave est si vous n'êtes pas à 100% sur OpenHAB, et que vous souhaitez laisser vos options ouvertes à l'avenir: Z-Wave fonctionne par exemple avec Samsung SmartThings Quel Smart Hub pour la domotique est le meilleur pour vous ? Quel Smart Hub pour la domotique est le meilleur pour vous? Pendant un certain temps, les gens ont pensé que l'idée n'était rien d'autre qu'un gadget, mais les récentes sorties de produits ont montré que la domotique intelligente commence à tenir ses promesses. Lisez plus hub, ainsi que des hubs spécifiques Z-Wave tels que Homeseer, et une gamme d'autres options logicielles telles que Domoticz.

Bien qu'OpenHAB comprenne une liaison Z-Wave, vous devez tout d'abord configurer le réseau Z-Wave avant qu'OpenHAB puisse commencer à l'interroger pour des données. Si vous avez une carte contrôleur Rasberry, vous avez un logiciel fourni pour configurer le réseau, donc nous ne couvrirons pas cela ici. Si vous avez acheté un contrôleur Aeotec USB Z-Stick ou similaire, vous n'avez probablement pas de logiciel inclus, alors lisez la suite.

Aeotec Z-Stick Gen5, Z-Wave Plus USB pour créer une passerelle Aeotec Z-Stick Gen5, Z-Wave Plus USB pour créer une passerelle Acheter maintenant Sur Amazon $ 44.95

Si vous avez déjà une configuration de réseau Z-Wave, vous pouvez simplement brancher votre contrôleur dans le Pi et commencer à configurer la liaison et les éléments. Si c'est votre première incursion dans Z-Wave, c'est un peu plus complexe.

Tout d'abord, du point de vue matériel: chaque contrôleur a sa propre façon de s'associer avec des périphériques (techniquement connu sous le nom de "mode d'inclusion" dans lequel un ID de nœud est attribué). Dans le cas de l'Aotec Z-Stick, cela signifie qu'il faut le débrancher du port USB et appuyer une fois sur le bouton pour le placer en mode d'inclusion. Ensuite, approchez-vous de l'appareil que vous appairez, et appuyez sur le bouton d'inclusion sur celui-ci aussi (cela varie également: mon socket Everspring nécessite le bouton pour appuyer sur 3 fois de suite, donc la leçon ici est de lire le manuel pour votre appareil) .

Le Z-Stick clignote brièvement pour indiquer le succès. Cela présente des problèmes lors du branchement dans le Pi, comme un nouveau port est attribué. Redémarrez votre Pi pour le réinitialiser sur le port standard si vous trouvez qu'il a été réaffecté dynamiquement à un port différent. Mieux encore: ne le branchez pas dans le Pi avant d'avoir fait tous les couplages matériels en premier.

Installation des liaisons HABmin et Z-Wave

OpenHAB n'étant pas un utilitaire de configuration pour Z-Wave, nous allons installer un autre outil de gestion de site Web qui s'appelle HABmin. Rendez-vous au référentiel HABmin Github pour télécharger la version actuelle. Une fois que vous l'avez décompressé, vous trouverez 2 fichiers .jar dans le répertoire addons - ceux-ci devraient être placés dans le répertoire addons correspondant dans votre partage OpenHAB Home (si vous utilisez également le Zot Stick Aotec gen5, assurez-vous 'ai au moins la version 1.8 de la liaison Z-Wave) .

Ensuite, créez un nouveau dossier dans le répertoire webapps, et appelez-le "habmin" (minuscule est important). Copiez le reste des fichiers téléchargés dans là.

Note: Il y a aussi un HABmin 2 en développement actif. L'installation est sensiblement la même mais avec un addon .jar supplémentaire. Il pourrait être utile d'essayer à la fois juste pour voir ce que vous préférez.

Si ce n'est déjà fait, branchez votre contrôleur sur votre Pi. Tapez ce qui suit pour trouver le port correct.

 ls / dev / tty * 

Vous cherchez quelque chose avec l'USB dans le nom, ou dans mon cas particulier, le Z-stick s'est présenté comme / dev / ttyACM0 (un modem). Il pourrait être plus facile de faire la commande une fois avant de la brancher, et une fois après, afin que vous puissiez voir ce qui change si vous n'êtes pas sûr.

devtty

Ouvrez le fichier de configuration OpenHAB et modifiez la section sur Z-Wave, en décommentant les deux lignes et en mettant votre adresse de périphérique actuelle. Une dernière étape pour moi était de permettre à l'utilisateur OpenHAB d'accéder au modem.

 sudo usermod -a -G dialout openhab 

Maintenant, pour tout lancer en action, redémarrez OpenHAB

 service sudo redémarrage openhab 

Heureusement, si vous consultez le journal de débogage, vous verrez quelque chose comme ça. Félicitations, vous parlez maintenant de Z-Wave. Vous pouvez également trouver le journal de débogage inondé de messages provenant de divers nœuds Z-Wave. Commençons par vérifier HABMIN pour voir ce qu'il contient: http: //openhab.local: 8080 / habmin / index.html (en remplaçant openhab.local par votre nom d'hôte ou adresse IP Raspberry Pi).

zwave démarre dans le journal openhab

Il y a beaucoup à voir dans HABMIN, mais l'onglet Configuration -> Liaisons -> Z-Wave -> Dispositifs ne nous préoccupe que très sérieusement, comme vous pouvez le voir ci-dessous. Développez le noeud pour modifier l'emplacement et l'étiquette de nom pour votre facilité de référence.

modifier le nom de l'appareil

Configuration d'éléments Z-Wave

Chaque périphérique Z-Wave aura une configuration spécifique pour OpenHAB. Heureusement, la plupart des appareils ont déjà été explorés et il y aura déjà des exemples pour vous. La configuration de périphériques personnalisés non reconnus va bien au-delà de la portée de ce guide, mais supposons qu'il soit pris en charge pour l'instant.

Tout d'abord, j'ai un commutateur d'alimentation Everspring AN158 de base et un compteur sur le nœud 3. Un rapide googling m'a conduit à un post de blog sur Wetwa.re, avec une configuration d'élément d'échantillon. Je l'ai adapté comme suit:

 Commutateur Dehumidifier_Switch "Déshumidificateur" {zwave = "3: commande = switch_binary"} Nombre Déshumidificateur_Watts "Consommation d'énergie du déshumidificateur [% .1f W]" {zwave = "3: commande = mètre"} 

Parfait.

La prochaine étape est un multi-capteur Aeotec Gen5.

Aeon Labs Multi-capteur Aeotec Z-Wave Gen5 (Z-Wave Plus) Aeon Labs Multi-capteur Aeotec Z-Wave Gen5 (Z-Wave Plus) Acheter maintenant Sur Amazon

Pour celui-ci, j'ai trouvé un exemple de configuration sur iwasdot.com, et mon multicapteur sur le nœud 2.

 Number Hallway_Temperature "Temp. Couloir [% .1f ° C]" (Couloir, Température) {zwave = "2: 0: commande = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Nombre Couloir_Humidité "Couloir Humidité [% .0f %% ] "(Couloir, Humidité) {zwave =" 2: 0: commande = sensor_multilevel, sensor_type = 5 "} Nombre Hallway_Luminance" Luminance du couloir [% .0f Lux] "(Couloir) {zwave =" 2: 0: commande = sensor_multilevel, sensor_type = 3 "} Contact Hallway_Motion" Déplacement dans le couloir [% s] "(Couloir, mouvement) {zwave =" 2: 0: commande = sensor_binary, respond_to_basic = true "} Nombre sensor_1_battery" Batterie [% s %%] "( Motion) {zwave = "2: 0: commande = batterie"} 

Si le format vous semble étrange, revenez au guide du débutant Introduction à OpenHAB Home Automation sur Raspberry Pi Introduction à 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, en particulier la section de liaison Hue, où j'explique comment les éléments sont ajoutés. Vous n'aurez probablement besoin que de copier des exemples de collage comme celui-ci, mais si vous avez un nouvel appareil, la documentation de liaison détaille toutes les commandes.

Logitech Harmony Binding

Avant de sauter aux règles, je voulais ajouter une note rapide sur le travail avec la liaison Harmony. Je suis un grand fan de la série Harmony de télécommandes ultimes Logitech Harmony Ultimate Review et Giveaway Logitech Harmony Ultimate Review et Giveaway Votre salon est chaotique - admettez-le. Vous êtes pardonné de vous demander quelle télécommande quel appareil. Avec le téléviseur, l'amplificateur, TiVO, le lecteur BluRay, peut-être même les activités de commutation d'éclairage devient un long ... Lire la suite pour simplifier l'expérience home media center, mais ils se présentent souvent comme un système distinct au sein de la maison intelligente. Avec OpenHAB, les activités Logitech Harmony et le contrôle complet des périphériques peuvent maintenant faire partie de votre système centralisé et même être inclus dans les règles d'automatisation.

Commencez par installer les trois fichiers de liaison que vous trouvez en utilisant apt-cache pour rechercher "harmony":

openhab apt-cache rechercher une liaison d'harmonie

N'oubliez pas d' afficher à nouveau le répertoire des liaisons lorsque vous avez terminé:

 sudo apt-get installer openhab-addon-action-harmonyhub sudo apt-get installer openhab-addon-liaison-harmonyhub sudo apt-get installer openhab-addon-io-harmonyhub sudo chown -hR openhab: openhab / usr / share / openhab 

Pour configurer la liaison, ouvrez le fichier openhab.cfg et ajoutez une nouvelle section comme suit:

 ########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181 ou votre ip harmonyhub: nom d'utilisateur = votre-harmonie-email-login harmonyhub: mot de passe = votre- mot de passe 

L'adresse IP est celle de votre hub Harmony. Utilisez un scanner réseau pour trouver cela. Vous devrez également entrer vos informations de connexion, celles que vous entrez lorsque vous lancez l'utilitaire de configuration Harmony standard. C'est tout. Au redémarrage de votre Hue, votre journal de débogage devrait avoir une soudaine explosion de sortie de la liaison.

Ceci est une liste au format JSON de toutes vos activités, appareils et commandes qui peuvent être envoyés. C'est une bonne idée de copier ceci pour référence future. vous pouvez le rendre encore plus facile à lire avec des nœuds réductibles en le collant dans un formateur JSON en ligne tel que celui-ci.

json formaté sortie openhab

En plus de l'activité standard PowerOff qui est une activité par défaut, vous trouverez vos propres activités définies listées ici par leur nom. Maintenant, créons un simple bouton de contrôle pour démarrer les activités. Tout d'abord, dans votre fichier d'éléments, ajoutez la ligne suivante. Changez le groupe et l'icône si vous voulez.

 / * Harmony Hub * / String Harmony_Activity "Harmony [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"} 

Il s'agit d'une liaison de chaîne bidirectionnelle, capable à la fois de récupérer l'activité en cours et de commander l'activité en cours. Maintenant, nous pouvons créer un bouton dans le fichier sitemap.

 Switch item = Harmony_Activity mappings = [PowerOff = 'Désactivé', Exercice = 'Exercice', 13858434 = 'TV', Karaoké = 'Karaoké'] 

Dans le crochet, vous verrez chaque activité avec l'étiquette. Généralement, vous pouvez vous référer directement aux activités telles que vous les avez nommées sur votre télécommande, mais l'exception que j'ai trouvée est quelque chose avec un espace dans le nom de l'activité, comme "Regarder la TV". Dans ce cas, vous devrez utiliser l'identifiant d'activité. Encore une fois, vous pouvez trouver l'ID dans la sortie de débogage JSON. Enregistrez et actualisez votre interface, vous devriez voir quelque chose de similaire à ceci:

harmonie openhab dans le sitemap

Vous pouvez également vous référer aux activités dans vos règles, comme nous le verrons ensuite. Lisez la page wiki pour plus d'informations sur la liaison Harmony.

Une introduction générale aux règles

La plupart des hubs de maison intelligente incluent une sorte de création de règles afin que vous puissiez réagir automatiquement aux données de capteurs et aux événements dans la maison. En fait, je dirais qu'une maison vraiment intelligente n'est pas celle dont vous avez besoin pour passer du temps à interagir avec les applications mobiles - elle est invisible pour l'utilisateur final et entièrement automatisée. À cette fin, OpenHAB inclut également un puissant langage de script de règles que vous pouvez programmer, dépassant de loin la complexité de la plupart des hubs de maison intelligente. Battle of the Smart Home Hubs: qu'est-ce qui existe et qu'est-ce qui se passe? Battle of the Smart Home Hubs: Qu'est-ce qui se passe et qu'est-ce qui se passe? En savoir plus ou recettes IFTTT IFTTT se connecte désormais à tout: Présentation du canal Maker IFTTT se connecte désormais à tout: Présentation du canal Maker Les utilisations potentielles de IFTTT sont infinies. Mais jusqu'à présent, il a été difficile de l'interfacer avec vos propres projets matériels. Aujourd'hui, tout a changé. Lire la suite .

Les règles de programmation sont pires que ça ne l'est. Commençons simplement avec une paire de règles qui allument ou éteignent la lumière selon le capteur de présence:

 règle "Office s'allume lorsque James est présent" lorsque Item JamesInOffice est passé de OFF à ON puis sendCommand (Office_Hue, ON) règle de fin "Office éteint lorsque James quitte" lorsque Item JamesInOffice est passé de ON à OFF puis sendCommand (Office_Hue, OFF) end 

Tout d'abord, nous nommons la règle - soyez descriptif, de sorte que vous sachiez quel événement déclenche. Ensuite, nous définissons notre règle simple en disant quand x est vrai, alors faites y . Fin signifie la fermeture de cette règle particulière. Il y a un certain nombre de mots spéciaux que vous pouvez utiliser dans les règles, mais pour l'instant nous avons affaire à deux simples bits de syntaxe - Item, qui vous permet d'interroger l'état de quelque chose; et sendCommand, qui fait exactement ce que vous pensez. Je vous ai dit que c'était facile.

Il est probablement inutile d'utiliser une paire de règles, mais comme ma logique devient plus complexe, il sera utile de les séparer pour savoir si j'entre ou quitte la zone - et il pourrait être judicieux d'ajouter un capteur de lumière quelque part dans l'équation afin que nous n'allumions pas inutilement les lumières.

Regardons un autre exemple pour créer une règle planifiée.

 règle "Exercice tous les matins" lorsque Time cron "0 0 8 1/1 *? *" puis harmonyStartActivity ("Exercice") fin 

Encore une fois, nous nommons la règle, les conditions d'état où elle devrait être déclenchée et les actions à entreprendre. Mais dans ce cas, nous définissons un modèle de temps. Le code amusant que vous voyez dans les guillemets est une expression CRON pour Quartz Scheduler (le format est légèrement différent d'un CRONtab normal). J'ai utilisé cronmaker.com pour aider à créer l'expression, mais vous pouvez également lire le guide de format pour une explication détaillée et d'autres exemples.

générateur de cron
CronMaker.com utilisé pour générer l'expression Cron correctement formatée

Mes règles disent simplement "8h tous les matins, tous les jours de la semaine, dites à mon système Harmony Ultimate de démarrer l'activité Exercice", qui active à son tour le téléviseur, la Xbox, l'amplificateur et appuie sur le bouton A après une minute. le disque dans le lecteur.

Malheureusement, OpenHAB n'est pas encore capable de faire l'exercice pour moi.

Une autre règle que je veux vous montrer est quelque chose que j'utilise pour gérer les niveaux d'humidité dans ma maison. J'ai un seul déshumidificateur dont j'ai besoin de me déplacer quand je le souhaite, alors j'ai décidé de regarder tous mes capteurs d'humidité, de trouver celui qui est le plus haut et de stocker cela dans une variable. Il est actuellement déclenché toutes les minutes, mais cela peut facilement être réduit. Jetez un coup d'oeil en premier:

 import org.openhab.core.library.types. * import org.openhab.model.script.actions. * Importer java.lang.String règle "Humidity Monitor" lorsque Time cron "0 * * * *?" alors var prevHigh = 0 var highHum = "" Humidité? .members.forEach [hum | logDebug ("humidity.rules", hum.name); if (hum.state comme DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.nom + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Déshumidificateur_Needed, highHum); fin 

Le noyau de la règle est dans la ligne Humidity? .members.foreach . L'humidité est un nom de groupe pour mes capteurs d'humidité; .members saisit tous les éléments de ce groupe; foreach itère sur eux (avec un format carré curieux que vous n'êtes probablement pas familier). La syntaxe des règles est une dérivée de Xtend, vous pouvez donc lire la documentation Xtend si vous ne trouvez pas d'exemple à adapter.

Vous n'aurez probablement pas besoin de le faire - il existe des centaines d'exemples de règles:

  • Explication détaillée des règles sur le wiki officiel
  • Les règles officielles prélèvent la page wiki
  • Prendre les règles pour de nouveaux sommets
  • Échantillons avancés sur IngeniousFool.net

MQTT pour OpenHAB et Internet of Things

MQTT est un système de messagerie léger pour la communication de machine à machine - une sorte de Twitter pour vos Arduinos ou Raspberry Pis pour se parler (bien sûr, cela fonctionne avec beaucoup plus que ceux-ci). Il gagne rapidement en popularité et se retrouve à la maison avec des appareils Internet of Things, qui sont généralement des microcontrôleurs à faibles ressources qui ont besoin d'un moyen fiable de transmettre des données de capteurs à votre concentrateur ou de recevoir des commandes à distance. C'est exactement ce que nous ferons avec ça.

Mais pourquoi réinventer la roue?

MQ Telemetry Transport a été inventé en 1999 pour raccorder les oléoducs via des connexions satellites lentes, spécialement conçues pour minimiser l'utilisation de la batterie et la bande passante, tout en fournissant une fourniture de données fiable. Au fil des ans, les principes de conception sont restés les mêmes, mais le cas d'utilisation est passé des systèmes intégrés spécialisés aux dispositifs généraux de l'Internet des objets. En 2010, le protocole a été publié libre de droits, ouvert à toute personne à utiliser et à mettre en œuvre. Nous aimons gratuitement.

Vous vous demandez peut-être pourquoi nous prenons même un autre protocole - nous avons déjà le HTTP après tout - qui peut être utilisé pour envoyer des messages rapides entre tous les systèmes connectés sur Internet (comme OpenHAB et IFTTT, notamment avec le nouveau canal maker IFTTT se connecte maintenant à tout: Présentation du canal Maker IFTTT se connecte maintenant à n'importe quoi: Présentation du canal Maker Les utilisations potentielles d'IFTTT sont infinies, mais jusqu'à présent, il était difficile de l'interfacer avec vos propres projets matériels. Lire la suite ). Et vous auriez raison. Cependant, le temps de traitement d'un serveur HTTP est assez important - à tel point que vous ne pouvez pas facilement en exécuter un sur un microcontrôleur intégré comme l'Arduino (au moins, vous le pouvez, mais vous n'aurez plus beaucoup de mémoire pour autre chose ). MQTT est l'autre main est léger, donc l'envoi de messages autour de votre réseau n'obstruera pas les tuyaux, et il peut facilement s'intégrer dans notre petit espace mémoire Arduino.

Comment fonctionne MQTT?

MQTT nécessite à la fois un serveur (appelé "courtier") et un ou plusieurs clients. Le serveur agit en tant qu'intermédiaire, recevant des messages et les rediffusant à tous les clients intéressés.

Continuons avec l'analogie Twitter-for-machines cependant. Tout comme les utilisateurs de Twitter peuvent tweeter leurs propres 140 caractères inutiles, et les utilisateurs peuvent "suivre" les autres utilisateurs pour voir un flux de messages, les clients MQTT peuvent s'abonner à un canal particulier pour recevoir tous les messages et publier leurs propres messages. à ce canal. Ce modèle de publication et d'abonnement est appelé pub / sub, contrairement au modèle client / serveur traditionnel de HTTP.

Le protocole HTTP exige que vous communiquiez avec la machine avec laquelle vous communiquez, par exemple, bonjour, avant de vous reconnaître mutuellement tout le temps que vous recevez ou mettez des données. Avec pub / sub, le client effectuant la publication n'a pas besoin de savoir quels clients sont abonnés: il pompe simplement les messages et le courtier les redistribue aux clients abonnés. Tout client peut à la fois publier et s'abonner à des sujets, tout comme un utilisateur de Twitter.

Contrairement à Twitter, MQTT n'est pas limité à 140 caractères. C'est agnostique de données, ainsi vous pouvez envoyer de petits nombres ou de grands blocs de texte, des datagrammes formatés par JSON, ou même des images et des fichiers binaires.

Ce n'est pas que MQTT soit meilleur que HTTP pour tout - mais c'est plus approprié si nous devons avoir beaucoup de capteurs partout dans la maison, en permanence.

Il est également important de savoir qu'OpenHAB n'agira pas en tant que courtier MQTT - nous y répondrons un peu plus tard. Toutefois, OpenHAB agira en tant que client: il peut à la fois publier votre journal d'activité OpenHAB et lier des canaux particuliers à des périphériques, ce qui vous permet par exemple d'avoir un commutateur contrôlé par des messages MQTT sur un canal particulier. C'est idéal pour créer une maison pleine de capteurs.

Installez Mosquitto sur votre Pi

Bien qu'OpenHAB inclue un client MQTT pour que vous puissiez vous abonner à un sujet et également publier des messages, il n'agira pas en tant que serveur. Pour cela, vous devez soit utiliser un courtier MQTT basé sur le web (payant ou gratuit), soit installer le logiciel gratuit sur votre Pi. Je voudrais garder tout cela en interne, j'ai donc installé Mosquitto sur le Pi.

Malheureusement, la version disponible via l'habituel apt-get est complètement obsolète. Au lieu de cela, ajoutons les dernières sources.

 wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key ajouter mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ sudo wget http: // repo.mosquitto.org/debian/mosquitto-wheezy.list sudo apt-get installer mosquitto 

C'est tout ce que nous devons faire pour avoir un serveur MQTT opérationnel sur le réseau local. Votre courtier fonctionne sur le port 1883 par défaut.

Vérifiez que votre serveur MQTT fonctionne en utilisant le fichier MQTT.fx gratuit, qui est multi-plateforme. Cliquez sur l'icône des paramètres pour créer un nouveau profil et entrez l'adresse IP ou le nom de votre Raspberry Pi. Enregistrez et appuyez sur connecter. Si le petit feu de circulation en haut à droite devient vert, vous êtes prêt à partir.

mqttfx exemple de profil

Pour un test rapide, cliquez sur l'onglet "s'abonner", et tapez dansTopic / dans la zone de texte, puis cliquez sur le bouton S'abonner . Vous êtes maintenant inscrit pour recevoir un message sur le sujet nommé inTopic, mais il affichera 0 message. Revenez à l'onglet Publier, tapez dansTopic dans la petite boîte, et un court message dans la grande zone de texte ci-dessous. Hit Publiez plusieurs fois et revenez sur l'onglet Abonnement. Vous devriez voir quelques messages apparus dans ce sujet.

test inTopic MQTT

Avant d'ajouter quelques capteurs réels à notre réseau, nous devons nous renseigner sur les niveaux de sujet, ce qui nous permet de structurer et de filtrer le réseau MQTT. Les noms de sujets sont sensibles à la casse, ne doivent pas commencer par $, ou inclure un espace, ou des caractères non-ASCII - pratiques de programmation standard pour les noms de variables, vraiment.

Le séparateur / indique un niveau de sujet, qui est hiérarchique, par exemple les suivants sont tous les niveaux de sujet valides.

 inTopic / smallSubdivision / evenSmallerSubdivision myHome / livingRoom / température myHome / livingRoom / humidité myHome / cuisine / température myHome / cuisine / humidité 

Déjà, vous devriez voir comment cette structure d'arbre est parfaite pour une maison intelligente pleine de capteurs et d'appareils. La meilleure pratique à utiliser avec plusieurs capteurs dans une seule pièce est de publier chaque variable de capteur en fonction de son propre niveau de sujet - en se ramifiant à plus de spécificité (comme dans les exemples ci-dessus) - plutôt que d'essayer de publier plusieurs types de capteurs sur le même canal .

Les clients peuvent ensuite publier ou s'abonner à un nombre quelconque de niveaux de sujets individuels, ou utiliser des caractères génériques spéciaux pour filtrer depuis le haut de l'arborescence.

Le + wildcard se substitue à n'importe quel niveau de sujet. Par exemple:

 myHome / + / température 

abonnerait le client à la fois

 myHome / livingRoom / température myHome / cuisine / température 

... mais pas les niveaux d'humidité.

Le # est un caractère générique à plusieurs niveaux, de sorte que vous pouvez extraire n'importe quel élément de la matrice de capteurs livingRoom avec:

 myHome / livingRoom / # 

Techniquement, vous pouvez également vous abonner au niveau racine #, ce qui vous donne absolument tout ce qui passe par le courtier, mais cela peut être comme coller un tuyau d'incendie dans votre visage: un peu écrasante. Essayez de vous connecter au courtier MQTT public de HiveMQ et abonnez-vous à #. J'ai reçu environ 300 messages en quelques secondes avant que mon client ne se bloque.

Débutant MQTT Astuce: " / myHome /" est un sujet différent de " myHome /" - inclure une barre oblique au début crée un niveau de sujet vide, ce qui, bien que techniquement valide, n'est pas recommandé car cela peut prêter à confusion.

Maintenant que nous connaissons la théorie, essayons avec un Arduino, un Ethernet Shield, et un capteur de température et d'humidité DHT11 - vous en avez probablement un dans votre kit de démarrage, mais si ce n'est pas le cas, remplacez le capteur environnemental par un mouvement capteur (ou même un bouton).

Publication MQTT à partir d'un Arduino avec une connexion Ethernet

Si vous disposez d'un périphérique hybride compatible Arduino avec Wi-Fi ou Ethernet intégré, cela devrait également fonctionner. Finalement, nous voudrons un moyen de communication meilleur / moins cher que d'avoir à utiliser une connexion réseau dans chaque pièce, mais cela sert à apprendre les bases.

Commencez par télécharger la bibliothèque pubsubclient de Github. Si vous avez utilisé le bouton "Télécharger en ZIP", la structure est un peu erronée. Décompressez, renommez le dossier en seulement pubsubclient, puis sortez les deux fichiers du dossier src et déplacez-les d'un niveau à la racine du dossier téléchargé. Ensuite, déplacez le dossier entier dans votre répertoire Arduino / libraries .

Voici mon exemple de code que vous pouvez adapter: la sortie du signal DHT11 est sur la broche 7. Changez l'adresse IP du serveur pour celle de votre Pi sur la ligne suivante:

 client.setServer ("192.168.1.99", 1883); 

Malheureusement, nous ne pouvons pas utiliser son nom convivial (OpenHAB.local dans mon cas) car la pile TCP / IP sur l'Arduino est très simpliste et l'ajout du code pour le nommage Bonjour serait beaucoup de mémoire que nous ne voulons pas perdre . Pour modifier les sujets sur lesquels les données du capteur sont diffusées, faites défiler jusqu'à ces lignes:

 tampon de tampon [10]; dtostrf (t, 0, 0, tampon); client.publish ("openhab / himitsu / temperature", tampon); dtostrf (h, 0, 0, tampon); client.publish ("openhab / himitsu / humidity", tampon); 

Le code inclut également l'abonnement à un canal de commande. Trouvez et ajustez la ligne suivante:

 client.subscribe ("openhab / himitsu / command"); 

Examinez le code autour de vous et vous verrez que vous pouvez facilement contrôler une LED ou un relais par exemple en envoyant des commandes à des canaux spécifiques. Dans l'exemple de code, il renvoie simplement un message accusant réception de la commande.

Téléchargez votre code, branchez votre Arduino dans le réseau, et en utilisant MQTT.fx abonnez-vous à # ou openhab / himitsu / # (ou tout ce que vous avez changé le nom de la salle, mais n'oubliez pas d'inclure le # à la fin). Bientôt, vous devriez voir des messages arriver; et si vous envoyez ON ou OFF au sujet de la commande, vous verrez aussi les remerciements revenir.

messages mqtt arduino à revenir

Liaison MQTT pour OpenHAB

La dernière étape de l'équation consiste à relier ceci à OpenHAB. Pour cela, bien sûr, nous avons besoin d'une liaison.

 sudo apt-get installer openhab-addon-liaison-mqtt sudo chown -hR openhab: openhab / usr / share / openhab 

Et éditez le fichier de configuration pour activer la liaison.

 mqtt: courtier.url = tcp: // localhost: 1883 mqtt: courtier.clientId = openhab 

Redémarrez OpenHAB

 service sudo redémarrage openhab 

Ensuite, ajoutons un élément ou deux:

 / * Capteurs MQTT * / Nombre Himitsu_Temp "Température Himitsu [% .1f ° C]" (Himitsu, Température) {mqtt = "<[courtier: openhab / himitsu / température: état: défaut]"} Nombre Himitsu_Humidité "Himitsu Humidité [ % .1f %%] "(Himitsu, Humidity) {mqtt =" <[courtier: openhab / himitsu / humidité: état: par défaut] "} 

Vous devriez maintenant comprendre le format; il obtient un élément Number de la liaison MQTT, sur un sujet spécifié. Ceci est un exemple simple, vous pouvez vous référer à la page wiki où cela peut devenir beaucoup plus complexe.

Félicitations, vous avez maintenant la base d'une matrice de capteurs Arduino bon marché. Nous y reviendrons à l'avenir et placerons les Arduino sur leur propre réseau RF entièrement séparé. J'ai également créé une version identique pour les cartes Wizwiki 7500 si vous en possédez une.

Persistance et données graphiques

À présent, vous avez probablement un ensemble de capteurs configurés, que ce soit à partir de Z-Wave ou d'Arduinos personnalisés exécutant MQTT - vous pouvez donc visualiser l'état actuel de ces capteurs à tout moment, et vous devriez également réagir à leur valeur dans les règles. Mais ce qui est intéressant avec les valeurs des capteurs, c'est qu'ils changent avec le temps: c'est là qu'interviennent la persistance et la représentation graphique. Persistence dans OpenHAB signifie sauvegarder les données dans le temps. Allons de l'avant et installons RRD4J (Round Robin Database pour Java), ainsi appelé parce que les données sont sauvegardées en mode round robin - les anciennes données sont ignorées pour compresser la taille de la base de données.

Installez les paquets rrd4j avec les commandes suivantes.

 sudo apt-get install openhab-addon-persistence-rrd4j sudo chown -hR openhab:openhab /usr/share/openhab 

Créez ensuite un nouveau fichier appelé rrd4j.persist dans le dossier configurations / persistence . Coller dans ce qui suit:

 Stratégies {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" tous les jours: "0 0 0 * *?" default = everyChange} Items {// persiste tout lorsque la valeur est mise à jour, juste par défaut, et les restaure depuis la base de données au démarrage *: strategy = everyChange, restoreOnStartup // nous définissons des stratégies spécifiques de everyHour pour tout dans le groupe Temperature, et chaque minute pour la température d'humidité *: stratégie = everyHour Humidity *: strategy = everyMinute // vous pouvez également ajouter des éléments spécifiques ici, tels que // Bedroom_Humidity, JamesInOffice: strategy = everyMinute} 

Dans la première partie de ce fichier, nous définissons des stratégies, ce qui signifie simplement donner un nom à une expression CRON. C'est la même chose que nous avons déjà fait avec My.OpenHAB, mais cette fois nous créons de nouvelles stratégies que nous pouvons utiliser chaque jour, chaque heure et chaque minute. Je ne les ai pas encore tous utilisés, mais je pourrais être dans le futur.

Dans la seconde moitié du fichier, nous indiquons à rr4dj les valeurs de données à sauvegarder. Par défaut, nous allons tout sauvegarder chaque fois qu'il est mis à jour, mais j'ai également spécifié des stratégies basées sur le temps pour des capteurs spécifiques. Températures Je ne m'inquiète pas trop, donc j'ai réglé cela pour économiser seulement chaque heure, mais l'humidité est une grande préoccupation pour moi, alors je veux voir comment ça change à chaque minute. S'il y a d'autres données que vous souhaitez spécifiquement sauvegarder à des heures fixes, ajoutez-les ici ou ajustez-les au besoin.

Remarque: si vous souhaitez également représenter graphiquement les données, vous DEVEZ les stocker au moins une fois par minute. Peu importe si les données de votre capteur sont mises à jour aussi rapidement, il vous suffit de dire à rr4dj de les stocker une fois par minute.

Avec cela défini, vous devriez commencer à voir une sortie de débogage vous indiquant que les valeurs sont stockées.

rrd4j stocker des données

Ensuite, faisons de jolis graphiques de toutes ces données. C'est vraiment facile. Pour créer un graphique d'un capteur individuel, ajoutez ce qui suit à votre plan du site:

 Élément de graphique = Bedroom_Humidity period = h 

C'est littéralement tout ce dont vous avez besoin. Les valeurs valides pour la période sont h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; il devrait être évident ce que cela signifie. La valeur par défaut est D pour une journée complète de données si elle n'est pas spécifiée.

Pour créer un graphique avec plusieurs éléments, tracez simplement le nom du groupe à la place:

 Élément de graphique = Période d'humidité = h 

graphique

Vous pourriez aussi être intéressé de savoir que vous pouvez utiliser ce graphique ailleurs; il génère une image en utilisant l'URL suivante: http: // YOUROPENHABURL: 8080 / chart? groups = Humidité & période = h

Comment va votre système OpenHAB?

C'est tout pour cette partie du guide, mais ne vous attendez pas à ce que vous nous parliez de OpenHAB. J'espère que ce guide et celui du débutant vous ont donné une base solide pour développer votre propre système OpenHAB complet - mais c'est un processus qui n'est jamais complètement terminé.

Heureusement, OpenHAB peut évoluer de quelques appareils à des centaines, de la simple complexité des règles au summum de la domotique - alors comment va votre système? Quels appareils avez-vous choisis? Quel est le prochain grand projet auquel vous allez vous attaquer?

Parlons dans les commentaires - et s'il vous plaît, si vous avez trouvé ce guide utile, cliquez sur ces boutons de partage pour dire à vos amis comment ils peuvent aussi configurer leur propre système OpenHAB.

In this article