В прошлой статье я рассказывал о подключении модуля
RFID - PN532 в Home Assistant, но всегда носить с собой брелок или карту не очень удобно.
Сегодня рассмотрим подключение сканера отпечатка пальцев к умному дому, в моем случае это будет замок в гараж. Релейным модуль подключен к порту GPIO02 и включается на 1 секунду, время можно изменить в прошивке.
Это устройство может работать независимо от системы умного дома в сегменте Wi-Fi сети.
Поддерживаются оптические сенсоры FPM10A, R307, ZFM-20 и емкостные R503.
Я собрал на ESP32 и FPM10A, но с успехом можно применить любой модуль ESP8266.
Сборка сканера
Для сборки сканера нам понадобятся следующие компоненты:
Собираем по схеме

Интеграция в Home Assistant
Для подключения к серверу будем использовать аддон ESPHome. Переходим в раздел Supervisor - Add-on и устанавливаем.

Переходим в меню аддона и нажимаем зеленый плюс внизу страницы для добавления нашего нового устройства.

Запускается мастер установки, вносим данные нашей Wi-Fi сети, тип модуля и пароль для перепрошивки по воздуху ОТА



Подтверждаем кнопкой SUBMIT

После чего заходим в редактирование конфигурации созданного модуля

Очищаем и добавляем следующий код:
esphome:
name: fingerprint_lock
platform: ESP32
board: nodemcu-32s
wifi:
ssid: "Ваша сеть"
password: "Ваш пароль"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Fingerprint lock"
password: "Ваш пароль"
captive_portal:
# Enable logging
logger:
ota:
password: "Ваш пароль"
uart:
rx_pin: GPIO13
tx_pin: GPIO15
baud_rate: 57600
fingerprint_grow:
sensing_pin: GPIO12
on_finger_scan_matched:
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Authorized finger " + to_string(finger_id) + ", confidence " + to_string(confidence);'
- if:
condition:
lambda: 'return confidence > 50;'
then:
- homeassistant.tag_scanned: !lambda |-
switch (finger_id) {
case 0:
return "person_a";
case 1:
return "person_b";
default:
return "person_unknown";
}
- switch.turn_on: gate
- delay: 1000ms
- switch.turn_off: gate
on_finger_scan_unmatched:
- text_sensor.template.publish:
id: fingerprint_state
state: "Unauthorized finger"
on_enrollment_scan:
- text_sensor.template.publish:
id: fingerprint_state
state: "Finger scanned"
on_enrollment_done:
- text_sensor.template.publish:
id: fingerprint_state
state: "Enrolled fingerprint"
on_enrollment_failed:
- text_sensor.template.publish:
id: fingerprint_state
state: "Failed to enroll fingerprint"
# Optional template text sensor for visual feedback
text_sensor:
- platform: template
id: fingerprint_state
name: "Fingerprint State"
switch:
- platform: gpio
pin: GPIO02
id: gate
binary_sensor:
- platform: fingerprint_grow
id: fingerprint_enrolling
name: "Fingerprint Enrolling"
sensor:
- platform: fingerprint_grow
fingerprint_count:
name: "Fingerprint Count"
last_finger_id:
name: "Fingerprint Last Finger ID"
last_confidence:
name: "Fingerprint Last Confidence"
status:
name: "Fingerprint Status"
capacity:
name: "Fingerprint Capacity"
security_level:
name: "Fingerprint Security Level"
api:
password: Ваш пароль
services:
- service: enroll
variables:
finger_id: int
num_scans: int
then:
- fingerprint_grow.enroll:
finger_id: !lambda 'return finger_id;'
num_scans: !lambda 'return num_scans;'
- service: cancel_enroll
then:
- fingerprint_grow.cancel_enroll:
- service: delete
variables:
finger_id: int
then:
- fingerprint_grow.delete:
finger_id: !lambda 'return finger_id;'
- service: delete_all
then:
- fingerprint_grow.delete_all:
Не забываем прописать вашу сеть и пароли!
Сохраняем SAVE проверяем VALIDATE. Если ошибок нет, то можем прошивать.
Подключаем наш модуль ESP32 к Raspberry в usb порт, и в верхнем углу плагина выбираем появившийся Serial порт. Если до этого модуль прошивался по кабелю, то можно использовать прошивку по воздуху OTA.
После чего жмем UPLOAD. Происходит компиляция и прошивка. После чего, видим лог подключения к нашему устройству. Теперь модуль можно отключить от Raspberry и подключить в любому источнику 5 вольт.
Переходим в раздел Интеграции
И видим наше подключенное устройство.
Нажимаем на ссылку и переходим
Теперь добавим отпечатки пользователей, сами отпечатки хранятся в памяти сканера.
Для добавления переходим в раздел Панель разработчика - Службы, выбираем ESPHome: fingerprint_lock_enroll, долее в поле finger_id пишем порядковый номер ячейки начиная с 0, всего в память сканера FPM10A поместится 150 отпечатков.
Количество сканирования я ставлю 2, для оптического сканера этого достаточно.
Нажимаем вызвать службу.
В логе ESPHome видим следующее:

Касаемся сенсора пальцем несколько раз (сколько прописали в службе) и видим, что добавление успешно.
Так же поступаем с другими пользователями.
После добавления необходимо вызвать службу для отключения записи.
В своем конфиге я добавил возможность фиксации пользователя средствами HA. Для каждой ячейки памяти в сканере предусмотрено свое имя пользователя.
У меня всего два пользователя, вы можете добавить еще, для каждой ячейки.
- if:
condition:
lambda: 'return confidence > 50;'
then:
- homeassistant.tag_scanned: !lambda |-
switch (finger_id) {
case 0:
return "person_a";
case 1:
return "person_b";
default:
return "person_unknown";
}
В настройках HA появляется пункт Метки переходим в него.
Кликнув на шестеренку, задаем имя. Здесь же можно создать автоматизацию для каждого пользователя.