Mercurial > code > home > repos > homeauto
comparison service/arduinoNode/arduinoNode.py @ 981:d9bbbd8d86f6
arduinoNode: use -v for logging; support a PUT with subj+pred in query, obj in body
Ignore-this: 744c3c7d95655430b8ec547e56f6b4bc
darcs-hash:20150514082612-312f9-f77a103ef67321aa5a0ffd7991b92befd5dac37f
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Thu, 14 May 2015 01:26:12 -0700 |
parents | f3023410d875 |
children | 2161c71c7b02 |
comparison
equal
deleted
inserted
replaced
980:2f1cb8b5950a | 981:d9bbbd8d86f6 |
---|---|
9 import serial | 9 import serial |
10 import cyclone.web | 10 import cyclone.web |
11 from rdflib import Graph, Namespace, URIRef, Literal, RDF | 11 from rdflib import Graph, Namespace, URIRef, Literal, RDF |
12 from rdflib.parser import StringInputSource | 12 from rdflib.parser import StringInputSource |
13 from twisted.internet import reactor, task | 13 from twisted.internet import reactor, task |
14 from docopt import docopt | |
14 | 15 |
15 import devices | 16 import devices |
16 import dotrender | 17 import dotrender |
17 import rdflib_patch | 18 import rdflib_patch |
18 rdflib_patch.fixQnameOfUriWithTrailingSlash() | 19 rdflib_patch.fixQnameOfUriWithTrailingSlash() |
326 | 327 |
327 def rdfGraphBody(body, headers): | 328 def rdfGraphBody(body, headers): |
328 g = Graph() | 329 g = Graph() |
329 g.parse(StringInputSource(body), format='nt') | 330 g.parse(StringInputSource(body), format='nt') |
330 return g | 331 return g |
331 | 332 |
332 class OutputPage(cyclone.web.RequestHandler): | 333 class OutputPage(cyclone.web.RequestHandler): |
333 def post(self): | 334 def post(self): |
335 # for old ui; use PUT instead | |
334 stmts = list(rdfGraphBody(self.request.body, self.request.headers)) | 336 stmts = list(rdfGraphBody(self.request.body, self.request.headers)) |
335 for b in self.settings.boards: | 337 for b in self.settings.boards: |
336 b.outputStatements(stmts) | 338 b.outputStatements(stmts) |
337 | 339 |
340 def put(self): | |
341 subj = URIRef(self.get_argument('s')) | |
342 pred = URIRef(self.get_argument('p')) | |
343 | |
344 turtleLiteral = self.request.body | |
345 try: | |
346 obj = Literal(float(turtleLiteral)) | |
347 except TypeError: | |
348 obj = Literal(turtleLiteral) | |
349 | |
350 stmt = (subj, pred, obj) | |
351 for b in self.settings.boards: | |
352 b.outputStatements([stmt]) | |
353 | |
354 | |
338 class Boards(cyclone.web.RequestHandler): | 355 class Boards(cyclone.web.RequestHandler): |
339 def get(self): | 356 def get(self): |
340 | 357 |
341 self.set_header('Content-type', 'application/json') | 358 self.set_header('Content-type', 'application/json') |
342 self.write(json.dumps({ | 359 self.write(json.dumps({ |
346 def currentSerialDevices(): | 363 def currentSerialDevices(): |
347 log.info('find connected boards') | 364 log.info('find connected boards') |
348 return glob.glob('/dev/serial/by-id/*') | 365 return glob.glob('/dev/serial/by-id/*') |
349 | 366 |
350 def main(): | 367 def main(): |
368 arg = docopt(""" | |
369 Usage: reasoning.py [options] | |
370 | |
371 -v Verbose | |
372 """) | |
373 log.setLevel(logging.WARN) | |
374 if arg['-v']: | |
375 from twisted.python import log as twlog | |
376 twlog.startLogging(sys.stdout) | |
377 | |
378 log.setLevel(logging.DEBUG) | |
379 | |
351 config = Config() | 380 config = Config() |
352 current = currentSerialDevices() | 381 current = currentSerialDevices() |
353 | 382 |
354 def onChange(): | 383 def onChange(): |
355 # notify reasoning | 384 # notify reasoning |
366 boards[0].deployToArduino() | 395 boards[0].deployToArduino() |
367 | 396 |
368 log.info('open boards') | 397 log.info('open boards') |
369 for b in boards: | 398 for b in boards: |
370 b.startPolling() | 399 b.startPolling() |
371 | 400 |
372 from twisted.python import log as twlog | |
373 twlog.startLogging(sys.stdout) | |
374 | |
375 log.setLevel(logging.DEBUG) | |
376 reactor.listenTCP(9059, cyclone.web.Application([ | 401 reactor.listenTCP(9059, cyclone.web.Application([ |
377 (r"/()", cyclone.web.StaticFileHandler, { | 402 (r"/()", cyclone.web.StaticFileHandler, { |
378 "path": "static", "default_filename": "index.html"}), | 403 "path": "static", "default_filename": "index.html"}), |
379 (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "static"}), | 404 (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "static"}), |
380 (r'/boards', Boards), | 405 (r'/boards', Boards), |