🚘 Garage Fingerprint Sensor

Hi, i like your card, but i have the same problems.
Can You share your solution ? scripts ?
Thanks

Is there a way to change the ā€œsecurity_levelā€ ? I’m having a problem where the sensor rejects a lot of fingerprints it should approve so I’m thinking of lowering the safetylevel to get less False Rejection Rate (FRR).

I can’t find how the yaml should look like to set the security_level. Any ideas?

See this:

Hello
Do you think it is possible to add an additional RFID reader with this code?
it’s adonno tag reader ?

like this video ?

https://www.youtube.com/watch?v=lx3SpkEEaVg

ANd for the fun an oled display.

it was for my doorbell project

wifi:
# networks:
#    - ssid: 'REPLACEME'          # Enter your WiFi SSID here. Example: `ssid: 'your_network_name'`
#      password: 'REPLACEME'      # Enter your wifi password here. Example: `password: 'abcde123456'`
  ap:
    ssid: ${name}

# Enable the captive portal for inital WiFi setup
captive_portal:

dashboard_import:
  package_import_url: github://adonno/tagreader/tagreader.yaml

improv_serial:


substitutions:
  name: tagreader
  friendly_name: TagReader

esphome:
  name: $name
  platform: ESP8266
  board: d1_mini

  # Automatically add the mac address to the name
  # so you can use a single firmware for all devices
  name_add_mac_suffix: true

  # This will allow for (future) project identification,
  # configuration and updates.
  project:
    name: adonno.tag_reader
    version: "1.4"
# If buzzer is enabled, notify on api connection success
  on_boot:
    priority: -10
    then:
    - wait_until:
        api.connected:
    - logger.log: API is connected!
    - rtttl.play: "success:d=24,o=5,b=100:c,g,b"
    - light.turn_on:
        id: activity_led
        brightness: 100%
        red: 0%
        green: 0%
        blue: 100%
        flash_length: 500ms
    - switch.turn_on: buzzer_enabled
    - switch.turn_on: led_enabled

# Define switches to control LED and buzzer from HA
switch:
- platform: template
  name: "${friendly_name} Buzzer Enabled"
  id: buzzer_enabled
  icon: mdi:volume-high
  optimistic: true
  restore_mode: RESTORE_DEFAULT_ON
  entity_category: config
- platform: template
  name: "${friendly_name} LED enabled"
  id: led_enabled
  icon: mdi:alarm-light-outline
  optimistic: true
  restore_mode: RESTORE_DEFAULT_ON
  entity_category: config
  
# Define buttons for writing tags via HA 
button:
  - platform: template
    name: Write Tag Random
    id: write_tag_random
    # Optional variables:
    icon: "mdi:pencil-box"
    on_press:
      then:
      - light.turn_on:
          id: activity_led
          brightness: 100%
          red: 100%
          green: 0%
          blue: 100%    
      - lambda: |-
          static const char alphanum[] = "0123456789abcdef";
          std::string uri = "https://www.home-assistant.io/tag/";
          for (int i = 0; i < 8; i++)
            uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)];
          uri += "-";
          for (int j = 0; j < 3; j++) {
            for (int i = 0; i < 4; i++)
              uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)];
            uri += "-";
          }
          for (int i = 0; i < 12; i++)
            uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)];
          auto message = new nfc::NdefMessage();
          message->add_uri_record(uri);
          ESP_LOGD("tagreader", "Writing payload: %s", uri.c_str());
          id(pn532_board).write_mode(message);
      - rtttl.play: "write:d=24,o=5,b=100:b"
      - wait_until:
          not:
            pn532.is_writing:
      - light.turn_off:
          id: activity_led
      - rtttl.play: "write:d=24,o=5,b=100:b,b"
  - platform: template
    name: Clean Tag
    id: clean_tag
    icon: "mdi:nfc-variant-off"
    on_press:
      then:
      - light.turn_on:
          id: activity_led
          brightness: 100%
          red: 100%
          green: 64.7%
          blue: 0%    
      - lambda: 'id(pn532_board).clean_mode();'
      - rtttl.play: "write:d=24,o=5,b=100:b"
      - wait_until:
          not:
            pn532.is_writing:
      - light.turn_off:
          id: activity_led
      - rtttl.play: "write:d=24,o=5,b=100:b,b"
  - platform: template
    name: Cancel writing 
    id: cancel_writing
    icon: "mdi:pencil-off"
    on_press:
      then:
      - lambda: 'id(pn532_board).read_mode();'
      - light.turn_off:
          id: activity_led
      - rtttl.play: "write:d=24,o=5,b=100:b,b"

  - platform: restart
    name: "${friendly_name} Restart"
    entity_category: config
# Enable logging
logger:
  # level: VERY_VERBOSE
  # level: VERBOSE

# Enable Home Assistant API
api:
  services:
  - service: rfidreader_tag_ok
    then:
    - rtttl.play: "beep:d=16,o=5,b=100:b"

  - service: rfidreader_tag_ko
    then:
    - rtttl.play: "beep:d=8,o=5,b=100:b"

  - service: play_rtttl
    variables:
      song_str: string
    then:
    - rtttl.play: !lambda 'return song_str;'

  - service: write_tag_id
    variables:
      tag_id: string
    then:
    - light.turn_on:
        id: activity_led
        brightness: 100%
        red: 100%
        green: 0%
        blue: 0%    
    - lambda: |-
        auto message = new nfc::NdefMessage();
        std::string uri = "https://www.home-assistant.io/tag/";
        uri += tag_id;
        message->add_uri_record(uri);
        id(pn532_board).write_mode(message);
    - rtttl.play: "write:d=24,o=5,b=100:b"
    - wait_until:
        not:
          pn532.is_writing:
    - light.turn_off:
        id: activity_led
    - rtttl.play: "write:d=24,o=5,b=100:b,b"

  - service: write_music_tag
    variables:
      music_url: string
      music_info: string
    then:
    - light.turn_on:
        id: activity_led
        brightness: 100%
        red: 100%
        green: 0%
        blue: 0%    
    - lambda: |-
        auto message = new nfc::NdefMessage();
        std::string uri = "";
        std::string text = "";
        uri += music_url;
        text += music_info;
        if ( music_url != "" ) {
          message->add_uri_record(uri);
        }
        if ( music_info != "" ) {
          message->add_text_record(text);
        }
        id(pn532_board).write_mode(message);
    - rtttl.play: "write:d=24,o=5,b=100:b"
    - wait_until:
        not:
          pn532.is_writing:
    - light.turn_off:
        id: activity_led
    - rtttl.play: "write:d=24,o=5,b=100:b,b"

# Enable OTA upgrade
ota:
  - platform: esphome

i2c:
  scan: False
  frequency: 400kHz

globals:
  - id: source
    type: std::string
  - id: url
    type: std::string
  - id: info
    type: std::string

pn532_i2c:
  id: pn532_board
  on_tag:
    then:
    - if:
        condition:
          switch.is_on: led_enabled
        then:
        - light.turn_on:
            id: activity_led
            brightness: 100%
            red: 0%
            green: 100%
            blue: 0%
            flash_length: 500ms
    
    - delay: 0.15s #to fix slow component
        
    - lambda: |-
        id(source)="";
        id(url)="";
        id(info)="";
        if (tag.has_ndef_message()) {
          auto message = tag.get_ndef_message();
          auto records = message->get_records();
          for (auto &record : records) {
            std::string payload = record->get_payload();
            std::string type = record->get_type();
            size_t hass = payload.find("https://www.home-assistant.io/tag/");
            size_t applemusic = payload.find("https://music.apple.com");
            size_t spotify = payload.find("https://open.spotify.com");
            size_t sonos = payload.find("sonos-2://");

            size_t mass_deezer = payload.find("deezer://");
            size_t mass_filesystem_local = payload.find("filesystem_local://");
            size_t mass_filesystem_smb = payload.find("filesystem_smb://");
            size_t mass_plex = payload.find("plex://");
            size_t mass_qobuz = payload.find("qobuz://");
            size_t mass_radiobrowser = payload.find("radiobrowser://");
            size_t mass_soundcloud = payload.find("soundcloud://");
            size_t mass_spotify = payload.find("spotify://");
            size_t mass_tidal = payload.find("tidal://");
            size_t mass_tunein = payload.find("tunein://");
            size_t mass_ytmusic = payload.find("ytmusic://");

            if (type == "U" and hass != std::string::npos ) {
              ESP_LOGD("tagreader", "Found Home Assistant tag NDEF");
              id(source)="hass";
              id(url)=payload;
              id(info)=payload.substr(hass + 34);
            }
            else if (type == "U" and applemusic != std::string::npos ) {
              ESP_LOGD("tagreader", "Found Apple Music tag NDEF");
              id(source)="amusic";
              id(url)=payload;
            }
            else if (type == "U" and spotify != std::string::npos ) {
              ESP_LOGD("tagreader", "Found Spotify tag NDEF");
              id(source)="spotify";
              id(url)=payload;
            }
            else if (type == "U" and sonos != std::string::npos ) {
              ESP_LOGD("tagreader", "Found Sonos app tag NDEF");
              id(source)="sonos";
              id(url)=payload;
            }
            else if (type == "U" && (mass_deezer != std::string::npos ||
                    mass_filesystem_local != std::string::npos ||
                    mass_filesystem_smb != std::string::npos ||
                    mass_plex != std::string::npos ||
                    mass_qobuz != std::string::npos ||
                    mass_radiobrowser != std::string::npos ||
                    mass_soundcloud != std::string::npos ||
                    mass_spotify != std::string::npos ||
                    mass_tidal != std::string::npos ||
                    mass_tunein != std::string::npos ||
                    mass_ytmusic != std::string::npos)) {
              ESP_LOGD("tagreader", "Found Music Assistant tag NDEF");
              id(source) = "mass";
              id(url) = payload;
            }
            else if (type == "T" ) {
              ESP_LOGD("tagreader", "Found music info tag NDEF");
              id(info)=payload;
            }
            else if ( id(source)=="" ) {
              id(source)="uid";
            }
          }
        }
        else {
          id(source)="uid";
        }
    
    - if:
        condition:
          lambda: 'return ( id(source)=="uid" );'
        then:
          - homeassistant.tag_scanned: !lambda |-
              ESP_LOGD("tagreader", "No HA NDEF, using UID");
              return x;
        else:
        - if:
            condition:
              lambda: 'return ( id(source)=="hass" );'
            then:
            - homeassistant.tag_scanned: !lambda 'return id(info);'
            else:
            - homeassistant.event:
                event: esphome.music_tag
                data:
                  reader: !lambda |-
                    return App.get_name().c_str();
                  source: !lambda |-
                    return id(source);
                  url: !lambda |-
                    return id(url);
                  info: !lambda |-
                    return id(info);
    
    - if:
        condition:
          switch.is_on: buzzer_enabled
        then:
        - rtttl.play: "success:d=24,o=5,b=100:c,g,b"
  on_tag_removed:
    then:
    - homeassistant.event:
        event: esphome.tag_removed
# Define the buzzer output
output:
- platform: esp8266_pwm
  pin: D7
  id: buzzer

binary_sensor:
  - platform: status
    name: "${friendly_name} Status"
    entity_category: diagnostic


text_sensor:
  - platform: version
    hide_timestamp: true
    name: "${friendly_name} ESPHome Version"
    entity_category: diagnostic
  - platform: wifi_info
    ip_address:
      name: "${friendly_name} IP Address"
      icon: mdi:wifi
      entity_category: diagnostic
    ssid:
      name: "${friendly_name} Connected SSID"
      icon: mdi:wifi-strength-2
      entity_category: diagnostic

# Define buzzer as output for RTTTL
rtttl:
  output: buzzer

# Configure LED
light:
- platform: neopixelbus
  variant: WS2812
  pin: D8
  num_leds: 1
  flash_transition_length: 500ms
  type: GRB
  id: activity_led
  name: "${friendly_name} LED"
  restore_mode: ALWAYS_OFF

Hi,
I got the R502 running and it is working.
Now I have two questions:

  • What does the status mean? Fingerprint Status is always 4 in my case.
  • I often get ā€œFinger Misplacedā€. Is there a way to adjust some settings within the sensor to improve this?

Hallo together,
i also tried my luck to use the R503 sensor with an ESP-board.
Actually i have the problem beeing not able to enroll fingerprints.
The sensor always gives feedback ā€œFinger Misplacedā€.
Additionally there comes a message ā€œComponent fingerprint_grow took a long time for an operationā€

I guess the communication in all directions are ok, because the logs in the HA, the logs in the ESP-logger and the bahaviour of the sensor-LEDs are matching, that means the ā€œFinger presentā€ message leads to a ā€œ1 slow blue flashingā€ and the ā€œFinger misplacedā€ message leads to ā€œ2 fast red flashingsā€.

Following is used:

  • R503 fingerprint sensor
  • ESP 8266ex board
  • ESPHome Device Compiler 2024.11.1
  • HA-Core 2024.11.3
  • HA-Supervisor 2024.11.4

here the ESP-log as screenshot

…ESP-log as text

INFO ESPHome 2024.11.1
INFO Reading configuration /config/esphome/fingerscan.yaml...
INFO Starting log output from 192.168.xxx.xxx using esphome API
INFO Successfully connected to fingerscan @ 192.168.xxx.xxx in 0.005s
INFO Successful handshake with fingerscan @ 192.168.xxx.xxx in 2.630s
[17:43:11][I][app:100]: ESPHome version 2024.11.1 compiled on Nov 30 2024, 17:31:58
[17:43:11][C][wifi:600]: WiFi:
[17:43:11][C][wifi:428]:   Local MAC: xx:xx:xx:xx:xx:xx
[17:43:11][C][wifi:433]:   SSID: [redacted]
[17:43:11][C][wifi:436]:   IP Address: 192.168.xxx.xxx
[17:43:11][C][wifi:439]:   BSSID: [redacted]
[17:43:11][C][wifi:441]:   Hostname: 'fingerscan'
[17:43:11][C][wifi:443]:   Signal strength: -39 dB ā–‚ā–„ā–†ā–ˆ
[17:43:11][C][wifi:447]:   Channel: 11
[17:43:11][C][wifi:448]:   Subnet: 255.255.xxx.xxx
[17:43:11][C][wifi:449]:   Gateway: 192.168.xxx.xxx
[17:43:11][C][wifi:450]:   DNS1: 192.168.xxx.xxx
[17:43:11][C][wifi:451]:   DNS2: 0.0.0.0
[17:43:11][C][logger:185]: Logger:
[17:43:11][C][logger:186]:   Level: DEBUG
[17:43:11][C][logger:188]:   Log Baud Rate: 115200
[17:43:11][C][logger:189]:   Hardware UART: UART0
[17:43:11][C][uart.arduino_esp8266:118]: UART Bus:
[17:43:11][C][uart.arduino_esp8266:119]:   TX Pin: GPIO16
[17:43:11][C][uart.arduino_esp8266:120]:   RX Pin: GPIO5
[17:43:11][C][uart.arduino_esp8266:122]:   RX Buffer Size: 256
[17:43:11][C][uart.arduino_esp8266:124]:   Baud Rate: 57600 baud
[17:43:11][C][uart.arduino_esp8266:125]:   Data Bits: 8
[17:43:11][C][uart.arduino_esp8266:126]:   Parity: NONE
[17:43:11][C][uart.arduino_esp8266:127]:   Stop bits: 1
[17:43:11][C][uart.arduino_esp8266:131]:   Using software serial
[17:43:11][C][template.text_sensor:020]: Template Sensor 'Sensor Status'
[17:43:11][C][template.text_sensor:020]: Template Sensor 'Kommando Status'
[17:43:11][C][fingerprint_grow:537]: GROW_FINGERPRINT_READER:
[17:43:11][C][fingerprint_grow:538]:   System Identifier Code: 0x0000
[17:43:11][C][fingerprint_grow:539]:   Touch Sensing Pin: GPIO4
[17:43:11][C][fingerprint_grow:541]:   Sensor Power Pin: None
[17:43:11][C][fingerprint_grow:546]:   Idle Period to Sleep: Never
[17:43:11][C][fingerprint_grow:548]:   Update Interval: 0.5s
[17:43:11][C][fingerprint_grow:550]:   Fingerprint Count 'Anzahl Finger'
[17:43:11][C][fingerprint_grow:550]:     State Class: ''
[17:43:11][C][fingerprint_grow:550]:     Unit of Measurement: ''
[17:43:11][C][fingerprint_grow:550]:     Accuracy Decimals: 0
[17:43:11][C][fingerprint_grow:550]:     Icon: 'mdi:fingerprint'
[17:43:11][C][fingerprint_grow:551]:     Current Value: 0
[17:43:11][C][fingerprint_grow:554]:   Status 'Interner Status'
[17:43:11][C][fingerprint_grow:554]:     State Class: ''
[17:43:11][C][fingerprint_grow:554]:     Unit of Measurement: ''
[17:43:11][C][fingerprint_grow:554]:     Accuracy Decimals: 0
[17:43:11][C][fingerprint_grow:555]:     Current Value: 20
[17:43:11][C][fingerprint_grow:558]:   Capacity 'SpeicherkapazitƤt'
[17:43:11][C][fingerprint_grow:558]:     State Class: ''
[17:43:11][C][fingerprint_grow:558]:     Unit of Measurement: ''
[17:43:11][C][fingerprint_grow:558]:     Accuracy Decimals: 0
[17:43:11][C][fingerprint_grow:558]:     Icon: 'mdi:database'
[17:43:11][C][fingerprint_grow:559]:     Current Value: 200
[17:43:11][C][fingerprint_grow:562]:   Security Level 'Sicherheits Level'
[17:43:11][C][fingerprint_grow:562]:     State Class: ''
[17:43:11][C][fingerprint_grow:562]:     Unit of Measurement: ''
[17:43:11][C][fingerprint_grow:562]:     Accuracy Decimals: 0
[17:43:11][C][fingerprint_grow:562]:     Icon: 'mdi:security'
[17:43:11][C][fingerprint_grow:563]:     Current Value: 3
[17:43:11][C][fingerprint_grow:566]:   Last Finger ID 'Letzter Finger'
[17:43:11][C][fingerprint_grow:566]:     State Class: ''
[17:43:11][C][fingerprint_grow:566]:     Unit of Measurement: ''
[17:43:11][C][fingerprint_grow:566]:     Accuracy Decimals: 0
[17:43:11][C][fingerprint_grow:566]:     Icon: 'mdi:account'
[17:43:11][C][fingerprint_grow:567]:     Current Value: 4294967295
[17:43:11][C][fingerprint_grow:570]:   Last Confidence 'Erkennungsrate'
[17:43:11][C][fingerprint_grow:570]:     State Class: ''
[17:43:11][C][fingerprint_grow:570]:     Unit of Measurement: ''
[17:43:11][C][fingerprint_grow:570]:     Accuracy Decimals: 0
[17:43:11][C][fingerprint_grow:570]:     Icon: 'mdi:account-check'
[17:43:11][C][fingerprint_grow:571]:     Current Value: 4294967295
[17:43:11][C][captive_portal:089]: Captive Portal:
[17:43:11][C][mdns:116]: mDNS:
[17:43:11][C][mdns:117]:   Hostname: fingerscan
[17:43:11][C][esphome.ota:073]: Over-The-Air updates:
[17:43:11][C][esphome.ota:074]:   Address: fingerscan.local:8266
[17:43:11][C][esphome.ota:075]:   Version: 2
[17:43:11][C][esphome.ota:078]:   Password configured
[17:43:11][C][safe_mode:018]: Safe Mode:
[17:43:11][C][safe_mode:019]:   Boot considered successful after 60 seconds
[17:43:11][C][safe_mode:021]:   Invoke after 10 boot attempts
[17:43:11][C][safe_mode:022]:   Remain in safe mode for 300 seconds
[17:43:11][C][api:140]: API Server:
[17:43:11][C][api:141]:   Address: fingerscan.local:6053
[17:43:11][C][api:143]:   Using noise encryption: YES
[17:43:29][D][fingerprint_grow:348]: Setting Aura LED
[17:43:29][D][fingerprint_grow:352]: Aura LED set
[17:43:29][D][text_sensor:064]: 'Sensor Status': Sending state 'Finger present'
[17:43:29][D][text_sensor:064]: 'Sensor Status': Sending state 'Bereit'
[17:43:29][D][fingerprint_grow:156]: Getting image 1
[17:43:29][D][fingerprint_grow:168]: Finger Misplaced
[17:43:30][D][fingerprint_grow:348]: Setting Aura LED
[17:43:30][D][fingerprint_grow:352]: Aura LED set
[17:43:30][D][text_sensor:064]: 'Sensor Status': Sending state 'Finger falsch platziert'
[17:43:30][D][text_sensor:064]: 'Sensor Status': Sending state 'Bereit'
[17:43:30][W][component:237]: Component fingerprint_grow took a long time for an operation (1028 ms).
[17:43:30][W][component:238]: Components should block for at most 30 ms.
[17:43:30][I][fingerprint_grow:097]: Starting enrollment in slot 2
[17:43:30][D][text_sensor:064]: 'Kommando Status': Sending state 'Kommando anlernen Finger x'

This is my fingerprint.yaml from the ESP

esphome:
  name: fingerscan
  friendly_name: Fingerscan

esp8266:
  board: esp01_1m

# Enable logging
logger:

ota:
  - platform: esphome
    password: "password"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Fingerscan Fallback Hotspot"
    password: "password"

captive_portal:

# serial protocol definitions
uart:
  tx_pin: GPIO16 # GPIO16 on ESP8266EX (Or GPIO17 for ESP32)
  rx_pin: GPIO5 # GPIO5 on ESP8266EX (Or GPIO16 for ESP32)
  baud_rate: 57600

fingerprint_grow:
  sensing_pin: GPIO4 # GPIO4 on ESP8266EX (Or GPIO05 for ESP32)
  on_finger_scan_matched:
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 200
        color: BLUE
        count: 1
    - text_sensor.template.publish:
        id: sensor_state
        state: "Erkannt"
    - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_finger_scan_unmatched:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 2
    - text_sensor.template.publish:
        id: sensor_state
        state: "Nicht erkannt"
    - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_enrollment_scan:
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 100
        color: BLUE
        count: 2
    - text_sensor.template.publish:
        id: sensor_state
        state: "Speichern aktiv"
    - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_enrollment_done:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: BLUE
        count: 2
    - text_sensor.template.publish:
        id: sensor_state
        state: "Gespeichert"
    - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_enrollment_failed:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: PURPLE
        count: 2
    - text_sensor.template.publish:
        id: sensor_state
        state: "Speichern Fehler"
    - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_finger_scan_start:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 100
        color: BLUE
        count: 1
    - text_sensor.template.publish:
        id: sensor_state
        state: "Finger present"
        # - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_finger_scan_misplaced:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 2
    - text_sensor.template.publish:
        id: sensor_state
        state: "Finger falsch platziert"
        # - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
  on_finger_scan_invalid:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 2
    - text_sensor.template.publish:
        id: sensor_state
        state: "Finger ungültig"
    - delay: 100ms
    - text_sensor.template.publish:
        id: sensor_state
        state: "Bereit"
        
text_sensor:
  - platform: template
    id: sensor_state
    name: "Sensor Status"
  - platform: template
    id: comand_state
    name: "Kommando Status"

sensor:
  - platform: fingerprint_grow
    fingerprint_count:
      name: "Anzahl Finger"
      id: finger_count
    last_finger_id:
      name: "Letzter Finger"
    last_confidence:
      name: "Erkennungsrate"
    status:
      name: "Interner Status"
    capacity:
      name: "SpeicherkapazitƤt"
    security_level:
      name: "Sicherheits Level"


# Enable Home Assistant API
api:
  encryption:
    key: "password"
  actions: 
    - action: enroll
      variables:
        finger_id: int
        num_scans: int
      then:
        - fingerprint_grow.enroll:
            finger_id: !lambda 'return finger_id;'
            num_scans: !lambda 'return num_scans;'
        - text_sensor.template.publish:
            id: comand_state
            state: "Kommando anlernen Finger x"
    - action: enroll_next
      variables:
        num_scans: int
      then:
        - fingerprint_grow.enroll:
            finger_id: !lambda 'return id(finger_count).state;'
            num_scans: !lambda 'return num_scans;'
        - text_sensor.template.publish:
            id: comand_state
            state: "Kommando anlernen nƤchster Finger"
    - action: cancel_enroll
      then:
        - fingerprint_grow.cancel_enroll:
        - text_sensor.template.publish:
            id: comand_state
            state: "Kommando anlernen abbrechen"
    - action: delete
      variables:
        finger_id: int
      then:
        - fingerprint_grow.delete:
            finger_id: !lambda 'return finger_id;'
        - text_sensor.template.publish:
            id: comand_state
            state: "Kommando lƶschen Finger x"
    - action: delete_all
      then:
        - fingerprint_grow.delete_all:
        - text_sensor.template.publish:
            id: comand_state
            state: "Kommando lƶschen alle Finger"

Here shows the HA-automation test program

alias: FingerprintTest
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.fingerscan_sensor_status
    to: Finger present
conditions: []
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_boolean.fingerscan_anlernmodus
            state: "on"
        sequence:
          - action: esphome.fingerscan_enroll
            data:
              finger_id: 2
              num_scans: 2
mode: single

Hopefully somebody can help
Thanks

the last time I had this, I thought that my sensor was dead but in fact it was a connection problem, check your pins well and redo clean connectors

both voltage are very important, 3.3v and 5 volt, and must be exactly not5 on 3.3

Hallo @orrionis ,
thanks for your advice, this was exactly the point.
I connected Pin 1 (red) to 3V3 and Pin 6 (white) to 5V.
After rewiring that both are connected to 3V3 it was working. :star_struck:

Is it possible to turn the ring on and of with a service or sth. like that? I can only turn it on but it turns off only, when I do a manual fingerprint action.

Should be possible. Here is an example to turn it on when motion is detected in a sensor from Home Assistant.


binary_sensor:
  - platform: homeassistant
    internal: True
    id: motion_sensor
    entity_id: binary_sensor.motion_sensor
    on_press:
      then:
        - fingerprint_grow.aura_led_control:
            state: GRADUAL_ON
            speed: 20
            color: PURPLE
            count: 0
    on_release:
      then:
         - fingerprint_grow.aura_led_control:
                state: GRADUAL_OFF
                speed: 10
                color: PURPLE
                count: 0

You will need to take it into account after scanning fingers. E.g.


  on_finger_scan_unmatched:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 4
    - if:
        condition:
          binary_sensor.is_on: motion_sensor
        then:
          - fingerprint_grow.aura_led_control:
              state: GRADUAL_ON
              speed: 20
              color: PURPLE
              count: 0
1 Like

unfortunately it no longer works with an esp32. it worked with an esp8266. do you have any tips as to why this might be?

I don’t know, double check the pins and wires. If it does not work, try other pins on the ESP32

Wow, there is a lot going on in this chat with exciting topics. I’m currently trying to configure two fingerprint sensors in an ESP board. Does anyone have any experience in this area? I have already found something in another chat, but it still needs 1-2 clever adjustments to the code. Maybe someone has a good idea.

I’m sure I’m not the only one with this idea :slight_smile:

Hi there,
Really interested in implementing thsi for my Alarmo.
Already bought the fingerprint sensor.
My question is : does it work over wifi or does the ESP needs to be plugged in the HA device ?

ESPHome communicates with Home Assistant over wifi (but LAN is also possible)

Yes, but I do not see any mention of secrets! or Wifi in the code in OP.
Hence my question.
All my ESPHome devices do mention wifi or secrets in their code.

The ESPHome code is only the relevant code for the fingerprint sensor.

1 Like

I have had my fingerprint sensor and the yaml code from this thread running for a while and it works well.

I have been looking to tidy up my HA project and I noticed that the fingerprint state, last confidence and last fingerprint keep going to unknown after a period of time.

Is there anyway to make them hold their last state until a new scan is performed?

Hello everyone. Can I ask you for the complete YAML code for the R503 fingerprint reader card? Thank you!