Hari baik untuk semua Tanggal 1 Januari, tidak ada yang bisa dilakukan, jadi saya memutuskan untuk menghancurkan artikel di Giktayms. Sehubungan dengan pindah ke apartemen lain ada opsi seperti doorphone. Semuanya akan baik-baik saja, tetapi menjalankan dan membuka pintu bagi semua orang yang datang sangat menjengkelkan, dan karena ponsel, tablet, komputer selalu berada dalam jarak berjalan kaki, hanya menjangkau, diputuskan untuk menghubungkan manfaat ini dengan sistem otomasi iobroker yang sudah berfungsi. Di bawah ini saya akan menjelaskan apa yang terjadi dengan ini.Dicambuk dari apa yang tergeletak di bawah kakiku tersedia. Akibatnya, semua ini terlihat seperti ini.
Karena saya sudah memiliki sistem otomasi iobroker yang hebat, diputuskan untuk terhubung dengannya untuk kemungkinan manajemen terpusat dan konfigurasi perubahan perilaku dalam satu antarmuka. Sudah waktunya untuk memilih bagaimana besi dan sistem umum berkomunikasi. Itu tidak terjadi pada saya sebagai protokol pertukaran dari persaingan 1wire untuk mendapatkan permintaan, sebagai hasilnya, protokol mqtt menang sebagai yang paling nyaman dalam visi saya tentang situasi, dan pertukaran antara potongan besi dan iobroker diimplementasikan di atasnya.Pada tablet, sepertinya tab dengan tampilan kamera saat ini dan kontrol bagian
pertama dari setrika. Ini terdiri dari arduino uno, ethernet shields, dan sirkuit pencocokan kecil dengan saluran interkom. Skema itu sendiri:
Semuanya sederhana di sini, panggilan masuk dipantau oleh optocoupler dan setelah diterima hanya menekan nol kaki Arduino. Membuka pintu diimplementasikan pada relai dalam keadaan normal, selalu tertutup, ketika perintah diterima dari iobroker (mereka menekan tombol di antarmuka, secara otomatis sesuai dengan kondisi dalam skrip, perintah dari telegram diterima) ia memutus garis selama 7,5 detik, sementara vizit menganggapnya sebagai perintah untuk membuka dan memulai tamu .Selain itu, optocoupler vo2 mengimplementasikan perpindahan otomatis mode TV ke AV untuk tampilan dari kamera doorphone.Bagian kedua adalah perangkat lunak, yang pada dasarnya juga dibagi menjadi dua. Yang pertama adalah sketsa yang di-flash dalam arduino dan mengimplementasikan pertukaran melalui protokol mqtt dengan sistem iobroker.#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/#");
}
}
Dan yang kedua adalah skrip js untuk mengimplementasikan interaksi pengguna:
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);
}
});
Sistem iobroker menampilkan bagaimana objek Anda dapat berinteraksi.
Pada titik ini, narasi membawa kemalasan untuk menyederhanakan tindakan rutinnya pada kesimpulan yang logis.