Introduction: USB RFID + Python + Pub-Sub (MQTT)

This guide will show you how to setup a USB RFID Reader that uses MQTT to broadcast scan information.

The code uses the 'RFIDIOt' RFID library to read tags and the 'Nyamuk' MQTT client library to publish the information.

Step 1: Installing RFIDIOt

Installation
Download the RFIDIOt library at https://github.com/AdamLaurie/RFIDIOt

The library has a lot of dependencies which may make installation difficult. It is therefore recommended that you use the 'Getting Started' section of the documentation as guide to installation.

Documentation: http://www.rfidiot.org/documentation.html

Testing your installation
With the reader plugged in, place a tag on the reader and run the example script 'cardselect.py' (included with RFIDIOt library). Information about the card reader and tag should be outputted. 

Step 2: Installing Nyamuk

Installation
Download the Nyamuk library at https://github.com/iwanbk/nyamuk
or
pip install nyamuk

Testing your installation
 - Download, install and run the MQTT client 'WMQTT Utility': http://mqtt.org/wiki/doku.php/ia92
 - In the 'Broker TCP/IP address' field enter 'test.mosquitto.org' (without quotes) and click connect. The red circle on the left should now be green.
 - In the 'Subscribe Topic' field enter '/nyamuk/test' and hit the 'Subscribe' button
 - Download and run the following script and you should see the above output in the python shell and the WMQTT Utility.

Step 3: Combining What We've Done

Now that we've got an RFID reader and pub-sub client working separately, it's time to combine the two functions to achieve the end result. The following code does exactly that.

Here's how it works:

 - When the script starts the 'open_reader()' function is called which opens the card reader or exits the script upon failure.
 - Displays card information
 - Connects to the MQTT server of quits upon failure.
 - Begins the main loop
 - The listen_card(card, interval) function starts a loop that checks a card is sitting on the reader. Once a card is found, the card ID,             time and date, and action (placed or removed) is published and the function returns.
 - The listen_remove(card, interval, card_id) function works the same as listen_card, however, the data is publish when the card is removed.
- The loop repeats.


Step 4: Finishing Touches

If everything has gone smoothly you should have a functioning RFID reader that publishes information about the tags it reads!

But why would we waste a computer for such a small task?

Our setup can be transferred over to a Raspberry Pi; a small ARM GNU/Linux box that costs only $35 (model B).

Here's what to do:
 - Setup the Raspberry Pi: http://www.raspberrypi.org/quick-start-guide
 - Download and install the RFIDOt and Nyamuk libraries.
 - Copy over the code
 - Run the code
 - (Optional) Remove the screen, keyboard, mouse (not needed once running).