changeset 464:1007ca70c34d

use PatchableGraph Ignore-this: dc954906750062923ef8205f8a8e8952
author drewp@bigasterisk.com
date Sat, 20 Apr 2019 23:38:56 -0700
parents 1ceb26846eca
children 003343daeb62
files service/dpms/dpms_service.py service/dpms/makefile service/dpms/requirements.txt
diffstat 3 files changed, 30 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/service/dpms/dpms_service.py	Sat Apr 20 23:36:30 2019 -0700
+++ b/service/dpms/dpms_service.py	Sat Apr 20 23:38:56 2019 -0700
@@ -26,25 +26,27 @@
 from influxdb import InfluxDBClient
 import subprocess, sys, socket, time, os
 from rdflib import Namespace, URIRef
+from logsetup import log, enableTwistedLog
+
+from dpms import DPMS, DPMSModeOn
 DEV = Namespace("http://projects.bigasterisk.com/device/")
 ROOM = Namespace("http://projects.bigasterisk.com/room/")
 
 sys.path.append("/my/site/magma")
-from stategraph import StateGraph
-sys.path.append("../../lib")
-from localdisplay import setDisplayToLocalX
+from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler
+#sys.path.append("../../lib")
+#from localdisplay import setDisplayToLocalX
 
 influx = InfluxDBClient('bang6', 9060, 'root', 'root', 'main')
 
+os.environ['DISPLAY'] = ':0.0'
+
+dpms = DPMS()
+host = socket.gethostname()
+
 def getMonitorState():
-    out = subprocess.check_output(['xset', 'q'])
-    for line in out.splitlines():
-        line = line.strip()
-        if line == 'Monitor is On':
-            return 'on'
-        elif line in ['Monitor is Off', 'Monitor is in Suspend', 'Monitor is in Standby']:
-            return 'off'
-    raise NotImplementedError("no matching monitor line in xset output")
+    level, enabled = dpms.Info()
+    return 'on' if level == DPMSModeOn else 'off'
 
 class Root(cyclone.web.RequestHandler):
     def get(self):
@@ -66,19 +68,6 @@
         else:
             raise NotImplementedError("body must be 'on' or 'off'")
 
-
-class Graph(cyclone.web.RequestHandler):
-    def get(self):
-        host = socket.gethostname()
-        g = StateGraph(ctx=DEV['dpms/%s' % host])
-        g.add((URIRef("http://bigasterisk.com/host/%s/monitor" % host),
-               ROOM['powerStateMeasured'],
-               ROOM[getMonitorState()]))
-
-        self.set_header('Content-type', 'application/x-trig')
-        self.write(g.asTrig())
-
-
 class Poller(object):
     def __init__(self):
         self.lastSent = None
@@ -87,15 +76,19 @@
         
     def poll(self):
         now = int(time.time())
-        try:
-            state = getMonitorState()
-        except subprocess.CalledProcessError, e:
-            print repr(e)
-            os.abort()
+        state = getMonitorState()
+
+        ctx=DEV['dpms/%s' % host]
+        masterGraph.patchObject(
+            ctx,
+            URIRef("http://bigasterisk.com/host/%s/monitor" % host),
+            ROOM['powerStateMeasured'],
+            ROOM[getMonitorState()])
+        
         if state != self.lastSent or (now > self.lastSentTime + 3600):
             influx.write_points([
                 {'measurement': 'power',
-                 'tags': {'device': '%sMonitor' % socket.gethostname()},
+                 'tags': {'device': '%sMonitor' % host},
                  'fields': {'value': 1 if state == 'on' else 0},
                  'time': now
                  }], time_precision='s')
@@ -103,13 +96,14 @@
             self.lastSent = state
             self.lastSentTime = now
 
-setDisplayToLocalX()
+masterGraph = PatchableGraph()
 poller = Poller()
             
 reactor.listenTCP(9095, cyclone.web.Application([
     (r'/', Root),
     (r'/monitor', Monitor),
-    (r'/graph', Graph),
+    (r'/graph', CycloneGraphHandler, {'masterGraph': masterGraph}),
+    (r'/graph/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
 ]), interface='::')
 
 reactor.run()
--- a/service/dpms/makefile	Sat Apr 20 23:36:30 2019 -0700
+++ b/service/dpms/makefile	Sat Apr 20 23:38:56 2019 -0700
@@ -14,3 +14,6 @@
 
 local_run:
 	docker run --rm -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /home/drewp/.Xauthority:/root/.Xauthority -p 9095:9095 --net=host bang6:5000/dpms python ./dpms_service.py 
+
+redeploy: build_image build_image_pi
+	sudo /my/proj/ansible/playbook -t homeauto_dpms
--- a/service/dpms/requirements.txt	Sat Apr 20 23:36:30 2019 -0700
+++ b/service/dpms/requirements.txt	Sat Apr 20 23:38:56 2019 -0700
@@ -6,5 +6,5 @@
 influxdb==4.1.1
 service_identity
 https://github.com/dirjud/python-dpms/archive/master.zip
-https://projects.bigasterisk.com/rdfdb/rdfdb-0.6.0.tar.gz
+https://projects.bigasterisk.com/rdfdb/rdfdb-0.8.0.tar.gz
 rdflib-jsonld==0.3