J’ai oublié de préciser : qu’entendiez-vous par la limitation due à la longueur du câble ?
En quoi cela influence-t-il son fonctionnement ?
Juste que pour lancer le scan je clique avec ma souris sur un bouton… et le fil de ma souris ne vas pas à 2m de mon capteur ![]()
Bob
Je ne vois pas le HLK-FRM1213 dans ESPHome, donc il faudra trouver une autre solution de programmation je pense.
Bob
Oui, il n’y est pas.
Mais d’après ce que dit Gemini, ils ont l’air assez similaires, donc en théorie, plus ou moins le même code pourrait fonctionner avec ce module aussi.
Mais est-ce vraiment le cas… ![]()
Je le saurai quand je le commanderai, que je le recevrai et que je commencerai à tester ![]()
Ok, tu feras un petit retour stp ![]()
Bob
Cher @Bob, j’ai vraiment besoin de votre aide. J’ai reçu le module HLK-FRM1213. Cependant, le vendeur n’a pas pu me fournir d’informations. Il existe un manuel pour ce module, mais les indications de connexion qui y figurent ne correspondent pas à ce que je vois sur les fils avec le connecteur fourni par le vendeur.
Pourriez-vous s’il vous plaît me confirmer si votre module correspond à ce que j’ai montré sur la photo concernant le branchement de l’alimentation ?
Pour mon module, cela se présente ainsi, mais les fils de connexion ont un aspect différent, comme ceci. Comme vous pouvez le voir, le fil rouge (+) et le fil noir (-) sont situés côte à côte.
De plus, à en juger par la photo de ma carte et les inscriptions « GND » et « PWR », ainsi que par les données des manuels, celles-ci correspondent à ce que vous avez de votre côté. Cela me laisse penser que le branchement devrait être identique.
De plus, pourriez-vous s’il vous plaît me dire si votre vendeur vous a fourni un logiciel pour tester le fonctionnement du module et le configurer via un PC, notamment le programme « PC DEMO » ?
Sur Internet, il existe des vidéos de présentation où l’on voit ce logiciel utilisé pour la connexion et la configuration, mais personne ne partage le lien pour télécharger ce logiciel. Mes recherches sur Internet ne donnent aucun résultat.
Je vous en serais très reconnaissant par avance.
Bonjour @zheka_gal
Je pourrais te répondre précisément que lundi soir, à priori le branchement est le même que pour le FM225 et FM223.
Je te fournirai le code Yaml ESPhome que j’utilise.
Bob
Bonsoir @zheka_gal
il faut tenir compte des infos de câblage, les couleurs des fils ne sont pas représentatives, pour moi le fil rouge c’est le GND !.
C’est un peu capricieux comme système, il faut une bonne alimentation.
Mon YAML ESPHome si ça peut t’aider:
esphome:
name: esp32-fm225-facial
friendly_name: ESP32 FM225 Facial
esp32:
board: esp32dev
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "9/l1y5MYpK6kAq1TDwYkGBzE3uCYh06CG0qDunAAWcg="
actions:
- action: enroll
variables:
name: string
direction: int
then:
- hlk_fm22x.enroll:
name: !lambda 'return name;'
direction: !lambda 'return direction;'
- action: scan
then:
- hlk_fm22x.scan:
- action: delete
variables:
face_id: int
then:
- hlk_fm22x.delete:
face_id: !lambda 'return face_id;'
- action: delete_all
then:
- hlk_fm22x.delete_all:
- action: reset
then:
- hlk_fm22x.reset:
ota:
- platform: esphome
password: "c33c9f59541cd0855926f96647d24248"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.35
gateway: 192.168.1.254
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32-Fm225-Facial"
password: "v9vXuNCaHYqS"
captive_portal:
# -----------------------------
# UART CONNECTION TO HLK-FM225
# -----------------------------
uart:
id: uart_face
rx_pin: GPIO16 # FM225 TX -> ESP32 RX
tx_pin: GPIO17 # FM225 RX -> ESP32 TX
baud_rate: 115200
hlk_fm22x:
id: face_scanner # L'ID de votre composant
uart_id: uart_face # Fait référence à l'ID de l'UART ci-dessus
on_face_scan_invalid:
- homeassistant.event:
event: esphome.test_node_face_scan_invalid
data:
error: !lambda 'return error;'
- text_sensor.template.publish:
id: face_log
state: !lambda 'return "Scan invalide ";'
on_face_scan_matched:
- homeassistant.event:
event: esphome.test_node_face_scan_matched
data:
face_id: !lambda 'return face_id;'
name: !lambda 'return name;'
- if:
condition:
lambda: |
return (face_id == 1) || (name == "Bruno");
then:
- homeassistant.service:
service: light.toggle
data:
entity_id: light.lampe_marine
- homeassistant.service:
service: light.toggle
data:
entity_id: light.salon_plante_10
- switch.turn_on:
id: ledbleu225
#- text_sensor.template.publish:
# id: face_log
# state: !lambda 'return "Scan OK " + to_string(face_id) +" : "+ name;'
- text_sensor.template.publish:
id: face_log
state: !lambda |-
// 1. Convertir le std::string 'name' en pointeur C (const char*)
const char* name_c_str = name.c_str();
// 2. Utiliser strlen() sur le pointeur C pour trouver la longueur réelle
size_t name_length = strlen(name_c_str);
// 3. Crée un std::string propre en utilisant la longueur trouvée.
std::string person_name(name_c_str, name_length);
return "Scan OK ID: " + to_string(face_id) + " : " + person_name;
- homeassistant.service:
service: tts.speak
data:
media_player_entity_id: media_player.respeaker_satellite_3
#pour ajouter ID + to_string(face_id) + le code permet de lire en TTS le name qui sinon ne passe pas
message: !lambda |-
const char* name_c_str = name.c_str();
size_t name_length = strlen(name_c_str);
std::string person_name(name_c_str, name_length);
return "Bonjour " + person_name + ", je t'ai reconnu, bienvenu à la maison.";
entity_id: tts.piper
- delay: 5s
- switch.turn_off:
id: ledbleu225
on_face_scan_unmatched:
- homeassistant.event:
event: esphome.test_node_face_scan_unmatched
- text_sensor.template.publish:
id: face_log
state: !lambda 'return "Personne non reconnue ";'
on_face_info:
- homeassistant.event:
event: esphome.test_node_face_info
data:
status: !lambda 'return status;'
left: !lambda 'return left;'
top: !lambda 'return top;'
right: !lambda 'return right;'
bottom: !lambda 'return bottom;'
yaw: !lambda 'return yaw;'
pitch: !lambda 'return pitch;'
roll: !lambda 'return roll;'
on_enrollment_done:
- homeassistant.event:
event: esphome.test_node_enrollment_done
data:
face_id: !lambda 'return face_id;'
direction: !lambda 'return direction;'
- logger.log: "Enrôlement du visage terminé avec succès."
- text_sensor.template.publish:
id: face_log
state: !lambda 'return "Enrolled into slot " + to_string(face_id);'
- switch.turn_on:
id: ledbleu225
- delay: 2s
- switch.turn_off:
id: ledbleu225
on_enrollment_failed:
- homeassistant.event:
event: esphome.test_node_enrollment_failed
data:
error: !lambda 'return error;'
- text_sensor.template.publish:
id: face_log
state: !lambda 'return "Failed to enroll face. Error: " + to_string(error);'
# -----------------------------
# Sensors and Entities
# -----------------------------
sensor:
- platform: hlk_fm22x
face_count:
name: "FM225 - Number of enrolled faces"
text_sensor:
- platform: hlk_fm22x
last_face_name:
name: "FM225 - Last recognized name"
version:
name: "FM225 - Firmware version"
- platform: template
name: "Résultat capteur"
id: face_log
on_value:
then:
- if:
condition:
# On vérifie si le texte contient "Bruno"
lambda: 'return x.find("Bruno") != std::string::npos;'
then:
- binary_sensor.template.publish:
id: bruno_reconnu
state: ON
- delay: 5s
- binary_sensor.template.publish:
id: bruno_reconnu
state: OFF
- platform: wifi_info
ip_address:
name: device/ip
mac_address:
name: device/mac
binary_sensor:
- platform: homeassistant
id: lampe_marine
entity_id: light.lampe_marine
internal: true
- platform: homeassistant
id: lampe_plante
entity_id: light.salon_plante_10
internal: true
- platform: template
name: "Bruno Reconnu"
id: bruno_reconnu
device_class: presence
filters:
- delayed_off: 5s
- platform: gpio
pin:
number: GPIO21
mode: INPUT_PULLUP # Utilise la résistance interne pour maintenir l'état HAUT (HIGH)
inverted: true # Étant donné que le bouton tire le signal à GND (LOW), on inverse la logique pour que l'état "ON" corresponde à la pression.
name: "Bouton Lancement Scan"
# ⬇️ Les actions se déclenchent lors du relâchement du bouton (le press.duration permet d'éviter le 'bouncing')
on_release:
# Lancement du service de scan
then:
- homeassistant.service:
service: esphome.esp32_fm225_facial_scan
button:
- platform: restart
id: reboot
name: "Reboot 225"
- platform: template
name: "Bouton Appel Scan"
on_press:
then:
- homeassistant.service:
service: esphome.esp32_fm225_facial_scan
switch:
- platform: gpio
id: ledbleu225
name: "LedBleu 225 Face"
pin: 2
web_server:
port: 80
Bob
@Bob Merci pour les informations que vous avez fournies. Je vais les examiner.






