Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. аппаратные средства
  4. Железо
  5. Домофон_MQTT

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Домофон_MQTT

Scheduled Pinned Locked Moved Железо
3 Posts 2 Posters 2.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • aurodionovA Offline
    aurodionovA Offline
    aurodionov
    wrote on last edited by
    #1

    Надоело бегать открывать домофон, решил прикрутить его к 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
    0
    • I Offline
      I Offline
      instalator
      wrote on last edited by
      #2

      @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>

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Reply Last reply
      0
      • I Offline
        I Offline
        instalator
        wrote on last edited by
        #3

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

        ! ````
        ///////////////////Домофон/////////////////
        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);
          }
        

        }
        });

        ! ````

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        Support us

        ioBroker
        Community Adapters
        Donate

        748

        Online

        32.4k

        Users

        81.4k

        Topics

        1.3m

        Posts
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        ioBroker Community 2014-2025
        logo
        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Recent
        • Tags
        • Unread 0
        • Categories
        • Unreplied
        • Popular
        • GitHub
        • Docu
        • Hilfe