Mercurial > code > home > repos > homeauto
diff service/rfid_pn532_py/rfid.py @ 1235:d8aa414f21d9
py3, rfid-console rename
Ignore-this: 1b28d912e8847685a87c0c9ccb703608
darcs-hash:1812ff3e65cffea158d10f03e565942a684b4bd4
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sun, 07 Apr 2019 03:58:51 -0700 |
parents | c571a45c944f |
children | d7ede2330b6d |
line wrap: on
line diff
--- a/service/rfid_pn532_py/rfid.py Sun Apr 07 03:58:05 2019 -0700 +++ b/service/rfid_pn532_py/rfid.py Sun Apr 07 03:58:51 2019 -0700 @@ -6,7 +6,7 @@ from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler from rdflib import Namespace, URIRef, Literal, Graph from rdflib.parser import StringInputSource -from twisted.internet import reactor, task +from twisted.internet import reactor, task, defer import cyclone.web from cyclone.httpclient import fetch import cyclone @@ -14,14 +14,16 @@ from logsetup import log, enableTwistedLog from greplin import scales from greplin.scales.cyclonehandler import StatsHandler +from export_to_influxdb import InfluxExporter from tags import NfcDevice, FakeNfc ROOM = Namespace('http://projects.bigasterisk.com/room/') ctx = ROOM['frontDoorWindowRfidCtx'] -STATS = scales.collection('/web', +STATS = scales.collection('/root', scales.PmfStat('cardReadPoll'), + scales.IntStat('newCardReads'), ) class OutputPage(cyclone.web.RequestHandler): @@ -96,7 +98,7 @@ self.overwrite_any_tag = overwrite_any_tag self.log = {} # cardIdUri : most recent seentime - self.pollPeriodSecs = 5.1 + self.pollPeriodSecs = .1 self.expireSecs = 5 task.LoopingCall(self.poll).start(self.pollPeriodSecs) @@ -107,25 +109,29 @@ self.flushOldReads(now) - for tag in self.reader.getTags(): # blocks for a bit - uid = tag.uid() - log.debug('detected tag uid=%r', uid) - cardIdUri = uidUri(uid) + try: + for tag in self.reader.getTags(): # blocks for a bit + uid = tag.uid() + log.debug('detected tag uid=%r', uid) + cardIdUri = uidUri(uid) - is_new = cardIdUri not in self.log - self.log[cardIdUri] = now - if is_new: - tag.connect() - try: - textLit = Literal(tag.readBlock(1).rstrip('\x00')) - if self.overwrite_any_tag and not looksLikeBigasterisk(textLit): - log.info("block 1 was %r; rewriting it", textLit) - tag.writeBlock(1, randomBody()) + is_new = cardIdUri not in self.log + self.log[cardIdUri] = now + if is_new: + STATS.newCardReads += 1 + tag.connect() + try: textLit = Literal(tag.readBlock(1).rstrip('\x00')) - finally: - tag.disconnect() - self.startCardRead(cardIdUri, textLit) - + if self.overwrite_any_tag and not looksLikeBigasterisk(textLit): + log.info("block 1 was %r; rewriting it", textLit) + tag.writeBlock(1, randomBody()) + textLit = Literal(tag.readBlock(1).rstrip('\x00')) + finally: + tag.disconnect() + self.startCardRead(cardIdUri, textLit) + except OSError as e: + log.error(e) + reactor.stop() def flushOldReads(self, now): for uri in list(self.log): if self.log[uri] < now - self.expireSecs: @@ -186,6 +192,15 @@ masterGraph = PatchableGraph() reader = NfcDevice() if not arg['-n'] else FakeNfc() + ie=InfluxExporter(Graph()) + ie.exportStats(STATS, ['root.cardReadPoll.count', + 'root.cardReadPoll.95percentile', + 'root.newCardReads', + ], + period_secs=10, + retain_days=7, + ) + loop = ReadLoop(reader, masterGraph, overwrite_any_tag=arg['--overwrite_any_tag']) port = 10012