Guten Tag an alle. Am ersten Januar gibt es nichts zu tun, deshalb habe ich beschlossen, den Artikel über die Giktayms zu streichen. Im Zusammenhang mit dem Umzug in eine andere Wohnung gab es eine Option wie eine Türsprechanlage. Alles wäre in Ordnung, aber das Laufen und Öffnen der Tür für alle, die kamen, war sehr ärgerlich, und da Telefone, Tablets und Computer immer zu Fuß erreichbar sind, wurde beschlossen, diesen Vorteil an das bereits in Betrieb befindliche iobroker-Automatisierungssystem anzuschließen. Im Folgenden werde ich beschreiben, was damit passiert ist.Wurde von dem ausgepeitscht, was unter meinen Füßen lag, war verfügbar. Infolgedessen sieht das Ganze so aus.
Da ich bereits über ein wunderbares iobroker-Automatisierungssystem verfüge, wurde beschlossen, eine Verbindung zu diesem System herzustellen, um eine zentralisierte Verwaltung und Konfiguration von Verhaltensänderungen in einer einzigen Schnittstelle zu ermöglichen. Es ist Zeit zu entscheiden, wie das Eisen und das allgemeine System kommunizieren. Das kam mir einfach nicht als Austauschprotokoll aus der Emulation von 1wire in den Sinn, um Anfragen zu erhalten. Infolgedessen wurde das mqtt-Protokoll als das bequemste in meiner Sicht der Situation angesehen, und der Austausch zwischen dem Stück Eisen und iobroker wurde darauf implementiert.Auf dem Tablet sieht es aus wie eine Registerkarte mit der Anzeige der aktuellen Kamera und der Steuerung des
ersten Teils des Bügeleisens. Es besteht aus Arduino Uno, Ethernet-Abschirmungen und einer kleinen Anpassungsschaltung mit einer Intercom-Leitung. Das Schema selbst:
Hier ist alles einfach, der eingehende Anruf wird vom Optokoppler überwacht und drückt beim Empfang einfach auf den Nullfuß des Arduino. Das Öffnen der Tür wird auf dem Relais im Normalzustand implementiert. Es ist immer geschlossen. Wenn ein Befehl von iobroker empfangen wird (sie drückten eine Taste in der Schnittstelle, automatisch gemäß der Bedingung im Skript, ein Befehl von einem Telegramm wurde empfangen), unterbricht es die Leitung für 7,5 Sekunden, während vizit es als Befehl zum Öffnen nimmt und den Gast startet .Zusätzlich implementiert der Optokoppler vo2 die automatische Umschaltung des Fernsehgeräts in den AV-Modus für die Anzeige von der Türsprechkamera.Der zweite Teil ist Software, die ebenfalls im Wesentlichen in zwei Teile unterteilt ist. Die erste ist eine Skizze, die in Arduino geflasht wird und den Austausch über das mqtt-Protokoll mit dem iobroker-System implementiert.#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
int flag = 0;
#define ring1_pin 0
#define open1_pin 2
#define open2_pin 3
#define mon1_pin 5
#define ID_CONNECT "DoorbellControll"
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
byte server[] = { 192, 168, 55, 170 };
byte ip[] = { 192, 168, 55, 40 };
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
String strTopic = String(topic);
String strPayload = String((char*)payload);
if (strTopic == "myhome/DoorbellControll/open1") {
if (strPayload == "false") {
digitalWrite(2, HIGH);
}
else if (strPayload == "true") {
digitalWrite(2, LOW);
}
}
else if (strTopic == "myhome/DoorbellControll/open2") {
if (strPayload == "false") digitalWrite(3, LOW);
else if (strPayload == "true") digitalWrite(3, HIGH);
}
else if (strTopic == "myhome/DoorbellControll/mon1") {
if (strPayload == "false") digitalWrite(5, LOW);
else if (strPayload == "true") digitalWrite(5, HIGH);
}
}
void reconnect() {
while (!client.connected()) {
if (client.connect(ID_CONNECT)) {
client.subscribe("myhome/DoorbellControll/#");
} else {
delay(5000);
}
}
}
void setup() {
pinMode(ring1_pin, INPUT);
pinMode(open1_pin, OUTPUT);
digitalWrite(open1_pin, HIGH);
pinMode(open2_pin, OUTPUT);
digitalWrite(open2_pin, LOW);
pinMode(mon1_pin, OUTPUT);
digitalWrite(mon1_pin, LOW);
Ethernet.begin(mac, ip);
if (client.connect("DoorbellControll")) {
client.publish("myhome/DoorbellControll/open1", "false");
client.publish("myhome/DoorbellControll/open2", "false");
client.publish("myhome/DoorbellControll/mon1", "false");
client.publish("myhome/DoorbellControll/ring1", "false");
client.subscribe("myhome/DoorbellControll/#");
}
}
void loop() {
client.loop();
if (digitalRead(ring1_pin) == LOW && flag == 0) {
client.publish("myhome/DoorbellControll/ring1", "true");
flag = 1;
}
else if (digitalRead(ring1_pin) == HIGH && flag == 1) {
client.publish("myhome/DoorbellControll/ring1", "false");
flag = 0;
}
if (!client.connected()) {
reconnect();
client.subscribe("myhome/DoorbellControll/#");
}
}
Und das zweite ist ein js-Skript zum Implementieren der Benutzerinteraktion:
createState('doorbellcontroll.rings', 'false');
createState('doorbellcontroll.visopen', 'false');
on("mqtt.0.myhome.DoorbellControll.ring1", function (obj){
if (obj.newState.val == "true" || obj.newState.val === true) {
setState('javascript.0.doorbellcontroll.rings', true);
setTimeout(function() {
}, 60000);
}
});
on("javascript.0.doorbellcontroll.rings", function (obj){
if (obj.newState.val == "true" || obj.newState.val === true) {
setState('sayit.0.tts.text', ' ');
sendTo('telegram.0', ' ');
setState('mqtt.0.myhome.DoorbellControll.mon1', true);
setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "Camers"}');
setTimeout(function () {
setState('mqtt.0.myhome.DoorbellControll.mon1', false);
setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "StartView"}');
setState('javascript.0.doorbellcontroll.rings', false);
}, 30000);
}
});
on("javascript.0.doorbellcontroll.visopen", function (obj){
if (obj.newState.val == "true" || obj.newState.val === true) {
setState('mqtt.0.myhome.DoorbellControll.open1', true);
toLog(' . ', true, 'orange');
setTimeout(function () {
setState('mqtt.0.myhome.DoorbellControll.open1', false);
setState('javascript.0.doorbellcontroll.visopen', false);
}, 7500);
}
});
Das iobroker-System zeigt an, mit welchen Objekten Sie interagieren können.
An diesem Punkt bringt die Erzählung Faulheit , um ihre Routinemaßnahmen zu vereinfachen, zu einer logischen Schlussfolgerung.