Статья на гикктаймс https://geektimes.ru/post/284302/ Что умеет:
- Работает по MQTT
- При поступлении вызова оповещает голосом, открывает страничку с камерами в vis,
дёргает переключение на AV вход на телеке через управляющий вход на скарт разъёме,
шлёт сообщение в телеграм
- Со странички vis можно открыть нажав кнопочку "ОТКРЫТЬ"
- Автоматическое открывание двери, управляется со странички vis
- Есть второй канал "open2" ,у меня используется для управления Bolid С2000-2
Схема: Так у меня в интерфейсе vis: Скетч для ардуинки:
СпойлерПоказать
Код: Выделить всё
#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/#");
}
}