changeset 1539:8c410b493da4

more renaming, build updates Ignore-this: 94a0df55a1d8a74d90ec84bb7351d3ef darcs-hash:c75b289c837213f294a22de94cd86b0348d4123f
author drewp <drewp@bigasterisk.com>
date Mon, 10 Feb 2020 23:56:42 -0800
parents 4857e22137c0
children 0c8aa432ec9d
files service/rdf_to_mqtt/Dockerfile service/rdf_to_mqtt/index.html service/rdf_to_mqtt/mqtt_graph_bridge.py service/rdf_to_mqtt/rdf_to_mqtt.py service/rdf_to_mqtt/tasks.py
diffstat 5 files changed, 140 insertions(+), 157 deletions(-) [+]
line wrap: on
line diff
--- a/service/rdf_to_mqtt/Dockerfile	Mon Feb 10 00:03:38 2020 -0800
+++ b/service/rdf_to_mqtt/Dockerfile	Mon Feb 10 23:56:42 2020 -0800
@@ -10,4 +10,4 @@
 
 EXPOSE 10011:10011
 
-CMD [ "python3", "./mqtt_graph_bridge.py" ]
+CMD [ "python3", "./rdf_to_mqtt.py" ]
--- a/service/rdf_to_mqtt/index.html	Mon Feb 10 00:03:38 2020 -0800
+++ b/service/rdf_to_mqtt/index.html	Mon Feb 10 23:56:42 2020 -0800
@@ -1,7 +1,7 @@
 <!doctype html>
 <html>
   <head>
-    <title>mqtt_graph_bridge</title>
+    <title>rdf_to_mqtt</title>
     <meta charset="utf-8">
     <script src="/lib/polymer/1.0.9/webcomponentsjs/webcomponents.min.js"></script>
     <script src="/lib/require/require-2.3.3.js"></script>
@@ -11,7 +11,7 @@
 
   </head>
   <body class="rdfBrowsePage">
-    mqtt_graph_bridge
+    rdf_to_mqtt
 
 
     <p>Send demo statements to bridge:</p>
--- a/service/rdf_to_mqtt/mqtt_graph_bridge.py	Mon Feb 10 00:03:38 2020 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-"""
-We get output statements that are like light9's deviceAttrs (:dev1 :color "#ff0000"),
-convert those to outputAttrs (:dev1 :red 255; :green 0; :blue 0) and post them to mqtt.
-
-This is like light9/bin/collector.
-"""
-import json
-
-from docopt import docopt
-from rdflib import Namespace, Literal
-from twisted.internet import reactor
-import cyclone.web
-
-from mqtt_client import MqttClient
-from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
-from standardservice.logsetup import log, verboseLogging
-import rdf_over_http
-
-ROOM = Namespace('http://projects.bigasterisk.com/room/')
-
-devs = {
-    ROOM['kitchenLight']: {
-        'root': 'h801_skylight',
-        'ctx': ROOM['kitchenH801']
-    },
-    ROOM['kitchenCounterLight']: {
-        'root': 'h801_counter',
-        'ctx': ROOM['kitchenH801']
-    },
-    ROOM['livingLampShelf']: {
-        'root': 'sonoff_0/switch/sonoff_basic_relay/command',
-        'ctx': ROOM['sonoff_0'],
-        'values': 'binary',
-    },
-}
-
-
-class OutputPage(cyclone.web.RequestHandler):
-    def put(self):
-        for stmt in rdf_over_http.rdfStatementsFromRequest(
-                self.request.arguments,
-                self.request.body,
-                self.request.headers):
-            self._onStatement(stmt)
-
-    def _onStatement(self, stmt):
-        log.info(f'incoming statement: {stmt}')
-        ignored = True
-        for dev, attrs in devs.items():
-            if stmt[0] == ROOM['frontWindow']:
-                ignored = ignored and self._publishFrontScreenText(stmt)
-
-            if stmt[0:2] == (dev, ROOM['brightness']):
-                log.info(f'brightness request: {stmt}')
-                brightness = stmt[2].toPython()
-
-                if attrs.get('values', '') == 'binary':
-                    self._publishOnOff(attrs, brightness)
-                else:
-                    self._publishRgbw(attrs, brightness)
-                    # try to stop saving this; let the device be the master usually
-                    self.settings.masterGraph.patchObject(
-                        attrs['ctx'],
-                        stmt[0], stmt[1], stmt[2])
-                ignored = False
-        if ignored:
-            log.warn("ignoring %s", stmt)
-
-    def _publishOnOff(self, attrs, brightness):
-        msg = 'OFF'
-        if brightness > 0:
-            msg = 'ON'
-        self._publish(topic=attrs['root'], message=msg)
-
-    def _publishRgbw(self, attrs, brightness):
-        for chan, scale in [('w1', 1),
-                            ('r', 1),
-                            ('g', .8),
-                            ('b', .8)]:
-            self._publish(
-                topic=f"{attrs['root']}/light/kit_{chan}/command",
-                messageJson={
-                    'state': 'ON',
-                    'brightness': int(brightness * 255)
-                })
-
-    def _publishFrontScreenText(self, stmt):
-        ignored = True
-        for line in ['line1', 'line2', 'line3', 'line4']:
-            if stmt[1] == ROOM[line]:
-                ignored = False
-                self.settings.mqtt.publish(
-                    b'frontwindow/%s' % line.encode('ascii'),
-                    stmt[2].toPython())
-        return ignored
-
-    def _publish(self, topic: str, messageJson: object=None,
-                 message: str=None):
-        if messageJson is not None:
-            message = json.dumps(messageJson)
-        self.settings.mqtt.publish(
-            topic.encode('ascii'),
-            message.encode('ascii'))
-
-
-if __name__ == '__main__':
-    arg = docopt("""
-    Usage: mqtt_graph_bridge.py [options]
-
-    -v   Verbose
-    """)
-    verboseLogging(arg['-v'])
-
-    masterGraph = PatchableGraph()
-
-    mqtt = MqttClient(clientId='mqtt_graph_bridge', brokerPort=1883)
-
-    port = 10008
-    reactor.listenTCP(port, cyclone.web.Application([
-        (r"/()", cyclone.web.StaticFileHandler,
-         {"path": ".", "default_filename": "index.html"}),
-        (r'/output', OutputPage),
-        ], mqtt=mqtt, debug=arg['-v']), interface='::')
-    log.warn('serving on %s', port)
-
-    for dev, attrs in devs.items():
-        masterGraph.patchObject(attrs['ctx'],
-                                dev, ROOM['brightness'], Literal(0.0))
-
-    reactor.run()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/rdf_to_mqtt/rdf_to_mqtt.py	Mon Feb 10 23:56:42 2020 -0800
@@ -0,0 +1,127 @@
+"""
+We get output statements that are like light9's deviceAttrs (:dev1 :color "#ff0000"),
+convert those to outputAttrs (:dev1 :red 255; :green 0; :blue 0) and post them to mqtt.
+
+This is like light9/bin/collector.
+"""
+import json
+from mqtt_client import MqttClient
+from docopt import docopt
+from rdflib import Namespace, Literal
+from twisted.internet import reactor
+import cyclone.web
+
+from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
+from standardservice.logsetup import log, verboseLogging
+import rdf_over_http
+
+ROOM = Namespace('http://projects.bigasterisk.com/room/')
+
+devs = {
+    ROOM['kitchenLight']: {
+        'root': 'h801_skylight',
+        'ctx': ROOM['kitchenH801']
+    },
+    ROOM['kitchenCounterLight']: {
+        'root': 'h801_counter',
+        'ctx': ROOM['kitchenH801']
+    },
+    ROOM['livingLampShelf']: {
+        'root': 'sonoff_0/switch/sonoff_basic_relay/command',
+        'ctx': ROOM['sonoff_0'],
+        'values': 'binary',
+    },
+}
+
+
+class OutputPage(cyclone.web.RequestHandler):
+    def put(self):
+        for stmt in rdf_over_http.rdfStatementsFromRequest(
+                self.request.arguments,
+                self.request.body,
+                self.request.headers):
+            self._onStatement(stmt)
+
+    def _onStatement(self, stmt):
+        log.info(f'incoming statement: {stmt}')
+        ignored = True
+        for dev, attrs in devs.items():
+            if stmt[0] == ROOM['frontWindow']:
+                ignored = ignored and self._publishFrontScreenText(stmt)
+
+            if stmt[0:2] == (dev, ROOM['brightness']):
+                log.info(f'brightness request: {stmt}')
+                brightness = stmt[2].toPython()
+
+                if attrs.get('values', '') == 'binary':
+                    self._publishOnOff(attrs, brightness)
+                else:
+                    self._publishRgbw(attrs, brightness)
+                    # try to stop saving this; let the device be the master usually
+                    self.settings.masterGraph.patchObject(
+                        attrs['ctx'],
+                        stmt[0], stmt[1], stmt[2])
+                ignored = False
+        if ignored:
+            log.warn("ignoring %s", stmt)
+
+    def _publishOnOff(self, attrs, brightness):
+        msg = 'OFF'
+        if brightness > 0:
+            msg = 'ON'
+        self._publish(topic=attrs['root'], message=msg)
+
+    def _publishRgbw(self, attrs, brightness):
+        for chan, scale in [('w1', 1),
+                            ('r', 1),
+                            ('g', .8),
+                            ('b', .8)]:
+            self._publish(
+                topic=f"{attrs['root']}/light/kit_{chan}/command",
+                messageJson={
+                    'state': 'ON',
+                    'brightness': int(brightness * 255)
+                })
+
+    def _publishFrontScreenText(self, stmt):
+        ignored = True
+        for line in ['line1', 'line2', 'line3', 'line4']:
+            if stmt[1] == ROOM[line]:
+                ignored = False
+                self.settings.mqtt.publish(
+                    b'frontwindow/%s' % line.encode('ascii'),
+                    stmt[2].toPython())
+        return ignored
+
+    def _publish(self, topic: str, messageJson: object=None,
+                 message: str=None):
+        if messageJson is not None:
+            message = json.dumps(messageJson)
+        self.settings.mqtt.publish(
+            topic.encode('ascii'),
+            message.encode('ascii'))
+
+
+if __name__ == '__main__':
+    arg = docopt("""
+    Usage: rdf_to_mqtt.py [options]
+
+    -v   Verbose
+    """)
+    verboseLogging(arg['-v'])
+
+    mqtt = MqttClient(clientId='rdf_to_mqtt', brokerPort=1883)
+
+    port = 10008
+    reactor.listenTCP(port, cyclone.web.Application([
+        (r"/()", cyclone.web.StaticFileHandler,
+         {"path": ".", "default_filename": "index.html"}),
+        (r'/output', OutputPage),
+        ], mqtt=mqtt, debug=arg['-v']), interface='::')
+    log.warn('serving on %s', port)
+
+    for dev, attrs in devs.items():
+        masterGraph.patchObject(attrs['ctx'],
+                                dev, ROOM['brightness'], Literal(0.0))
+
+    reactor.run()
--- a/service/rdf_to_mqtt/tasks.py	Mon Feb 10 00:03:38 2020 -0800
+++ b/service/rdf_to_mqtt/tasks.py	Mon Feb 10 23:56:42 2020 -0800
@@ -1,40 +1,26 @@
-from invoke import task
-
-JOB = 'rdf_to_mqtt'
-PORT = 10008
-TAG = f'bang6:5000/{JOB}_x86:latest'
-
-@task
-def build_image(ctx):
-    ctx.run(f'docker build --network=host -t {TAG} .')
+from invoke import Collection, task
+import sys
+sys.path.append('/my/proj/release')
+from serv_tasks import serv_tasks
 
-@task(pre=[build_image])
-def push_image(ctx):
-    ctx.run(f'docker push {TAG}')
-
-@task(pre=[build_image])
-def shell(ctx):
-    ctx.run(f'docker run --name={JOB}_shell --rm -it --cap-add SYS_PTRACE --net=host {TAG} /bin/bash', pty=True)
+ns = Collection()
+serv_tasks(ns, 'serv.n3', 'rdf_to_mqtt')
 
-@task(pre=[build_image])
-def local_run(ctx):
-    ctx.run(f'docker run --name={JOB}_local --rm -it --net=host -v /my/proj/homeauto/lib:/lib_src {TAG} python3 rdf_to_mqtt.py -v', pty=True)
-
-@task(pre=[push_image])
-def redeploy(ctx):
-    ctx.run(f'supervisorctl -s http://bang:9001/ restart {JOB}_{PORT}')
-
+# leftover frontdoor setup I think
+@ns.add_task
 @task
 def program_board_over_usb(ctx):
     tag = 'esphome/esphome'
     ctx.run(f"docker run --rm -v `pwd`:/config --device=/dev/ttyUSB0 -it {tag} door.yaml run", pty=True)
 # config_skylight.yaml run --no-logs
 
+@ns.add_task
 @task
 def monitor_usb(ctx):
     tag = 'esphome/esphome'
     ctx.run(f"docker run --rm -v `pwd`:/config --device=/dev/ttyUSB0 -it {tag} door.yaml logs", pty=True)
 
+@ns.add_task
 @task
 def tail_mqtt(ctx):
     ctx.run(f'mosquitto_sub -h bang -p 10010 -d -v -t \#')