Touch-Schalter mit Modbus: Warum werden sie benötigt und wie werden sie in einer intelligenten Wohnung angewendet?


In Budgetsystemen eines Smart Homes werden normalerweise Standardschalter verwendet - ihre Art der Ausgabe wird auch als „Trockenkontakt“ bezeichnet . Dies ist jedoch nicht die einzige Option: Auf der Suche nach einem schönen Switch bin ich auf Geräte mit dem darin enthaltenen Modbus RTU-Protokoll gestoßen. Zusätzlich zu dem schönen Erscheinungsbild können Sie den Betriebsmodus jeder Taste konfigurieren, die Hintergrundbeleuchtung detailliert steuern und sie an die zentrale Steuerung anschließen (ich habe Wiren Board 5 verwendet ). Vier Drähte reichen aus - Strom, Masse und zwei Leitungen für RS-485.

Informationen zum Anschließen eines solchen Schalters und zum Konfigurieren der Steuerung von Licht und Belüftung finden Sie unten. In diesem Artikel wird auch ausführlich beschrieben, wie Sie mit Modbus-Geräten im Allgemeinen arbeiten.

Erklärung des Wiren Board-Vermarkters: Dieser Artikel wurde aus einem von Kallyanbl4 in unserem Forum erstellten Thema erstellt. Nach unserer Bitte schrieb er einen vollwertigen Artikel und durfte ihn auf unserem Blog veröffentlichen, wofür er sich sehr bedankt. Der gesamte Text wird vom Autor verfasst, mit Ausnahme der Anmerkungen am Ende.

Beschreibung der Schalter


Nachdem ich studiert hatte, was jetzt auf dem Markt ist, kaufte ich diese interessanten Schalter von den Chinesen:



Ihre Vorteile:

  • gutes Design;
  • Berührungsschalter blinken, wenn sie gedrückt werden, im Dunkeln in einer angenehmen weißen Farbe beleuchtet;
  • relativ niedriger Preis - 2000 Rubel pro Stück. Der Preis beinhaltet die individuelle Lasergravur;
  • programmierbarer Schalter - Sie können die Taste für fast jede Aktion einstellen: Licht einschalten, LEDs steuern, Vorhang heben / senken, ...

Switch-Spezifikationen:

  • Versorgungsspannung - 12 V;
  • Datenübertragungsrate - 19200 Bit / s;
  • Anzahl der übertragenen Bits - 8;
  • Anzahl der Stoppbits - 1;
  • Paritätskontrolle - keine Überprüfung.

Bei der Arbeit an Modbus RTU verfügen die angeschlossenen Geräte über sogenannte Register - Zellen, in denen Informationen gespeichert sind. Im Screenshot eine Beschreibung der Register für den Vier-Tasten-Schalter:



Wenn Sie auf eine der Touch-Tasten klicken, ändern sich die Werte in den Registern 0-3 von 0 auf 1.

Leistungsschalter


Im Wiren Board 5-Controller befinden sich je nach Konfiguration zwei bis vier RS-485-Ports. Switches (in meinem Fall sind es 27) müssen an diese Ports angeschlossen werden.

In diesem Fall können alle Switches auf einem gemeinsamen Bus betrieben werden. Die Schalter können in Reihe geschaltet werden, wobei das Kabel von einem Schalter zum anderen geführt wird. Ich habe mich jedoch entschlossen, alle Kabel in einer Abschirmung anzuschließen.

Verbindungskabel - 8-adriges Cat 5e UTP. Sie können einen Vierkern verwenden, aber normalerweise mache ich alles "nur für den Fall". Sie können andere vieradrige Kabel in Betracht ziehen, aber der wichtige Punkt ist, dass das Kabel abgeschirmt werden sollte, da trotz der relativ niedrigen Signalfrequenzen Verluste und Tonabnehmer nicht ausgeschlossen sind.

Infolgedessen sind alle Schalter wie in der Abbildung gezeigt miteinander verbunden:



Wie aus der Abbildung ersichtlich ist, sind alle Switches über einen passiven UTP-Switch miteinander verbunden. Für die Kerne 1 und 2 (orange und weiß-orange) werden Daten übertragen (Leitungen A und B), 12 V werden an die Kerne 7 und 8 (braun und weiß-braun) angeschlossen. Ich verwende Mean Well NDR-75-12 als Stromquelle .

Ich wusste nicht, wie sich der passive chinesische UTP-Switch verhält, daher habe ich beim Entwerfen des Shields einen Platz für einen aktiven RS-423-Switch bereitgestellt. Ich stelle fest, dass die Schaltung sowohl über passive als auch über aktive Schalter funktioniert. Und selbst wenn sie miteinander verbunden sind.



Lichtsteuerung durch Relais


Nach meinem Projekt sind in der Wohnung 27 unabhängige Geräte (Licht, Lüfter) geplant, die mit 220 V betrieben werden. Drei Relaismodule WBIO-DO-R10A-8 und ein WBIO-DO-R10R-4 wurden ausgewählt, um sie zu steuern. Die Wahl liegt in der Tatsache begründet, dass fast die gesamte Beleuchtung in der Wohnung LED ist, was sich von Glühlampen durch einen hohen Anlaufstrom unterscheidet. Die ausgewählten Relais können eine Stromumschaltung von bis zu 10 A pro Kanal liefern, was in meinem Fall nicht erforderlich ist - aber, wie bereits erwähnt, "nur für den Fall mit einem Spielraum".



Die Relaisumschaltung erfolgt über die Webschnittstelle der Steuerung . Das Verfahren ist intuitiv, es sind keine Anweisungen oder Hinweise erforderlich.

Software-Teil


Port-Datei

Aus der Hardwarebeschreibung von Wiren Board 5 erfahren wir , dass es zwei Geräteports / dev / ttyAPP1 und / dev / ttyAPP4 hat , die zwei RS-485-Ports entsprechen. In meinem Fall ist der Switch mit dem Port / dev / ttyAPP1 verbunden .

Geräteadresse (Switch)

Beim Datenaustausch über das Modbus RTU-Protokoll wird jedes Gerät durch seine eigene eindeutige Nummer identifiziert - die Modbus-Adresse. In der Regel gibt der Hersteller diese Adresse in Form von drei Ziffern auf dem Gerät selbst an. Wenn jedoch keine solche Nummer auf dem Gerät vorhanden ist, können Sie die Adressen über die Befehlszeile durchlaufen (es wird verwendet, dass die Adresse im Modbus-Register 0x80 gespeichert ist):

root@wirenboard:~# service wb-mqtt-serial stop root@wirenboard:~# for i in {1..247}; do modbus_client -mrtu /dev/ttyAPP1 --debug -a$i -t3 -r0x80 -s1 -pnone; done 2>/dev/null | grep Data: 

Das Ergebnis sollte in folgender Form vorliegen:

 Data: 0x008e 

Die Antwort wurde im Hexadezimalformat empfangen und entspricht 142 im Dezimalformat.
Es ist zu beachten, dass bei jedem Aufruf des Dienstprogramms modbus_client der Standard für den seriellen Abfragetreiber wb-mqtt für den Controller gestoppt werden sollte. Andernfalls funktioniert das Dienstprogramm modbus_client nicht.

Datenaustausch zwischen Switch und Wiren Board

Oben wird eine Schleife geschrieben, die alle möglichen Modbus-Adressen abfragt und den Adresswert zurückgibt, wenn ein Gerät gefunden wird. Die Schleife verwendet das Dienstprogramm modbus_client , das zum Debuggen verbundener Geräte erforderlich ist. An diesem Punkt stellen wir sicher, dass alles richtig angeschlossen ist und der Switch ordnungsgemäß mit dem Controller interagiert. Versuchen Sie dazu, die Daten im Register 0x01-Schalter zu lesen:

 root@wirenboard:~# service wb-mqtt-serial stop root@wirenboard:~# modbus_client -mrtu /dev/ttyAPP1 --debug -a142 -s1 -pnone -b19200 -a142 -t0x03 

(Eine Beschreibung des Dienstprogramms und seiner Schlüssel finden Sie in der Controller-Dokumentation.)

Das Ergebnis ist wie folgt:

 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 

Ein solches Ergebnis bedeutet, dass ein diskreter Wert 1 in das Register geschrieben wird. Nach dem Drücken einer der Tasten des Schalters ändert sich der Wert des Registers auf den entgegengesetzten Wert:

 SUCCESS: read 1 of elements: Data: 0x0000 

Wenn das Ergebnis wie in diesem Absatz beobachtet wird, ist alles richtig angeschlossen, der Schalter und die Steuerung verstehen sich.

Native Treiber für den Switch

Nachdem wir sichergestellt haben, dass sich Controller und Switch verstehen, ist es Zeit, eine Beschreibung der Switch-Tasten auf Software-Ebene zu geben. Die Entwickler schlagen vor, der Datei /etc/wb-mqtt-serial.conf eine Beschreibung des verbundenen Geräts hinzuzufügen oder eine benutzerdefinierte Vorlage in Form der Datei /usr/share/wb-mqtt-serial/templates/config-*.json zu erstellen

Ich bin den zweiten Weg gegangen, meine Vorlage sieht folgendermaßen aus:

 { "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" } ] } } 

Eine detaillierte Beschreibung der oben beschriebenen Vorlage finden Sie in der Beschreibung des Treibers wb-mqtt-serial . Beschäftige dich kurz mit den Feldern:

  • "Name": "Alle" ist der Name der Schaltfläche. Wenn die Vorlage richtig geschrieben ist, wird diese Schaltfläche auf der Registerkarte Einstellungen mit der Adresse / Geräte / 4bsw_142 / Steuerelemente / Alle angezeigt
  • "Reg_type": "holding "- Typ und Größe des Registers. Der Switch verwendet "Holding" - ein 16-Bit-Register, das zum Lesen und Schreiben zur Verfügung steht.
  • "Adresse": "0x00" - die Adresse des Schalterregisters, aus dem die Steuerung Daten liest.
  • "Typ": "Schalter" - wie der Schalter in der Weboberfläche angezeigt wird. Im Fall von "Schalter" - in Form eines diskreten Schalters.

Speichern Sie die Vorlage auf dem Controller. Danach können Sie im Abschnitt der Weboberfläche (Configs -> /etc/wb-mqtt-serial.conf) ein neues Gerät mit dieser Vorlage hinzufügen (4-Band-Switch). Fügen Sie unseren ersten Schalter hinzu und klicken Sie auf Speichern.

Die Regel, die das Relais aktiviert, wenn die Schaltertaste gedrückt wird


Innerhalb des Statuscontrollers werden alle angeschlossenen Geräte durch MQTT-Nachrichten beschrieben . Geräte werden auch durch Senden von MQTT-Nachrichten gesteuert. Die Clients der MQTT-Nachrichtenwarteschlange (Broker) sind sowohl die Webschnittstelle als auch die Regelengine .

Aus Gründen der Übersichtlichkeit werden wir sehen, wie die Weboberfläche die eingehende Nachricht verarbeitet. Wir öffnen die Registerkarte Einstellungen der Weboberfläche und sehen, was passiert, wenn die Taste Alle am Switch gedrückt wird: Innerhalb des Switch ändert sich der Wert des Modbus-Registers, der wb-mqtt-serial- Treiber fragt den Switch ab und der 4-Band-Switch sendet gemäß der Gerätevorlage eine MQTT-Nachricht Im Thema / Geräte / 4bsw_142 / Steuerelemente / Alle - und auf der Seite Einstellungen ändert sich der Wert im Thema / Geräte / 4bsw_142 / Steuerelemente / Alle sofort von 0 auf 1.

Betrachten Sie den zweiten Client - die Regelengine. Die Engine arbeitet wie die Weboberfläche mit der Nachrichtenwarteschlange und kann auf Änderungen des Werts reagieren - hierfür wird die Funktion whenChanged verwendet. In meinem Fall sah die Regel folgendermaßen aus:

 //   defineRule("switch_all", { whenChanged: "4bsw_142/All", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT3_R3A2"] = newValue; dev["wb-gpio"]["EXT3_R3A5"] = newValue; dev["wb-gpio"]["EXT1_R3A1"] = newValue; dev["wb-gpio"]["EXT1_R3A2"] = newValue; dev["wb-gpio"]["EXT1_R3A5"] = newValue; dev["wb-gpio"]["EXT2_R3A8"] = newValue; dev["wb-gpio"]["EXT3_R3A7"] = newValue; } }); //  defineRule("switch_window", { whenChanged: "4bsw_142/Window", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT4_ON4"] = newValue; // dev["wb-gpio"]["EXT3_R3A6"] = newValue; // dev["wb-gpio"]["EXT3_R3A7"] = newValue; } }); // defineRule("switch_side", { whenChanged: "4bsw_142/Side", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT1_R3A3"] = newValue; dev["wb-gpio"]["EXT1_R3A4"] = newValue; dev["wb-gpio"]["EXT2_R3A1"] = newValue; } }); // defineRule("switch_diode", { whenChanged: "4bsw_142/Diode", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT2_R3A2"] = newValue; dev["wb-gpio"]["EXT2_R3A3"] = newValue; dev["wb-gpio"]["EXT3_R3A3"] = newValue; } }); 

Gerne beantworte ich alle Fragen in den Kommentaren.

Marketer Notizen


  1. Es ist besser, die RS-485-Leitung mit einem KSPEVG 2x2x0,35-Kabel zu verlegen (es kostet nur 30 Rubel pro Meter) und nicht mit einem Stern, sondern mit einem Bus.
  2. Wir empfehlen Ihnen, bei LED-Lampen vorsichtig zu sein - ihr Anlaufstrom kann den Nennwert von 150 (!) Überschreiten (dies wird ein separater Artikel sein) - und die leistungsstarken Relaismodule WB-MR6 zu betrachten : Strom 16 A pro Kanal, einschließlich Einschaltstrom bis 800 (!) Amp in Modifikation S.

Source: https://habr.com/ru/post/de417093/


All Articles