Bagaimana saya menghubungkan interkom Vizit ke mqtt

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.

gambar

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

gambar

pertama dari setrika. Ini terdiri dari arduino uno, ethernet shields, dan sirkuit pencocokan kecil dengan saluran interkom. Skema itu sendiri:

gambar

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  //   1
#define open1_pin 2  //  1
#define open2_pin 3  //  2
#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;//   flag  
  }
  else if (digitalRead(ring1_pin) == HIGH && flag == 1) {
    client.publish("myhome/DoorbellControll/ring1", "false");
    flag = 0; //  flag
  }
  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');    //   vis


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"}');   //    ""
//***********  30      ********************
    setTimeout(function () {
        setState('mqtt.0.myhome.DoorbellControll.mon1', false); //               
        setState("vis.0.control.command", '{"instance": "FFFFFFFF", "command": "changeView", "data": "StartView"}');    //    "Home"
        setState('javascript.0.doorbellcontroll.rings', false);
    }, 30000);
    }
});

//*******************   ""  Vis**************
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.

gambar

Pada titik ini, narasi membawa kemalasan untuk menyederhanakan tindakan rutinnya pada kesimpulan yang logis.

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


All Articles