Table des matières:

Alarme PIR vers WiFi (et domotique) : 7 étapes (avec photos)
Alarme PIR vers WiFi (et domotique) : 7 étapes (avec photos)

Vidéo: Alarme PIR vers WiFi (et domotique) : 7 étapes (avec photos)

Vidéo: Alarme PIR vers WiFi (et domotique) : 7 étapes (avec photos)
Vidéo: ALARME PG-107-3G CONNECTÉ (WIFI & 3G) 2024, Juillet
Anonim
Image
Image
Alarme PIR vers WiFi (et domotique)
Alarme PIR vers WiFi (et domotique)

Aperçu

Cette instructable vous donnera la possibilité d'afficher la dernière date/heure (et éventuellement un historique des heures) du déclenchement des PIR (capteurs infrarouges passifs) de votre alarme de maison, dans votre logiciel domotique. Dans ce projet, je discuterai de l'utilisation d'OpenHAB (logiciel domotique gratuit, que j'utilise personnellement) bien qu'il fonctionnera avec tout autre logiciel ou application domotique prenant en charge MQTT (également décrit plus loin dans cet article). Cette instructable vous guidera à travers les étapes nécessaires sur la façon de câbler une carte de circuit imprimé et Wemos D1 mini (une carte IOT qui utilise une puce ESP8266) qui puise dans les zones d'alarme de votre boîtier de commande d'alarme de sorte que lorsqu'une zone (qui contient un ou plusieurs PIR) est déclenché, le Wemos envoie un message sans fil en utilisant le protocole MQTT à votre logiciel domotique qui, à son tour, affiche la dernière date/heure de ce déclenchement. Le code Arduino pour programmer le Wemos est également fourni.

introduction

L'image ci-dessus est ce que je vois via l'un des écrans de l'application OpenHAB sur mon iPhone. Le texte date/heure est codé par couleur pour fournir une représentation plus rapide du moment où le PIR a été déclenché - il s'affichera en rouge (déclenché au cours de la dernière minute), orange (déclenché au cours des 5 dernières minutes), vert (déclenché au cours des 30 dernières minutes), bleu (déclenché au cours de la dernière heure) ou sinon, noir. En cliquant sur la date/l'heure, une vue historique des déclencheurs PIR s'affichera, où 1 signifie déclenché et 0 est inactif. Il existe de nombreuses utilisations pour cela, par exemple, il pourrait compléter votre solution de présence à domicile, il peut détecter les mouvements si vous êtes absent et via les règles OpenHAB, envoyer des notifications sur votre téléphone, vous pouvez l'utiliser comme je le fais pour voir si mes enfants sont se lever au milieu de la nuit, déclenché par un PIR qui réside à l'extérieur de leurs chambres !

OpenHAB est simplement le logiciel domotique que j'utilise, il y en a beaucoup d'autres - et s'ils prennent en charge MQTT, vous pouvez facilement adapter ce projet en fonction du logiciel que vous utilisez.

Hypothèses

Cette instructable suppose que vous avez déjà (ou installera):

  • Évidemment un système d'alarme domestique avec des PIR (capteurs infrarouges passifs) et que vous avez accès au boîtier de commande d'alarme pour connecter le câblage nécessaire
  • OpenHAB (logiciel domotique open source gratuit) en cours d'exécution, bien que, comme indiqué, il devrait fonctionner avec tout logiciel domotique pouvant inclure une liaison MQTT. Alternativement, vous pouvez modifier le code vous-même en fonction de vos propres besoins.
  • Broker Mosquitto MQTT (ou similaire) installé et lié configuré avec OpenHAB (MQTT est un protocole de type abonnement/publication de messagerie qui est léger et idéal pour la communication entre les appareils)

Si vous n'exécutez pas OpenHAB et un courtier MQTT, consultez cet excellent article sur le site Web MakeUseOf

De quoi ai-je besoin?

Pour créer la manette sans fil, vous devrez vous procurer les pièces suivantes:

  • Wemos D1 mini V2 (a une puce sans fil ESP8266 intégrée)
  • Un comparateur LM339 (cela fera la vérification du PIR inactif vs déclenché)
  • Une source d'alimentation 5 V CC pour le Wemos (OU, un convertisseur abaisseur CC-CC. Remarque: un régulateur de tension LM7805 peut ne pas fonctionner pour cette application, comme indiqué plus loin dans ce projet)
  • Deux résistances pour un diviseur de tension (la taille dépendra de vos tensions d'alarme, discutées plus loin dans le projet)
  • Une résistance de 1K ohm pour agir comme une résistance de rappel pour contrôler la puissance du LM339
  • Un MOSFET 2N7000 (ou similaire) pour allumer logiquement le LM339 (éventuellement en option, discuté plus tard dans le projet)
  • Une maquette de taille appropriée pour la configuration et les tests de circuits
  • Un tas de fils de maquette pour tout connecter ensemble
  • Outils nécessaires: pinces coupantes, fil monoconducteur
  • Un multimètre DC (obligatoire !)

Étape 1: Le boîtier de commande du système d'alarme

Le boîtier de commande du système d'alarme
Le boîtier de commande du système d'alarme

D'abord quelques avertissements et avis de non-responsabilité

Personnellement, j'ai un système d'alarme Bosch. Je vous recommande fortement de télécharger le manuel correspondant à votre système d'alarme particulier et de vous familiariser avec celui-ci avant de commencer car vous devrez éteindre le système d'alarme pour câbler les zones. Je vous recommande également de lire cet article dans son intégralité avant de vous lancer !

Vous trouverez ci-dessous une liste de quelques éléments que vous devez savoir avant de commencer - assurez-vous de lire et de comprendre chacun d'eux avant de continuer ! Je n'assume aucune responsabilité si vous bousillez votre système d'alarme et/ou devez payer votre installateur pour le réparer. Si vous lisez et comprenez ce qui suit et prenez les précautions nécessaires, tout devrait bien se passer:

1. Mon système d'alarme avait une batterie de secours à l'intérieur de la boîte et avait également un interrupteur d'autoprotection à l'intérieur du couvercle (qui permet d'accéder à la carte du système d'alarme) donc même éteindre l'alarme de l'extérieur, lors du retrait du panneau avant de la commande box ça a déclenché l'alarme ! Pour contourner ce problème pendant que je travaillais sur le projet, j'ai contourné la protection anti-sabotage en débranchant puis en court-circuitant l'interrupteur anti-sabotage (le fil rouge épais comme indiqué sur la photo ci-dessus)

2. Lors de la remise sous tension du système d'alarme, après environ ~12 heures, le panneau de commande d'alarme a commencé à émettre un bip avec des codes d'erreur. Après avoir déterminé les codes d'erreur via le manuel, j'ai découvert qu'il m'avertissait que:

  • La date/l'heure n'étaient pas réglées (j'avais besoin du code maître et de la séquence de touches du manuel pour reconfigurer)
  • Que la batterie de secours n'était pas connectée (solution facile, j'avais juste oublié de rebrancher la batterie)

3. Dans mon alarme, il y a 4 blocs de connexion de zone (étiquetés Z1-Z4) pour le câblage des PIR sur la carte d'alarme principale, cependant - mon système d'alarme est en fait capable de 8 zones. Chaque bloc de connexion de zone peut en fait exécuter 2 zones chacune (Z1 fait Z1 et Z5, Z2 fait Z2 et Z6 et ainsi de suite). Le système d'alarme est doté d'une protection anti-sabotage intégrée pour empêcher quelqu'un de dire, d'ouvrir le couvercle du système d'alarme comme mentionné ci-dessus ou de couper les fils d'un PIR. Il distingue chaque sabotage de zone via des résistances EOL (fin de ligne). Ce sont des résistances de taille spécifique qui résident à la "fin de la ligne" - en d'autres termes, à l'intérieur du PIR (ou du commutateur d'autoprotection du boîtier de commande, ou de la boîte de sirène ou de tout ce qui est câblé à cette zone). Comme mentionné, ces résistances sont utilisées comme "autoprotection". protection' - techniquement, si quelqu'un coupe les câbles d'un PIR - parce que le système d'alarme s'attend à voir une certaine résistance de ce PIR, alors si la résistance change, il suppose que quelqu'un a altéré le système et déclenchera l'alarme.

Par exemple:

Sur mon alarme, la zone "Z4" a 2 fils, l'un va au PIR dans mon couloir et l'autre va à l'interrupteur d'autoprotection du boîtier de commande d'alarme. A l'intérieur du couloir PIR, il a une résistance de 3300 ohms. L'autre fil qui va à l'interrupteur d'autoprotection du boîtier de commande, a une résistance de 6800 ohms câblée en série. C'est ainsi que le système d'alarme distingue (logiquement) les sabotages "Z4" et "Z8". De même, la zone "Z3" a un PIR (avec une résistance de 3300 ohms) et aussi le commutateur d'autoprotection de la sirène (avec une résistance de 6800 ohms) qui constitue "Z7". L'installateur d'alarme aurait préconfiguré le système d'alarme afin qu'il sache quel appareil est connecté à chaque zone (et modifié la taille de la résistance EOL en conséquence, car le système d'alarme est programmé pour connaître la taille des différentes résistances EOL. Sous vous ne devez en aucun cas modifier la valeur de ces résistances !)

Donc, sur la base de ce qui précède, parce que chaque zone peut être associée à plusieurs appareils (avec des valeurs de résistance différentes), et en se souvenant de la formule V = IR (tension = ampères x résistance), cela peut également signifier que chaque zone peut avoir des tensions différentes. Ce qui nous amène à l'étape suivante, la mesure de chaque zone IDLE vs TIGGERED voltage…

Étape 2: Mesure de la tension de la zone d'alarme

Mesure de la tension de la zone d'alarme
Mesure de la tension de la zone d'alarme
Mesure de la tension de la zone d'alarme
Mesure de la tension de la zone d'alarme

Une fois que vous avez obtenu l'accès à la carte principale de votre système d'alarme (et contourné l'interrupteur d'autoprotection si vous en avez un; comme à l'étape précédente), rallumez votre système d'alarme. Nous devons maintenant mesurer la tension de chaque zone lorsqu'elle est au repos (aucun mouvement devant le PIR) par rapport au DÉCLENCHEMENT (le PIR a détecté un mouvement). Prenez un stylo et du papier pour pouvoir noter vos lectures de tension.

AVERTISSEMENT: La majeure partie de votre système d'alarme fonctionnera probablement sur 12 V CC, mais son alimentation initiale sera de 220 V (ou 110 V) CA, avec un transformateur convertissant la puissance de CA en CC. LISEZ le manuel et prenez des précautions supplémentaires en vous assurant de NE PAS mesurer de bornes AC !!! Selon la capture d'écran de mon système d'alarme sur cette page, vous pouvez voir que tout en bas de l'image est l'alimentation secteur, transformée en 12V DC. Nous mesurons le 12V DC dans les cases rouges surlignées. Ne touchez jamais l'alimentation secteur. Faites très attention !

Mesurer la tension PIR

J'ai 4 x PIR connectés à Z1 à Z4. Mesurez chacune de vos zones comme suit.

  1. Tout d'abord, identifiez la borne GND et les bornes de zone sur le panneau d'alarme. Je les ai mis en évidence dans l'image montrée dans le manuel de mon alarme Bosch.
  2. Prenez votre multimètre et réglez votre mesure de tension sur 20V DC. Connectez le câble noir (COM) de votre multimètre à la borne GND de l'alarme. Placez le fil rouge (+) de votre multimètre sur la première zone - dans mon cas étiqueté "Z1". Notez la lecture de la tension. Effectuez les mêmes étapes pour les zones restantes. Mes mesures de tension sont les suivantes:
  • Z1 = 6,65 V
  • Z2 = 6,65 V
  • Z3 = 7.92V
  • Z4 = 7.92V

Comme indiqué ci-dessus, mes deux premières zones n'ont que des PIR qui leur sont attachés. Les deux dernières zones ont à la fois des PIR et une protection anti-sabotage (autoprotection du boîtier de commande Z3, autoprotection de la sirène Z4) Notez les différences de tension.

3. Vous aurez probablement besoin de 2 personnes pour cette prochaine étape. Vous aurez également besoin de savoir quel PIR se trouve dans quelle zone. Revenez en arrière et lisez la tension sur la première zone. Maintenant, demandez à quelqu'un dans votre maison de marcher devant le PIR, la tension devrait chuter. Prenez note de la nouvelle lecture de tension. Dans mon cas, les tensions se lisent comme suit lorsque les PIR sont déclenchés:

  • Z1 = 0V
  • Z2 = 0V
  • Z3 = 4.30V
  • Z4 = 4.30V

Comme indiqué ci-dessus, je peux voir que lorsque les zones 1 et 2 sont déclenchées, la tension chute de 6,65V à 0V. Cependant lorsque les zones 3 et 4 sont déclenchées, la tension chute de 7,92V à 4,30V.

Mesure de l'alimentation 12V

Nous utiliserons la borne 12V DC du boîtier de commande d'alarme pour alimenter notre projet. Nous devons mesurer la tension de l'alimentation 12V DC sur l'alarme. Bien qu'il indique déjà 12V, nous devons connaître une lecture plus précise. Dans mon cas, il lit en fait 13.15V. Notez-le, vous aurez besoin de cette valeur à l'étape suivante.

Pourquoi mesurons-nous la tension?

La raison pour laquelle nous devons mesurer la tension pour chaque PIR est le circuit que nous allons créer. Nous utiliserons une puce de comparateur différentiel quadruple LM339 (ou un comparateur d'amplificateur opérationnel quadruple) comme composant électrique de base pour ce projet. Le LM339 dispose de 4 comparateurs de tension indépendants (4 canaux) où chaque canal prend 2 x tensions d'entrée (une entrée inverseuse (-) et une entrée non inverseuse (+), voir schéma) Si la tension de la tension d'entrée inverseuse doit chuter en dessous de la tension non inverseuse, alors sa sortie associée sera attirée vers la terre. De même, si la tension d'entrée non inverseuse chute en dessous de l'entrée inverseuse, la sortie est alors élevée à Vcc. Idéalement, dans ma maison, j'ai 4 x PIR/zones d'alarme - donc chaque zone sera câblée à chaque canal du comparateur. Si vous avez plus de 4 x PIR, vous aurez besoin d'un comparateur avec plus de canaux, ou d'un autre LM339 !

Remarque: le LM339 consomme de l'énergie en nano-ampères et n'affectera donc pas la résistance EOL du système d'alarme existant.

Si cela prête à confusion, passez à l'étape suivante de toute façon, cela commencera à avoir plus de sens une fois que nous l'aurons connecté !

Étape 3: Création d'un diviseur de tension

Image
Image

Qu'est-ce qu'un diviseur de tension ?

Un diviseur de tension est un circuit avec 2 x résistances (ou plus) en série. Nous fournissons la tension dans (Vin) à la première résistance (R1) L'autre branche de R1 se connecte à la première branche de la deuxième résistance (R2), et l'autre extrémité de R2 se connecte à GND. Nous prenons ensuite une tension de sortie (Vout) de la connexion entre R1 et R2. Cette tension deviendra notre tension de référence pour le LM339. Pour plus d'informations sur le fonctionnement des diviseurs de tension, voir la vidéo youtube d'Adohms

(Remarque: les résistances n'ont pas de polarité, elles peuvent donc être câblées dans les deux sens)

Calcul de notre tension de référence

En supposant que la tension chute lorsque votre PIR est déclenché (cela devrait être le cas pour la plupart des alarmes), ce que nous essayons d'obtenir est d'obtenir une lecture de tension à peu près à mi-chemin entre notre tension de repos la plus basse et notre tension de déclenchement la plus élevée, cela deviendra notre tension de référence.

Prenant mon alarme comme exemple…

Les tensions de zone au repos étaient Z1 = 6,65 V, Z2 = 6,65 V, Z3 = 7,92 V, Z4 = 7,92 V. La tension de repos la plus basse est donc de 6,65V

Les tensions de déclenchement de zone étaient: Z1 = 0V, Z2 = 0V, Z3 = 4,30V, Z4 = 4,30V. La tension de déclenchement la plus élevée est donc de 4,30V

Nous devons donc choisir un nombre à mi-chemin entre 4,30V et 6,65V (n'a pas besoin d'être exact, juste à peu près) Dans mon cas, ma tension de référence doit être d'environ 5,46V. Remarque: si la tension de ralenti la plus basse et la tension déclenchée la plus élevée sont très proches l'une de l'autre en raison de plusieurs zones provoquant une plage de tensions différentes, vous devrez peut-être créer 2 diviseurs de tension ou plus.

Calcul de nos valeurs de résistance pour le diviseur de tension

Maintenant que nous avons une tension de référence, nous devons calculer la taille des résistances dont nous avons besoin pour créer un diviseur de tension qui fournira notre tension de référence. Nous utiliserons la source de tension 12V DC (Vs) de l'alarme. Cependant, comme à l'étape précédente, lorsque nous avons mesuré l'alimentation 12V DC, nous avons en fait obtenu 13,15V. Nous devons calculer le diviseur de tension en utilisant cette valeur comme source.

Calculer Vout en utilisant la loi d'ohms…

Vout = Vs x R2 / (R1 + R2)

…ou utilisez un calculateur de diviseur de tension en ligne:-)

Vous devrez expérimenter avec les valeurs de résistance jusqu'à ce que vous obteniez la sortie souhaitée. Dans mon cas, cela a fonctionné avec R1 = 6,8 k ohm et R2 = 4,7 k ohm, calculé sous forme longue comme suit:

Vout = Vs x R2 / (R1 + R2)

Vout = 13,15 x 4700 / (6800 + 4700)

Vout = 61 805 / 11 500

Vout = 5.37V

Étape 4: câbler le LM339

Câblage du Wemos D1 Mini
Câblage du Wemos D1 Mini

Diviseur de tension aux entrées inverseuses LM339

Comme discuté précédemment concernant le comparateur LM339, il prendra 2 x entrées. L'un sera une tension de chaque PIR vers chaque borne non inverseuse (+) de chaque canal, l'autre sera notre tension de référence vers notre borne inverseuse (-). La tension de référence doit alimenter les 4 entrées inverseuses du comparateur. Mettez votre système d'alarme hors tension avant d'effectuer ces étapes.

  • Faites passer un fil du bloc 12V DC du système d'alarme au rail + de votre maquette *
  • Faites passer un fil du bloc GND du système d'alarme au rail - de votre maquette **
  • Installez le comparateur LM339 au milieu de la maquette (l'encoche indique le plus proche de la broche 1)
  • Installez les 2 x résistances pour créer un circuit diviseur de tension et câblez pour une sortie de tension divisée
  • Acheminez les fils de la Vout « divisée en tension » à chaque borne d'inversion LM339

* CONSEIL: utilisez une pince crocodile pour l'alimentation si possible, car cela facilite l'alimentation ON/OFF de votre projet** IMPORTANT ! Un MOSFET peut être requis SI vous alimentez le Wemos à partir du panneau d'alarme ! Dans mon cas, le LM339, Wemos et Alarm sont tous alimentés par la même source (c'est-à-dire le système d'alarme lui-même). Cela me permet de tout mettre sous tension avec une seule connexion électrique. Cependant, par défaut, les broches GPIO du Wemos sont définies comme des broches "INPUT" - ce qui signifie qu'elles prennent toute tension qui leur est envoyée et s'appuient sur cette source pour fournir des niveaux de tension corrects (niveaux min/max) afin que le Wemos ne t crash ou burn out. Dans mon cas, le système d'alarme est alimenté et commence à faire sa séquence de démarrage très rapidement - si vite en fait, qu'il le fait avant que le Wemos puisse démarrer et déclarer les broches GPIO comme "INPUT_PULLUP" (tension tirée en interne dans le ébrécher). Cela ne signifie pas que les différences de tension provoqueraient le crash du Wemos lorsque l'ensemble du système serait alimenté. Le seul moyen de contourner cela serait d'éteindre et d'allumer manuellement le Wemos. Pour résoudre ce problème, un MOSFET est ajouté et agit comme un "commutateur logique" pour mettre le LM339 sous tension. Cela permet au Wemos de démarrer, de définir ses 4 broches GPIO du comparateur comme "INPUT_PULLUP", de retarder quelques secondes et ENSUITE (via une autre broche GPIO D5 définie comme une SORTIE) d'envoyer un signal "HIGH" via la broche GPIO D5 au MOSFET, qui allume logiquement le LM339. Je recommanderais de câbler comme ci-dessus, mais SI vous constatez que le Wemos se bloque comme je l'ai fait, vous devrez alors inclure le MOSFET avec une résistance de rappel de 1 k ohm. Pour plus d'informations sur la façon de procéder, voir la fin de cette instructable.

Zones d'alarme aux entrées non inverseuses du LM339

Nous devons maintenant faire passer les fils de chaque zone du panneau de commande d'alarme aux entrées du comparateur LM339. Le système d'alarme étant toujours hors tension, pour chaque zone, alimentez un fil à chaque entrée non inverseuse (+) du comparateur LM339. Par exemple, dans mon système:

  • Le fil de Z1 va à l'entrée LM339 1+
  • Le fil de Z2 va à l'entrée LM339 2+
  • Le fil de Z3 va à l'entrée LM339 3+
  • Le fil de Z4 va à l'entrée LM339 4+

Reportez-vous au brochage du LM339 à l'étape 3 si vous un rappel (il est codé par couleur avec l'image de la maquette). Une fois cela fait, votre maquette devrait ressembler à l'image montrée dans cette étape.

Allumez le système d'alarme et mesurez la tension sortant du diviseur de tension pour vous assurer qu'elle est égale à votre tension de référence calculée précédemment.

Étape 5: Câblage du Wemos D1 Mini

Câblage du Wemos D1 mini

Maintenant que toutes les entrées du LM339 sont prises en charge, nous devons maintenant câbler le Wemos D1 mini. Chaque broche de sortie LM339 va à une broche Wemos GPIO (entrée/sortie à usage général) que nous désignerons par code comme broche d'entrée. Le Wemos prend jusqu'à 5V maximum comme tension Vcc (source d'entrée) (bien qu'il régule cela en interne jusqu'à 3,3V). 5V pour alimenter le Wemos. La fiche technique du LM7805 indique que nous avons besoin d'un condensateur câblé de chaque côté du régulateur pour lisser la puissance, comme indiqué sur l'image de la maquette. La branche la plus longue du condensateur est positive (+), alors assurez-vous qu'elle est câblée dans le bon sens.

Le régulateur de tension prend la tension d'entrée (broche de gauche), la terre (broche du milieu) et la tension de sortie (broche de droite). Vérifiez le brochage si votre régulateur de tension diffère du LM7805.

(EDIT: j'ai trouvé que les amplis provenant du panneau d'alarme étaient trop élevés pour que le LM7805 puisse les gérer. Cela provoquait beaucoup de chaleur dans le petit dissipateur thermique du LM7805 et le faisait tomber en panne, provoquant à son tour l'arrêt du Wemos fonctionne. J'ai remplacé le LM7805 et les condensateurs par un convertisseur abaisseur DC-DC à la place et je n'ai eu aucun problème depuis. Ceux-ci sont très faciles à câbler. Connectez simplement la tension d'entrée de l'alarme, connectez d'abord à un multimètre et utilisez la vis du potentiomètre et ajustez jusqu'à ce que la tension de sortie soit d'environ 5 V)

Broches d'entrée GPIO

Pour ce projet, nous utilisons les broches suivantes:

  • zone Z1 => broche D1
  • zone Z2 => broche D2
  • zone Z3 => broche D3
  • zone Z4 => broche D5

Câblez les sorties du LM339 aux broches GPIO associées sur la carte Wemos, conformément à l'image de la maquette illustrée dans cette étape. Encore une fois, j'ai codé par couleur les entrées et les sorties correspondantes, pour qu'il soit plus facile de voir ce qui se réfère à quoi. Chaque broche GPIO de l'Arduino est définie comme un « INPUT_PULLUP », ce qui signifie qu'elles seront tirées jusqu'à 3,3 V dans des conditions normales d'utilisation (IDLE) et que le LM339 les ramènera à la terre si le PIR se déclenche. Le code détecte le changement HAUT à BAS et envoie un message sans fil à votre logiciel domotique. Si vous rencontrez des problèmes avec ce fonctionnement, il est possible que vos entrées inverseuses et non inverseuses soient dans le mauvais sens (si la tension de votre PIR devient élevée lorsqu'elle est déclenchée, comme c'est le cas avec la plupart des PIR de passe-temps, alors vous voudrez les connexions le inverse)

IDE Arduino

Supprimez le Wemos de la planche à pain, nous devons maintenant y télécharger du code (lien alternatif ici). types de planches. Branchez votre câble USB à la carte Wemos et à votre PC et lancez l'IDE Arduino. Téléchargez le code et ouvrez-le dans votre projet. Vous devrez vous assurer que la bonne carte est installée et chargée pour votre projet ainsi que le bon port COM sélectionné (Outils, Port). Vous aurez également besoin des bibliothèques appropriées installées (PubSubClient, ESP8266Wifi) Pour obtenir la carte Wemos incluse dans votre croquis, consultez cet article.

Vous devrez modifier les lignes de code suivantes et les remplacer par votre propre SSID et mot de passe pour votre connexion sans fil. Modifiez également l'adresse IP pour qu'elle pointe vers votre propre courtier MQTT.

// Wifi

const char* ssid = "votre_wifi_ssid_ici"; const char* mot de passe = "votre_mot_de_passe_wifi_ici"; // Adresse IP du courtier MQTT MQTT_SERVER(172, 16, 223, 254)

Une fois modifié, vérifiez votre code puis téléchargez-le sur la carte Wemos via un câble USB.

Remarques:

  • Si vous utilisez différents ports GPIO, vous devrez ajuster le code. Si vous utilisez plus ou moins de zones que moi, vous devrez également ajuster le code et le TOTAL_ZONES=4; constante pour convenir.
  • Au démarrage de mon système d'alarme, le système d'alarme effectuait un test d'alimentation sur les 4 x PIR qui mettait tous les GPIO connectés à la terre, faisant croire au Wemos que les zones étaient déclenchées. Le code ignorera l'envoi de messages MQTT s'il voit les 4 zones actives en même temps, car il suppose que le système d'alarme est en train de s'allumer.

Lien de téléchargement alternatif vers le code ICI

Étape 6: Test et configuration OpenHAB

Tests et configuration OpenHAB
Tests et configuration OpenHAB

Tests MQTT

MQTT est un système de messagerie "s'abonner / publier". Un ou plusieurs appareils peuvent parler à un « courtier MQTT » et « s'abonner » à un certain sujet. Tous les messages entrants provenant de tout autre appareil qui sont « publiés » sur ce même sujet seront transmis par le courtier à tous les appareils qui y sont abonnés. C'est un protocole extrêmement léger et simple à utiliser et parfait comme système de déclenchement simple comme celui ici. Pour les tests, vous pouvez afficher les messages MQTT entrants de Wemos vers votre courtier MQTT en exécutant la commande suivante sur votre serveur Mosquitto (Mosquitto est l'un des nombreux logiciels MQTT Broker disponibles). Cette commande s'abonne aux messages keepalive entrants:

mosquitto_sub -v -t openhab/alarm/status

Vous devriez voir des messages entrants provenant du Wemos toutes les 30 secondes environ avec le numéro "1" (ce qui signifie "Je suis en vie") Si vous voyez des "0" constants (ou pas de réponse), il n'y a pas de communication. Une fois que vous voyez le numéro 1 entrer, cela signifie que Wemos communique avec le courtier MQTT (recherchez "MQTT Last Will and Testament" pour plus d'informations sur la façon dont cela fonctionne, ou consultez cette très bonne entrée de blog)

Une fois que vous avez prouvé que la communication est fonctionnelle, nous pouvons tester qu'un état de zone est signalé via MQTT. Abonnez-vous au sujet suivant (le # est un caractère générique)

mosquitto_sub -v -t openhab/alarm/#

Les messages d'état habituels devraient arriver, tout comme l'adresse IP du Wemos lui-même. Marchez devant un PIR et vous devriez également voir les informations de zone indiquer qu'il est OUVERT, puis une seconde environ plus tard, qu'il est FERMÉ, comme suit:

openhab/alarme/état 1

openhab/alarm/zone1 OUVERT

openhab/alarm/zone1 FERMÉ

Une fois que cela fonctionne, nous pouvons configurer OpenHAB pour que cela soit bien représenté dans l'interface graphique.

Configuration OpenHAB

Les modifications suivantes sont requises pour OpenHAB:

Fichier de transformation 'alarm.map': (facultatif, pour les tests)

CLOSED=IdleOPEN=TriggeredNULL=Inconnu-=Inconnu

Fichier de transformation 'status.map':

0=Échec

1=En ligne -=DOWN ! NULL=inconnu

fichier 'articles':

String alarmMonitorState "Alarm Monitor [MAP(status.map):%s]" { mqtt="<[mqttbroker:openhab/alarm/status:state:default]" } String alarmMonitorIPAddress "Alarm Monitor IP [%s]" { mqtt ="<[mqttbroker:openhab/alarm/ipaddress:state:default]" } Numéro zone1_Chart_Period "Zone 1 Chart" Contact alarmZone1State "Zone 1 State [MAP(alarm.map):%s]" { mqtt="<[mqttbroker:openhab/alarm/zone1:state:default" } String alarmZone1Trigger "Lounge PIR [%1$ta %1$tr]" Numéro zone2_Chart_Period "Zone 2 Chart" Contact alarmZone2State "Zone 2 State [MAP(alarm.map):% s]" { mqtt="<[mqttbroker:openhab/alarm/zone2:state:default" } String alarmZone2Trigger "First Hall PIR [%1$ta %1$tr]" Numéro zone3_Chart_Period "Zone 3 Chart" Contacter alarmZone3State "Zone 3 State [MAP(alarm.map):%s]" { mqtt="<[mqttbroker:openhab/alarm/zone3:state:default" } String alarmZone3Trigger "Chambre PIR [%1$ta %1$tr]" Numéro zone4_Chart_Period "Zone 4 Chart" Contact alarmZone4State "Zone 4 State [MAP(alarm.map):%s]" { mqtt="<[mqttbroker:openha b/alarm/zone4:state:default" } Chaîne alarmZone4Trigger "PIR Hall principal [%1$ta %1$tr]"

Fichier 'sitemap' (y compris le graphique rrd4j):

Text item=alarmZone1Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Switch item=zone1_Chart_Period label= Mappages "Période"=[0="Heure", 1="Jour", 2="Semaine"] URL de l'image="https://localhost:8080/rrdchart.png" visibilité=[zone1_Chart_Period==0, zone1_Chart_Period= =Non initialisé] URL de l'image="https://localhost:8080/rrdchart.png" visibilité=[zone1_Chart_Period==1] URL de l'image="https://localhost:8080/rrdchart.png" visibilité=[zone1_Chart_Period==2] } } Text item=alarmZone2Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Switch item= zone2_Chart_Period label="Période" mappings=[0="Heure", 1="Jour", 2="Semaine"] URL de l'image="https://localhost:8080/rrdchart.png" visibilité=[zone2_Chart_Period==0, zone2_Chart_Period==Uninitialized] Image url="https://localhost:8080/rrdchart.png" visibilité=[zone2_Chart_Period==1] Image url="https://localhost:8080/rrdchart.png" visibilité=[zone2_Chart_Period ==2] } } Élément de texte=alarmZone3Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Frame { Switch item=zone3_Chart_Period label="Période" mappages =[0="Heure", 1="Jour", 2="Semaine"] Image url="https://localhost:8080/rrdchart.png" Visibilité=[zone3_Chart_Period==0, zone3_Chart_Period==Uninitialized] Image url="https://localhost:8080/rrdchart.png" visibilité=[zone3_Chart_Period==1] Image url="https://localhost:8080/rrdchart.png" visibilité=[zone3_Chart_Period==2] } } Texte item=alarmZone4Trigger valuecolor=[<=60="#ff0000", <=300="#ffa500", <=600="#008000", 3600="#000000"] { Cadre { Switch item=zone4_Chart_Period label=" Période" mappings=[0="Heure", 1="Jour", 2="Semaine"] Image url="https://localhost:8080/rrdchart.png" visibilité=[zone4_Chart_Period==0, zone4_Chart_Period== Non initialisé] URL de l'image="https://localhost:8080/rrdchart.png" visibilité=[zone4_Chart_Period==1] URL de l'image="https://localhost:8080/rrdchart.png" visibilité=[zone4_Chart_Period==2] } } // OPTIONNEL mais pratique pour diagnostiquer l'état et l'adresse IP ss Élément de texte=alarmMonitorState Élément de texte=alarmMonitorIPAddress

fichier 'règles':

règle "changement d'état de la zone d'alarme 1"

lorsque l'élément alarmZone1State est passé à OPEN puis postUpdate(alarmZone1Trigger, new DateTimeType()) alarmZone1State.state = CLOSED end

règle « changement d'état de la zone d'alarme 2 »

lorsque l'élément alarmZone2State est passé à OPEN puis postUpdate(alarmZone2Trigger, new DateTimeType()) alarmZone2State.state = CLOSED end

règle « changement d'état de la zone d'alarme 3 »

lorsque l'élément alarmZone3State est passé à OPEN puis postUpdate(alarmZone3Trigger, new DateTimeType()) alarmZone3State.state = CLOSED end

règle "changement d'état de la zone d'alarme 4"

lorsque l'élément alarmZone4State est passé à OPEN puis postUpdate(alarmZone4Trigger, new DateTimeType()) alarmZone4State.state = CLOSED end

Vous devrez peut-être modifier légèrement la configuration OpenHAB ci-dessus pour l'adapter à votre propre configuration.

Si vous rencontrez des problèmes avec le déclenchement des PIR, recommencez depuis le début et mesurez les tensions pour chaque partie du circuit. Une fois que vous êtes satisfait de cela, vérifiez votre câblage, assurez-vous qu'il existe un terrain d'entente, vérifiez les messages sur le Wemos via une console de débogage série, vérifiez la communication MQTT et vérifiez la syntaxe de vos fichiers de transformation, d'éléments et de plan de site.

Bonne chance!

Conseillé: