ESP32-Fingerprint/fingerprintdoor.yaml

268 lines
7.1 KiB
YAML

substitutions:
# -----------------------------
# Config
# -----------------------------
devicename: fingerprintdoor
reader_rx_pin: GPIO16
reader_tx_pin: GPIO17
reader_sensor_pin: GPIO5
door_sensor_pin: GPIO4
speed_flash: "100"
count_flash: "4"
speed_breath: "75"
count_breath: "7"
speed_gradual_off: "200"
speed_gradual_on: "35"
# --------------------------------------------------------
esphome:
name: $devicename
esp32:
board: nodemcu-32s
framework:
type: arduino
# Enable logging
logger:
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Fingerprintdoor Fallback Hotspot"
password: !secret ota_password
captive_portal:
web_server:
port: 80
# MQTT Actions
mqtt:
broker: !secret mqtt_ip
username: !secret mqtt_user
password: !secret mqtt_password
client_id: $devicename
id: mqtt_client
discovery: false
on_message: !include "includes/led_effects.yaml"
# Fingerpint functions
text_sensor:
# ENROLL
- platform: mqtt_subscribe
name: "MQTT Sub Fingerprint enroll"
id: mqtt_sub_enr
qos: 0
topic: $devicename/enroll
on_value:
- if:
condition:
lambda: 'return atoi(id(mqtt_sub_enr).state.c_str()) > 0;'
then:
- lambda: |-
ESP_LOGD("main", "Enroll Finger ID: %s", x.c_str());
- fingerprint_grow.aura_led_control:
state: BREATHING
speed: 100
color: WHITE
count: 4
- fingerprint_grow.enroll:
finger_id: !lambda return atoi(x.c_str());
num_scans: 2
- text_sensor.template.publish:
id: fingerprint_state
state: "Place a finger on the reader"
else:
- logger.log: "Error, try again!"
# CANCEL ENROLL
- platform: mqtt_subscribe
name: "MQTT Sub Fingerprint cancel"
id: mqtt_sub_abrt
qos: 0
topic: $devicename/cancel_enroll
on_value:
- text_sensor.template.publish:
id: fingerprint_state
state: "cancelling enrollment"
- fingerprint_grow.cancel_enroll:
# DELETE ID
- platform: mqtt_subscribe
name: "MQTT Sub Fingerprint delete"
id: mqtt_sub_del
qos: 0
topic: $devicename/delete
on_value:
- lambda: |-
ESP_LOGD("main", "Delete Finger ID: %s", x.c_str());
- fingerprint_grow.delete:
finger_id: !lambda return atoi(x.c_str());
# Update the template text sensor for visual feedback
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Deleted " + to_string(x.c_str());'
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 50
color: WHITE
count: 2
# DELETE ALL!!!
- platform: mqtt_subscribe
name: "MQTT Sub Fingerprint delete all"
id: mqtt_sub_del_all
qos: 0
topic: $devicename/deleteall
on_value:
- fingerprint_grow.delete_all:
# Update the template text sensor for visual feedback
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Deleted ALL";'
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 50
color: WHITE
count: 6
- platform: template
name: "Log Message"
id: fingerprint_state
#########################
sensor:
- platform: wifi_signal
name: "WiFi Signal Sensor"
update_interval: 90s
state_topic: $devicename/rssi
uart:
rx_pin: $reader_rx_pin
tx_pin: $reader_tx_pin
baud_rate: 57600
binary_sensor:
- platform: gpio
pin: $reader_sensor_pin
name: Touch Sensor
device_class: motion
state_topic: $devicename/touch
filters:
- invert:
#- delayed_on: 50ms
- delayed_off: 100ms
- delayed_on_off: 150ms
# Door Sensor - GPIO connected to GND over reed sensor
- platform: gpio
pin:
number: $door_sensor_pin
mode:
input: true
pullup: true
name: "Main Door"
device_class: window
filters:
- delayed_on: 10ms
# BUTTONS
button:
- platform: restart
name: "ESP Restart"
id: restart_button
fingerprint_grow:
sensing_pin: $reader_sensor_pin
on_finger_scan_matched:
- fingerprint_grow.aura_led_control:
state: BREATHING
speed: 200
color: GREEN
count: 1
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Authorized finger " + to_string(finger_id) + ", confidence " + to_string(confidence);'
# Pushing a tag_scanned event based on finger_id only if confidence is greater than 50
- if:
condition:
lambda: 'return confidence > 50;'
then:
- logger.log: "Matched höher 50"
# todo - push confidence and finger ID to MQTT
on_finger_scan_unmatched:
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: RED
count: 2
- text_sensor.template.publish:
id: fingerprint_state
state: "Unauthorized finger"
on_enrollment_scan:
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: BLUE
count: 2
- fingerprint_grow.aura_led_control:
state: ALWAYS_ON
speed: 0
color: PURPLE
count: 0
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Enrolling into slot " + to_string(finger_id) + ", scanned " + to_string(scan_num) + " time(s)"; '
on_enrollment_done:
- fingerprint_grow.aura_led_control:
state: BREATHING
speed: 100
color: BLUE
count: 2
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Enrolled into slot " + to_string(finger_id);'
on_enrollment_failed:
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: RED
count: 6
- if:
condition:
not:
# Checks if enroll canceled
text_sensor.state:
id: fingerprint_state
state: "cancelling enrollment"
then:
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Failed to enroll into slot " + to_string(finger_id);'
# Retry enrollment into the same slot
- delay: 3s
- text_sensor.template.publish:
id: fingerprint_state
state: !lambda 'return "Retrying enrollment into slot " + to_string(finger_id) + " in 3 seconds...";'
- delay: 3s
- fingerprint_grow.enroll: !lambda 'return finger_id;'
else:
- logger.log: "Enrollment aborted"
- text_sensor.template.publish:
id: fingerprint_state
state: "Enrollment canceled"