comparison service/arduinoNode/arduinoNode.py @ 213:9c8674329a13

write some values to carbon/graphite upon polling Ignore-this: 7f4f05ad994a8c18c61df2da421e0308
author drewp@bigasterisk.com
date Sun, 03 Jan 2016 02:24:27 -0800
parents 6c6897a139da
children 254d656af72e
comparison
equal deleted inserted replaced
212:a7dd996617ef 213:9c8674329a13
23 from loggingserial import LoggingSerial 23 from loggingserial import LoggingSerial
24 24
25 sys.path.append("/my/site/magma") 25 sys.path.append("/my/site/magma")
26 from stategraph import StateGraph 26 from stategraph import StateGraph
27 27
28 sys.path.append("/my/proj/room")
29 from carbondata import CarbonClient
30
28 log = logging.getLogger() 31 log = logging.getLogger()
29 logging.getLogger('serial').setLevel(logging.WARN) 32 logging.getLogger('serial').setLevel(logging.WARN)
30 33
31 ROOM = Namespace('http://projects.bigasterisk.com/room/') 34 ROOM = Namespace('http://projects.bigasterisk.com/room/')
32 HOST = Namespace('http://bigasterisk.com/ruler/host/') 35 HOST = Namespace('http://bigasterisk.com/ruler/host/')
68 self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex) 71 self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex)
69 for devIndex, dev in enumerate(self._devs)) 72 for devIndex, dev in enumerate(self._devs))
70 self._polledDevs = [d for d in self._devs if d.generatePollCode()] 73 self._polledDevs = [d for d in self._devs if d.generatePollCode()]
71 74
72 self._statementsFromInputs = {} # input device uri: latest statements 75 self._statementsFromInputs = {} # input device uri: latest statements
73 76 self._carbon = CarbonClient(serverHost='bang')
74 self.open() 77 self.open()
75 78
76 def description(self): 79 def description(self):
77 """for web page""" 80 """for web page"""
78 return { 81 return {
113 if byte != 'x': 116 if byte != 'x':
114 raise ValueError("after poll, got %x instead of 'x'" % byte) 117 raise ValueError("after poll, got %x instead of 'x'" % byte)
115 elapsed = time.time() - t1 118 elapsed = time.time() - t1
116 if elapsed > 1.0: 119 if elapsed > 1.0:
117 log.warn('poll took %.1f seconds' % elapsed) 120 log.warn('poll took %.1f seconds' % elapsed)
121 self._exportToGraphite()
122
123 def _exportToGraphite(self):
124 # note this is writing way too often- graphite is storing at a lower res
125 now = time.time()
126 # objects of these statements are suitable as graphite values.
127 graphitePredicates = {ROOM['temperatureF']}
128 for s, graphiteName in self.graph.subject_objects(ROOM['graphiteName']):
129 for group in self._statementsFromInputs.values():
130 for stmt in group:
131 if stmt[0] == s and stmt[1] in graphitePredicates:
132 self._carbon.send(graphiteName, stmt[2].toPython(), now)
118 133
119 134
120 def currentGraph(self): 135 def currentGraph(self):
121 g = Graph() 136 g = Graph()
122 137