Erkennen, wo ein NFC-Tag gescannt wurde

Hallo,

Ich habe mehrere RFID-Reader per ESP-Home in HA eingebunden und diese senden die ID des Tags an Homeassistant und ich kann sie auch in Automationen einsetzen.
Allerdings kann ich nirgendwo erkennen, an welchem Reader ein Tag gescannt wurde, was für einen sinnvollen Einsatz aber essentiell ist. Sonst müsste ich für jeden Ort, an dem ein Reader eingesetzt wird, ein anderes Tag verwenden.

pn532_i2c:
  update_interval: 1s      
  on_tag:
    then:
      - homeassistant.tag_scanned: !lambda 'return x;'

Einen binary_sensor im jeweiligen ESP einzusetzen

binary_sensor:
  - platform: pn532
    uid: 74-10-37-94

scheidet aus, weil damit das Tag in dem jeweiligen ESP gespeichert ist. Zudem ist es äußerst unkomfortabel, jedes zusätzliche Tag jedes mal in jedem ESP zu speichern und den jedes mal neu zu programmieren.

Die Frage also: Wie kann ich in HA erkennen, an welchem Reader ein Tag gescannt wurde?

Hallo,
ich habe das mal kurz getestet. Bei den Triggervariablen wird auch die Device_id des Gerätes übermittelt mit dem der Tag gescannt wurde.


Auch in den Attributen der Tag-Entität wird die Geräte_id gespeichert.

Wo finde ich diese Anzeige und wo kann ich die Geräte-ID in einer Automation eintragen?

Ich kann zwar das Attribut “zuletzt gescannt von Geräte_ID” eintragen, finde die aber nicht.

Um an die device_id des Scanners zu kommen fügst du deinen Scanner temporär als Trigger hinzu. Dann noch in den yaml-modus wechseln und schon hat man die device_id.


Ich habe jetzt die Device-ID in die Automation eingetragen.
Das funktioniert genau ein mal, weil die Geräte-ID sich ja nicht mehr ändert, wenn man ein Tag mehrmals an einem Scanner scannt.

Irgendwie fehlt mir da noch etwas. Ich will ja nicht jedes mal an einer anderen Tür ins Haus gehen.

Dann solltest du im Dann Bereich die device_id als Bedingung nehmen. Z.B. so.

description: ""
mode: single
triggers:
  - trigger: tag
    tag_id: 3c7603d0-9cf0-4ad4-a2c5-73617857d0bc
conditions: []
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: tag.test123
            attribute: last_scanned_by_device_id
            state: 6d7c21b4895714f349e19e5bafb6cd8e
        sequence: []

Das funktioniert auch nicht. Die Aktion wird immer noch an beiden Scannern ausgelöst.

alias: Neue Automation
description: ""
triggers:
  - trigger: state
    entity_id:
      - tag.04_7b_a1_5a_af_4f_81
conditions: []
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: tag.04_7b_a1_5a_af_4f_81
            attribute: scanned_by_device_id
            state: 825bc8c7a60f7cb2e8fc384b0294e507
        sequence: []
  - action: light.toggle
    metadata: {}
    data:
      rgb_color:
        - 255
        - 0
        - 0
    target:
      entity_id: light.esp_md_az_az3_l1
mode: single

So, bitte.

alias: Neue Automation
description: ""
triggers:
  - trigger: state
    entity_id:
      - tag.04_7b_a1_5a_af_4f_81
conditions: []
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: tag.04_7b_a1_5a_af_4f_81
            attribute: scanned_by_device_id
            state: 825bc8c7a60f7cb2e8fc384b0294e507
        sequence:
          - action: light.toggle
            metadata: {}
            data:
              rgb_color:
                - 255
                - 0
                - 0
            target:
              entity_id: light.esp_md_az_az3_l1
mode: single

Nun schaltet es gar nicht mehr.

Hier bin ich dann wohl raus. Bzw. HA ist an dieser Stelle raus.

Dann werden es eine Hand voll ESP, die die ID des Tags an einen zentralen ESP senden, der dann die Türen öffnet.
Das kann man in einer echten Programmiersprache programmieren und auch verstehen.

Dann ist das wohl so.
Aber falls doch noch Interesse besteht dann schau doch mal in den traces nach, wie in meinem ersten Screenshot, ob die device IDs stimmen.

Ich habe es mal mit der Triggervariablen erfolgreich getestet.

alias: Neue Automation
description: ""
triggers:
  - trigger: state
    entity_id:
      - tag.04_7b_a1_5a_af_4f_81
conditions: []
actions:
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ trigger.event.data.device_id ==
              "825bc8c7a60f7cb2e8fc384b0294e507" }} 
        sequence:
          - action: light.toggle
            metadata: {}
            data:
              rgb_color:
                - 255
                - 0
                - 0
            target:
              entity_id: light.esp_md_az_az3_l1
mode: single
1 „Gefällt mir“

Das funktioniert auch nicht.
in den Traces bekomme ich eine Fehlermeldung:

Ich habe mir jetzt eine Krücke gebaut, die zwar einen GPIO auf den ESPs belegt, aber für mich funktioniert. (Auf einem ESP8266 verwende ich dafür einfach die onboard-LED)

Auf den ESPs habe ich jeweils einen switch angelegt, der beim Scannen eines Tags ein und wieder ausgeschaltet wird.
Diesen Switch frage ich in der Automation in der “dann” Sektion zusätzlich ab und erkenne damit, an welchem Scanner ein Tag gescannt wurde.

Auf den ESPs jeweils mit unterschiedlichen Nummern für die Switches:

pn532_i2c:
  update_interval: 1s      
  on_tag:
    then:
      - switch.turn_on: scanner1
      - delay: 100ms
      - homeassistant.tag_scanned: !lambda 'return x;'      
      - delay: 100ms
      - switch.turn_off: scanner1

switch:
  - platform: gpio
    pin: GPIO12
    id: scanner1
    name: "Scanner1"

Die dazu gehörende Automation:

alias: Neue Automation3
description: ""
triggers:
  - trigger: state
    entity_id:
      - tag.04_7b_a1_5a_af_4f_81
conditions:
  - condition: state
    entity_id: switch.esp_klingel_ht_scanner1
    state: "on"
actions:
  - action: light.toggle
    metadata: {}
    data:
      rgb_color:
        - 255
        - 255
        - 255
    target:
      entity_id:
        - light.esp_md_az_az3_l2
mode: single