Dans les systèmes économiques d'une maison intelligente, des commutateurs standard sont généralement utilisés - leur type de sortie est également appelé
«contact sec» . Cependant, ce n'est pas la seule option: à la recherche d'un magnifique commutateur, je suis tombé sur des appareils avec le protocole Modbus RTU à l'intérieur. En plus de leur belle apparence, ils vous permettent de configurer le mode de fonctionnement de chaque bouton, de contrôler le rétro-éclairage en détail et de les connecter au contrôleur central (j'ai utilisé
Wiren Board 5 ), quatre fils suffisent - alimentation, terre et deux lignes pour RS-485.
Comment connecter un tel interrupteur et configurer le contrôle de la lumière et de la ventilation à partir de celui-ci, voir ci-dessous. L'article décrira également en détail comment travailler avec les appareils Modbus en général.
Explication du marketeur Wiren Board: Cet article est né d'un sujet créé par Kallyanbl4 dans notre forum . Après notre demande, il a écrit un article à part entière et a permis de le publier sur notre blog, dont un grand merci à lui. Tout le texte est écrit par l'auteur, à l'exception des notes à la fin.Description des interrupteurs
Après avoir étudié ce qui est maintenant sur le marché, j'ai acheté
ces commutateurs intéressants aux Chinois:

Leurs avantages:
- bon design;
- interrupteurs tactiles, lorsqu'ils sont enfoncés, clignotent, éclairés dans l'obscurité dans une agréable couleur blanche;
- prix relativement bas - 2000 roubles chacun. Le prix comprend la gravure laser individuelle;
- interrupteur programmable - vous pouvez régler le bouton pour presque n'importe quelle action: allumer la lumière, contrôler les LED, lever / abaisser le rideau, ...
Spécifications du commutateur:
- tension d'alimentation - 12 V;
- taux de transfert de données - 19200 bit / s;
- nombre de bits transmis - 8;
- nombre de bits d'arrêt - 1;
- contrôle de parité - pas de vérification.
Lorsque vous travaillez sur Modbus RTU, les appareils connectés ont les soi-disant registres - cellules dans lesquelles les informations sont stockées. Dans la capture d'écran, une description des registres du commutateur à quatre touches:

Lorsque vous cliquez sur l'un des boutons tactiles, les valeurs dans les registres 0-3 passent de 0 à 1.
Disjoncteur
Dans le contrôleur Wiren Board 5, selon la configuration, il y a de deux à quatre ports RS-485. Les commutateurs (dans mon cas, il y en a 27) doivent être connectés à ces ports.
Dans ce cas, tous les commutateurs peuvent fonctionner sur un bus commun. Les commutateurs peuvent être connectés en série, conduisant le câble d'un commutateur à un autre, mais j'ai décidé de connecter tous les câbles dans un blindage.
Câble de connexion - UTP Cat 5e à huit conducteurs. Vous pouvez utiliser un quatre cœurs, mais je fais généralement tout au "cas où". Vous pouvez envisager d'autres câbles à quatre conducteurs, mais le point important est que le câble doit être blindé, car même en dépit des fréquences de signal assez faibles, les pertes et les micros ne sont pas exclus.
En conséquence, tous les commutateurs sont interconnectés comme indiqué dans l'image:

Comme le montre la figure, tous les commutateurs sont interconnectés à l'aide d'un commutateur UTP passif. Pour les cœurs 1 et 2 (orange et blanc-orange), les données sont transmises (lignes A et B), une alimentation 12 V est connectée aux cœurs 7 et 8 (marron et blanc-brun). J'utilise Mean Well NDR-75-12 comme source d'alimentation .
Je ne savais pas comment se comportait le commutateur UTP chinois passif.Par conséquent, lors de la conception du blindage, j'ai fourni une place pour un commutateur RS-423 actif. Je note que le circuit fonctionne à la fois via des commutateurs passifs et actifs. Et même lorsqu'ils sont connectés ensemble.

Contrôle de la lumière par relais
Selon mon projet, 27 appareils indépendants (lumière, ventilateurs) sont prévus dans l'appartement, alimentés en 220 V. Trois modules relais
WBIO-DO-R10A-8 et un
WBIO-DO-R10R-4 ont été sélectionnés pour les contrôler. Le choix est dû au fait que presque tout l'éclairage de l'appartement est à LED, ce qui diffère des lampes à incandescence par un courant de démarrage élevé. Les relais sélectionnés sont capables de fournir une commutation de courant jusqu'à 10 A par canal, ce qui dans mon cas n'est pas nécessaire - mais, comme mentionné précédemment, «juste au cas où avec une marge».

La commutation des relais s'effectue via l'
interface Web du contrôleur . La procédure est intuitive, aucune instruction ou astuce n'est requise.
Partie logiciel
Fichier de portNous apprenons de la
description matérielle de Wiren Board 5 qu'elle a deux ports de périphérique
/ dev / ttyAPP1 et
/ dev / ttyAPP4 correspondant à deux ports RS-485. Dans mon cas, le commutateur est connecté au port
/ dev / ttyAPP1 .
Adresse du périphérique (commutateur)Lors de l'échange de données à l'aide du protocole Modbus RTU, chaque appareil est identifié par son propre numéro unique - l'adresse Modbus. En règle générale, le fabricant indique cette adresse sous la forme de trois chiffres sur l'appareil lui-même, mais s'il n'y a pas un tel numéro sur l'appareil, vous pouvez
parcourir les adresses à partir de la ligne de commande (il est utilisé que l'adresse soit stockée dans le registre Modbus 0x80):
root@wirenboard:~
Le résultat doit être sous la forme:
Data: 0x008e
Réponse reçue au format hexadécimal et correspond à 142 en décimal.
Il convient de noter que chaque fois que l'utilitaire
modbus_client est
appelé , la norme de pilote d'interrogation
série wb-mqtt-serial pour le contrôleur doit être arrêtée; sinon, l'utilitaire
modbus_client ne fonctionnera pas.
Échange de données entre le commutateur et la carte WirenCi-dessus, une boucle est écrite qui interroge toutes les adresses Modbus possibles et renvoie la valeur d'adresse si un appareil est trouvé. La boucle utilise l'utilitaire
modbus_client , qui est nécessaire pour déboguer les appareils connectés. À ce stade, en l'utilisant, nous nous assurerons que tout est correctement connecté et que le commutateur interagit correctement avec le contrôleur. Pour ce faire, essayez de lire les données dans le commutateur de registre 0x01:
root@wirenboard:~
(une description de l'utilitaire et de ses clés se trouve dans la documentation du contrôleur).
Le résultat sera le suivant:
Opening /dev/ttyAPP1 at 19200 bauds (N, 8, 1) [8E][03][00][64][00][01][DA][EA] Waiting for a confirmation... <8E><03><02><00><01><2C><5B> SUCCESS: read 1 of elements: Data: 0x0001
Un tel résultat signifie qu'une valeur discrète 1 est écrite dans le registre. Après avoir appuyé sur l'un des boutons du commutateur, la valeur du registre passera à la valeur opposée:
SUCCESS: read 1 of elements: Data: 0x0000
Si le résultat est observé, comme dans ce paragraphe, alors tout est correctement connecté, le commutateur et le contrôleur se comprennent.
Pilote natif pour le commutateurAprès nous être assurés que le contrôleur et le commutateur se comprennent, il est temps de donner une description des touches du commutateur au niveau du logiciel. Les développeurs suggèrent d'ajouter une description de l'appareil connecté au fichier /etc/wb-mqtt-serial.conf ou de créer un modèle personnalisé sous la forme du fichier /usr/share/wb-mqtt-serial/templates/config-*.json
Je suis allé dans la deuxième voie, mon modèle ressemble à ceci:
{ "device_type": "4-band-switch", "device": { "name": "4-band-switch", "id": "4bsw", "enabled": true, "channels": [{ "name": "All", "reg_type": "holding", "address": "0x00", "type": "switch" }, { "name": "Window", "reg_type": "holding", "address": "0x01", "type": "switch" }, { "name": "Side", "reg_type": "holding", "address": "0x02", "type": "switch" }, { "name": "Diode", "reg_type": "holding", "address": "0x03", "type": "switch" } ] } }
Une description détaillée du modèle écrit ci-dessus se trouve dans la
description du pilote wb-mqtt-serial . Traitez brièvement les domaines:
- "Nom": "Tout" est le nom du bouton. Si le modèle est correctement orthographié, ce bouton apparaîtra dans l'onglet Paramètres avec l'adresse / appareils / 4bsw_142 / contrôles / Tous
- "Reg_type": "holding" - type et taille du registre. Le commutateur utilise le «maintien» - un registre 16 bits disponible pour la lecture et l'écriture.
- "Adresse": "0x00" - l'adresse du registre de commutation à partir de laquelle le contrôleur lira les données.
- «Type»: «commutateur» - comment le commutateur sera affiché dans l'interface Web. Dans le cas de "commutateur" - sous la forme d'un commutateur discret.
Enregistrez le modèle sur le contrôleur. Après cela, dans la section de l'interface Web (Configs -> /etc/wb-mqtt-serial.conf), vous pouvez ajouter un nouveau périphérique avec ce modèle (commutateur 4 bandes). Ajoutez notre premier commutateur et cliquez sur Enregistrer.
La règle qui active le relais lorsque le bouton de l'interrupteur est enfoncé
À l'intérieur du contrôleur d'état, tous les appareils connectés sont décrits par des
messages MQTT . Les appareils sont également contrôlés par l'envoi de messages MQTT. Les clients de la file d'attente de messages MQTT (courtier) sont à la fois l'interface Web et
le moteur de règles .
Pour plus de clarté, nous verrons comment l'interface Web gère le message entrant. Nous ouvrons l'onglet Paramètres de l'interface Web et voyons ce qui se passe lorsque le bouton Tout est enfoncé sur le commutateur: à l'intérieur du commutateur, la valeur du registre Modbus change, le pilote
wb-mqtt-serial interroge le commutateur et, conformément au modèle d'appareil, le commutateur à 4 bandes envoie un message MQTT dans la rubrique
/ devices / 4bsw_142 / Controls / All - et sur la page Paramètres, la valeur dans la rubrique
/ Devices / 4bsw_142 / Controls / All passera instantanément de 0 à 1.
Prenons le deuxième client, le moteur de règles. Le moteur, comme l'interface Web, fonctionne avec la file d'attente de messages et peut répondre aux modifications de la valeur - la fonction
whenChanged est utilisée pour cela. Dans mon cas, la règle ressemblait à ceci:
Je me ferai un plaisir de répondre à toutes les questions dans les commentaires.
Notes du marketing
- Il est préférable de poser la ligne RS-485 avec un câble KSPEVG 2x2x0,35 (cela ne coûte que 30 roubles par mètre), et non pas avec une étoile, mais avec un bus.
- Nous vous conseillons d'être prudent avec les lampes LED - leur courant de démarrage peut dépasser le 150 (!) Fois nominal (ce sera un article séparé) - regardez les puissants modules de relais WB-MR6 : courant 16 A par canal, y compris le courant d'appel jusqu'à 800 (!) Ampli en modification S.