Publicité

Free ne signifie pas toujours «pas aussi bon 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 à configurer. En fait, cela peut être carrément frustrant.

Ce guide est disponible au téléchargement en format PDF gratuit. Téléchargez le Guide du débutant OpenHAB Partie 2: ZWave, MQTT, Rules and Charting maintenant. N'hésitez pas à copier et à partager cela avec vos amis et votre famille.

Dans la partie 1 du guide, je vous ai expliqué installation d'OpenHAB sur un Raspberry Pi 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 , a présenté les concepts de base d'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
  • Présentation des règles
  • Présentation de MQTT et installation d'un courtier MQTT sur votre Pi, avec des capteurs sur un Arduino
  • Enregistrer des données et les représenter graphiquement

Introduction à Z-Wave

Z-Wave est le protocole domotique dominant depuis des années: il est fiable, a été largement développé et fonctionne sur une gamme beaucoup plus longue que tout autre produit de maison intelligente. Des centaines de capteurs Z-Wave sont à votre disposition pour effectuer un large éventail de tâches. OpenHAB pouvez fonctionne avec Z-Wave, mais est compliqué à installer et la fiabilité n'est pas garantie.

Si vous envisagez l'achat d'une maison pleine de capteurs Z-Wave spécifiquement pour une utilisation avec 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 pleine de capteurs avant d'avoir pu en essayer quelques-uns. La seule raison de choisir Z-Wave est que si vous n'êtes pas à 100% installé sur OpenHAB et que vous souhaitez laisser vos options ouvertes à l'avenir: Z-Wave, par exemple, fonctionne avec Samsung SmartThings Quel Smart Hub pour la domotique vous convient le mieux?Pendant un certain temps, les gens ne considéraient l'idée que comme un gadget, mais les dernières versions de produits ont montré que la domotique intelligente commençait à tenir ses promesses. Lire la suite concentrateur, ainsi que des concentrateurs spécifiques Z-Wave tels que Homeseer, et une gamme d'autres options logicielles telles que Domoticz.

Bien que OpenHAB comprenne une liaison Z-Wave, vous devez toujours configurer d'abord 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 le couvrirons pas ici. Si vous avez acheté un contrôleur Aeotec USB Z-Stick ou similaire, vous n'avez probablement aucun logiciel inclus, alors lisez la suite.

Aeotec Z-Stick Gen5, Z-Wave Plus USB pour créer une passerelleAeotec Z-Stick Gen5, Z-Wave Plus USB pour créer une passerelle Achetez maintenant sur Amazon $44.95

Si vous avez déjà une configuration réseau Z-Wave, vous pouvez simplement brancher votre contrôleur sur 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 côté matériel: chaque contrôleur a sa propre façon d'appairer avec les périphériques (techniquement appelé «mode d'inclusion» dans lequel un ID de nœud est attribué). Dans le cas de l'Aotec Z-Stick, cela signifie le débrancher du port USB et appuyer une fois sur le bouton pour le mettre en mode inclusion. Ensuite, rapprochez-le de l'appareil que vous associez et appuyez également sur le bouton d'inclusion (cela variera également: ma prise Everspring nécessite que le bouton soit pressé 3 fois de suite, donc la leçon ici est de lire le manuel de votre appareil).

Le Z-Stick clignote brièvement pour indiquer le succès. Cela pose des problèmes lors du rebranchement dans le Pi, car un nouveau port est attribué. Redémarrez votre Pi pour le réinitialiser sur le port standard si vous constatez qu'il a été dynamiquement réaffecté à un autre. Mieux encore: ne le branchez pas sur le Pi avant d'avoir effectué tous les appariements matériels.

Installation des liaisons HABmin et Z-Wave

Étant donné qu'OpenHAB n'est pas réellement un utilitaire de configuration pour Z-Wave, nous allons installer un autre outil de gestion Web qui le fait - quelque chose appelé HABmin. Dirigez-vous vers le Référentiel HABmin Github téléchargez la version actuelle. Une fois que vous l'avez décompressé, vous en trouverez 2 .pot fichiers dans le répertoire des addons - ceux-ci doivent être placés dans le répertoire des addons correspondant dans votre partage OpenHAB Home (si vous utilisez également le Z-Stick Aotec gen5, assurez-vous que vous avez 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» (les minuscules sont importantes). Copiez-y le reste des fichiers téléchargés.

Remarque: il existe également un HABmin 2 en développement actif. L'installation est sensiblement la même, mais avec un addon .jar supplémentaire. Il vaut peut-être la peine d'essayer les deux pour voir laquelle vous préférez.

Si vous ne l'avez pas déjà fait, branchez votre manette sur votre Pi. Tapez ce qui suit pour trouver le bon port.

ls / dev / tty *

Vous cherchez quelque chose avec USB dans le nom, ou dans mon cas particulier, le Z-stick s'est présenté comme /dev/ttyACM0 (un modem). Il peut être plus facile d'exécuter la commande une fois avant de le 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, décommentant les deux lignes et mettant votre adresse de périphérique réelle. Une dernière étape pour moi a été de permettre à l'utilisateur OpenHAB d'accéder au modem.

sudo usermod -a -G dialout openhab

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

sudo service openhab restart

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 a trouvé: http://openhab.local: 8080 / habmin / index.html (en remplaçant openhab.local par votre nom d'hôte ou votre adresse IP Raspberry Pi).

zwave démarrage dans le journal openhab

Il y a beaucoup à voir dans HABMIN, mais nous ne sommes vraiment concernés que par Configuration -> Liaisons -> Z-Wave -> Périphériques comme vous pouvez le voir ci-dessous. Développez le nœud pour modifier l'emplacement et l'étiquette de nom pour votre facilité de référence.

modifier le nom de l'appareil

Configuration des é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 le vôtre. La configuration d'appareils personnalisés qui ne sont pas reconnus dépasse largement le cadre de ce guide, mais supposons qu'il soit pris en charge pour l'instant.

Tout d'abord, j'ai un interrupteur d'alimentation et un compteur Everspring AN158 de base sur le nœud 3. Une recherche rapide sur Google m'a conduit à un article de blog sur Wetwa.re, avec un exemple de configuration d'élément. J'ai adapté ceci comme suit:

Switch Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Number Dehumidifier_Watts "Consommation électrique du déshumidificateur [% .1f W]" {zwave = "3: command = meter"}

Parfait.

Ensuite, 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) Achetez maintenant sur Amazon $69.27

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

Numéro Hallway_Temperature "Hallway Temperature [% .1f ° C]" (Hallway, Temperature) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Hallway Humidity [% .0f %%]" (Hallway, Humidity) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Number Hallway_Luminance "Luminance du couloir [% .0f Lux]" (Couloir) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 3"} Contactez Hallway_Motion "Hallway Motion [% s]" (Hallway, Motion) {zwave = "2: 0: command = sensor_binary, respond_to_basic = true"} Number sensor_1_battery "Battery [% s %%]" (Motion) {zwave = "2: 0: command = battery"}

Si le format vous semble étrange, veuillez retourner au premier Guide du débutant 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 , en particulier la section de liaison Hue, où j'explique comment les éléments sont ajoutés. Vous n'aurez probablement qu'à copier des exemples de collage comme celui-ci, mais si vous avez un nouvel appareil, la documentation de liaison détaille tous les commandes.

Logitech Harmony Binding

Avant de passer aux règles, je voulais ajouter une note rapide sur l'utilisation de la liaison Harmony. Je suis un grand fan de la Harmony série de télécommandes ultimes Logitech Harmony Ultimate Review et GiveawayVotre salon est le chaos - admettez-le. Vous êtes pardonné de vous demander quelle télécommande contrôle quel appareil. Avec le téléviseur, l'amplificateur, TiVO, le lecteur BluRay, peut-être même l'éclairage - les activités de commutation deviennent longues ... Lire la suite pour simplifier l'expérience du centre multimédia domestique, mais ils constituent souvent un système distinct au sein de la maison intelligente. Avec OpenHAB, les activités Logitech Harmony et le contrôle complet des appareils peuvent désormais 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 «harmonie»:

openhab apt-cache recherche la liaison d'harmonie

N'oubliez pas de chown le répertoire des liaisons une fois que vous avez terminé:

sudo apt-get install openhab-addon-action -harmonyhub. sudo apt-get install openhab-addon-binding -harmonyhub. sudo apt-get install 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:

########## TÉLÉCOMMANDES D'HARMONIE ########## Harmonyhub: hôte = 192.168.1.181ou votre ip
Harmonyhub: nom d'utilisateur =votre-harmonie-email-login
harmonhub: mot de passe =votre mot de passe

L'adresse IP est celle de votre hub Harmony. Utilisez un scanner réseau pour le découvrir. Vous devrez également saisir vos informations de connexion, celles que vous avez saisies lorsque vous lancez l'utilitaire de configuration Harmony standard. C'est ça. Au redémarrage de votre Hue, votre journal de débogage devrait avoir une soudaine rafale de sortie de la liaison.

Il s'agit d'une liste au format JSON de toutes vos activités, appareils et commandes pouvant être envoyés. C'est une bonne idée de copier ceci pour référence future. vous pouvez rendre la lecture encore plus facile avec des nœuds pliables en les collant dans un formateur JSON en ligne comme celui-ci.

sortie openhab au format json

En plus de l'activité standard PowerOff qui est une activité par défaut, vous trouverez vos propres activités définies répertoriées ici par nom. Créons maintenant un simple contrôle à un bouton pour démarrer les activités. Tout d'abord, dans votre fichier d'articles, ajoutez la ligne suivante. Modifiez le groupe et l'icône si vous le souhaitez.

/ * Harmony Hub * / Chaîne Harmony_Activity "Harmony [% s]" (Living_Room) {harmonhub = "* [currentActivity]"}

C'est un Liaison de chaîne bidirectionnelle, qui peut à la fois récupérer l'activité en cours et commander que l'activité en cours soit autre chose. Maintenant, nous pouvons créer un bouton pour cela, dans le fichier sitemap.

Switch item = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

Dans le crochet, vous verrez chaque activité avec l'étiquette. En général, vous pouvez vous référer directement aux activités telles que vous les avez nommées sur votre télécommande, mais j'ai trouvé l'exception à tout ce qui avait un espace dans le nom de l'activité, comme «Regarder la télévision». Dans ce cas, vous devrez utiliser l'ID 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 plan du site

Vous pouvez également faire référence aux activités dans vos règles, comme nous le verrons ci-dessous. Lisez la page wiki pour plus d'informations sur le Reliure Harmony.

Une introduction générale aux règles

La plupart des concentrateurs de maison intelligente incluent une sorte de création de règles afin que vous puissiez réagir automatiquement aux données et événements du capteur 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 complètement automatisée. À cette fin, OpenHAB comprend également un langage de script de règles puissant que vous pouvez programmer, dépassant de loin la complexité de la plupart hubs de maison intelligente Battle of the Smart Home Hubs: qu'est-ce qui existe et que vient-il? Lire la suite ou Recettes IFTTT IFTTT se connecte désormais à tout: présentation de la chaîne MakerLes utilisations potentielles de l'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 semblent pires qu'elles ne le sont. Commençons simplement avec une paire de règles qui allument ou éteignent la lumière en fonction du capteur de présence:

règle "Lumière du bureau sur la présence de James" lorsque l'élément JamesInOffice est passé de OFF à ON. puis envoyerCommande (Office_Hue, ON) mettre fin à la règle "Le bureau s'éteint quand James part" lorsque l'élément JamesInOffice est passé de ON à OFF. puis envoyerCommande (Office_Hue, OFF) fin

Tout d'abord, nous nommons la règle - soyez descriptif, afin que vous sachiez quel événement se déclenche. Ensuite, nous définissons notre règle simple en disant quand x est vrai, alors 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 - Article, qui vous permet d'interroger l'état de quelque chose; et sendCommand, qui fait exactement ce que vous pensez qu'il fera. Je t'ai dit que c'était facile.

Il n'est probablement pas nécessaire d'utiliser une paire de règles, mais comme ma logique devient plus complexe, il sera avantageux de les séparer pour savoir si je suis entrer ou sortir de la zone - et ce pourrait être une bonne idée d'ajouter un capteur de lumière quelque part dans l'équation afin de ne pas allumer inutilement lumières.

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

règle "Faites de l'exercice tous les matins" quand Time cron "0 0 8 1/1 *? *" puis HarmonyStartActivity ("Exercice") fin.

Encore une fois, nous nommons la règle, énonçons les conditions dans lesquelles elle doit se déclencher 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 standard). j'ai utilisé cronmaker.com pour aider à créer l'expression, mais vous pouvez également lire le guide de format [No Longer Available] pour une explication détaillée et plus d'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 commencer l'activité", qui à son tour active le téléviseur, la Xbox, l'amplificateur et appuie sur le bouton A après une minute pour lancer le disque dans le lecteur.

Malheureusement, OpenHAB n'est pas encore en mesure 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 je dois me déplacer partout où c'est nécessaire, j'ai donc décidé de regarder tous mes capteurs d'humidité, de trouver celui qui est le plus élevé et de le stocker dans une variable. Il est actuellement déclenché toutes les minutes, mais cela peut facilement être réduit. Jetez d'abord un coup d'œil:

import org.openhab.core.library.types. * import org.openhab.model.script.actions. * importez java.lang. Règle de chaîne "Humidity Monitor" quand Time cron "0 * * * *?" alors var prevHigh = 0 var highHum = "" Humidité? .members.forEach [hum | logDebug ("hygr.rules", hum.name); if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("hygr.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); fin.

Le cœur de la règle est Humidité? .Members.foreach ligne. L'humidité est un nom de groupe pour mes capteurs d'humidité; .membres saisit tous les éléments de ce groupe; pour chaque les parcourt (avec un curieux format de crochets que vous ne connaissez probablement pas). La syntaxe des règles est un dérivé de Xtend, vous pouvez donc lire le 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
  • le échantillons de règles officielles page wiki
  • Porter les règles vers de nouveaux sommets
  • Échantillons avancés sur IngeniousFool.net

MQTT pour OpenHAB et Internet des objets

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

Mais pourquoi réinventer la roue?

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

Vous vous demandez peut-être pourquoi nous nous soucions encore d'un autre protocole - nous avons déjà le HTTP après tout - qui peut être utilisé pour envoyer des messages rapides entre toutes sortes de systèmes connectés au Web (comme OpenHAB et IFTTT, en particulier avec le nouveau canal maker IFTTT se connecte désormais à tout: présentation de la chaîne MakerLes utilisations potentielles de l'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 ). Et tu aurais raison. Cependant, la surcharge de traitement d'un serveur HTTP est assez importante - à tel point que vous ne pouvez pas en exécuter facilement un sur un microcontrôleur intégré comme l'Arduino (au moins, vous pouvez, mais vous n'aurez pas beaucoup de mémoire pour quoi que ce soit autre). MQTT est d'autre part léger, donc l'envoi de messages sur 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 comme un intermédiaire, recevant des messages et les rediffusant à tous les clients intéressés.

Continuons avec le Twitter pour les machines analogie cependant. Tout comme les utilisateurs de Twitter peuvent tweeter leurs propres 140 caractères sans signification, et les utilisateurs peuvent "suivre" les autres utilisateurs pour voir un flux de publications organisé, Les clients MQTT peuvent s'abonner à un canal particulier pour en recevoir tous les messages, ainsi que publier leurs propres messages sur ce canal. canal. Ce modèle de publication et d'abonnement est appelé pub / sous, contrairement à la tradition serveur client modèle de HTTP.

HTTP exige que vous vous adressiez à la machine avec laquelle vous communiquez, dites Bonjour, puis que vous vous reconnaissiez constamment pendant que vous obtenez ou mettez des données. Avec pub / sub, le client qui effectue la publication n'a pas besoin de savoir quels clients sont abonnés: il pompe simplement les messages et le courtier les redistribue à tous les clients abonnés. Tout client peut à la fois publier et s'abonner à des sujets, tout comme un utilisateur Twitter.

Contrairement à Twitter, MQTT n'est pas limité à 140 caractères. Il est indépendant des données, vous pouvez donc envoyer de petits nombres ou de gros blocs de texte, des datagrammes au format JSON ou même des images et des fichiers binaires.

Ce n'est pas que MQTT soit meilleur que HTTP pour tout - mais il est plus approprié si nous allons avoir beaucoup de capteurs tout autour de la maison, rapportant constamment dedans.

Il est également important de savoir qu'OpenHAB n'agira pas comme votre courtier MQTT - nous y reviendrons plus tard. Cependant, OpenHAB agira en tant que client: il peut à la fois publier votre journal d'activité OpenHAB et lier notamment canaux vers les appareils, vous pouvez par exemple avoir un commutateur contrôlé par les messages MQTT sur un canal. 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 tout garder 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 ajoute mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get installe le moustique.

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

Vérifiez que votre serveur MQTT fonctionne en utilisant le MQTT.fx gratuit, qui est multiplateforme. 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 se connecter. Si le petit feu de circulation en haut à droite devient vert, vous êtes prêt à partir.

Exemple de profil mqttfx

Pour un test rapide, cliquez sur l'onglet «s'abonner» et tapez inTopic / dans la zone de texte, puis appuyez sur le Souscrire bouton. Vous êtes maintenant abonné pour recevoir un message sur le sujet nommé inTopic, bien qu'il ne contienne aucun message. Revenez à l'onglet de publication, tapez inTopic dans la petite boîte et un court message dans la grande zone de texte ci-dessous. Frappé Publier quelques fois et regardez en arrière sur l'onglet abonnement. Vous devriez voir quelques messages apparaître dans ce sujet.

test inTopic MQTT

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

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

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

Déjà, vous devriez voir comment cette structure arborescente est parfaite pour une maison intelligente pleine de capteurs et d'appareils. La meilleure pratique à utiliser avec plusieurs capteurs dans une même pièce consiste à publier chaque variable de capteur comme son propre niveau de sujet - ramification à 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 sujet individuels, ou utiliser des caractères génériques spéciaux pour filtrer de plus haut dans l'arborescence.

Le caractère générique + remplace n'importe quel niveau de sujet. Par exemple:

myHome / + / temperature

souscrirait le client à la fois

myHome / livingRoom / temperature. myHome / cuisine / température

… Mais pas les niveaux d'humidité.

Le # est un caractère générique à plusieurs niveaux, vous pouvez donc récupérer n'importe quoi dans le tableau de capteurs livingRoom avec:

myHome / livingRoom / #

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

Astuce MQTT pour débutant: "/myHome/” est un sujet différent de "ma maison/" - l'inclusion d'une barre oblique au début crée un niveau de sujet vide qui, bien que techniquement valide, n'est pas recommandé car il peut prêter à confusion.

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

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

Si vous avez un appareil hybride compatible Arduino avec Wi-Fi ou Ethernet intégré, cela devrait également fonctionner. Finalement, nous voulons 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 bibliothèque pubsubclient de Github. Si vous avez utilisé le bouton "Télécharger en ZIP", la structure est un peu fausse. Décompressez, renommez le dossier en pubsubclient, puis retirez les deux fichiers du src dossier et déplacez-les d'un niveau vers la racine du dossier téléchargé. Déplacez ensuite le dossier entier vers votre Arduino / bibliothèques annuaire.

Voici mon exemple de code que vous pouvez adapter: la sortie du signal DHT11 est sur la broche 7. Modifiez l'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 la dénomination Bonjour serait beaucoup de mémoire que nous ne voulons pas gaspiller. Pour modifier les sujets sur lesquels les données des capteurs sont diffusées, faites défiler vers le bas jusqu'à ces lignes:

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

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

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

Examinez le code là-bas 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 au réseau et en utilisant MQTT.fx, abonnez-vous à # ou openhab / himitsu / # (ou quel que soit le nom de la chambre, mais n'oubliez pas d'inclure le # à la fin). Bientôt, vous devriez voir des messages arriver; et si vous envoyez ON ou OFF à la rubrique de commande, vous verrez également des accusés de réception revenir.

messages mqtt arduino de retour

Liaison MQTT pour OpenHAB

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

sudo apt-get install openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

Et modifiez le fichier de configuration pour activer la liaison.

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

Redémarrez OpenHAB

sudo service openhab restart

Ajoutons ensuite un ou deux éléments:

/ * Capteurs MQTT * / Numéro Himitsu_Temp "Température Himitsu [% .1f ° C]"(Himitsu, Temperature) {mqtt = " (Himitsu, humidité) {mqtt = "

Vous devez maintenant comprendre le format; ça devient un Numéro d'article à partir de la liaison MQTT, sur un sujet spécifié. Ceci est un exemple simple, vous pouvez vous référer à la page wiki où il peut devenir beaucoup plus complexe.

Félicitations, vous avez maintenant la base d'un réseau de capteurs bon marché basé sur Arduino. Nous reverrons cela à l'avenir et placerons l'Arduino sur leur propre réseau RF entièrement séparé. J'ai également créé une version identique pour cartes Wizwiki 7500 s'il vous arrive d'en avoir un.

Persistance et représentation graphique des données

À l'heure actuelle, 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 peut voir l'état actuel de ces capteurs à tout moment, et vous devez également réagir à leur valeur dans règles. Mais la chose intéressante à propos des valeurs des capteurs est généralement qu'elles changent au fil du temps: c'est là qu'interviennent la persistance et la représentation graphique. Persistance dans OpenHAB signifie sauvegarder les données au fil du temps. Allons de l'avant et configurons RRD4J (base de données Round Robin pour Java), ainsi appelé parce que les données sont enregistrées de manière circulaire - les données plus anciennes sont supprimées pour compresser la taille de la base de données.

Installez les packages 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 configurations / persistance dossier. Collez ce qui suit:

Stratégies {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" tous les jours: "0 0 0 * *?" par défaut = everyChange. } Les éléments {// conservent tout lorsque la valeur est mise à jour, juste une valeur par défaut, et les restaure à partir de la base de données au démarrage *: stratégie = everyChange, restoreOnStartup // ensuite, nous définissons des stratégies spécifiques de everyHour pour tout élément du groupe Temperature, et et chaque minute pour Humidity Temperature *: Strategy = EveryHour Humidity *: Strategy = EveryMinute // Alternativement, vous pouvez 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 l'avons déjà fait avec My. OpenHAB, mais cette fois, nous créons de nouvelles stratégies que nous pouvons utiliser pour everyDay, everyHour et everyMinute. Je ne les ai pas encore tous utilisés, mais je pourrais l'être à l'avenir.

Dans la seconde moitié du fichier, nous indiquons à rr4dj les valeurs de données à enregistrer. Par défaut, nous allons tout enregistrer à chaque mise à jour, mais j'ai également spécifié des stratégies temporelles pour des capteurs spécifiques. Des températures qui ne me dérangent pas trop, j'ai donc réglé cela pour ne sauver que toutes les heures, mais l'humidité est une grande préoccupation pour moi, donc je veux voir comment ça change à chaque minute. S'il existe d'autres données que vous souhaitez spécifiquement enregistrer à des heures définies, ajoutez-les ici maintenant ou ajustez-les si nécessaire.

Remarque: si vous souhaitez également représenter graphiquement les données, vous DEVEZ les stocker au moins une fois par minute. Peu importe que vos données de capteur soient 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 stockage de 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 du 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. Il vaut par défaut D pour une journée complète de données s'il n'est pas spécifié.

Pour créer un graphique avec plusieurs éléments, il suffit de représenter graphiquement le nom du groupe à la place:

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

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

Comment va Votre Le système OpenHAB arrive?

C'est tout pour cet épisode du guide, mais ne vous attendez pas à ce que ce soit la dernière fois que nous entendons parler d'OpenHAB. J'espère que cela et le guide 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 vraiment complètement terminé.

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

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 eux aussi peuvent configurer leur propre système OpenHAB.

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.