Статья

Охранная система в гараж на ESP 8266 с интеграцией в Apple HomeKit

Добрый день дорогой читатель, хочу поделиться опытом подключения ESP8266 в систему HomeBridge (HomeKit). На примере охранной системы. 

Для этого нам понадобиться Raspbery pi с установленным HomeBridge, контроллер ESP8266 и любое совместимое устройство (реле, датчик открытия, движения, температуры, влажности), покажу на примере nodeMCU.

Начнем с установки MQTT брокера

Подключаемся по SSH к нашей Raspbery pi и далее в терминале 

sudo apt update sudo apt install -y mosquitto mosquitto-clients

Во время установки Вам потребуется ввести "Y" и нажать "Enter"

sudo systemctl enable mosquitto.service

Поздравляю вы получили рабочий брокер у себя на Raspbery Pi

Далее приступим к прошивке ESP8266

Первым делом скачаем и распакуем последнюю версию прошивки. Я использовал ESP_Easy ссылка, архив состоит из набора прошивок под разный объем памяти устройств и программы для заливки прошивки в ESP FlashESP8266.

Подключаем ESP8266 к компьютеру, Подключение осуществляется двумя способами: 
- при помощи usb-micro usb кабеля (вопросов не должно возникнуть)

- или при помощи ttl конвертера, обратите внимание пины ttl конвертера 3.3v, GRND, RX, TX на пины ESP8266 3.3v, GRND, TX, RX (TX и RX нужно поменять местами).

Далее запускаем FlashESP8266.exe из скаченного архива.  

На этом прошивка закончена. Переходим к настройке ESP8266

Подключение ESP8266 к Wi-Fi

Берем телефон или планшет в руки. Открываем настройки Wi-Fi, и видим там новую сеть ESP-0, подключаемся к ней, пароль configesp. Нас перекидывает в настройки ESP_Easy, выбираем смою домашнюю wifi сеть и вписываем пароль.

Настройка ESP8266

Открываем в браузере 192.168.1.113 и попадаем в админку ESP_Easy.

Первым делом нужно настроить MQTT клиент. Переходим во вкладку Сontrollers и нажимаем в первой строчке Edit. 

Выбираем  

Protocol: OpenHAB MQTT

Controller IP: ip adress брокера

Controller Port: 1883 (по дефолту)

Controller User/Password: admin/admin (по дефолту) 

Ставим галочку Enabled и жмем Submit

Подключение устройств к ESP8266


Покажу на примере такого реле:

Практически все устройства подключаются тремя пинами (3.3v, GND, и информационный пин IN). Так вот, подключаем 3.3v и GND, а пин IN устройства подключаем на свободный GPIO нашей ESP (в моем случаи GPIO-0).

Далее идем в админку ESP_Easy в раздел Devices и нажимаем Edit.

Выбираем Device: Switch input - Switch 

  Name: Relay1

   Enabled: Ставим галочку

    1st GPIO: GPIO на плате при подключении в моем случаи GPIO-0

     Send to Controller: Ставим галочку

    #Name: Switch

Нажимаем Submit

Переходим к настройкам плагина для homebridge.

Установка и настройки Plugins Homebridge

Я использовал homebridge-mqttthing, он мне понравился большим количеством поддерживаемых устройств.

Подключаемся по SSH к малине и пишем в командной строке:

sudo npm install -g homebridge-mqttthing

далее nano ~/.homebridge/config.json

и добавляем аксессуары в конфиг:

{ "accessory": "mqttthing", "type": "switch", "name": "switch", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getOn": "/ESP_Easy/Relay1/Switch", "setOn": "/ESP_Easy/gpio/0" }, "integerValue": "true", "onValue": "0", "offValue": "1" }

Перезагружаем homebridge и радуемся проделанной работой.

Таким образом я подключил к одной ESP8266:

Пример добавления датчиков в ESP_easy

Схема подключения сирены

Она выглядит очень просто.

Алгоритм работы системы: 


Реле1 - Охрана (добавил как датчик движения)

Реле2 - Сирена

Если "Датчик движения" или "Датчик открытия" сработал тогда замкнуть "Реле1" (это мы настраиваем в разделе Rules)Если "Реле2" Включено в приложении HomeKit у нас сработает "Сирена"

Также если Сирена выключена/включена по событиям с Датчика движения/открытия нам прилетают push уведомления и включается освещение в гараже: 

rules

Правила для срабатывания охраны и включения освещения.

on contact#State do if [contact#State]=1 gpio,0,0 gpio,16,0 else gpio,0,1 gpio,16,1 endif endon on motion#State do if [motion#State]=1 gpio,0,0 gpio,16,0 else gpio,0,1 gpio,16,1 endif endon

Полный файл конфигурации HomeBridge

{ "accessory": "mqttthing", "type": "switch", "name": "Sirena G", "url": "http://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getOn": "/garage/Sirena/Switch", "setOn": "/garage/gpio/14" }, "integerValue": "true", "onValue": "0", "offValue": "1" }, { "accessory": "mqttthing", "type": "motionSensor", "name": "Ohrana G", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getMotionDetected": "/garage/Ohrana/Switch" }, "integerValue": "true", "onValue": "0", "offValue": "1" }, { "accessory": "mqttthing", "type": "lightbulb", "name": "Svet G", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getOn": "/garage/Svet/Switch", "setOn": "/garage/gpio/16" }, "integerValue": "true", "onValue": "0", "offValue": "1" }, { "accessory": "mqttthing", "type": "switch", "name": "Relay", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getOn": "/garage/Relay/Switch", "setOn": "/garage/gpio/10" }, "integerValue": "true", "onValue": "0", "offValue": "1" }, { "accessory": "mqttthing", "type": "contactSensor", "name": "Contact G", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getContactSensorState": "/garage/contact/State" }, "integerValue": "true", "onValue": "1", "offValue": "0" }, { "accessory": "mqttthing", "type": "temperatureSensor", "name": "Temp G", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getCurrentTemperature": "/garage/dht22/Temperature" } }, { "accessory": "mqttthing", "type": "humiditySensor", "name": "Hum G", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getCurrentRelativeHumidity": "/garage/dht22/Humidity" } }, { "accessory": "mqttthing", "type": "motionSensor", "name": "Motion G", "url": "mqtt://127.0.0.1", "username": "admin", "password": "admin", "topics": { "getMotionDetected": "/garage/motion/State" }, "integerValue": "true", "onValue": "1", "offValue": "0" }

Приведу пример конфига для Home-Assistant

mqtt: broker: localhost port: 1883 protocol: 3.1 binary_sensor: - platform: mqtt name: "Garage_motiom" state_topic: "/garage/motion/State" payload_on: "1" payload_off: "0" device_class: motion - platform: mqtt name: "Garage_Vorota" state_topic: "/garage/contact/State" payload_on: "1" payload_off: "0" device_class: opening - platform: mqtt name: "Garage_Ohrana" state_topic: "/garage/Ohrana/Switch" payload_on: "0" payload_off: "1" device_class: motion switch: - platform: mqtt name: Garage_Sirena state_topic: "/garage/Sirena/Switch" command_topic: "/garage/gpio/14" payload_on: "0" payload_off: "1" optimistic: false qos: 1 retain: true - platform: mqtt name: "Garage_Svet" state_topic: "/garage/Svet/Switch" command_topic: "/garage/gpio/16" payload_on: "0" payload_off: "1" optimistic: false qos: 1 retain: true - platform: mqtt name: "Garage_Relay" state_topic: "/garage/Relay/Switch" command_topic: "/garage/gpio/10" payload_on: "0" payload_off: "1" optimistic: false qos: 1 retain: true sensor: - platform: mqtt name: "Garage_Temperature" state_topic: "/garage/dht22/Temperature" unit_of_measurement: '°C' - platform: mqtt name: "Garage_Humidity" state_topic: "/garage/dht22/Humidity" unit_of_measurement: '%'

Ну и конечно фотографии конечного устройства

Заключение

Таким образом я подключил к одной ESP8266 nodeMCU 5 устройств, датчик движения, открытия, температуры/влажности, сирена. Экран для вывода информации Поместилось все это в очень маленький корпус и теперь трудиться в гараже.

Смета: 

ESP8266 nodeMCU: 180р.

LCD дисплей: 300р.

Модули реле: 200р.

Движение: 50р.

геркон покупал в городе: 200р.

Температура/Влажность DHT22: 200р.

БП от сетевого оборудования, нашел в гараже 9в.

Бокс 70р. В хоз магазине. 


Огонь, с удовольствием почитал ;) продолжай в том же духе !!!!

Отлично, спасибо, а какие девайсы эмулирует еспешка вообще?

Вот мой конфиг, тут реле, движение, открытие, температура, влажность. а вообще можно любые девайсы по mqtt прокинуть 


{


"accessory": "mqttthing",


"type": "switch",


"name": "switch2",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getOn": "/ESP_Easy/Relay2/Switch",


"setOn": "/ESP_Easy/gpio/14"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "contactSensor",


"name": "contactsensor",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getContactSensorState": "/ESP_Easy1/contact/State"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "motionSensor",


"name": "motionSensor",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getMotionDetected": "/ESP_Easy1/motion/State"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "securitySystem",


"name": "securitySystem",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getCurrentState": "/ESP_Easy1/Relay2/Switch",


"setTargetState": "/ESP_Easy1/gpio/12"


}


}

У меня ESPeasy прошивка (sonoff - реле, Esp12- температур,движения итд) работают с Domoticz , очень простая связка, через Dummy Dev.,все крутиться. 

Так же через Domoticz ноут вкл и выкл. 

Но есть пару минусов, кто виноват не знаю. 

Приложение  Home долго обнавляет состояние устр.даже если заблокировал телефон и тут же разблокировал. 

Но Siri вкл и выкл их мгновенно. Может сам Domoticz грешит.

На MQTT брокере нет такого???

Когда я собирал через домотикс, тоже все лагало, особенно плагин акара.поэтому я отказался от него. По mqtt все быстро отзывается 

Я даже от тасмота отказался в пользу ESPEasy. 

"Esp12- температур,движения итд) работают с Domoticz , очень простая связка" 

Как вы получаете данные с Esp и закидываете их в domoticz? Я уже не первый день мучаюсь...

Уважаемые, видно же, что инструкция нерабочая. Ссылки на репозиторий apt распарсились в HTML. 

Поправим, это проблема конструктора статьи 

Скажите а вентилятор можно подключить через реле что бы иконка в homekit была(вентилятора а не выключателя)

можно, есть специальный аксессуар fan 

можно, есть специальный аксессуар fan 

Подскажите плагин не хочет подключаться к MQTT брокеру, что делать слушаю клиентом MQTT там тишина.

А что надо в конфиг вписать для mqtt.



Вопрос: попробовал проделать все это в точности как у автора, москито брокер с ESP связывается и получает информацию и выполняет команды, Homebridge так же выполняет команды это видно в MQTT EXPLORER но это другие команды номера GPIO и их состояния. Мне кажется что то я делаю не так), подскажите кто владеет предметом, в чем моя проблема? Спасибо!

Конфиг HB

"accessories": [{


"accessory": "mqttthing",


"type": "switch",


"name": "Sirena G",


"url": "http://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getOn": "/garage/Sirena/Switch",


"setOn": "/garage/gpio/14"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "motionSensor",


"name": "Ohrana G",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getMotionDetected": "/garage/Ohrana/Switch"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "lightbulb",


"name": "Svet G",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getOn": "/garage/Svet/Switch",


"setOn": "/garage/gpio/16"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "switch",


"name": "Relay",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getOn": "/garage/Relay/Switch",


"setOn": "/garage/gpio/10"


},


"integerValue": "true",


"onValue": "0",


"offValue": "1"


},


{


"accessory": "mqttthing",


"type": "contactSensor",


"name": "Contact G",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getContactSensorState": "/garage/contact/State"


},


"integerValue": "true",


"onValue": "1",


"offValue": "0"


},


{


"accessory": "mqttthing",


"type": "temperatureSensor",


"name": "Temp G",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getCurrentTemperature": "/garage/dht22/Temperature"


}


},


{


"accessory": "mqttthing",


"type": "humiditySensor",


"name": "Hum G",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getCurrentRelativeHumidity": "/garage/dht22/Humidity"


}


},


{


"accessory": "mqttthing",


"type": "motionSensor",


"name": "Motion G",


"url": "mqtt://127.0.0.1",


"username": "admin",


"password": "admin",


"topics": {


"getMotionDetected": "/garage/motion/State"


},


"integerValue": "true",


"onValue": "1",


"offValue": "0"




https://sprut.ai/static/media/cache/00/46/80/5/2828838/52634/1000x_image.png?1583176905" alt="1000x_image.png?1583176905" />

Вернуться назад
Вернуться назад