Mercurial > code > home > repos > homeauto
comparison service/arduinoNode/arduinoNode.py @ 218:f8ffb9d8d982
multi-boards on one service, new devices, devices return their current
Ignore-this: e214852bca67519e79f9ddb3644576e1
values in the graph, jsonld support, multiple temp sensors on OW bus
author | drewp@bigasterisk.com |
---|---|
date | Sun, 03 Jan 2016 02:29:14 -0800 |
parents | 254d656af72e |
children | e606f1d89d89 |
comparison
equal
deleted
inserted
replaced
217:163cfa384372 | 218:f8ffb9d8d982 |
---|---|
131 for group in self._statementsFromInputs.values(): | 131 for group in self._statementsFromInputs.values(): |
132 for stmt in group: | 132 for stmt in group: |
133 if stmt[0] == s and stmt[1] in graphitePredicates: | 133 if stmt[0] == s and stmt[1] in graphitePredicates: |
134 self._carbon.send(graphiteName, stmt[2].toPython(), now) | 134 self._carbon.send(graphiteName, stmt[2].toPython(), now) |
135 | 135 |
136 | |
137 def currentGraph(self): | 136 def currentGraph(self): |
138 g = Graph() | 137 g = Graph() |
139 | 138 |
140 g.add((HOST[socket.gethostname()], ROOM['connectedTo'], self.uri)) | 139 g.add((HOST[socket.gethostname()], ROOM['connectedTo'], self.uri)) |
141 | 140 |
142 for si in self._statementsFromInputs.values(): | 141 for si in self._statementsFromInputs.values(): |
143 for s in si: | 142 for s in si: |
144 g.add(s) | 143 g.add(s) |
144 for dev in self._devs: | |
145 for stmt in dev.hostStatements(): | |
146 g.add(stmt) | |
145 return g | 147 return g |
146 | 148 |
147 def outputStatements(self, stmts): | 149 def outputStatements(self, stmts): |
148 unused = set(stmts) | 150 unused = set(stmts) |
149 for dev in self._devs: | 151 for dev in self._devs: |
163 raise ValueError( | 165 raise ValueError( |
164 "%s sendOutput/generateActionCode didn't use " | 166 "%s sendOutput/generateActionCode didn't use " |
165 "matching output bytes" % dev.__class__) | 167 "matching output bytes" % dev.__class__) |
166 log.info("success") | 168 log.info("success") |
167 if unused: | 169 if unused: |
168 log.warn("No devices cared about these statements:") | 170 log.info("Board %s doesn't care about these statements:", self.uri) |
169 for s in unused: | 171 for s in unused: |
170 log.warn(repr(s)) | 172 log.info("%r", s) |
171 | 173 |
172 def generateArduinoCode(self): | 174 def generateArduinoCode(self): |
173 generated = { | 175 generated = { |
174 'baudrate': self.baudrate, | 176 'baudrate': self.baudrate, |
175 'includes': '', | 177 'includes': '', |
341 g.add(stmt) | 343 g.add(stmt) |
342 | 344 |
343 if self.get_argument('config', 'no') == 'yes': | 345 if self.get_argument('config', 'no') == 'yes': |
344 for stmt in self.settings.config.graph: | 346 for stmt in self.settings.config.graph: |
345 g.add(stmt) | 347 g.add(stmt) |
346 | 348 |
349 if self.request.headers.get('accept') == 'application/ld+json': | |
350 self.set_header('Content-type', 'application/ld+json') | |
351 self.write(g.asJsonLd()) | |
352 return | |
353 | |
347 self.set_header('Content-type', 'application/x-trig') | 354 self.set_header('Content-type', 'application/x-trig') |
348 self.write(g.asTrig()) | 355 self.write(g.asTrig()) |
349 | 356 |
350 class Dot(cyclone.web.RequestHandler): | 357 class Dot(cyclone.web.RequestHandler): |
351 def get(self): | 358 def get(self): |
355 | 362 |
356 class ArduinoCode(cyclone.web.RequestHandler): | 363 class ArduinoCode(cyclone.web.RequestHandler): |
357 def get(self): | 364 def get(self): |
358 board = [b for b in self.settings.boards if | 365 board = [b for b in self.settings.boards if |
359 b.uri == URIRef(self.get_argument('board'))][0] | 366 b.uri == URIRef(self.get_argument('board'))][0] |
360 self.set_header('Content-type', 'text/plain') | 367 self.set_header('Content-Type', 'text/plain') |
361 code, cksum = board.generateArduinoCode() | 368 code, cksum = board.generateArduinoCode() |
362 self.write(code) | 369 self.write(code) |
363 | 370 |
364 def rdfGraphBody(body, headers): | 371 def rdfGraphBody(body, headers): |
365 g = Graph() | 372 g = Graph() |
400 log.info('find connected boards') | 407 log.info('find connected boards') |
401 return glob.glob('/dev/serial/by-id/*') | 408 return glob.glob('/dev/serial/by-id/*') |
402 | 409 |
403 def main(): | 410 def main(): |
404 arg = docopt(""" | 411 arg = docopt(""" |
405 Usage: reasoning.py [options] | 412 Usage: arduinoNode.py [options] |
406 | 413 |
407 -v Verbose | 414 -v Verbose |
408 """) | 415 """) |
409 log.setLevel(logging.WARN) | 416 log.setLevel(logging.WARN) |
410 if arg['-v']: | 417 if arg['-v']: |
426 continue | 433 continue |
427 log.info("we have board %s connected at %s" % (board, dev)) | 434 log.info("we have board %s connected at %s" % (board, dev)) |
428 b = Board(dev, config.graph, board, onChange) | 435 b = Board(dev, config.graph, board, onChange) |
429 boards.append(b) | 436 boards.append(b) |
430 | 437 |
431 boards[0].deployToArduino() | 438 for b in boards: |
439 b.deployToArduino() | |
432 | 440 |
433 log.info('open boards') | 441 log.info('open boards') |
434 for b in boards: | 442 for b in boards: |
435 b.startPolling() | 443 b.startPolling() |
436 | 444 |