Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. аппаратные средства
    4. Железо
    5. Домофон_MQTT

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Домофон_MQTT

    This topic has been deleted. Only users with topic management privileges can see it.
    • aurodionov
      aurodionov last edited by

      Надоело бегать открывать домофон, решил прикрутить его к iobroker

      Статья на гикктаймс https://geektimes.ru/post/284302/
      51_doorbellcontroll_2_smal.jpg

      Что умеет:

      • Работает по MQTT

      • При поступлении вызова оповещает голосом, открывает страничку с камерами в vis,

      дёргает переключение на AV вход на телеке через управляющий вход на скарт разъёме,

      шлёт сообщение в телеграм

      • Со странички vis можно открыть нажав кнопочку "ОТКРЫТЬ"

      • Автоматическое открывание двери, управляется со странички vis

      • Есть второй канал "open2" ,у меня используется для управления Bolid С2000-2

      Схема:
      51_doorbellcontroll.png

      Так у меня в интерфейсе vis:
      51_iob_pda_smal.jpg

      На страничке home пара переключателей:
      51_home_key.png

      Так отображается в объектах:
      51_iob_mqtt.png

      Скетч для ардуинки:

      ! ````
      ! #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/#");
      ! }
      }</pubsubclient.h></ethernet.h></spi.h>

      
      Скрипт для iobroker:
      
      >! ````
      >! //************Создаём виртуальные объекты с кототорыми далее будем взаимодействовать********************
      createState('doorbellcontroll.rings', 'false');
      createState('doorbellcontroll.visopen', 'false');    //кнопка открыть в vis
      createState('doorbellcontroll.autoopen', '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);    
      >!     }       
      });
      >! //******************* Автоматическое открытие ******************************
      on("javascript.0.doorbellcontroll.rings", function (obj) {
      var AutoOpen = (getState('javascript.0.doorbellcontroll.autoopen').val);
          if  ((obj.newState.val == "true" || obj.newState.val === true) && AutoOpen === true ) {
              setState('mqtt.0.myhome.DoorbellControll.open1', true);     // Открываем двери  автоматически
              toLog(' Подъездная дверь открыта автоматически. ', true, 'orange');     	//Выводим в лог
              sendTo('telegram.0', 'Подъездная дверь открыта автоматически');               // Шлём в телеграм    
      
          setTimeout(function () {
              setState('mqtt.0.myhome.DoorbellControll.open1', false);    
          }, 7500);    
      >!     }       
      });
      >! ````
      1 Reply Last reply Reply Quote 0
      • I
        instalator last edited by

        @aurodionov:

        ! /* ! #include <spi.h> #include <ethernet.h> #include <pubsubclient.h> ! //int ring1; //int open1; //int open2; //int mon1; int flag = 0; ! #define ring1_pin 6 //звонок с домофона 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, LOW);} else if (strPayload == "true") {digitalWrite(2, HIGH);} } 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, LOW); ! 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() { //Отслеживаем звонок в домофон 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/#"); client.loop(); } }</pubsubclient.h></ethernet.h></spi.h> `

        ! ````
        /*
        ! #include <spi.h>
        #include <ethernet.h>
        #include <pubsubclient.h>
        ! //int ring1;
        //int open1;
        //int open2;
        //int mon1;
        int flag = 0;
        ! #define ring1_pin 6 //звонок с домофона 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, LOW);}
        else if (strPayload == "true") {digitalWrite(2, HIGH);}
        }
        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, LOW);
        ! 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/#");

        }
        }</pubsubclient.h></ethernet.h></spi.h>

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          Это мой крипт для домофона, правда бардак тут)

          ! ````
          ///////////////////Домофон/////////////////
          var flag_domofon = false;
          var sch;
          createState('flag_domofon', '0');
          createState('counter', 0);
          createState('javascript.0.Scenes.DomofonAutoOpenDate', ''); //21-02-2016-3 3-период (1,2,3,4)
          ! on({id: 'javascript.0.Scenes.DomofonAutoOpenDate', change: 'any'}, function (obj) {
          if (obj.newState.val){
          var SetTime = obj.newState.val.split("-"); // массив [день, месяц, год, период]
          var SetDay = SetTime[0];
          var SetMouth = SetTime[1].replace('0', '');
          var SetPeriod = parseInt(SetTime[3], 10);
          var SetHour;
          if (SetPeriod === 1){ //1: '9:00-13:00 (утро)',
          SetHour = 9; //2: '13:01-17:00 (день)',
          } //3: '17:01-21:00 (вечер)',
          if (SetPeriod === 2){ //4: '18:01-21:00 (вечер)'
          SetHour = 13;
          }
          if (SetPeriod === 3 || SetPeriod === 4){
          SetHour = 17;
          }
          var sched = '0 '+SetHour+' '+SetDay+' '+SetMouth+' *';
          log(sched);
          sch = schedule(sched , function () { //0 17 7 5 *"
          setState('javascript.0.Scenes.DomofonAutoOpen', 1);
          setTimeout(function() {clearSchedule(sch);}, 14400000); //4 часа
          });
          }
          });
          ! on('mqtt.0.myhome.Mother.DomofonRing', function (obj) {
          if (obj.newState.val === '1' || obj.newState.val === 1) {
          var TVon = getState('mqtt.0.myhome.RS232.LGTV_PWR').val;
          var TVsource = getState('mqtt.0.myhome.RS232.LGTV_Source').val;
          var AllGone = getState('javascript.0.Scenes.Allgone').val;
          var OpenDomofonNumber = parseFloat(getState('javascript.0.Scenes.DomofonAutoOpen').val);
          if (!flag_domofon){
          if ((AllGone === false || AllGone === 'false') && OpenDomofonNumber === 0){
          setState('sayit.1.tts.text', '/sayit.1/tts.userfiles/domofon.mp3');
          }
          sendTo('telegram.0', {
          text: 'Звонок домофона!\n\n\nОТКРЫТЬ ДВЕРЬ!',
          parse_mode: 'html',
          disable_web_page_preview: true
          });
          sendTo("pushover", {
          message: 'Звонок домофона',
          title: 'Домофон',
          url: 'https://192.168.1.190:8087/set/mqtt.0.myhome.Mother.DomofonOpen?value=1&prettyPrint',
          url_title: 'ОТКРЫТЬ ДВЕРЬ!',
          });
          if (OpenDomofonNumber === 88){
          setState('sayit.0.tts.text', 'Кто то пришел, я открою дверь!');
          setTimeout(function() { setState('mqtt.0.myhome.Mother.DomofonOpen', '1'); }, 5000);
          }
          if (OpenDomofonNumber >= 1 && OpenDomofonNumber < 88){
          if (sch){
          clearSchedule(sch);
          }
          setState('sayit.0.tts.text', 'Кто то пришел, я открою дверь!');
          setTimeout(function() { setState('mqtt.0.myhome.Mother.DomofonOpen', '1'); }, 5000);
          OpenDomofonNumber--;
          if (OpenDomofonNumber < 0){OpenDomofonNumber = 0;}
          setState('javascript.0.Scenes.DomofonAutoOpen', OpenDomofonNumber);
          }
          ! flag_domofon = true;

               if (TVon === '1' || TVon === 1) {
                  setState('mqtt.0.myhome.RS232.LGTV_Source', 'av2');
                  setTimeout(function() { 
                     setState('mqtt.0.myhome.RS232.LGTV_Source', TVsource.toLowerCase()); 
                  }, 25100);
               }
               setTimeout(function() {flag_domofon = false;}, 30000);
            }
          

          }
          });

          ! ````

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          691
          Online

          31.8k
          Users

          79.9k
          Topics

          1.3m
          Posts

          2
          3
          2735
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo