iirfid - read RFID tags

This plugin reads RFID tags (mifare tags, specifically) and stores all presented tags in sensors/rfid, sequentially. Tags that are known (by hardware address) are also stored in sensors/tags.

The intention of this separation is that a tag is a more high-level concept (such as “Jacks keyring”) that is used to trigger further actions. Tags using other methods than RFID (for example barcodes or QR-codes) would be merged here with the RFID tags, so the concept of a tag becomes a thing that can trigger actions when presented to a suitable reader.

requirements

The main requirement is an RFID-reader that connects to a computer using an Arduino and a USB interface. It actually requires a very specific RFID-reader of which we happen to have two lying around at CWI (constructed by Interactive Institute for a previous project), which no-one else probably has, so this plugin is more an example than anything else.

To use this plugin as the basis for support of another RFID reader: modify the script iirfid/scripts/rfidread.py to support the reader you have.

schema

Some of the data is unique to the iirfid plugin, some other data (with tags or rfid in the name in stead of iirfid) is shared with other rfid reader plugins.

  • sensors/iirfidrfid: Collects hardware unique IDs (in order of the time the tags were presented) in sub-elements:
    • rfidtag: 4 colon-separated hex bytes.
  • sensors/tags: Collects “known” tags in order presented in sub-elements:
    • tag: human-readable name.
  • plugindata/iirfid/host: if non-empty, host to which the RFID reader is connected (must be reachable with ssh without password). String.
  • plugindata/iirfid/serial: Serial device to which RFID reader is connected. String.
  • plugindata/iirfid/baud: Baud rate. Integer.
  • plugindata/rfid/tag: Maps mifare tag unique IDs to human-readable names:
    • id: 4 colon-separated hex bytes.
    • name: human readable name.

actions

  • start: starts the rfid reader asynchronously, telling it to POST each tag presented to this Igor, sensors/rfid/rfidtag.
  • cleanup: remove all entries in sensors/rfid and sensors/tags except the last one.

internal actions

  • When a new raw tag is entered into sensors/iirfidrfid look it up in plugindata/rfid and post the user-friendly name in sensors/tags.