[Умный дом, DIY или Сделай сам] Делаем систему контроля и управления доступом (СКУД) для умного дома
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
ВведениеПримерно год назад я начал готовиться к переезду и собирать прототип умного дома. В качестве системы управления я выбрал наиболее популярное на текущий момент и активно развивающееся решение - 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 контактов)
RFID/NFC модуль PN532. Китайцы скопировали версию от Elechouse.Корпус мне намечал друг, у которого есть 3D-принтер. Хаб и датчики от Xiaomi вынесем за скобки. Остальные элементы покупались на Aliexpress и суммарно обошлись мне в 600 рублей.Подключение и настройка ESPДля начала переключим NFC-модуль в режим работы через интерфейс SPI. Ставим первый переключатель в нижнее положение (ближе к цифре 1), а второй - в верхнее (ближе к буквам). Припаиваем гребёнку на 8 контактов и готовим соединительные провода.
Включенный режим I2C и подключенные соединительные проводаНасколько я понял из распиновки, возможно несколько вариантов подключения NFC-модуля к ESP-32: мне было удобнее подключить всё на одну сторону. Если будете использовать другие контакты, внимательно проверяйте конфиг - возможно, он немного изменится.
Распиновка для 30-контактной ESP-32Подключаем модуль следующим образом (слева ESP, справа PN532):
- GPIO18 - SKC
- GPIO19 - MSO
- GPIO23 - MOSI
- GPIO5 - SS
- 3V3 - VCC
- GND - GND
PN532 подключенная к ESP-32На следующем этапе нам нужно установить аддон 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, поэтому их можно использовать в автоматизациях. Даже синий диод в условиях коридора должен быть виден.
Основа, на которую ложатся платы, и прищепка (слева) для того, чтобы закрепить PN532
К ESP подключается кабель питания, поэтому она не должна болтаться внутри корпуса.Ух, наконец-то закончил. Спасибо, что дочитали до конца. Надеюсь, что этот гайд помог вам!Если возникнут какие-то вопросы, задавайте в комментариях. Постараюсь ответить.
===========
Источник:
habr.com
===========
Похожие новости:
- [Умный дом, Интернет вещей, IT-компании] «Сбер» запускает платформу умного дома
- [Умный дом, Интернет вещей, DIY или Сделай сам] Умный дом с нуля своими руками или путешествие длинною в год
- [Разработка на Raspberry Pi, Умный дом, Интернет вещей, Микросервисы] Первый опыт с Raspberry Pi или микросервисы для дома
- [Гаджеты, Умный дом, Физика, Звук] Физика звука? Что такое громкость? Разбор
- [Разработка под Arduino, 3D-принтеры, DIY или Сделай сам] Почему первый 3D-принтер стоит собирать самому
- [Умный дом] Как я переделываю недиммируемые светодиодные светильники в диммируемые. Пост первый
- [Научно-популярное, Умный дом, Интернет вещей, DIY или Сделай сам, Здоровье] О спасении от удушья в своей квартире или лонгрид о современной вентиляции
- [Производство и разработка электроники, История IT, Старое железо] Легенда на ладони: создаём крошечный компьютер PDP11 (перевод)
- [Умный дом, Интернет вещей, DIY или Сделай сам] Cчетчик газа в Home Assistant без паяльника
- [Развитие стартапа, Патентование, Бизнес-модели, Смартфоны, Умный дом] Nothing Technologies выкупила активы бренда смартфонов Essential
Теги для поиска: #_umnyj_dom (Умный дом), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_esp32, #_home_assistant, #_pn532, #_signalizatsija (сигнализация), #_umnyj_dom (
Умный дом
), #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:30
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
ВведениеПримерно год назад я начал готовиться к переезду и собирать прототип умного дома. В качестве системы управления я выбрал наиболее популярное на текущий момент и активно развивающееся решение - Home Assistant. По мере обрастания умного дома датчиками встал вопрос об охранной системе, которая в случае чего поднимет тревогу и сообщит мне (соседям) о незваных гостях. В системе от частных охранных предприятий пока не вижу необходимости, поэтому решил сделать всё сам.Как это работает: на входной двери размещён датчик открытия, который по протоколу Zigbee сообщает серверу умного дома, что кто-то зашёл в квартиру. Срабатывает сигнализация в "тихом режиме" (событие "triggered" во встроенной интеграции; это никак не проявляется, но идёт обратный отсчёт до запуска сирены). Если за указанное в настройках время не снять блокировку (через ввод кода или NFC-меткой), запустится сирена и световая индикация.Из чего собрано:
ESP32 WROOM DevKit v1 (30 контактов) RFID/NFC модуль PN532. Китайцы скопировали версию от Elechouse.Корпус мне намечал друг, у которого есть 3D-принтер. Хаб и датчики от Xiaomi вынесем за скобки. Остальные элементы покупались на Aliexpress и суммарно обошлись мне в 600 рублей.Подключение и настройка ESPДля начала переключим NFC-модуль в режим работы через интерфейс SPI. Ставим первый переключатель в нижнее положение (ближе к цифре 1), а второй - в верхнее (ближе к буквам). Припаиваем гребёнку на 8 контактов и готовим соединительные провода. Включенный режим I2C и подключенные соединительные проводаНасколько я понял из распиновки, возможно несколько вариантов подключения NFC-модуля к ESP-32: мне было удобнее подключить всё на одну сторону. Если будете использовать другие контакты, внимательно проверяйте конфиг - возможно, он немного изменится. Распиновка для 30-контактной ESP-32Подключаем модуль следующим образом (слева ESP, справа PN532):
PN532 подключенная к ESP-32На следующем этапе нам нужно установить аддон 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" [17:42:35][D][pn532:149]: Found new tag '79-EB-08-B4'
alarm_control_panel:
- platform: manual code: !secret alarm_pin code_arm_required: false # Задержка перед постановкой на охрану arming_time: 5 # Задержка перед запуском сигнализации delay_time: 10 # Время сигнализации trigger_time: 600 - type: alarm-panel
name: Сигнализация entity: alarm_control_panel.ha_alarm states: - arm_away
- 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 - 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 - 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 - 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 Основа, на которую ложатся платы, и прищепка (слева) для того, чтобы закрепить PN532 К ESP подключается кабель питания, поэтому она не должна болтаться внутри корпуса.Ух, наконец-то закончил. Спасибо, что дочитали до конца. Надеюсь, что этот гайд помог вам!Если возникнут какие-то вопросы, задавайте в комментариях. Постараюсь ответить. =========== Источник: habr.com =========== Похожие новости:
Умный дом ), #_diy_ili_sdelaj_sam ( DIY или Сделай сам ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:30
Часовой пояс: UTC + 5