Tid & närvaro System med hallon och Phidgets (3 / 3 steg)
Steg 3: RFID-taggar
Vi kommer att använda en enkel textfil för att lagra RFID-etiketten. Med ett Python-skript kommer vi läsa etiketten och om filen innehåller det, vi kommer att spela in en ny rad i filen attendance.txt. På samma gång skickar skriptet ett meddelande som visas.
Skapa en ny fil /home/pi/tag.txt med vissa Taggar
Skapa en ny fil /home/pi/attendance.txt där vi lagrar rörelser inkommande och utgående
Skapa filen /home/pi/rfid.py med detta innehåll
#! / usr/bin/env python
#Basic import
ctypes importera *
importera sys
Importera tid
importera datetime
importera urllib2
importera urllib
#Phidget särskilda import
importera från Phidgets.PhidgetException PhidgetErrorCodes, PhidgetException
från Phidgets.Events.Events importera AttachEventArgs, DetachEventArgs, ErrorEventArgs, OutputChangeEventArgs, TagEventArgs
från Phidgets.Devices.RFID importera RFID, RFIDTagProtocol
tagsList=list()
tagStatus=list()
med open('tag.txt') som f:
tagsList = f.read().splitlines()
för indexet i range(len(tagsList)):
tagStatus.append(0)
#Create ett RFID-objekt
försök:
RFID = RFID()
utom RuntimeError som e:
skriva ut ("Runtime undantag: %s" % e.details)
Print("Exiting...")
Exit(1)
#Information med funktionen
def displayDeviceInfo():
print("|------------|----------------------------------|--------------|------------|")
skriva ut ("| - anslutna-| - typ-| - serienr-| - Version-|")
print("|------------|----------------------------------|--------------|------------|")
skriva ut ("| - %8s-| - % 30s-| - % 10d-| - %8 d-|" % (rfid.isAttached(), rfid.getDeviceName(), rfid.getSerialNum(), rfid.getDeviceVersion()))
print("|------------|----------------------------------|--------------|------------|")
skriva ut ("Antal utgångar: %i--antenn Status: %s--ombord LED Status: %s" % (rfid.getOutputCount(), rfid.getAntennaOn(), rfid.getLEDOn()))
#Event handler återkopplingsfunktioner
def rfidAttached(e):
Fäst = e.device
skriva ut ("RFID %i bifogad!" % (attached.getSerialNum()))
def rfidDetached(e):
fristående = e.device
skriva ut ("RFID %i fristående!" % (detached.getSerialNum()))
def rfidError(e):
försök:
Source = e.device
skriva ut ("RFID-% i: Phidget fel % i: %s" % (source.getSerialNum(), e.eCode, e.description))
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
def rfidOutputChanged(e):
Source = e.device
skriva ut ("RFID-% i: utdata %i stat: %s" % (source.getSerialNum(), e.index, e.state))
def rfidTagGained(e):
Source = e.device
rfid.setLEDOn(1)
försök:
om tagStatus[tagsList.index(e.tag)] == 0:
postdata = "Välkommen, ha en bra dag"
tagStatus[tagsList.index(e.tag)] = 1
annat:
postdata = "Hej, vi ses i morgon"
tagStatus[tagsList.index(e.tag)] = 0
om e.tag i tagsList:
query_args = {"riktning": postdata}
URL = "http://localhost/web/message.php"
user_agent = "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.4 (KHTML, lik Gecko) Chrome/22.0.1229.94 Safari / 537.4 "
headers = {"User-Agent": user_agent}
data=urllib.URLEncode(query_args)
begäran = urllib2. Request(URL,data,headers)
Request.add_header ("Referer", "http://localhost/web/")
Response=urllib2.urlopen(Request).Read()
nu = datetime.datetime.now()
FH = öppna ("/home/pi/attendance.txt", "a")
#fh.write (now.strftime (' %s'))
#fh.write (", {}; {}; \n".format (tagStatus[tagsList.index(e.tag)], e.tag))
FH.write ("{}, {}; {}; \n".format (now.strftime('%s'), tagStatus[tagsList.index(e.tag)], e.tag))
FH.Close
Förutom ValueError:
skriva ut ("Fel okänd tag %s" % (e.tag))
def rfidTagLost(e):
Source = e.device
rfid.setLEDOn(0)
Time.Sleep(2)
postdata = "Redo..."
query_args = {"riktning": postdata}
URL = "http://localhost/web/message.php"
user_agent = "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.4 (KHTML, lik Gecko) Chrome/22.0.1229.94 Safari / 537.4 "
headers = {"User-Agent": user_agent}
data=urllib.URLEncode(query_args)
begäran = urllib2. Request(URL,data,headers)
Request.add_header ("Referer", "http://localhost/web/")
Response=urllib2.urlopen(Request).Read()
#Main programkod
försök:
rfid.setOnAttachHandler(rfidAttached)
rfid.setOnDetachHandler(rfidDetached)
rfid.setOnErrorhandler(rfidError)
rfid.setOnOutputChangeHandler(rfidOutputChanged)
rfid.setOnTagHandler(rfidTagGained)
rfid.setOnTagLostHandler(rfidTagLost)
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
Print("Exiting...")
Exit(1)
skriva ut ("öppning phidget objekt...")
försök:
rfid.openPhidget()
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
Print("Exiting...")
Exit(1)
skriva ut ("väntar på Bifoga...")
försök:
rfid.waitForAttach(10000)
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
försök:
rfid.closePhidget()
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
Print("Exiting...")
Exit(1)
Print("Exiting...")
Exit(1)
annat:
displayDeviceInfo()
skriva ut ("vrida på RFID-antennen...")
rfid.setAntennaOn(True)
skriva ut ("Tryck Enter för att avsluta...")
Chr = sys.stdin.read(1)
försök:
lastTag = rfid.getLastTag()
skriva ut ("sista Tag: %s" % (lastTag))
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
Print("Closing...")
försök:
rfid.closePhidget()
utom PhidgetException som e:
skriva ut ("Phidget undantag % i: %s" % (e.code, e.details))
Print("Exiting...")
Exit(1)
Print("Done.")
Exit(0)
Kör skriptet
sudo python /home/pi/rfid.py
RFID-läsare parkeras, om närmar sig en tagg bildskärmen visar ett välkomstmeddelande.
Samtidigt spara skriptet en ny rad i attendance.txt.
En variabel lagrar statligt av taggen och närmar sig tillbaka samma tagg visas ett meddelande av hälsning till utgången