Русский
Русский
English
Статистика
Реклама

Делаем систему контроля и управления доступом (СКУД) для умного дома

Введение

Примерно год назад я начал готовиться к переезду и собирать прототип умного дома. В качестве системы управления я выбрал наиболее популярное на текущий момент и активно развивающееся решение - Home Assistant. По мере обрастания умного дома датчиками встал вопрос об охранной системе, которая в случае чего поднимет тревогу и сообщит мне (соседям) о незваных гостях. В системе от частных охранных предприятий пока не вижу необходимости, поэтому решил сделать всё сам.

Как это работает: на входной двери размещён датчик открытия, который по протоколу Zigbee сообщает серверу умного дома, что кто-то зашёл в квартиру. Срабатывает сигнализация в "тихом режиме" (событие "triggered" во встроенной интеграции; это никак не проявляется, но идёт обратный отсчёт до запуска сирены). Если за указанное в настройках время не снять блокировку (через ввод кода или NFC-меткой), запустится сирена и световая индикация.

Из чего собрано:

  • ESP32 WROOM DevKit v1 (в теории можно заменить любой ESP, изменив конфиг под неё)

  • RFID/NFC модуль PN532

  • Соединительные провода (6 штук)

  • Напечатанный на 3D-принтере корпус

  • Xiaomi Gateway 2 (который с локальным управлением) я планирую использовать как динамик и световую индикацию

  • Датчик открытия двери от Aqara

  • Опционально можно добавить люстру, LED-ленты, умные колонки и любые другие устройства на ваш вкус, цвет и возможности автоматизаций Home Assistant.

ESP32 WROOM DevKit v1 (30 контактов)ESP32 WROOM DevKit v1 (30 контактов)RFID/NFC модуль PN532. Китайцы скопировали версию от Elechouse.RFID/NFC модуль PN532. Китайцы скопировали версию от Elechouse.

Корпус мне намечал друг, у которого есть 3D-принтер. Хаб и датчики от Xiaomi вынесем за скобки. Остальные элементы покупались на Aliexpress и суммарно обошлись мне в 600 рублей.

Подключение и настройка ESP

Для начала переключим NFC-модуль в режим работы через интерфейс SPI. Ставим первый переключатель в нижнее положение (ближе к цифре 1), а второй - в верхнее (ближе к буквам). Припаиваем гребёнку на 8 контактов и готовим соединительные провода.

Включенный режим I2C и подключенные соединительные проводаВключенный режим I2C и подключенные соединительные провода

Насколько я понял из распиновки, возможно несколько вариантов подключения NFC-модуля к ESP-32: мне было удобнее подключить всё на одну сторону. Если будете использовать другие контакты, внимательно проверяйте конфиг - возможно, он немного изменится.

Распиновка для 30-контактной ESP-32Распиновка для 30-контактной ESP-32

Подключаем модуль следующим образом (слева ESP, справа PN532):

  • GPIO18 - SKC

  • GPIO19 - MSO

  • GPIO23 - MOSI

  • GPIO5 - SS

  • 3V3 - VCC

  • GND - GND

PN532 подключенная к ESP-32PN532 подключенная к ESP-32

На следующем этапе нам нужно установить аддон ESPHome и настроить нашу ESP-32. Подробно расписывать базовые моменты не буду, рекомендую следовать данному видео:

Остановлюсь лишь на итоговом конфиге:

esphome:  name: esp32  platform: ESP32  board: nodemcu-32swifi:  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 logginglogger:# Enable Home Assistant APIapi:  password: "mypassword"ota:  password: "mypassword"web_server:  port: 80spi:  clk_pin: GPIO18  miso_pin: GPIO19  mosi_pin: GPIO23pn532_spi:  cs_pin: GPIO5  update_interval: 1sesp32_ble_tracker:switch:  - platform: gpio    name: "ESP LED"    pin:      number: GPIO2      mode: OUTPUTbinary_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, поэтому их можно использовать в автоматизациях. Даже синий диод в условиях коридора должен быть виден.

Основа, на которую ложатся платы, и прищепка (слева) для того, чтобы закрепить PN532Основа, на которую ложатся платы, и прищепка (слева) для того, чтобы закрепить PN532К ESP подключается кабель питания, поэтому она не должна болтаться внутри корпуса.К ESP подключается кабель питания, поэтому она не должна болтаться внутри корпуса.

Ух, наконец-то закончил. Спасибо, что дочитали до конца. Надеюсь, что этот гайд помог вам!

Если возникнут какие-то вопросы, задавайте в комментариях. Постараюсь ответить.

Источник: habr.com
К списку статей
Опубликовано: 20.02.2021 20:08:41
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Умный дом

Diy или сделай сам

Esp32

Home assistant

Pn532

Сигнализация

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru