Besoin d'aide pour implanter des accessoire a un module esp32_rfid

Mon problème

Étant un peu novice avec esphome, je souhaiterais de l’aide pour intégrer un bouton touch et 3 LED RGB WS2812B dans mon fichier Yaml

Ma configuration


System Information

version core-2023.8.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.4
os_name Linux
os_version 6.1.21-v8
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.32.1
Stage running
Available Repositories 1266
Downloaded Repositories 12
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 10.4
update_channel stable
supervisor_version supervisor-2023.08.1
agent_version 1.5.1
docker_version 23.0.6
disk_total 219.4 GB
disk_used 9.6 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons ESPHome (2023.8.1), TasmoAdmin (0.25.0), File editor (5.6.0), Mosquitto broker (6.2.1), motionEye (0.19.1), Node-RED (14.4.5), Advanced SSH & Web Terminal (15.0.7), Samba share (10.0.2), Grafana (9.0.3)
Dashboards
dashboards 2
resources 7
views 11
mode storage
Recorder
oldest_recorder_run 8 août 2023 à 05:40
current_recorder_run 18 août 2023 à 11:00
estimated_db_size 82.37 MiB
database_engine sqlite
database_version 3.41.2
___

Alors déjà le module rfid couplé a l’esp32 est fonctionnel,
il scan bien quand je passe des tags devant le récepteur

Le but de ces implantations est d’améliorer ce simple lecteur de badge pour en faire un pupitre d’accès pour activer ou désactiver mon alarme

Les ajouts au module fonctionnel sont les suivant

  • 1 bouton physique touch ( gpio35 ) qui dois permettre :
    • de redémarrer le module si problème de connexion constaté en direct après un appui de 5s
  • 3 LED WS2812B qui doivent permettent de donner :
    • l’état de la connexion ( gpio26 )
      ( Vert fixe Online , Rouge fixe Offline )
    • l’état de l’alarme ( gpio25 )
      ( Bleu fixe Off, Vert fixe On avec occupants , Rouge fixe On sans occupant )
    • l’état du rfid ( gpio27 )
      ( Bleu fixe en attente d’un badge , Vert fixe Badge OK , Rouge fixe Mauvais Badge )

Enfin j’aimerais appeler ma sirène pour biper d’une certaine manière pendant le délai d’activation de l’alarme, mais ca c’est encore a mettre en place mais la aussi je sèche un peu, beaucoup même lol

Voici ou en est mon yaml :

esphome:
  name: esp32-rfi

esp32:
  board: esp32dev     # a redefinir avec le modele exacte de carte si possible
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "JHmkAapH9pi8xdPG1jwwwwwws3akM7QbKsShjlsbcNY="

ota:
  password: "edc08dd3de7dwwwwwwa2ef9df9bfda85"

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

# Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Rfidportefacade"
    password: "WcHkwwwwTtzU"

captive_portal:

spi:
    clk_pin: GPIO18
    mosi_pin: GPIO23
    miso_pin: GPIO19

rc522_spi:
    cs_pin: GPIO04
    update_interval: 1s
      on_tag:
        then:
         - homeassistant.tag_scanned: !lambda 'return x;'     # bizarrement file editor nous annonce qu'il ne connais pas cette fonction mais ca fonctionne

binary_sensor:
  - platform: rc522
      uid: C9-E1-08-A3
      name: "Karim"
  - platform: rc522
      uid: 69-A9-B9-A3
      name: "Monique"
  - platform: rc522
      uid: B7-31-DF-60
      name: "Loane"    
  - platform: rc522
      uid: E3-8D-CA-16
      name: "Backup Complet" 
      
# jusqu'ici le module RFID et l'esp32 sont couplés et fonctionnels


# a ce stade les 3 LED ainsi que le bouton touch sont branchés sur l'esp32


# Example configuration entry

button:     # bouton touch a 3 fils ( vcc, gnd, I/O ), dois pouvoir redémarrer le module en cas de probléme de connexion ou autre
  - platform: restart
      name: "esp32-rfid Restart"
      pin: GPIO35
# comment appeler le restart du module, je séche !!!

light:    # 3 LED WS2812B a 3 cables ( vcc, gnd, data)
  - platform: rgb
      name: "Etat Connexion"   # gpio26     # savoir si l'esp est Online ou Offline a HA  ( Vert fixe Online , Rouge fixe Offline )
      red: output_component1
      green: output_component2
      blue: output_component3
  - platform: rgb
      name: "Etat Alarme"     # gpio25    # savoir l'etat de l'alarme sans devoir sortir le phone ou regarder sur la tablette ou le PC  ( Bleu fixe Off, Vert fixe On avec occupants , Rouge fixe On sans occupant )
      red: output_component1
      green: output_component2
      blue: output_component3
  - platform: rgb
      name: "Etat RFID"     # gpio27    # savoir si il est en attente de scan, si il a scanné un bon badge ou pas  ( Bleu fixe en attente d'un badge , Vert fixe Badge OK , Rouge fixe Mauvais Badge )
      red: output_component1
      green: output_component2
      blue: output_component3

J’avance a taton et c’est vraiment galère quand on sais même pas ce que l’on modifie, on essaye et on espère que ça marche sans vraiment savoir et comprendre ces modifications
J’ai vraiment besoin d’aide des spécialistes

J’arrive a allumer les LED et changer les couleurs mais je peux le faire qu’en manuel et si je n’allume pas par le bouton la LED est éteinte
J’aimerais assigné une couleur qui est censée changer en cas de changement d’etat avec la led tout le temps allumé,
je suppose que je suis censé passé par status_led mais je n’arrive a rien

Voici l’avancement de mon code :

esphome:
  name: esp32-rfid

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "JHmkAapH9pi8xdPG1jwwwwwws3akM7QbKsShjlsbcNY="

ota:
  password: "edc08dd3de7dwwwwwwa2ef9df9bfda85"

wifi:
  ssid: "SFR_FC38"
  password: "44dxbv6nuw99mjpp2dha"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Rfidportefacade"
    password: "WcHkwwwwTtzU"

captive_portal:

spi:
    clk_pin: GPIO18
    mosi_pin: GPIO23
    miso_pin: GPIO19

rc522_spi:
    cs_pin: GPIO04
    update_interval: 0.25s
    on_tag:
      then:
      - homeassistant.tag_scanned: !lambda 'return x;'


binary_sensor:

  - platform: rc522
    uid: C9-E1-08-A3
    name: "Karim"

  - platform: rc522
    uid: 69-A9-B9-A3
    name: "Monique"

  - platform: rc522
    uid: B7-31-DF-60
    name: "Loane"

  - platform: rc522
    uid: E3-8D-CA-16
    name: "Backup Complet"

  - platform: status
    name: "Etat EspHome Connexion"

  - platform: status
    name: "Etat Alarme"
    
  - platform: status
    name: "Etat RFID"    

    # Example configuration entry
    
light:

  - platform: esp32_rmt_led_strip
    rgb_order: GRB 
    pin: GPIO26
    num_leds: 1
    rmt_channel: 0
    chipset: ws2812    
    name: "LED_Etat_EspHome_Connexion"
    
  - platform: esp32_rmt_led_strip
    rgb_order: GRB
    pin: GPIO25
    num_leds: 1
    rmt_channel: 2
    chipset: ws2812
    name: "LED Etat Alarme"

  - platform: esp32_rmt_led_strip
    rgb_order: GRB
    pin: GPIO27
    num_leds: 1
    rmt_channel: 4
    chipset: ws2812
    name: "LED Etat RFID"


Ça va faire une semaine que j’ai lancé cette demande et même pas une réponse
A l’aide
D’avance
Merci

Je sais pas ce qu’il y a de pire,
Avoir aucune réponse ou aide, ou galéré a tâtonner sans trouver la réponses au problème

Bon en espérant enfin susciter des réponses et de l’aide, je continue a me répondre a moi même
Avancement du projet :

  • le boitier 3D est imprimé
  • module rc522, intégré et fonctionnel a 100%
  • bouton tactile capacitif TTP223, intégré et fonctionnel a 100%
  • buzzer encore a intégrer

Jusque la pas de soucis le pupitre est fonctionnel a 95%, j’arrive a scanner mes badges, j’arrive a activer mon alarme(alarmo) avec le bouton même activer d’autres choses autre que l’alarme, activer/désactiver les différents modes d’alarme avec les badges

Mon soucis subsiste avec ces 3 fichues LED ws2812b
Pour rappel, chaque LED doivent respectivement
donner le statut de l’esphome (online ou pas) pour l’une,
donner le statut de l’alarme (armée absence, armée présence ou désactivée) pour la deuxième,
et le statut du rfid (prêt a badger, badge ok et badge non ok)

J’arrive a les allumés et changer leur couleur mais uniquement en manuel a partir de HA, et les allumer et éteindre a partir de son serveur web la aussi manuellement

J’ai essayer avec fastled, neopixel, statut led, statut, esp32rmt, rgblight
Mais je n’arrive a rien d’autre que le fonctionnement manuel cité juste au dessus
le meilleur fonctionnement que j’obtiens c’est avec fastled mais pas ce que je cherche

Voici l’état de mon fichier yaml :

esphome:
  name: esp32-rfid

esp32:
  board: esp32dev
  framework:
    type: arduino


#   Enable logging
logger:


#   Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


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


#   Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


captive_portal:

web_server:
  port: xxxx


sensor:

  - platform: internal_temperature
    name: "Température Esp32-RFID"


#   Lecteur RFID
spi:
    clk_pin: GPIO18
    mosi_pin: GPIO23
    miso_pin: GPIO19

rc522_spi:
    cs_pin: GPIO04
    update_interval: 0.1s
    on_tag:
      then:
      - homeassistant.tag_scanned: !lambda 'return x;'


binary_sensor:

#   Badges RFID
  - platform: rc522
    uid: xxxxxxxxxxxxxxxxxxxx
    name: "Karim"
    id: badge_Karim

  - platform: rc522
    uid: xxxxxxxxxxxxxxxx
    name: "Monique"
    id: badge_Monique

  - platform: rc522
    uid: xxxxxxxxxxxxxxx
    name: "Loane"
    id: badge_Loane


#   LEDs de Statut EspHome, Alarme, RFID
  - platform: status
    name: "Statut EspHome"
    id: status_esphome
    publish_initial_state: true
    on_state:
      if:
        condition: api.connected
        then:
        - light.turn_on:
            id: LED_esphome
            brightness: 20%
            green: 100%
            red: 0%
            blue: 0%

  - platform: status
    name: "Statut Alarme"
    publish_initial_state: true
    id: status_alarme

  - platform: status
    name: "Statut RFID"
    id: status_rfid
    publish_initial_state: true


#   Bouton Tactile Capacitif TTP223
  - platform: gpio
    pin: GPIO35
    name: "Bouton Tactile Armement Alarme"
    id: bouton_tactile_armement_alarme


light:

  - platform: fastled_clockless
    rgb_order: grb
    chipset: WS2812B
    internal: false
    default_transition_length: 0s
    pin: GPIO27
    num_leds: 1
    name: "LED EspHome"
    id: LED_esphome

  - platform: fastled_clockless
    rgb_order: grb
    chipset: WS2812B
    internal: false
    default_transition_length: 0s
    pin: GPIO25
    num_leds: 1
    name: "LED Alarme"
    id: LED_alarme

  - platform: fastled_clockless
    rgb_order: grb
    chipset: WS2812B
    internal: false
    default_transition_length: 0s
    pin: GPIO26
    num_leds: 1
    name: "LED RFID"
    id: LED_rfid


Salut,
Je viens de voir tes messages, mais j’ai du mal à comprendre tes problématiques et ce que tu n’arrives pas à faire. Visiblement ton esp et tes modules semblent fonctionnels.

salut
le soucis est que je n’arrive pas a régler l’automatisation des led pour afficher les états différents,
je n’arrive qu’a les piloté manuellement donc aucun changement de couleur quand changement des états

Personnellement pour des automatismes extrêmement simple je les gères sous ESPhome, mais dans la majorité des cas, je les gères depuis HA. Dans ton cas je pense qu’il serait plus judicieux et facile de faire tes automatisation dans HA

il y a juste un soucis avec la gestion par HA,
on sait allumer éteindre faire clignoter,
mais de mémoire ou j’ai mal vu pas possible de changer de couleur
je peux me tromper

l’idée est bonne mais, je penses que ca amputerais le fonctionnement autonome du boitier en lui même
donc une intégration dans esphome serait plus que souhaitable

Salut,

Ce n’est pas trop compliqué de gérer ça dans ESPHome.
Mais en revanche il va falloir se familiariser avec les automatisations.

Juste un exemple pour ton status_alarme, voici un exemple pour allumer ou éteindre la led correspondante suivant l’état.

  - platform: status
    name: "Statut Alarme"
    publish_initial_state: true
    id: status_alarme
    on_release:
      then:
        - light.turn_off: LED_alarme
    on_press:
      then:
        - light.turn_on: LED_alarme

Plus d’exemples dans cette doc:

Pour allumer avec une couleur différente, l’exemple est ici:

l’exemple que tu me montre utilise l’état d’un bouton si je ne me trompes pas ?

or je souhaite que

  • la led alarme réagisse celon l’état de alarmo et non d’un bouton
  • la led esp dois réagir avec l’état online ou pas de esp32rfid
  • seule la led rfid dois réagir avec les badges

Euh oui je ne t’ai pas fait l’intégrale… :slight_smile:

Comme je comprends ton exemple, tu as mis un binary_sensor pour stocker l’état de l’alarne… je suppose que tu voulais synchroniser ça avec l’état d’Alarmo… cette partie à toi de voir.

D’où l’exemple que je t’ai donné, lui va allumer ou éteindre la led suivant l’état du binary_sensor…

Sinon va falloir préciser ce que tu n’arrives pas à faire, le mieux serait d’y aller étape par étape.

Ben j’ai essayer des choses certainement pas dans le bon sens

la seule étape qu’il reste pour que tout soit fonctionnel ce sont ces led que je n’arrive pas a faire fonctionner selon des états

après je vois pas ce que je peux te dire de plus

1- led esp selon état esp online (vert) ou pas (rouge) led tout le temps allumée de la couleur convenue
( d’après ce que j’ai pu comprendre dans la doc il faut regarder du coté de la vérification mDNS mais je peux faire fausse route la aussi)

2- led rfid quand un badge est lu
( quand les badge enregistrés sont lu (vert ) quand un badge non enregistré (rouge ) éteinte le reste du temps

pour la 3e led pour l’alarme, vu que l’état dois forcement venir de HA,
j’ai donc mis en route directement dans HA 2 automatisations, une quand l’alarme est armé et l’autre quand elle est désarmée
Pour On pas de soucis la led s’allume bien, seule soucis impossible de différencier arm_home de arm_away avec une couleur diffèrent pour chacun en passant par les automatisations de HA
Par contre j’ai un fonctionnement étrange pour le Off, elle s’éteint bien mais il lui faut une quinzaine de secondes pour cela
Je n’ai aucune idée de ou ca provient, vous auriez une idée de ou vient ce décalage ?

Ca ne marche pas ce que tu as mis avec le on_state basé sur la valeur de api.connected ?

Bon là c’est surement celle qui demande un peu plus de logique.
Si je ne me trompe pas il ne se passe rien quand un tag inconnu est lu, non?
Il n’y a que on_tag comme déclencheur. Je n’ai jamais utilisé de lecteur RFID.
Mais en tous cas pour allumer la led, en vert quand un tag est reconnu, il suffit d’ajouter l’action light.turn_on à la suite de ton on_tag

Pour celle-ci il est aussi possible d’ajouter un Sensor Home Assistant dans l’ESP.
Ca va synchroniser l’état de ton Alarme depuis HA vers l’ESP. Et ça devrait permettre avec une on_state de changer la couleur comme tu le souhaite, directement depuis l’ESP.

après l’avoir remis et réessayer si, mais est ce vraiment la bonne solution pour vérifier si le module est bien Online

quand on passe un nouveau badge l’esp et HA les enregistre comme nouveaux badges mais sans rien faire d’autre
par contre y a juste un petit soucis la dedans, aussi bien dans binary sensor que dans light, le on_tag est une option invalide pour l’un comme pour l’autre

j’ai bien créé un sensor homeassistant

  - platform: homeassistant
    id: Etat_Alarmo
    entity_id: alarm_control_panel.alarmo
    attribute: disarmed, armed_home, armed_away

j’ai essayer de regler la LED Alarme
mais j’ai beau essayer plein de chose, je ne vois pas quelle condition mettre, a chaque fois un soucis avec cette condition

  - platform: fastled_clockless
    rgb_order: grb
    chipset: WS2812B
    internal: false
    default_transition_length: 0.5s
    pin: GPIO25
    num_leds: 1
    name: "LED Alarme"
    id: LED_alarme
    on_state:
      if:
        condition: Etat_Alarmo is armed_home
        then:
        - light.turn_on:
            id: LED_esphome
            brightness: 30%
            green: 100%
            red: 0%
            blue: 0% 
Failed config

light.fastled_clockless: [source /config/esphome/esp32-rfid.yaml:120]
  platform: fastled_clockless
  rgb_order: grb
  chipset: WS2812B
  internal: False
  default_transition_length: 0.5s
  pin: GPIO25
  num_leds: 1
  name: LED Alarme
  id: LED_alarme
  on_state: 
    if:
      Unable to find condition with the name 'Etat_Alarmo is armed_home'.
      condition: Etat_Alarmo is armed_home
      then: 
        - light.turn_on: 
            id: LED_esphome
            brightness: 30%
            green: 100%
            red: 0%
            blue: 0%

en parcourant la doc je suis tombé la dessus dans la FAQ

Citation:
La détection de l’état en ligne dans le tableau de bord d’ESPHome utilise par défaut mDNS, donc la désactivation de mDNS entraînera l’affichage par le tableau de bord d’ESPHome de l’état des nœuds créés sans la prise en charge de mDNS pour qu’ils soient toujours hors ligne. Actuellement, cela n’affecte aucune fonctionnalité, mais si vous souhaitez voir l’état en ligne/hors ligne, vous pouvez configurer ESPHome pour qu’il envoie une requête ping à chaque nœud à la place.

par contre comment vérifier cette condition ?

Je pense que prends les trigger comme on_state dans le mauvais sens :wink:
Tout comme on_tag, on_state ce sont des triggers qui sont liés à l’entité qui les génère.
Désolé si je ne suis pas clair :wink:

Mais en gros.
on_tag n’est valide et utilisable que sur ton lecteur de badges, dans le yaml de rc522_spi:
on_state, si tu le met dans le yaml de ta led, il va être appelé au changement d’état de la led… pas de ton rfid ou de ton alarme.

L’idée générale, c’est que tu configures tous les élements que tu as besoin, les sensors, lecteurs, leds et tout le reste.

Ensuite il faut se poser la question de quels éléments vont lancer des actions. Et c’est la ques tu met les on_state, on_tag on_press, la doc de esphome t’informe sur quelles actions sont dispo pour chaque type d’entité.
Et c’est sous le « on_… » qu’on vient allumer ou éteindre les leds.

merci pour cette mise au point,
il est vrai que je me focalisais sur le faites que les led doivent me retourner un état,
et je ne prenais pas en compte que ce ne sont que des outputs ces led, et que c’est le changement d’état du lecteur qui devait prévaloir

bon apres cette mise au point, voici l’avancement du code

led esphome :

  - platform: status
    name: "Statut Esp32-rfid"
    id: status_esp32_rfid
    publish_initial_state: true
    on_state:
      if:
        condition: api.connected
        then:
        - light.turn_on:
            id: LED_esphome
            brightness: 30%
            green: 100%
            red: 0%
            blue: 0%

le fonctionnement fonctionne upside_down_face

je veux dire par la, la led m’informe bien de l’état de l’api, mais comme j’ai pu l’écrire juste au dessus je dois me tourner vers autre chose que l’api, et passer par ce mDNS mais comment écrire cette vérif, encore a trouver et surtout différencier la couleur selon l’état online (vert) ou offline (rouge)

led rfid

rc522_spi:
    cs_pin: GPIO04
    update_interval: 0.1s
    on_tag:
      then:
      - homeassistant.tag_scanned: !lambda 'return x;'
      - light.turn_on:
            id: LED_rfid
            brightness: 50%
            green: 0%
            red: 0%
            blue: 50%
      - delay: 0.5s
      - light.turn_off: LED_rfid   
      - delay: 0.5s
      - light.turn_on:
            id: LED_rfid
            brightness: 50%
            green: 0%
            red: 0%
            blue: 50%
      - delay: 0.5s
      - light.turn_off: LED_rfid             
      - delay: 0.5s
      - light.turn_on:
            id: LED_rfid
            brightness: 50%
            green: 0%
            red: 0%
            blue: 50%
      - delay: 0.5s
      - light.turn_off: LED_rfid
      - delay: 0.5s
      - light.turn_on:
            id: LED_rfid
            brightness: 50%
            green: 0%
            red: 0%
            blue: 50%
      - delay: 0.5s
      - light.turn_off: LED_rfid   
      - delay: 0.5s
      - light.turn_on:
            id: LED_rfid
            brightness: 50%
            green: 0%
            red: 0%
            blue: 50%
      - delay: 0.5s
      - light.turn_off: LED_rfid             
      - delay: 0.5s
      - light.turn_on:
            id: LED_rfid
            brightness: 50%
            green: 0%
            red: 0%
            blue: 50%
      - delay: 0.5s
      - light.turn_off: LED_rfid 

l’automatisation fonctionne, quand je passe un badge la LED clignote bien
maintenant comment faire la différence entre les badges enregistrés et les autres, car actuellement, badge enregistré ou pas, ca active l’automatisation
donc si possible j’aimerais avoir un clignotement rouge pour les badges non enregistrés et garder le clignotement bleu pour les badges enregistrés

maintenant reste plus qu’intégrer l’automatisation de la led alarme en interne dans l’esp et ca seras nickel
actuellement le fonctionnement de la led est gérée direct par HA, mais pour aller jusqu’au bout, j’aimerais l’intégré aussi a l’esp

1 « J'aime »

Tu devrais pouvoir utiliser l’état de tes binary_sensors RC522 dans le on_tag je pense.
Si un des 3 badges que tu connais est à « on » c’est que c’est un badge connu.

Exemple de test pour ça à adapter:

on_tag:
  if:
    condition:
      binary_sensor.is_on: badge_Loane
c522_spi:
    cs_pin: GPIO04
    update_interval: 0.1s
    on_tag:
      if:
        condition:
          binary_sensor.is_on: badge_Loane, badge_Karim, badge_Monique  

voici l’erreur que j’obtiens
apparemment if est une option invalide pour on_tag

Citation
[if] is an invalid option for [on_tag]. Please check the indentation.