Publicité

Les prises de courant intelligentes sont le moyen le plus simple d'automatiser votre maison, mais à environ 40 $ chacune pour une prise Wi-Fi ou basée sur ZWave, il est peu probable que vous en achetiez plus que quelques-unes.

Vous avez peut-être déjà des prises RF bon marché, du type de celles qui viennent avec leur propre télécommande personnalisée, et des sélecteurs de canal et d'identification à l'arrière. Malheureusement, il n'y a pas hubs de maison intelligente sur le marché Battle of the Smart Home Hubs: qu'est-ce qui existe et que vient-il? Lire la suite qui fonctionnent avec ceux-là. Ce ne serait pas génial si vous pouviez les lier à votre système de maison intelligente DIY d'une manière ou d'une autre? Eh bien, vous pouvez - assez facilement en fait - avec environ 10 $ en pièces.

Avec un peu plus de travail, vous pouvez également intégrer un autre matériel à distance RF sur mesure, comme cet écran de cinéma à petit budget.

De quoi as-tu besoin:

  • Carte de développement ESP8266 NodeMCU v12E (le modèle exact n'a pas d'importance, v1 ou v3 devrait également convenir). La raison pour laquelle nous utilisons une carte NodeMCU est parce que nous voulons la connexion Wi-Fi facile plus tard. Le lien est pour un pack de 2, ce qui revient à 7 $ chacun.
  • Paquet de Émetteur et récepteur 433Mhz (environ 3 $).
  • Bibliothèques RCSwitch et MQTT, et notre code - tous disponible en téléchargement sur Github.
  • Un serveur MQTT, local ou distant.
  • Certaines prises contrôlées par RF fonctionnant sur une bande de 433 MHz (cela devrait dire sur la télécommande). J'ai acheté le mien de Maplin en pack de 3 pour environ 20 £ (25,89 $).

Si c'est la première fois que vous programmez la carte NodeMCU, vous devrez télécharger les plugins Arduino pour cela: suivez la première partie de notre Guide d'introduction Arduino Killer Rencontrez le tueur Arduino: ESP8266Et si je vous disais qu'il y a une carte de développement compatible Arduino avec Wi-Fi intégré pour moins de 10 $? Eh bien, il y en a. Lire la suite pour la puce NodeMCU / ESP8266. Vous aurez également besoin Pilotes CH430. Tu peux trouver pilotes macOS CH430 signés ici, ou Windows ici.

J'ai utilisé la v1.6.5 de l'Arduino parce que tout ce qui est plus élevé introduit plus de problèmes qu'il n'en résout. Rétrograder si vous ne l'avez pas déjà fait.

Avant de poursuivre, je vais supposer un niveau de connaissances de base sur Programmation Arduino Programmation Arduino pour les débutants: tutoriel de projet de contrôleur de feux de circulationLa construction d'un contrôleur de feux de circulation Arduino vous aide à développer des compétences de base en codage! Nous vous aidons à démarrer. Lire la suite et que vous disposez de votre configuration NodeMCU dans le gestionnaire de carte et que vous pouvez télécharger correctement un code de démonstration. Vous devriez également avoir ajouté les bibliothèques incluses dans notre téléchargement à votre Arduino / bibliothèques dossier.

Si vous avez déjà un Bibliothèque PubSubClient ou MQTT, sauvegardez-le et supprimez-le - celui que j'ai inclus dans le téléchargement est le seul où je pouvais recevoir de manière fiable des messages sur NodeMCU, et j'ai essayé beaucoup!

Reniflement RF (facultatif)

Cette étape n'est pas nécessaire si vous souhaitez uniquement contrôler les prises de commutateur DIP ou de sélecteur de numérotation - celles-ci sont prises en charge immédiatement et une modification minimale du code sera nécessaire (cependant, cela reste intéressant à faire en premier, donc vous comprendrez ce qui se passe derrière le scènes).

Si vous avez d'autres télécommandes RF que vous aimeriez essayer d'ajouter, vous devrez d'abord «flairer» les codes RF transmis. Pour ce faire, chargez le ReceiveDemo_Advanced croquis du Menu -> Exemples -> RCSwitch dossier et changez la ligne suivante de 0

mySwitch.enableReceive (0); // Récepteur à l'interruption 0 => c'est la broche # 2

au 2.

mySwitch.enableReceive (2); // Récepteur sur GPIO 2 / D4.

Câblez le module récepteur comme suit. En regardant l'avant de la carte du récepteur (c'est le plus long des deux, l'émetteur est carré) - le côté avec les composants sur:

  • L'extrême droite est GND. Connectez-vous à GND sur la carte NodeMCU.
  • Extrême gauche est VCC. Connectez-vous au VIN sur la carte NodeMCU.
  • Les deux broches du milieu sont le signal. Connectez l'un ou l'autre à D4 sur le NodeMCU (ils sont connectés ensemble, donc peu importe lequel).
433 câblage-1

Téléchargez maintenant le fichier modifié ReceiveDemo_Advanced, et quand c'est fait, ouvrez le moniteur série et commencez à appuyer sur les boutons de vos télécommandes. Copiez la décimale (y compris la longueur de bit), la longueur d'impulsion et le protocole lorsque vous appuyez sur un bouton.

écran RF reniflant

Après avoir fait cela, j'ai trouvé que mon écran de projecteur utilisait

  • SCREEN UP: Reçu 8694273 / 24bit; Longueur d'impulsion: 355 ou 356; Protocole: 1
  • SCREEN DOWN: Reçu 8694276 / 24bit;Longueur d'impulsion: 355 ou 356; Protocole: 1

Continuez pour autant de boutons que nécessaire.

Test de l'émetteur

Ensuite, nous allons essayer d'envoyer des codes à l'aide de l'émetteur. Câblez le module émetteur (le carré) comme suit. Attention: l'étiquetage sur ces broches est atroce.

La broche VCC est en fait au milieu, pas sur le côté gauche. J'ai détruit un module en train de comprendre cela. Cette chose qui dit "ATAD" est en fait "DATA", épelé à l'envers. Encore une fois, les données vont à D4, VCC à VIN et GND à GND (retirez le module récepteur, vous n'en avez plus besoin).

433 câblage-2

Chargez le Exemples -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, et encore une fois, modifiez la broche de données:

mySwitch.enableTransmit (10);

à

mySwitch.enableTransmit (2);

Remarque, une variété d'exemples sont inclus dans la bibliothèque, et celui qui fonctionne pour vous dépendra du type exact de commutateur que vous avez. Les types A (commutateurs DIP) et B (cadrans ou curseurs) sont les plus courants - se référer aux photos sur la page RCSwitch. Pour le type B, allumer et éteindre une prise est aussi simple que:

mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);

où 1 est l'ID de canal (le cadran supérieur) et 4 est l'ID de socket (le cadran inférieur). Celles-ci ont été écrites en chiffres romains sur mes prises. Un maximum de 16 sockets individuels peut donc être adressé, bien que plusieurs sockets puissent utiliser la même adresse si vous avez plusieurs appareils à allumer en même temps.

Cependant, mon écran de projection était un peu différent - il utilisait une longueur d'impulsion différente. Donc, pour les faire fonctionner, les éléments suivants ont fonctionné. Notez que vous pouvez également définir un protocole différent si votre télécommande en a besoin, MAIS assurez-vous de définir le protocole AVANT la longueur d'impulsion. La longueur d'impulsion est remplacée lors du changement de protocole.

// Notez que mon écran nécessite en fait DEUX pressions de bouton (pas un appui long, mais deux physiques appuie sur), donc je retarde un peu puis envoie à nouveau le même signal void screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (code décimal, nombre de bits) retard (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); retard (2000); mySwitch.send (8694276,24); }

Testez tous vos codes avant de passer à l'étape suivante.

Contrôle via MQTT

Ouvrez le croquis que vous avez téléchargé depuis Github nommé mqtt_rcswitch.inoet commencez par modifier le SSID et le mot de passe du réseau de votre domicile. Ensuite, modifiez le nom du canal si vous le souhaitez et définissez le serveur MQTT. Si vous n'avez pas encore de serveur MQTT en cours d'exécution sur votre installation OpenHAB, lire la partie 2 de notre guide du débutant OpenHAB Guide du débutant OpenHAB Partie 2: ZWave, MQTT, règles et graphiquesOpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques du marché - mais ce n'est pas facile à configurer. En fait, cela peut être carrément frustrant. Lire la suite . Notez que mon code est conçu pour les prises de type B (commutateur rotatif), bien que vous puissiez également le modifier facilement pour les commutateurs DIP.

La partie la plus importante du code est la message reçu(), qui répond aux commandes MQTT entrantes. Dans cette fonction, nous vérifions d'abord le mot-clé principal - j'ai choisi "basculer" et "écran". Dans le cas du «commutateur», nous analysons ensuite le canal et l'ID de la prise; puis vérifiez le corps de la charge utile pour la commande.

void messageReceived (String topic, String payload, char * bytes, unsigned int length) {if (topic.indexOf ("switch")> = 0) {// commutateur de contrôle, analyse le canal et plug id int channel = getValue (sujet, '/', 3) .toInt (); int plug = getValue (rubrique, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (channel, plug); } else {mySwitch.switchOff (canal, prise); }} else if (topic.indexOf ("screen")> = 0) {// contrôle d'écran if (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * ajoutez un autre si ici pour écouter plus de commandes (ou modifiez simplement celui ci-dessus si vous ne voulez pas d'écran) * / }

Par défaut, les commandes MQTT suivantes fonctionnent:

salon / contrôle / interrupteur / X / Y (où X est le canal et Y est l'ID de la fiche; avec le corps du message activé ou désactivé)
salon / contrôle / écran (avec le corps du message vers le haut ou vers le bas)

Utilisez la ligne de commande ou un client GUI MQTT pour tester vos appareils avant de les ajouter à OpenHAB.

Ajout à OpenHAB

Comme dernière étape, nous avons juste besoin de créer des éléments pour ces commutateurs dans OpenHAB. J'ai défini les éléments suivants pour l'instant, mais vous devriez être en mesure de comprendre comment en ajouter plus:

/ * Appareils RF433mHz * / Switch CinemaScreen "Screen" (Cinema) {mqtt = "> [broker: livingroom / control / screen: command: ON: down],> [broker: livingroom / control / screen: command: OFF: up]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: livingroom / control / switch / 4/1: command: ON: on],> [broker: livingroom / control / switch / 4/1: command: OFF: off] "} Switch Switch42 "Switch42" (Cinéma) {mqtt = "> [courtier: livingroom / control / switch / 4/2: commande: ON: on],> [broker: livingroom / control / switch / 4/2: commande: OFF: off] "}

Vous devriez maintenant être en mesure de contrôler vos appareils RF depuis OpenHAB! Une chose qui m'a agréablement surpris est la portée - un seul nœud a pu couvrir la majeure partie de ma maison. Vous pouvez bien sûr ajouter un autre nœud, en écoutant le même canal, qui répète simplement les mêmes commandes, si vous avez besoin d'une couverture supplémentaire.

La seule limite à garder à l’esprit est que les prises elles-mêmes ne peuvent pas signaler leur état, donc si vous utiliser la télécommande d'origine, contrôler l'état de la prise peut ne pas être reflété avec précision dans OpenHAB. Restez à utiliser uniquement l'interface OpenHAB et tout ira bien.

Des questions ou des problèmes? Demandez loin dans les commentaires, et je ferai de mon mieux pour vous aider. Si vous souhaitez améliorer mon code, n'hésitez pas à soumettre une demande d'extraction.

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.