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

15 июня 2018, 12:13

Добрый день дорогой читатель, хочу поделиться опытом подключения 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 из скаченного архива.  



Выбираем COM порт нашей ESP8266 или ttl конвертера и прошивку, нажимаем на кнопку Flash.

Описание прошивок, заливать можно и normal и test и dev, главное чтоб объем ESP совпадал (1024 или 4096)

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

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

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

 Если все верно роутер назначит для ESP ip адрес. Дальнейшие действия возможны на компьютере.

Настройка 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:

Модуль реле (4 канала)

Экран LCD 2004 (HD44780) c I2C (IIC) адаптером

Датчик температуры и влажности DHT22

Инфракрасный PIR датчик HC-SR501

Сирена 12В.

NodeMcu V3 Lua (ESP8266, CH340)

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

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

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

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


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

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

  1. Если "Датчик движения" или "Датчик открытия" сработал тогда замкнуть "Реле1" (это мы настраиваем в разделе Rules)
  2. Если "Реле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: '%'

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


Скриншот из HomeKit

Заключение

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

Смета: 

ESP8266 nodeMCU: 180р.

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

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

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

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

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

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

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


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? 
Мы в Telegram - @Soprut
Мы в Instagram - @Sprut666666

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Олег Челбаев (sprut)

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

  2. Илья Гитлин (iGitlin)

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

    • Дмитрий Батюшин (ReD)

      Вот мой конфиг, тут реле, движение, открытие, температура, влажность. а вообще можно любые девайсы по 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"

      }

      }

  3. (AlexPas)
    (AlexPas) год назад

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

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

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

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

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

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

    • Дмитрий Батюшин (ReD)

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

    • Дмитрий Батюшин (ReD)

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

    • (Locy)
      (Locy) отредактировано 2 месяца назад

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

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

  4. Renat Abdusalamov (Abdusalamov)

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

  5. (id210304325)
    (id210304325) год назад

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

  6. Дмитрий Батюшин (ReD)
    Дмитрий Батюшин (ReD) отредактировано год назад

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

  7. Илья Яшин (yshinig)
    Илья Яшин (yshinig) год назад

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

  8. Влад Изюмский (vladiziumski)
    Влад Изюмский (vladiziumski) отредактировано 11 месяцев назад

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

К списку статей

Скидки для сообщества

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Похожие статьи

04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
09 ноября 2018, 20:54
Кейс создания умного дома без каких либо прокладок в виде Raspberry pi
02 ноября 2018, 12:14
Кнопка звонка с уведомлениями в HomeKit
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
01 октября 2018, 07:43
Нативный HomeKit на ESP8266
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.