changeset 1018:651e5c5b1f3d

write some values to carbon/graphite upon polling Ignore-this: 7f4f05ad994a8c18c61df2da421e0308 darcs-hash:0c36784979aa717161b954a9abddc77aa28434d4
author drewp <drewp@bigasterisk.com>
date Sun, 03 Jan 2016 02:24:27 -0800
parents 3edda1f7a322
children 93cc6238f5ce
files service/arduinoNode/arduinoNode.py
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/service/arduinoNode/arduinoNode.py	Tue Dec 15 00:41:51 2015 -0800
+++ b/service/arduinoNode/arduinoNode.py	Sun Jan 03 02:24:27 2016 -0800
@@ -25,6 +25,9 @@
 sys.path.append("/my/site/magma")
 from stategraph import StateGraph
 
+sys.path.append("/my/proj/room")
+from carbondata import CarbonClient
+
 log = logging.getLogger()
 logging.getLogger('serial').setLevel(logging.WARN)
 
@@ -70,7 +73,7 @@
         self._polledDevs = [d for d in self._devs if d.generatePollCode()]
         
         self._statementsFromInputs = {} # input device uri: latest statements
-
+        self._carbon = CarbonClient(serverHost='bang')
         self.open()
 
     def description(self):
@@ -115,6 +118,18 @@
         elapsed = time.time() - t1
         if elapsed > 1.0:
             log.warn('poll took %.1f seconds' % elapsed)
+        self._exportToGraphite()
+
+    def _exportToGraphite(self):
+        # note this is writing way too often- graphite is storing at a lower res
+        now = time.time()
+        # objects of these statements are suitable as graphite values.
+        graphitePredicates = {ROOM['temperatureF']} 
+        for s, graphiteName in self.graph.subject_objects(ROOM['graphiteName']):
+            for group in self._statementsFromInputs.values():
+                for stmt in group:
+                    if stmt[0] == s and stmt[1] in graphitePredicates:
+                        self._carbon.send(graphiteName, stmt[2].toPython(), now)
         
 
     def currentGraph(self):