Titel: Fingerprint R503 & NFC Tag Reader PN532 – Verkabelung & Einrichtung in ESPHome & Home Assistant
Möchtest du den Fingerprint-Sensor R503 und den NFC Tag Reader PN532 in dein Smart Home integrieren? In unserem neuesten YouTube-Video zeigen wir dir Schritt für Schritt, wie du die Geräte verkabelst und in ESPHome sowie Home Assistant einrichtest.
Was dich im Video erwartet:
✅ Detaillierte Verkabelungsanleitung für R503 & PN532
✅ Einrichtung in ESPHome mit den passenden YAML-Codes
✅ Integration in Home Assistant für eine einfache Nutzung
YouTube-Video
Lädt Inhalte von YouTube. Durch Klick stimmen Sie dem Laden externer Inhalte zu.
Hier der YAML-Code zum Projekt aus dem Video:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
substitutions:
name: fingerprint_tagreader
friendly_name: Fingerprint TagReader
esp32:
board: esp32doit-devkit-v1
framework:
type: arduino
esphome:
name: $name
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
wifi:
networks:
- ssid: "Fritz!Box 7590"
password: "XXXXXXX"
power_save_mode: none
output_power: 20dB
manual_ip:
static_ip: 192.168.178.17
gateway: 192.168.178.1
subnet: 255.255.255.0
ap:
ssid: "FingerprintEingang"
password: "muckel18"
captive_portal:
logger:
level: DEBUG
# Enable Web server
web_server:
port: 80
ota:
platform: esphome
uart:
rx_pin: GPIO16 # Gelb
tx_pin: GPIO17 # Violett
baud_rate: 57600
api:
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: enroll_next
variables:
num_scans: int
then:
- fingerprint_grow.enroll:
finger_id: !lambda 'return id(fingerprint_count).state;'
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:
fingerprint_grow:
sensing_pin: GPIO5 # Blau
password: 0x00000000
on_finger_scan_matched:
- logger.log: "scan matched"
- text_sensor.template.publish:
id: fingerprint_state
state: "Autorisierter Fingerabdruck"
- delay: 1s
- text_sensor.template.publish:
id: fingerprint_state
state: "Warte"
- fingerprint_grow.aura_led_control:
state: BREATHING
speed: 200
color: BLUE
count: 1
- light.turn_on:
id: activity_led
brightness: 100%
red: 0%
green: 100%
blue: 0%
- switch.turn_on: buzzer_enabled
- rtttl.play: "success:d=24,o=5,b=100:c,g,b" # Warnton Erfolgreich (kann angepasst werden)
- delay: 2s # Warte einige Sekunden, um die Erfolgsanzeige anzuzeigen
- light.turn_off: # LED ausschalten nach dem Erfolg
id: activity_led
- switch.turn_off: # Buzzer ausschalten nach dem Erfolg
id: buzzer_enabled
on_finger_scan_unmatched:
- logger.log: "scan unmatched"
- text_sensor.template.publish:
id: fingerprint_state
state: "Unautorisierter Fingerabdruck"
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: RED
count: 2 # LED blinkt rot, um einen Fehler anzuzeigen
- light.turn_on: # LED rot leuchten bei negativer Erkennung
id: activity_led
brightness: 100%
red: 100%
green: 0%
blue: 0%
- switch.turn_on: buzzer_enabled # Buzzer einschalten für den Warnton
- rtttl.play: "failure:d=24,o=5,b=100:c,d,e,f" # Warnton (kann angepasst werden)
- delay: 3s # Warnton für 3 Sekunden abspielen
- light.turn_off: # LED ausschalten nach dem Warnton
id: activity_led
- switch.turn_off: # Buzzer ausschalten nach dem Warnton
id: buzzer_enabled
- delay: 1s
- text_sensor.template.publish:
id: fingerprint_state
state: "Warte"
on_enrollment_scan:
- text_sensor.template.publish:
id: fingerprint_state
state: "Fingerabdruck erfasst"
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: BLUE
count: 2
- fingerprint_grow.aura_led_control:
state: ALWAYS_ON
speed: 0
color: GREEN
count: 0
on_enrollment_failed:
- text_sensor.template.publish:
id: fingerprint_state
state: "Erfassung des Fingerabdrucks fehlgeschlagen"
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: RED
count: 4
# Optionaler Vorlagentextsensor für visuelles Feedback
text_sensor:
- platform: template
id: fingerprint_state
name: "Fingerabdruck Status"
- 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
binary_sensor:
- platform: fingerprint_grow
id: fingerprint_enrolling
name: "Fingerabdruck erfassen"
- platform: status
name: "${friendly_name} Status"
entity_category: diagnostic
- platform: pn532
uid: "6B-D8-B4-19"
name: "Luis-Tag"
- platform: pn532
uid: "04-49-5B-42-F8-61-80"
name: "Felix-Tag"
- platform: pn532
uid: "DB-6F-03-3D"
name: "Suse-Tag"
sensor:
- platform: fingerprint_grow
fingerprint_count:
name: "Fingerabdruck Zähler"
id: fingerprint_count
last_finger_id:
name: "Letzte Fingerabdruck ID"
last_confidence:
name: "Zuverlässigkeit des letzten Fingerabdrucks"
status:
name: "Fingerabdruckstatus"
capacity:
name: "Abdruckkapazität"
security_level:
name: "Sicherheitsstufe"
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
button:
- platform: restart
name: "${friendly_name} Restart"
entity_category: config
#NFC PN532
i2c:
sda: GPIO21 # Orange
scl: GPIO22 # Gelb
scan: true
id: bus_a
frequency: 400kHz
# PN532 Tag Reader ## Lambda LED leuchtet Rot bei unbekannten Tag
pn532_i2c:
id: pn532_board
on_tag:
then:
- lambda: |-
std::string known_tags[] = {"6B-D8-B4-19", "04-49-5B-42-F8-61-80", "DB-6F-03-3D"};
bool known = false;
for (auto &tag : known_tags) {
if (tag == x) {
known = true;
break;
}
}
if (known) {
ESP_LOGD("tagreader", "Bekannter Tag erkannt");
id(rtttl_buzzer).play("hallo:d=24,o=5,b=100:c,e,g");
auto call = id(activity_led).turn_on();
call.set_rgb(0, 1, 0);
call.perform();
} else {
ESP_LOGD("tagreader", "Unbekannter Tag erkannt");
id(rtttl_buzzer).play("failure:d=24,o=5,b=100:c,d,e,f");
delay(2000);
auto call = id(activity_led).turn_on();
call.set_rgb(1, 0, 0);
call.perform();
}
- delay: 2s
- light.turn_off:
id: activity_led
output:
- platform: ledc
pin: GPIO26
id: buzzer_output
rtttl:
id: rtttl_buzzer
output: buzzer_output
# Configure LED
light:
- platform: neopixelbus
variant: WS2812
pin: GPIO19
num_leds: 1
id: activity_led
flash_transition_length: 500ms
type: GRB
name: "${friendly_name} LED"
restore_mode: ALWAYS_OFF
Template:
1
2
3
4
5
6
7
8
9
10
{% set personid = states('sensor.letzte_fingerabdruck_id') | int(default=-1) %}
{% if personid == 0 or personid == 1 or personid == 2 or personid == 3 %}
Felix
{% elif personid == 4 or personid == 5 or personid == 6 or personid == 7 %}
Suse
{% elif personid == 8 or personid == 9 or personid == 10 or personid == 11 %}
Luis
{% else %}
Unknown
{% endif %}
Automatisierung
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
alias: Klingel + NFC + Fingerprint
description: ""
triggers:
- entity_id:
- binary_sensor.haustuer_klingel_visitor
from: "off"
to: "on"
id: klingel_gedrückt
trigger: state
- entity_id:
- sensor.fingerabdruck_status
to: Autorisierter Fingerabdruck
id: fingerprint_registriert
trigger: state
from: Warte
- entity_id:
- binary_sensor.luis_tag
- binary_sensor.felix_tag
- binary_sensor.suse_tag
to: "on"
id: nfc_tag_gescannt
trigger: state
from: "off"
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id: klingel_gedrückt
sequence:
- parallel:
- choose:
- conditions:
- condition: state
entity_id: sun.sun
state: below_horizon
sequence:
- target:
entity_id: light.haustur_licht
data: {}
action: light.turn_on
- delay:
seconds: 60
- target:
entity_id: light.haustur_licht
data: {}
action: light.turn_off
enabled: true
- sequence:
- target:
entity_id: camera.haustuer_klingel_sub
data:
filename: >-
/config/www/doorbell/camera.haustuer_klingel_{{zeitpunkt}}.jpg
action: camera.snapshot
- data:
message: Jemand steht vor der Tür - {{zeitpunkt}}
title: Es hat geklingelt
data:
image: >-
https://haXXXXX.shys-XXXXX.de/local/doorbell/camera.haustuer_klingel_{{zeitpunkt}}.jpg
ttl: 0
priority: high
action: notify.mobile_app_pixel_8_pro
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- target:
entity_id: media_player.wohnzimmer
data:
entity: camera.haustuer_klingel_sub
force: true
action: webrtc.dash_cast
- target:
entity_id: media_player.kuche
data:
entity: camera.haustuer_klingel_sub
force: true
action: webrtc.dash_cast
- target:
entity_id: media_player.esszimmer
data:
entity: camera.haustuer_klingel_sub
force: true
action: webrtc.dash_cast
- target:
entity_id: media_player.badezimmer_oben
data:
entity: camera.haustuer_klingel_sub
force: true
action: webrtc.dash_cast
- target:
entity_id: media_player.schlafzimmer
data:
entity: camera.haustuer_klingel_sub
force: true
action: webrtc.dash_cast
- delay:
seconds: 45
- target:
entity_id: media_player.media_gruppe
action: media_player.turn_off
data: {}
- conditions:
- condition: trigger
id: nfc_tag_gescannt
sequence:
- choose:
- conditions:
- condition: template
value_template: >-
{{ trigger.entity_id in ['binary_sensor.luis_tag',
'binary_sensor.felix_tag', 'binary_sensor.suse_tag'] }}
sequence:
- action: lock.open
target:
entity_id: lock.haustur
data: {}
- choose:
- conditions:
- condition: state
entity_id: sun.sun
state: below_horizon
sequence:
- target:
entity_id: light.haustur_licht
action: light.turn_on
data: {}
- delay:
seconds: 60
- target:
entity_id: light.haustur_licht
action: light.turn_off
data: {}
- choose:
- conditions:
- condition: template
value_template: >
{{ trigger.entity_id == 'binary_sensor.luis_tag'
and (is_state('person.felix', 'not_home') and
is_state('person.susan', 'not_home')) }}
sequence:
- data:
title: Luis hat die Tür geöffnet
message: Luis hat mit seinem NFC-Tag die Tür geöffnet.
action: notify.notify
- conditions:
- condition: template
value_template: >-
{{ trigger.event.data.tag_id not in ['Luis-Tag',
'Suse-Tag', 'Felix-Tag'] }}
sequence:
- data:
message: >-
Unbekannter NFC-Tag erkannt: {{
trigger.event.data.tag_id }}
title: Sicherheitswarnung
action: notify.mobile_app_pixel_8_pro
- conditions:
- condition: trigger
id: fingerprint_registriert
- condition: template
value_template: >-
{{ states('sensor.letzter_fingerabdruck_name') in ['Felix',
'Suse', 'Luis'] }}
sequence:
- action: lock.open
target:
entity_id: lock.haustur
data: {}
- choose:
- conditions:
- condition: state
entity_id: sun.sun
state: below_horizon
sequence:
- target:
entity_id: light.haustur_licht
action: light.turn_on
data: {}
- delay:
seconds: 60
- target:
entity_id: light.haustur_licht
action: light.turn_off
data: {}
- choose:
- conditions:
- condition: template
value_template: >-
{{ states('sensor.letzter_fingerabdruck_name') == 'Luis'
and (is_state('person.felix', 'not_home') and
is_state('person.susan', 'not_home')) }}
sequence:
- data:
title: Luis hat die Tür geöffnet
message: >-
Luis hat seinen Fingerabdruck registriert und die Tür
geöffnet.
action: notify.notify
mode: parallel
variables:
zeitpunkt: "{{ now().strftime(\"%H_%M_%S\") }}"
Pinbelegung
Dieser Code zeigt die Grundkonfiguration für die Anbindung der Geräte in ESPHome. Im Video gehen wir detailliert auf jede Zeile ein und erklären die Funktion der einzelnen Komponenten.
🔗 Schau dir das Video an und richte dein Smart Home noch smarter ein: Fingerprint R503 + PN532
Hast du Fragen oder Anregungen? Schreib uns gerne in die Kommentare! 😊