Comment contrôler les prises d'alimentation RF bon marché d'OpenHAB
Les prises de courant intelligentes sont le moyen le plus simple d’automatiser votre maison, mais à 40 $ environ pour une prise Wi-Fi ou ZWave, il est peu probable que vous en achetiez plus que quelques-unes..
Cependant, vous avez peut-être déjà quelques sockets RF à bas prix, du type fourni avec leur propre télécommande personnalisée, ainsi que des sélecteurs de canal et d’ID à l’arrière. Malheureusement, il n’existe pas de hubs pour la maison intelligente sur le marché. Bataille des hubs Smart Home: Qu'y a-t-il et qu'est-ce qui s'en vient? Lire plus qui fonctionnent avec ceux-ci. Ne serait-il pas formidable de pouvoir les relier à votre système de maison intelligente DIY en quelque sorte? 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 distant sur mesure basé sur la RF, comme cet écran de cinéma économique.
De quoi as-tu besoin:
- Carte de développement ESP8266 NodeMCU v12E (le modèle exact importe peu, v1 ou v3 devrait également convenir). Nous utilisons une carte NodeMCU parce que nous voulons une connexion Wi-Fi facile plus tard. Le lien est pour un paquet de 2, qui coûte 7 $ chacun.
- Paquet d'émetteur et récepteur de 433 MHz (environ 3 $).
- Les bibliothèques RCSwitch et MQTT, ainsi que notre code - tous disponibles au téléchargement depuis Github.
- Un serveur MQTT, local ou distant.
- Certains sockets contrôlés par RF fonctionnant sur la bande 433 mHz (cela devrait être indiqué sur la télécommande). J'ai acheté le mien chez Maplin en paquet 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 correspondants: suivez la première partie de notre guide d'introduction Arduino Killer Découvrez le tueur Arduino: ESP8266 Découvrez le tueur Arduino: ESP8266 vous a-t-il dit qu'il existe un tableau de développement compatible Arduino avec Wi-Fi intégré pour moins de 10 $? Eh bien, il y a. Plus d'informations sur la puce NodeMCU / ESP8266. Vous aurez aussi besoin de Pilotes CH430. Vous pouvez trouver les pilotes macOS CH430 signés ici ou Windows ici.
J'ai utilisé la v1.6.5 de l'Arduino car tout ce qui est plus haut introduit plus de problèmes qu'il n'en résout. Déclasser si vous n'avez pas déjà.
Avant de poursuivre, je suppose des connaissances de base en programmation Arduino. Programmation Arduino pour les débutants: le contrôleur de feux de circulation Programmation Arduino pour les débutants: le contrôleur de feux de circulation, la semaine dernière, nous avons appris la structure de base d’un programme Arduino et jeté un coup d’œil plus attentif à l’exemple du 'clignotement' J'espère que vous en avez profité pour expérimenter le code, en ajustant les timings. Cette fois,… Lire la suite, et que votre configuration NodeMCU se trouve dans le gestionnaire de cartes et que vous puissiez télécharger correctement du 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 un existant 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 peux recevoir des messages de manière fiable sur NodeMCU, et j'ai essayé beaucoup!
RF Sniffing (facultatif)
Cette étape n'est pas nécessaire si vous souhaitez uniquement contrôler les prises à commutateur DIP ou à sélecteur de numérotation - celles-ci sont prises en charge immédiatement et une modification minimale du code sera nécessaire (ceci reste néanmoins intéressant à faire en premier lieu, de sorte que vous ' comprendre ce qui se passe dans les coulisses).
Si vous souhaitez ajouter d'autres télécommandes RF, vous devez d'abord “renifler” les codes RF étant transmis. Pour ce faire, chargez le ReceiveDemo_Advanced esquisse de la Menu -> Exemples -> RCSwitch dossier, et changez la ligne suivante de 0
mySwitch.enableReceive (0); // Receiver on interruption 0 => c'est la broche n ° 2
à 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.
- L'extrême gauche est VCC. Se connecter 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, peu importe lequel).
Maintenant, téléchargez le 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 en bits), la durée d'impulsion et le protocole lorsque vous appuyez sur un bouton.
Après cela, j’ai trouvé que mon écran de projecteur utilisait
- SCREEN UP: Reçu 8694273 / 24bit; Longueur d'impulsion: 355 ou 356; Protocole: 1
- ECRAN VERS LE BAS: Reçu 8694276/24 bits; Durée 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 en utilisant l’émetteur. Câblez le module émetteur (le carré) comme suit. Attention: le marquage sur ces pins 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 “LES DONNÉES”, épelé a l'envers. Encore une fois, les données passent en D4, VCC en VIN et GND en GND (retirez le module récepteur, vous n'en avez plus besoin)..
Chargez le Exemples -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, et encore, changez le pin de données:
mySwitch.enableTransmit (10);
à
mySwitch.enableTransmit (2);
Notez que divers exemples sont inclus dans la bibliothèque, et celui qui vous convient dépendra du type exact de commutateur que vous avez. Les types les plus courants sont les types A (commutateurs DIP) et B (molettes ou curseurs) - reportez-vous aux images de 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 du canal (la molette supérieure) et 4, l'ID de la prise (la molette inférieure). Celles-ci ont été écrites en chiffres romains sur mes prises. Il est donc possible d'adresser un maximum de 16 prises individuelles, bien que plusieurs prises puissent utiliser la même adresse si vous avez plusieurs périphériques à activer simultanément..
Cependant, mon écran de projection était un peu différent - il utilisait une durée d'impulsion différente. Donc, pour les utiliser, 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 durée d'impulsion.. La durée d'impulsion est écrasée lors du changement de protocole.
// Notez que mon écran nécessite en réalité deux appuis sur le bouton (pas un appui long, mais deux appuis physiques), je retarde donc un peu puis envoie le même signal à nouveau void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (code décimal, nombre de bits) delay (2000); mySwitch.send (8694273,24); void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); délai (2000); mySwitch.send (8694276,24);
Testez tous vos codes qui fonctionnent avant de passer à l'étape suivante.
Contrôle via MQTT
Ouvrez le croquis que vous avez téléchargé à partir de Github nommé mqtt_rcswitch.ino, et commencez par modifier le SSID du réseau et le mot de passe de votre domicile. Ensuite, changez le nom de la chaîne si vous le souhaitez et configurez le serveur MQTT. Si vous ne possédez pas déjà de serveur MQTT sur votre installation OpenHAB, lisez la partie 2 de notre guide du débutant OpenHAB Guide du débutant OpenHAB Partie 2: ZWave, MQTT, Règles et graphiques Guide du débutant pour OpenHAB Partie 2: ZWave, MQTT, Règles et graphiques OpenHAB, le logiciel de domotique open source, dépasse de loin les capacités des autres systèmes de domotique du marché, mais il n’est pas facile de le configurer. En fait, cela peut être franchement frustrant. Lire la suite . Notez que mon code est conçu pour les sockets de type B (commutateur rotatif), bien que vous puissiez facilement le modifier également pour les commutateurs DIP.
La partie la plus importante du code est la message reçu() fonction, qui répond aux commandes MQTT entrantes. Dans cette fonction, nous vérifions d’abord le mot clé principal - j’ai choisi “commutateur” et “écran”. Dans le cas de “commutateur”, nous analysons ensuite le canal et connectons l'ID; puis vérifiez le corps de données utiles pour la commande.
void messageReceived (Sujet de chaîne, charge utile de chaîne, octets char *, longueur non signée) if (topic.indexOf ("commutateur")> = 0) // contrôle le commutateur, analyse le canal et identifie le connecteur sujet, '/', 3) .toInt (); int plug = getValue (topic, '/', 4) .toInt (); if (charge utile == "on") mySwitch.switchOn (canal, prise); else mySwitch.switchOff (canal, plug); else if (topic.indexOf ("screen")> = 0) // contrôle d'écran if (charge utile == "up") screenUp (); else if (payload == "down") screenDown (); / * ajouter un autre si c'est ici pour écouter plus de commandes (ou simplement modifier celle ci-dessus si vous ne voulez pas d'écran) * /
Par défaut, les commandes MQTT suivantes fonctionnent:
salon / commande / commutateur / X / Y (où X est le canal, et Y l’ID de la prise; avec le corps du message activé ou désactivé)
salon / contrôle / écran (avec le corps du message en haut ou en bas)
Utilisez la ligne de commande ou un client GUI MQTT pour tester vos périphériques avant d’ajouter à OpenHAB..
Ajout à OpenHAB
Enfin, nous devons simplement 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 capable de trouver comment en ajouter d'autres:
/ * Périphériques RF433mHz * / Basculer CinemaScreen "Screen" (Cinéma) mqtt = "> [broker: livingroom / control / screen: commande: ON: bas],> [broker: livingroom / control / screen: commande: OFF: haut ] " Commutateur Commutateur41" Commutateur41 "(Cinéma) mqtt ="> [courtier: livingroom / control / switch / 4/1: commande: ON: on],> [courtier: livingroom / control / switch / 4/1: commande: OFF: off] " Switch Switch42" Switch42 "(Cinéma) mqtt ="> [courtier: livingroom / control / switch / 4/2: commande: ON: on],> [courtier: livingroom / control / switch / 4/2: commande: OFF: off] "
Vous devriez maintenant pouvoir contrôler vos appareils RF depuis OpenHAB! Une chose qui m'a agréablement surpris était la portée: un seul nœud était en mesure de couvrir la plus grande partie de ma maison. Vous pouvez bien sûr ajouter un autre noeud, é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 sockets eux-mêmes ne peuvent pas signaler leur statut. Par conséquent, si vous utilisez la télécommande d'origine, le contrôle de l'état du socket risque de ne pas être reflété avec précision dans OpenHAB. Tenez-vous en à n'utiliser que l'interface OpenHAB et ça devrait aller..
Des questions ou des problèmes? Demandez 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..
Explorez plus sur: Home Automation, Smart Plugs.