Guide du débutant OpenHAB Partie 2 : ZWave, MQTT, règles et graphiques

Guide du débutant OpenHAB Partie 2 : ZWave, MQTT, règles et graphiques

Gratuit ne signifie pas toujours 'pas aussi bon que payant', 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.





Dans la partie 1 du guide, je vous ai expliqué installer OpenHAB sur un Raspberry Pi , 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 d'appareils ZWave
  • Ajout d'une manette 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 plage beaucoup plus longue que tout autre produit de maison intelligente. Il existe des centaines de capteurs Z-Wave à votre disposition qui effectuent un large éventail de tâches. OpenHAB pouvez fonctionne avec Z-Wave, mais sa configuration est compliquée 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 exhorte à reconsidérer votre décision. Cela peut très bien fonctionner pour vous, ou cela peut être en proie à de petits problèmes persistants. Au moins, n'achetez pas une maison pleine de capteurs avant d'avoir eu l'occasion d'en essayer quelques-uns. La seule raison de choisir Z-Wave est que vous n'êtes pas à 100% sur OpenHAB et que vous souhaitez laisser vos options ouvertes à l'avenir : Z-Wave par exemple fonctionne avec le hub Samsung SmartThings, ainsi que les hubs spécifiques à Z-Wave tels que Homeseer, et une gamme d'autres options logicielles telles que domotique .

Bien qu'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, nous ne couvrirons donc pas cela 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 Hub Z-Wave Plus USB pour créer une passerelle (blanc ordinaire) ACHETEZ MAINTENANT SUR AMAZON

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. S'il s'agit de votre première incursion dans Z-Wave, c'est un peu plus complexe.

Tout d'abord, du côté du matériel : chaque contrôleur a sa propre manière de s'appairer avec les appareils (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 le débrancher du port USB et appuyer une fois sur le bouton pour le mettre en mode inclusion. Ensuite, approchez-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 appuie 3 fois de suite rapidement, la leçon ici est donc de lire le manuel de votre appareil) .





Le Z-Stick clignote brièvement pour indiquer le succès. Cela pose des problèmes lorsque vous le rebranchez sur 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é réaffecté dynamiquement à un autre. Mieux encore : ne le branchez pas sur le Pi avant d'avoir d'abord 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écharger la version actuelle. Une fois que vous l'avez décompressé, vous trouverez 2 .pot fichiers dans le répertoire addons - ceux-ci doivent être placés dans le répertoire addons correspondant dans votre partage OpenHAB Home (si vous utilisez également le Z-Stick Aotec gen5, assurez-vous d'avoir 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 le reste des fichiers téléchargés là-dedans.

Remarque : Il existe également un HABmin 2 en cours de développement actif. L'installation est à peu près la même mais avec un addon .jar supplémentaire. Cela vaut peut-être la peine d'essayer les deux juste pour voir ce que vous préférez.

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

ls /dev/tty*

Vous recherchez n'importe quoi 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 la brancher et une fois après, afin que vous puissiez voir ce qui change si vous n'êtes pas sûr.

Ouvrez le fichier de configuration OpenHAB et modifiez la section sur Z-Wave, en décommentant les deux lignes et en mettant l'adresse réelle de votre appareil. 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 mettre en action, redémarrez OpenHAB

redémarrage du service sudo openhab

Espérons que si vous consultez le journal de débogage, vous verrez quelque chose comme ceci. 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).

Il y a beaucoup à voir dans HABMIN, mais nous ne sommes vraiment concernés que par le Configuration -> Liaisons -> Z-Wave -> Périphériques onglet, 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.

Configuration des éléments Z-Wave

Chaque appareil 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 de périphériques personnalisés qui ne sont pas reconnus dépasse largement le cadre de ce guide, mais supposons qu'elle soit prise en charge pour le moment.

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 'Déshumidificateur' {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.

Multi-capteur Aeotec Z-Wave Gen5 d'Aeon Labs (Z-Wave Plus) ACHETEZ MAINTENANT SUR AMAZON

Pour celui-ci, j'ai trouvé un exemple de config sur iwasdot.com , et 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'}

Numéro Hallway_Humidity 'Hallway Humidity [%.0f %%]' (Hallway, Humidity) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Numéro Hallway_Luminance 'Luminance du couloir [%.0f Lux]' (Hallway) {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'}

Numéro sensor_1_battery 'Batterie [%s %%]' (Mouvement) {zwave='2:0:command=battery'}

Si le format de ceci vous semble étrange, veuillez revenir au premier Guide du débutant , en particulier la section de reliure Hue, où j'explique comment les éléments sont ajoutés. Vous n'aurez probablement besoin que de copier-coller des exemples comme celui-ci, mais si vous avez un nouvel appareil, la documentation de liaison détaille tous les commandes .

Reliure Logitech Harmony

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 série Harmony de télécommandes ultimes pour simplifier l'expérience du centre multimédia domestique, mais elles 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 « harmony » :

N'oubliez pas de chown le répertoire des liaisons à nouveau lorsque 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 HARMONY ##########

Harmonyhub:hôte=192.168.1.181 ou ton ip

Harmonyhub:nom d'utilisateur= your-harmony-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 le découvrir. Vous devrez également saisir vos informations de connexion, celles que vous saisissez 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 rafale soudaine 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 le rendre encore plus facile à lire avec des nœuds réductibles en collant dans un formateur JSON en ligne comme celui-ci .

En plus de l'activité PowerOff standard qui est une valeur 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) {harmonyhub='*[currentActivity]' }

C'est un liaison de chaîne bidirectionnelle , qui est capable à la fois de récupérer l'activité en cours et de commander l'activité en cours pour qu'elle 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']

comment regrouper les onglets dans chrome

Dans le crochet, vous verrez chaque activité avec l'étiquette. En règle générale, 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 à cela que j'ai trouvée était tout ce qui contenait 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 :

Vous pouvez également faire référence à des activités dans vos règles, comme nous le verrons ensuite. Lisez la page wiki pour plus d'informations sur le Reliure d'harmonie .

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 et aux événements des capteurs dans la maison. En fait, je dirais qu'une maison vraiment intelligente n'est pas une maison dont vous avez besoin pour passer du temps à interagir avec des applications mobiles - c'est une maison invisible pour l'utilisateur final et entièrement automatisée. À cette fin, OpenHAB comprend é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 ou des recettes IFTTT.

Les règles de programmation sonnent pire 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 allumée lorsque James est présent »

lorsque

L'élément JamesInOffice est passé de OFF à ON

alors

sendCommand(Office_Hue,ON)

finir

règle 'La lumière du bureau s'éteint quand James part'

lorsque

L'élément JamesInOffice est passé de ON à OFF

alors

sendCommand(Office_Hue,OFF)

finir

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 existe un certain nombre de mots spéciaux que vous pouvez utiliser dans les règles, mais pour l'instant, nous avons affaire à deux simples éléments de syntaxe : Article , qui vous permet d'interroger l'état de quelque chose ; et envoyerCommande , qui fait exactement ce que vous pensez qu'il fera. Je t'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 avantageux de les séparer pour savoir si j'entre ou sort 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 les lumières.

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

règle 'Faire de l'exercice tous les matins'

lorsque

Heure cron '0 0 8 1/1 * ? *'

alors

HarmonyStartActivity('Exercice')

finir

Encore une fois, nous nommons la règle, les conditions d'état quand 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 normal). j'ai utilisé cronmaker.com pour aider à créer l'expression, mais vous pouvez également lire le guide de format [Non plus disponible] pour une explication détaillée et plus d'exemples.

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

Mes règles disent simplement « 8h00 tous les matins, tous les jours de la semaine, dites à mon système Harmony Ultimate de démarrer l'activité Exercice », 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 que je dois déplacer partout où j'en ai besoin, j'ai donc décidé d'examiner 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 abaissé. Jetez un oeil d'abord:

importer org.openhab.core.library.types.*

importer org.openhab.model.script.actions.*

importer java.lang.String

règle 'Moniteur d'humidité'

quand Time cron '0 * * * * ?'

alors

var prevHigh = 0

var highHum = ''

Humidité?.members.forEach[hum|

logDebug('humidité.règles', hum.nom);

if(hum.state as DecimalType > prevHigh){

prevHigh = hum.state

highHum = hum.name + ': ' + hum.state + '%'

}

comment enregistrer de la musique avec audace

]

logDebug('humidité.rules', highHum);

postUpdate (Dehumidifier_Needed, highHum);

finir

Le cœur de la règle se trouve dans le Humidité?.membres.pour chaque ligne. L'humidité est un nom de groupe pour mes capteurs d'humidité ; .membres attrape tous les éléments de ce groupe ; pour chaque itère sur eux (avec un curieux format de crochet que vous n'êtes probablement pas familier). 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'en aurez probablement pas besoin - il existe des centaines d'exemples de règles :

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 que vos Arduinos ou Raspberry Pis se parlent (bien que cela fonctionne bien sûr avec bien plus que ceux-ci). Il gagne rapidement en popularité et se retrouve avec les appareils de l'Internet des objets, qui sont généralement des microcontrôleurs à faibles ressources qui ont besoin d'un moyen fiable pour transmettre les données des capteurs à votre hub ou recevoir des commandes à distance. 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 des connexions satellites lentes, spécialement conçues pour minimiser l'utilisation de la batterie et la bande passante, tout en fournissant une livraison 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 embarqué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 à tous à utiliser et à mettre en œuvre. On aime la gratuité.

Vous vous demandez peut-être pourquoi nous nous embêtons encore avec 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 ). Et vous auriez raison. Cependant, la surcharge de traitement d'un serveur HTTP est assez importante - à tel point que vous ne pouvez pas en exécuter un facilement sur un microcontrôleur intégré comme l'Arduino (du moins, vous le pouvez, mais vous n'aurez plus beaucoup de mémoire pour autre chose ). MQTT est d'autre part léger, donc l'envoi de messages sur votre réseau ne bouchera 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 les messages et les rediffusant à tous les clients intéressés.

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

HTTP nécessite que vous contactiez la machine avec laquelle vous communiquez, disons bonjour, puis que vous ayez un va-et-vient pour vous reconnaître constamment pendant que vous obtenez ou mettez des données. Avec pub/sub, le client qui publie n'a pas besoin de savoir quels clients sont abonnés : il envoie 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 de 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, en signalant constamment.

Il est également important de savoir qu'OpenHAB n'agira pas en tant que courtier MQTT - nous y reviendrons plus tard. Cependant, OpenHAB agira en tant que client : il peut à la fois publier votre journal d'activité OpenHAB, ainsi que lier des canaux particuliers à des appareils, de sorte que vous pouvez par exemple 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 comprenne un client MQTT afin 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. J'aimerais 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 ajouter mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install 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 par défaut sur le port 1883.

Vérifiez que votre serveur MQTT fonctionne à l'aide du 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 en haut à droite passe au vert, vous êtes prêt à partir.

Pour un test rapide, cliquez sur l'onglet 's'abonner' et tapez dans le sujet / dans la zone de texte, puis appuyez sur le S'abonner bouton. Vous êtes maintenant abonné pour recevoir un message sur le sujet nommé inTopic, bien qu'il n'affichera aucun message. Revenez à l'onglet publier, tapez inSujet dans la petite zone et un court message dans la grande zone de texte ci-dessous. Frappé Publier plusieurs fois et revenez sur l'onglet s'abonner. Vous devriez voir quelques messages apparaître dans ce sujet.

Avant d'ajouter des capteurs réels à notre réseau, nous devons en savoir plus sur les niveaux de sujet, qui nous permettent de structurer et de filtrer le réseau MQTT. Les noms de sujet sont sensibles à la casse, ne doivent pas commencer par $, ou inclure un espace, ou des caractères non-ASCII - des 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 des 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 à quel point 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 - 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 à n'importe quel nombre de niveaux de rubrique individuels, ou utiliser des caractères génériques spéciaux pour filtrer à partir de plus haut dans l'arborescence.

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

myHome/+/température

souscrirait le client aux deux

myHome/livingRoom/température

myHome/cuisine/température

... mais pas les taux 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 # où vous obtenez absolument tout ce qui passe par le courtier, mais cela peut être comme vous mettre une lance à incendie au visage : un peu écrasant. Essayez de vous connecter au courtier public MQTT depuis HiveMQ et de vous abonner à #. J'ai reçu environ 300 messages en quelques secondes avant que mon client ne tombe en panne.

Conseil pour débutants MQTT : ' /ma maison/' est un sujet différent de ' ma maison/' – inclure une barre oblique au début crée un niveau de sujet vide, qui, bien que techniquement valide, n'est pas recommandé car cela peut prêter à confusion.

Maintenant que nous connaissons la théorie, essayons 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 sinon, remplacez simplement le capteur environnemental par un mouvement capteur (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 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 bibliothèque pubsubclient de Github . Si vous avez utilisé le bouton « Télécharger en tant que 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 à la racine du dossier téléchargé. Ensuite, déplacez l'ensemble du dossier 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. Changez 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 représenterait 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 jusqu'à ces lignes :

tampon de caractères[10] ;

dtostrf(t,0, 0, tampon);

client.publish('openhab/himitsu/temperature',buffer);

dtostrf(h,0, 0, tampon);

client.publish('openhab/himitsu/humidité',buffer);

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

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

Examinez le code 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 sur le réseau et, à l'aide de MQTT.fx, abonnez-vous à l'un ou l'autre # ou openhab / himitsu / # (ou tout ce que vous avez changé le nom de la pièce, 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 commande, vous verrez également des accusés de réception revenir.

Liaison MQTT pour OpenHAB

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

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab:openhab /usr/share/openhab

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

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

mqtt:broker.clientId=openhab

Redémarrez OpenHAB

redémarrage du service sudo openhab

Ajoutons ensuite un ou deux éléments :

/* Capteurs MQTT */

Nombre Himitsu_Temp 'Température Himitsu [%.1f °C]' (Himitsu,Température) {mqtt='<[broker:openhab/himitsu/temperature:state:default]'}

Number Himitsu_Humidity'Himitsu Humidity [% .1f %%]' (Himitsu, Humidity) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Vous devriez 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 y reviendrons à l'avenir et placerons les Arduino sur leur propre réseau RF entièrement séparé. j'ai aussi créé une version identique pour les cartes Wizwiki 7500 s'il vous arrive d'en avoir un.

Persistance et données graphiques

À l'heure actuelle, vous avez probablement configuré un tas de capteurs, qu'ils proviennent de Z-Wave ou d'Arduinos personnalisés exécutant MQTT - vous pouvez donc afficher 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 à propos des valeurs des capteurs, c'est généralement qu'elles changent avec le temps : c'est là qu'interviennent la persistance et la représentation graphique. Persistance 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 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 {

toutes les minutes : '0 * * * * ?'

toutes les heures : '0 0 * * * ?'

tous les jours : '0 0 0 * * ?'

par défaut = toutChanger

}

Articles {

// tout persiste 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 chaque heure pour tout ce qui se trouve dans le groupe Température, et chaque minute pour l'humidité

comment vérifier les messages instagram sur pc

Température* : stratégie = toutes les heures

Humidité* : stratégie = toutes les minutes

// Alternativement, vous pouvez ajouter des éléments spécifiques ici, tels que

//Chambre_Humidité,JamesInOffice : stratégie = chaqueMinute

}

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 pour chaque jour, chaque heure et chaque minute. Je ne les ai pas encore tous utilisés, mais je le serai peut-ê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 basées sur le temps pour des capteurs spécifiques. Les températures ne me dérangent pas trop, j'ai donc réglé cela pour économiser toutes les heures uniquement, mais l'humidité est une grande préoccupation pour moi, donc je veux voir comment elle change à chaque minute. S'il y a 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 les données de votre 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.

Ensuite, faisons de jolis graphiques de toutes ces données. C'est vraiment facile. Pour créer un graphique d'un capteur individuel, ajoutez les éléments suivants à votre plan de site :

Élément de graphique=Chambre_Période d'humidité=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 graphique=Période d'humidité=h

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/chart?groups=Humidity&period=h

Comment va Ton Système OpenHAB à venir ?

C'est tout pour cette partie du guide, mais ne vous attendez pas à ce que ce soit la dernière fois que vous entendrez parler d'OpenHAB. Espérons 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 summum de la domotique – alors comment se porte votre système ? Quels appareils avez-vous choisi ? 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.

Nous espérons que vous aimez les articles que nous recommandons et dont nous discutons ! MUO a des partenariats affiliés et sponsorisés, nous recevons donc une part des revenus de certains de vos achats. Cela n'affectera pas le prix que vous payez et nous aide à offrir les meilleures recommandations de produits.

Partager Partager Tweeter E-mail Guide du débutant pour animer un discours

Animer un discours peut être un défi. Si vous êtes prêt à commencer à ajouter du dialogue à votre projet, nous allons décomposer le processus pour vous.

Lire la suite
Rubriques connexes
  • DIY
  • Maison intelligente
  • Arduino
  • Automatisation de la maison
  • Forme longue
  • Guide détaillé
A propos de l'auteur James Bruce(707 articles publiés)

James a un BSc en Intelligence Artificielle et est certifié CompTIA A+ et Network+. Lorsqu'il n'est pas occupé en tant qu'éditeur de revues de matériel, il aime les jeux LEGO, la réalité virtuelle et les jeux de société. Avant de rejoindre MakeUseOf, il était technicien en éclairage, professeur d'anglais et ingénieur en centre de données.

Plus de James Bruce

Abonnez-vous à notre newsletter

Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !

Cliquez ici pour vous abonner