diff service/arduinoNode/arduinoNode.py @ 620:5c750342604d

arduinonode to docker Ignore-this: 8f689c7491819bc47200018b517fd7de
author drewp@bigasterisk.com
date Wed, 07 Aug 2019 20:23:04 -0700
parents 12f9f1838fb5
children 686079900c20
line wrap: on
line diff
--- a/service/arduinoNode/arduinoNode.py	Sun Aug 04 13:03:18 2019 -0700
+++ b/service/arduinoNode/arduinoNode.py	Wed Aug 07 20:23:04 2019 -0700
@@ -1,5 +1,5 @@
 from __future__ import division
-import glob, sys, logging, subprocess, socket, hashlib, time, tempfile
+import glob, sys, logging, subprocess, socket, hashlib, time, tempfile, pkg_resources
 import shutil, json
 import serial
 import cyclone.web
@@ -24,11 +24,9 @@
 
 from loggingserial import LoggingSerial
 
-sys.path.append("../../lib")
 from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
 from export_to_influxdb import InfluxExporter
 
-sys.path.append("/my/proj/rdfdb")
 from rdfdb.patch import Patch
 from rdfdb.rdflibpatch import inContext
 
@@ -57,7 +55,7 @@
         self.configGraph = ConjunctiveGraph()
 
         self.etcPrefix = 'arduino/'
-        
+
         self.boards = []
         self.reread()
 
@@ -78,7 +76,7 @@
         if getattr(self, 'rereadLater', None):
             self.rereadLater.cancel()
         self.rereadLater = None
-        
+
     def reread(self):
         self.cancelRead()
         log.info('read config')
@@ -117,7 +115,7 @@
         for b in self.boards:
             b.startPolling(period=.1 if not self.slowMode else 10)
 
-        
+
 class Board(object):
     """an arduino connected to this computer"""
     baudrate = 115200
@@ -138,7 +136,7 @@
         self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex)
                                    for devIndex, dev in enumerate(self._devs))
         self._polledDevs = [d for d in self._devs if d.generatePollCode()]
-        
+
         self._statementsFromInputs = {} # input device uri: latest statements
         self._lastPollTime = {} # input device uri: time()
         self._influx = InfluxExporter(self.configGraph)
@@ -154,14 +152,14 @@
             'baudrate': self.baudrate,
             'devices': [d.description() for d in self._devs],
             }
-        
+
     def open(self):
         self.ser = LoggingSerial(port=self.dev, baudrate=self.baudrate,
                                  timeout=2)
-        
+
     def startPolling(self, period=.5):
         task.LoopingCall(self._poll).start(period)
-            
+
     def _poll(self):
         """
         even boards with no inputs need some polling to see if they're
@@ -175,7 +173,7 @@
         except Exception as e:
             import traceback; traceback.print_exc()
             log.warn("poll: %r" % e)
-            
+
     def _pollWork(self):
         t1 = time.time()
         self.ser.write("\x60\x00") # "poll everything"
@@ -229,7 +227,7 @@
         self.masterGraph.patch(Patch.fromDiff(inContext(prev, dev),
                                               inContext(new, dev)))
         self._statementsFromInputs[dev] = new
-              
+
     def _sendOneshot(self, oneshot):
         body = (' '.join('%s %s %s .' % (s.n3(), p.n3(), o.n3())
                          for s,p,o in oneshot)).encode('utf8')
@@ -309,13 +307,13 @@
         except Exception as e:
             log.info("can't get code version from board: %r" % e)
         return False
-        
+
     def deployToArduino(self):
         code, cksum = self.generateArduinoCode()
 
         if self._boardIsCurrent(cksum):
             return
-        
+
         try:
             if hasattr(self, 'ser'):
                 self.ser.close()
@@ -338,11 +336,11 @@
             main.write(code)
 
         subprocess.check_call(['make', 'upload'], cwd=workDir)
-        
+
 
     def currentGraph(self):
         g = Graph()
-        
+
 
         for dev in self._devs:
             for stmt in dev.hostStatements():
@@ -354,7 +352,7 @@
         configGraph = self.settings.config.graph
         dot = dotrender.render(configGraph, self.settings.config.boards)
         self.write(dot)
-        
+
 class ArduinoCode(cyclone.web.RequestHandler):
     def get(self):
         board = [b for b in self.settings.config.boards if
@@ -374,7 +372,7 @@
         stmts = list(rdfGraphBody(self.request.body, self.request.headers))
         for b in self.settings.config.boards:
             b.outputStatements(stmts)
-            
+
     def put(self):
         subj = URIRef(self.get_argument('s'))
         pred = URIRef(self.get_argument('p'))
@@ -388,8 +386,8 @@
         stmt = (subj, pred, obj)
         for b in self.settings.config.boards:
             b.outputStatements([stmt])
-        
-        
+
+
 class Boards(cyclone.web.RequestHandler):
     def get(self):
         self.set_header('Content-type', 'application/json')
@@ -397,11 +395,11 @@
             'host': hostname,
             'boards': [b.description() for b in self.settings.config.boards]
         }, indent=2))
-            
+
 def currentSerialDevices():
     log.info('find connected boards')
     return glob.glob('/dev/serial/by-id/*')
-        
+
 def main():
     arg = docopt("""
     Usage: arduinoNode.py [options]
@@ -421,10 +419,11 @@
 
     masterGraph = PatchableGraph()
     config = Config(masterGraph, slowMode=arg['-l'])
+    static = pkg_resources.resource_filename('homeauto_anynode', 'static/')
 
     reactor.listenTCP(9059, cyclone.web.Application([
-        (r"/()", cyclone.web.StaticFileHandler, {
-            "path": "static", "default_filename": "index.html"}),
+        (r"/(|output-widgets.html)", cyclone.web.StaticFileHandler, {
+            "path": static, "default_filename": "index.html"}),
         (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "static"}),
         (r'/stats/(.*)', StatsHandler, {'serverName': 'arduinoNode'}),
         (r'/boards', Boards),