Введение
Примерно год назад я начал готовиться к переезду и собирать прототип умного дома. В качестве системы управления я выбрал наиболее популярное на текущий момент и активно развивающееся решение — Home Assistant. По мере обрастания умного дома датчиками встал вопрос об охранной системе, которая в случае чего поднимет тревогу и сообщит мне (соседям) о незваных гостях. В системе от частных охранных предприятий пока не вижу необходимости, поэтому решил сделать всё сам.
Как это работает: на входной двери размещён датчик открытия, который по протоколу Zigbee сообщает серверу умного дома, что кто-то зашёл в квартиру. Срабатывает сигнализация в «тихом режиме» (событие «triggered» во встроенной интеграции; это никак не проявляется, но идёт обратный отсчёт до запуска сирены). Если за указанное в настройках время не снять блокировку (через ввод кода или NFC-меткой), запустится сирена и световая индикация.
Из чего собрано:
-
ESP32 WROOM DevKit v1 (в теории можно заменить любой ESP, изменив конфиг под неё)
-
RFID/NFC модуль PN532
-
Соединительные провода (6 штук)
-
Напечатанный на 3D-принтере корпус
-
Xiaomi Gateway 2 (который с локальным управлением) я планирую использовать как динамик и световую индикацию
-
Датчик открытия двери от Aqara
-
Опционально можно добавить люстру, LED-ленты, умные колонки и любые другие устройства на ваш вкус, цвет и возможности автоматизаций Home Assistant.
Корпус мне намечал друг, у которого есть 3D-принтер. Хаб и датчики от Xiaomi вынесем за скобки. Остальные элементы покупались на Aliexpress и суммарно обошлись мне в 600 рублей.
Подключение и настройка ESP
Для начала переключим NFC-модуль в режим работы через интерфейс SPI. Ставим первый переключатель в нижнее положение (ближе к цифре 1), а второй — в верхнее (ближе к буквам). Припаиваем гребёнку на 8 контактов и готовим соединительные провода.
Насколько я понял из распиновки, возможно несколько вариантов подключения NFC-модуля к ESP-32: мне было удобнее подключить всё на одну сторону. Если будете использовать другие контакты, внимательно проверяйте конфиг — возможно, он немного изменится.
Подключаем модуль следующим образом (слева ESP, справа PN532):
-
GPIO18 — SKC
-
GPIO19 — MSO
-
GPIO23 — MOSI
-
GPIO5 — SS
-
3V3 — VCC
-
GND — GND
На следующем этапе нам нужно установить аддон ESPHome и настроить нашу ESP-32. Подробно расписывать базовые моменты не буду, рекомендую следовать данному видео:
Остановлюсь лишь на итоговом конфиге:
esphome: name: esp32 platform: ESP32 board: nodemcu-32s wifi: ssid: "My Wi-Fi" password: "mypassword" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Esp32 Fallback Hotspot" password: "mypassword" captive_portal: # Enable logging logger: # Enable Home Assistant API api: password: "mypassword" ota: password: "mypassword" web_server: port: 80 spi: clk_pin: GPIO18 miso_pin: GPIO19 mosi_pin: GPIO23 pn532_spi: cs_pin: GPIO5 update_interval: 1s esp32_ble_tracker: switch: - platform: gpio name: "ESP LED" pin: number: GPIO2 mode: OUTPUT binary_sensor: - platform: pn532 uid: 79-EB-08-B4 name: "NFC Card"
Обратите внимание на блоки spi и pn532_spi, где мы указывает контакты подключения. В блоке switch я задействовал светодиод на плате (им можно мигать, например, при поднесении валидной метки), а в блоке binary_sensor создал сущность для Home Assistant (при поднесении карты с указанным uid сенсор переходит в статус true; uid карты можно найти в логах вашей ESP в аддоне ESPHome). Как показали опыты, можно читать RFID-метки, банковские карты и тройку. NFC в моём телефоне нет, но скорее всего и он будет работать.
Компилируем прошивку и выгружаем её на ESP. Проверяем, что всё работает, открыв логи и поднеся к считывателю RFID-метку. Её uid должен отобразиться в логе:
[17:42:35][D][pn532:149]: Found new tag '79-EB-08-B4'
Со стороны ESP всё готово, теперь нужно настроить автоматизации в Home Assistan
Подключение сигнализации в Home Assistant
Для работы в сигнализацией в Home Assistant есть встроенная интеграция и карточка Lovelace. Начнём с интеграции — чтобы её включить, нужно добавить в configuration.yaml следующий блок:
alarm_control_panel: - platform: manual code: !secret alarm_pin code_arm_required: false # Задержка перед постановкой на охрану arming_time: 5 # Задержка перед запуском сигнализации delay_time: 10 # Время сигнализации trigger_time: 600
Код для разблокировки я вынес в отдельный файл secrets.yaml. Почитать, как он устроен, можно тут.
Поскольку мы тестируем нашу СКУД, arming_time (время до включения режима охраны, за которое вы успеете выйти из квартиры и закрыть дверь) и delay_time (время после срабатывания датчика двери, через которое запустится сирена) зададим как 5 и 10 секунд соответственно. Сохраняем, перезагружаем Home Assistant.
Далее создаём карточку сигнализации в Lovelace, добавив код в нужное вам место ui-lovelace.yaml
- type: alarm-panel name: Сигнализация entity: alarm_control_panel.ha_alarm states: - arm_away
В entity указываем название объекта, который создался после подключения alarm_control_panel. В states можно указать, какие кнопки будут в карточке: я оставил только «Охрана (не дома)».
Автоматизация
Чтобы связать NFC-метки с нашим умным домом, потребуется создать 5 автоматизаций:
-
Срабатывание сигнализации (запускается, когда мы заходим в квартиру)
-
Включение режима охраны (прикладываем метку и уходим из дома)
-
Отключение режима охраны (прикладываем метку, когда пришли домой)
-
Включение сирены
-
Отключение сирены
Срабатывание сигнализации
В качестве триггера используется датчик открытия двери. Когда дверь открывается при условии, что включен режим охраны, запускается наша автоматизация. В блоке с действиями я задал мигание шлюзом Xiaomi и диодом на ESP-32. Вы можете использовать любые другие действия.
- id: '3-0001' alias: 'Срабатывание сигнализации' trigger: platform: state entity_id: binary_sensor.158d000446f3fe_contact to: 'on' condition: - condition: state entity_id: alarm_control_panel.ha_alarm state: armed_away action: - service: alarm_control_panel.alarm_trigger entity_id: alarm_control_panel.ha_alarm - repeat: sequence: - service: light.turn_on data: entity_id: light.gateway_light_44237c82f751 color_name: red brightness: 255 - service: switch.turn_on entity_id: switch.esp_led - delay: milliseconds: 500 - service: light.turn_off entity_id: light.gateway_light_44237c82f751 - service: switch.turn_off entity_id: switch.esp_led - delay: milliseconds: 500 until: condition: or conditions: - condition: state entity_id: alarm_control_panel.ha_alarm state: armed_away - condition: state entity_id: alarm_control_panel.ha_alarm state: disarmed
Включение режима охраны
Триггер — чтение метки с заданным на этапе настройки ESP uid. Пока мы выходим из квартиры, шлюз мигает оранжевым светом. После того, как включился режим охраны, загорается диод на ESP, а шлюз включает статичный красный свет на 3 секунды и гаснет.
- id: '3-0002' alias: 'Включение режима охраны' trigger: platform: state entity_id: binary_sensor.nfc_card to: 'on' condition: - condition: state entity_id: alarm_control_panel.ha_alarm state: disarmed action: - service: alarm_control_panel.alarm_arm_away entity_id: alarm_control_panel.ha_alarm - repeat: sequence: - service: light.turn_on data: entity_id: light.gateway_light_44237c82f751 color_name: orange brightness: 255 - service: switch.turn_on entity_id: switch.esp_led - delay: milliseconds: 500 - service: light.turn_off entity_id: light.gateway_light_44237c82f751 - service: switch.turn_off entity_id: switch.esp_led - delay: milliseconds: 500 until: - condition: state entity_id: alarm_control_panel.ha_alarm state: armed_away - service: switch.turn_on entity_id: switch.esp_led - service: light.turn_on data: entity_id: light.gateway_light_44237c82f751 color_name: red brightness: 255 - delay: seconds: 3 - service: light.turn_off entity_id: light.gateway_light_44237c82f751
Отключение режима охраны
В этой автоматизации в качестве триггера снова используется RFID-метка. Условием является включенный или включающийся режим охраны. Последний предусмотрен на случай, если собрались уходить из дома, приложили карточку и вспомнили про включенный утюг. При валидной метке коротко включается диод на ESP и зелёная подсветка на шлюзе.
- id: '3-0003' alias: 'Отключение режима охраны' trigger: platform: state entity_id: binary_sensor.nfc_card to: 'on' condition: condition: or conditions: - condition: state entity_id: alarm_control_panel.ha_alarm state: armed_away - condition: state entity_id: alarm_control_panel.ha_alarm state: pending action: - service: alarm_control_panel.alarm_disarm data: entity_id: alarm_control_panel.ha_alarm code: !secret alarm_pin - delay: milliseconds: 100 - service: switch.turn_off entity_id: switch.esp_led - service: light.turn_on data: entity_id: light.gateway_light_44237c82f751 color_name: green brightness: 255 - delay: seconds: 3 - service: light.turn_off entity_id: light.gateway_light_44237c82f751
Включение сирены
Пока что я не особо заморачивался с индикацией, поэтому в автоматизации только сирена из встроенных звуков шлюза. В будущем планирую дополнительно выводить звук на умную колонку и мигать люстрой.
- id: '3-0004' alias: 'Запуск звука сигнализации' trigger: - platform: state entity_id: alarm_control_panel.ha_alarm to: 'triggered' action: - service: xiaomi_aqara.play_ringtone data: gw_mac: 44237C82F751 ringtone_id: 0 ringtone_vol: 3
Отключение сирены
От «отключения режима охраны» отличается лишь условием по статусу alarm_control_panel.ha_alarm (здесь triggered) и отключением сирены или другой индикации.
- id: '3-0005' alias: 'Отключение сигнализации' trigger: platform: state entity_id: binary_sensor.nfc_card to: 'on' condition: - condition: state entity_id: alarm_control_panel.ha_alarm state: triggered action: - service: alarm_control_panel.alarm_disarm data: entity_id: alarm_control_panel.ha_alarm code: !secret alarm_pin - service: xiaomi_aqara.stop_ringtone data: gw_mac: 44237C82F751 - delay: milliseconds: 500 - service: switch.turn_off entity_id: switch.esp_led - service: light.turn_on data: entity_id: light.gateway_light_44237c82f751 color_name: green brightness: 255 - delay: seconds: 3 - service: light.turn_off entity_id: light.gateway_light_44237c82f751
Красивая обёртка
Наверное, очевидно, что две платы без какого-либо корпуса выглядят не очень красиво и безопасно. Я попросил другая спроектировать и напечатать под них корпус. Цвет выбрали белый, чтобы подходил под будущий интерьер. Уже после печати я понял, что белый корпус не гасит свет диодов на ESP, поэтому их можно использовать в автоматизациях. Даже синий диод в условиях коридора должен быть виден.
Ух, наконец-то закончил. Спасибо, что дочитали до конца. Надеюсь, что этот гайд помог вам!
Если возникнут какие-то вопросы, задавайте в комментариях. Постараюсь ответить.
ссылка на оригинал статьи https://habr.com/ru/post/543446/
Добавить комментарий