Comment contrôler bon marché Power Sockets de OpenHAB

Avoir des prises de courant à base de RF bon marché, mais a découvert que pas de concentrateurs de maison intelligente fonctionnent avec ceux-ci? Vous pouvez les relier à votre système de maison intelligente bricolage avec seulement environ 10 $ en pièces.

Avoir des prises de courant à base de RF bon marché, mais a découvert que pas de concentrateurs de maison intelligente fonctionnent avec ceux-ci?  Vous pouvez les relier à votre système de maison intelligente bricolage avec seulement environ 10 $ en pièces.
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 ZWave, il est peu probable que vous en achetiez plus que quelques-unes.

Il se peut cependant que vous ayez déjà des sockets RF à bas prix - celles qui viennent avec leur propre télécommande personnalisée, et qui ont des sélecteurs de canal et d'ID à l'arrière. Malheureusement, il n'y a pas de carrefours de maisons intelligentes sur le marché Bataille des carrefours d'accueil intelligents: Qu'est-ce qui existe et qu'est-ce qui se passe? Battle of the Smart Home Hubs: Qu'est-ce qui se passe et qu'est-ce qui se passe? Lire la suite qui fonctionnent avec ceux-ci. Ce ne serait pas génial si vous pouviez relier ceux-ci dans 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 à 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 aussi 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, qui fonctionne à 7 $ chacun.
  • Paquet de 433Mhz émetteur et récepteur (environ 3 $).
  • Les bibliothèques RCSwitch et MQTT, ainsi que notre code - tous disponibles pour téléchargement depuis Github.
  • Un serveur MQTT, local ou distant.
  • Certaines prises contrôlées par radiofréquence fonctionnent sur une bande de 433 MHz (cela devrait être le cas 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: suivez la première partie de notre guide d'introduction Arduino Killer Rencontrez le tueur Arduino: ESP8266 Rencontrez le tueur Arduino: ESP8266 Et si vous a dit qu'il y a une carte de développement compatible Arduino avec Wi-Fi intégré pour moins de 10 $? Eh bien, il y a. Lire la suite pour la puce NodeMCU / ESP8266. Vous aurez également besoin de pilotes CH430 . Vous pouvez trouver le conducteur signé macOS CH430 ici, ou Windows ici.

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

Avant de continuer, je vais supposer un niveau de base de la 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. a regardé de plus près l'exemple de "clin d'oeil". J'espère que vous avez saisi l'occasion d'expérimenter avec le code, en ajustant les horaires. Cette fois, ... Lisez plus, et que vous avez votre configuration NodeMCU dans le gestionnaire de la carte, et que vous êtes capable de télécharger correctement du code de démonstration. Vous devriez également avoir ajouté les bibliothèques incluses dans notre téléchargement dans votre dossier Arduino / libraries .

Si vous avez une bibliothèque PubSubClient ou MQTT existante, sauvegardez-la et retirez-la - celle que j'ai incluse dans le téléchargement est la seule où je pourrais recevoir de manière fiable des messages sur NodeMCU, et j'ai beaucoup essayé!

RF Renifler (facultatif)

Cette étape n'est pas nécessaire si vous ne voulez contrôler que les prises DIP-switch ou Sélecteur de connexion - celles-ci sont prises en charge et une modification minimale du code sera nécessaire (cela reste néanmoins intéressant à faire en premier, donc vous Je vais comprendre ce qui se passe dans les coulisses).

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

mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2 

à 2.

 mySwitch.enableReceive(2); // Receiver on 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. Connectez-vous à VIN sur la carte NodeMCU.
  • Les deux broches du milieu sont le signal. Connectez l'un à D4 sur le NodeMCU (ils sont connectés ensemble, donc peu importe lequel).

433 câblage-1

Maintenant téléchargez le ReceiveDemo_Advanced modifié, et quand c'est fait, ouvrez le moniteur de série et commencez à appuyer sur les boutons de vos télécommandes. Copiez la décimale (y compris la longueur du bit), la durée de l'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 du transmetteur

Ensuite, nous allons essayer d'envoyer des codes en utilisant 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. Ce truc qui dit "ATAD" est en fait "DATA", épelé à l'envers. Encore une fois, les données vont à D4, VCC à VIN, et GND à GND (retirer le module récepteur, vous n'en avez plus besoin).

433 câblage-2

Chargez les exemples -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, et encore une fois, changez la broche de données:

 mySwitch.enableTransmit(10); 

à

 mySwitch.enableTransmit(2); 

Notez, une variété d'exemples sont inclus dans la bibliothèque, et celui qui travaille pour vous dépendra du type exact de commutateur que vous avez. Le type A (commutateurs DIP) et B (boutons ou curseurs) sont les plus courants - reportez-vous aux images 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 du canal (le cadran supérieur) et 4 est l'ID du socket (le cadran inférieur). Ceux-ci ont été écrits en chiffres romains sur mes douilles. Un maximum de 16 prises individuelles peuvent donc être adressées, bien que plusieurs prises 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 faire fonctionner ceux-ci, ce qui suit a 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 de l'impulsion. La longueur d'impulsion est écrasée lors du changement de protocole.

 // Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); } 

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

Contrôler via MQTT

Ouvrez l'esquisse que vous avez téléchargée de Github, nommée mqtt_rcswitch.ino, et commencez par modifier le SSID et le mot de passe du réseau pour votre maison. Ensuite, changez le nom de la chaîne si vous le souhaitez et définissez le serveur MQTT. Si vous n'avez pas encore de serveur MQTT en cours d'installation sur votre OpenHAB, lisez la partie 2 de notre guide de débutant OpenHAB OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB Guide du débutant Partie 2: ZWave, MQTT, Règles et Graphiques OpenHAB, le logiciel domotique open source, dépasse de loin les capacités des autres systèmes domotiques sur le marché - mais il n'est pas facile de se mettre en place. 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 facilement le modifier pour les commutateurs DIP.

La partie la plus importante du code est la fonction messageReceived (), qui répond aux commandes MQTT entrantes. Dans cette fonction, nous vérifions d'abord le mot-clé majeur - j'ai choisi "switch" et "screen". Dans le cas de "switch", nous analysons ensuite le canal et l'ID du connecteur; 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){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ } 

Par défaut, les commandes MQTT suivantes fonctionnent:

 livingroom / control / switch / X / Y (où X est le canal, et Y est l'ID de la prise, avec le corps du message allumé ou éteint) 
 salon / contrôle / écran (avec corps de message vers le haut ou vers le bas) 

Utilisez la ligne de commande ou un client GUI MQTT pour tester vos périphériques avant d'ajouter OpenHAB.

Ajout à OpenHAB

En 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 capable de comprendre comment ajouter plus:

 / * Périphériques RF433mHz * / Commutateur CinemaScreen "Screen" (Cinema) {mqtt = "> [courtier: livingroom / control / screen: commande: ON: down], > [courtier: livingroom / control / screen: commande: OFF: up ] "} Commutateur Switch41" Switch41 "(Cinema) {mqtt ="> [courtier: livingroom / control / switch / 4/1: commande: ON: on], > [courtier: livingroom / control / switch / 4/1: commande: OFF: off] "} Interrupteur Switch42" Switch42 "(Cinema) {mqtt ="> [courtier: livingroom / control / switch / 4/2: commande: ON: on], > [broker: livingroom / control / switch / 4/2: commande: OFF: désactivée] "} 

Vous devriez maintenant pouvoir contrôler vos appareils RF depuis OpenHAB! Une chose qui m'a agréablement surpris était la gamme - 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 à prendre en compte est que les sockets elles-mêmes ne peuvent pas signaler leur état, donc si vous utilisez la télécommande d'origine, contrôler l'état de la socket peut ne pas être reflété avec précision dans OpenHAB. S'en tenir à l'utilisation de l'interface OpenHAB et ça devrait aller.

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

In this article