Домофон_MQTT

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
aurodionov
Сообщения: 87
Зарегистрирован: Пн янв 27, 2014 2:50 pm
Откуда: Россия, Тюмень
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Домофон_MQTT

Сообщение aurodionov » Ср янв 04, 2017 2:34 pm

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

Статья на гикктаймс https://geektimes.ru/post/284302/
doorbellcontroll_2_smal.jpg
doorbellcontroll_2_smal.jpg (192.29 КБ) 2613 просмотров
Что умеет:
- Работает по MQTT
- При поступлении вызова оповещает голосом, открывает страничку с камерами в vis,
дёргает переключение на AV вход на телеке через управляющий вход на скарт разъёме,
шлёт сообщение в телеграм
- Со странички vis можно открыть нажав кнопочку "ОТКРЫТЬ"
- Автоматическое открывание двери, управляется со странички vis
- Есть второй канал "open2" ,у меня используется для управления Bolid С2000-2

Схема:
doorbellcontroll.png
doorbellcontroll.png (19.36 КБ) 2613 просмотров
Так у меня в интерфейсе vis:
iob_pda_smal.jpg
iob_pda_smal.jpg (79.97 КБ) 2613 просмотров
Скетч для ардуинки:
СпойлерПоказать

Код: Выделить всё


#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/#");

  }
}


На сколько я знаю в МажорДомо есть модуль mqtt ,поэтому не составит труда подключить.
За это сообщение автора aurodionov поблагодарили (всего 2):
Denis_k (Чт янв 05, 2017 11:11 pm) • server (Пт янв 27, 2017 5:23 pm)
Рейтинг: 2.33%
Ответить