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