annotate service/rfid/rfid.py @ 1524:13b7e4de3824

whitespace Ignore-this: c727f388f197a6fae88595fe6d455c7d darcs-hash:971e4474b4dbd35a722be670f5599298fb5ec83f
author drewp <drewp@bigasterisk.com>
date Wed, 05 Feb 2020 00:29:13 -0800
parents 0da337780f22
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 from docopt import docopt
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 from rdfdb.patch import Patch
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 from rdflib import Namespace, URIRef, Literal, Graph
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 from rdflib.parser import StringInputSource
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 from twisted.internet import reactor, task
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 import cyclone.web
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 from cyclone.httpclient import fetch
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
9 import logging, time, json, random, string
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 from MFRC522.SimpleMFRC522 import SimpleMFRC522
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 from logsetup import log, enableTwistedLog
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
12 import private
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
13 from greplin import scales
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
14 from greplin.scales.cyclonehandler import StatsHandler
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 ROOM = Namespace('http://projects.bigasterisk.com/room/')
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 ctx = ROOM['frontDoorWindowRfidCtx']
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
20 cardOwner = {
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
21 URIRef('http://bigasterisk.com/rfidCard/93a7591a77'):
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
22 URIRef('http://bigasterisk.com/foaf.rdf#drewp'),
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
23 }
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
24
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
25 STATS = scales.collection('/web',
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
26 scales.PmfStat('cardReadPoll'),
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
27 )
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 def rdfGraphBody(body, headers):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 g = Graph()
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 g.parse(StringInputSource(body), format='nt')
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 return g
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 class OutputPage(cyclone.web.RequestHandler):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 def put(self):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 user = URIRef(self.request.headers['x-foaf-agent'])
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 arg = self.request.arguments
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 if arg.get('s') and arg.get('p'):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 subj = URIRef(arg['s'][-1])
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 pred = URIRef(arg['p'][-1])
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 obj = URIRef(self.request.body)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 stmt = (subj, pred, obj)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 else:
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 g = rdfGraphBody(self.request.body, self.request.headers)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 assert len(g) == 1, len(g)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 stmt = g.triples((None, None, None)).next()
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 self._onStatement(user, stmt)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 post = put
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
48
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 def _onStatement(self, user, stmt):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 # write rfid to new key, etc.
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 if stmt[1] == ROOM['keyContents']:
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 return
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 log.warn("ignoring %s", stmt)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
55 def uidUri(card_id):
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
56 return URIRef('http://bigasterisk.com/rfidCard/%010x' % card_id)
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
57
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
58 def uidArray(uri):
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
59 prefix, h = uri.rsplit('/', 1)
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
60 if prefix != 'http://bigasterisk.com/rfidCard':
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
61 raise ValueError(uri)
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
62 return [int(h[i * 2: i * 2 + 2], 16) for i in range(0, len(h), 2)]
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
63
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
64 class Rewrite(cyclone.web.RequestHandler):
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
65 def post(self):
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
66 agent = URIRef(self.request.headers['x-foaf-agent'])
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
67 body = json.loads(self.request.body)
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
68
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
69 _, uid = reader.read_id()
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
70 log.info('current card id: %r %r', _, uid)
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
71 if uid is None:
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
72 self.set_status(404, "no card present")
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
73 # maybe retry a few more times since the card might be nearby
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
74 return
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
75
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
76 text = ''.join(random.choice(string.uppercase) for n in range(32))
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
77 log.info('%s rewrites %s to %s, to be owned by %s',
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
78 agent, uid, text, body['user'])
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
79
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
80 #reader.KEY = private.rfid_key
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
81 reader.write(uid, text)
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
82 log.info('done with write')
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
83
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
84
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 sensor = ROOM['frontDoorWindowRfid']
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87 class ReadLoop(object):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 def __init__(self, reader, masterGraph):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 self.reader = reader
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 self.masterGraph = masterGraph
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91 self.log = {} # cardIdUri : most recent seentime
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
93 self.pollPeriodSecs = .1
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94 self.expireSecs = 2
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
95
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 task.LoopingCall(self.poll).start(self.pollPeriodSecs)
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
97
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
98 @STATS.cardReadPoll.time()
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
99 def poll(self):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
100 now = time.time()
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102 self.flushOldReads(now)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 card_id, text = self.reader.read()
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
105 if card_id is None or text == '':
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
106 # text=='' could be legit, but it's probably a card that's
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
107 # still being read.
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 return
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
110 cardIdUri = uidUri(card_id)
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
111 textLit = Literal(text.rstrip().decode('ascii', 'replace'))
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
112
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
113 is_new = cardIdUri not in self.log
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
114 self.log[cardIdUri] = now
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
115 if is_new:
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116 self.startCardRead(cardIdUri, textLit)
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
117
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
118 def flushOldReads(self, now):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
119 for uri in self.log.keys():
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
120 if self.log[uri] < now - self.expireSecs:
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
121 self.endCardRead(uri)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
122 del self.log[uri]
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
123
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
124 def startCardRead(self, cardUri, text):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
125 p = Patch(addQuads=[(sensor, ROOM['reading'], cardUri, ctx),
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
126 (cardUri, ROOM['cardText'], text, ctx)],
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
127 delQuads=[])
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
128 self.masterGraph.patch(p)
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
129 log.info('read card: id=%s %r', cardUri, str(text))
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
130 self._sendOneshot([(sensor, ROOM['startReading'], cardUri),
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
131 (cardUri, ROOM['cardText'], text)])
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
132
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
133 def endCardRead(self, cardUri):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
134 delQuads = []
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
135 for spo in self.masterGraph._graph.triples(
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
136 (sensor, ROOM['reading'], cardUri)):
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
137 delQuads.append(spo + (ctx,))
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
138 for spo in self.masterGraph._graph.triples(
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
139 (cardUri, ROOM['cardText'], None)):
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
140 delQuads.append(spo + (ctx,))
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
141
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
142 self.masterGraph.patch(Patch(addQuads=[], delQuads=delQuads))
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
143
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
144 def _sendOneshot(self, oneshot):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
145 body = (' '.join('%s %s %s .' % (s.n3(), p.n3(), o.n3())
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
146 for s,p,o in oneshot)).encode('utf8')
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
147 url = 'http://bang6:9071/oneShot'
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
148 d = fetch(method='POST',
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
149 url=url,
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
150 headers={'Content-Type': ['text/n3']},
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
151 postdata=body,
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
152 timeout=5)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
153 def err(e):
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
154 log.info('oneshot post to %r failed: %s',
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
155 url, e.getErrorMessage())
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
156 d.addErrback(err)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
157
1524
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
158
13b7e4de3824 whitespace
drewp <drewp@bigasterisk.com>
parents: 1523
diff changeset
159
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
160 if __name__ == '__main__':
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
161 arg = docopt("""
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
162 Usage: rfid.py [options]
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
163
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
164 -v Verbose
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
165 """)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
166 log.setLevel(logging.INFO)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
167 if arg['-v']:
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
168 enableTwistedLog()
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
169 log.setLevel(logging.DEBUG)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
170
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
171 masterGraph = PatchableGraph()
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
172 reader = SimpleMFRC522(gain=0x07)
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
173
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
174 loop = ReadLoop(reader, masterGraph)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
175
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
176 port = 10012
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
177 reactor.listenTCP(port, cyclone.web.Application([
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
178 (r"/()", cyclone.web.StaticFileHandler,
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
179 {"path": ".", "default_filename": "index.html"}),
1523
0da337780f22 dep updates; graph url renames; and other build updates
drewp <drewp@bigasterisk.com>
parents: 1264
diff changeset
180 (r"/graph/rfid", CycloneGraphHandler, {'masterGraph': masterGraph}),
0da337780f22 dep updates; graph url renames; and other build updates
drewp <drewp@bigasterisk.com>
parents: 1264
diff changeset
181 (r"/graph/rfid/events", CycloneGraphEventsHandler,
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
182 {'masterGraph': masterGraph}),
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
183 (r'/output', OutputPage),
1264
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
184 (r'/rewrite', Rewrite),
c5b13d630d90 last version of rc522 reader; i moved onto pn532 now
drewp <drewp@bigasterisk.com>
parents: 1194
diff changeset
185 (r'/stats/(.*)', StatsHandler, {'serverName': 'rfid'}),
1194
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
186 ], masterGraph=masterGraph, debug=arg['-v']), interface='::')
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
187 log.warn('serving on %s', port)
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
188
ee9cbe5817a4 rfid reader service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
189 reactor.run()