changeset 1523:0da337780f22

dep updates; graph url renames; and other build updates Ignore-this: 4603ef3d8db650a13e543dad8580ade8 darcs-hash:0840491cd6a4e4966f47a2abca0ed30ec434022a
author drewp <drewp@bigasterisk.com>
date Wed, 05 Feb 2020 00:23:06 -0800
parents 040e12a696a9
children 13b7e4de3824
files service/arduinoNode/requirements.txt service/arduinoNode/tasks.py service/dhcpleases/dhcpleases.py service/dhcpleases/requirements.txt service/dpms/Dockerfile service/dpms/dpms_service.py service/dpms/makefile service/dpms/requirements.txt service/dpms/tasks.py service/environment/Dockerfile service/environment/environment.py service/environment/makefile service/environment/requirements.txt service/environment/tasks.py service/environment/twilight.py service/frontDoorLock/front_door_lock.py service/frontDoorLock/requirements.txt service/mqtt_graph_bridge/mqtt_graph_bridge.py service/mqtt_graph_bridge/requirements.txt service/piNode/Dockerfile service/piNode/tasks.py service/powerEagle/reader.py service/powerEagle/requirements.txt service/powerEagle/tasks.py service/reasoning/reasoning.py service/reasoning/requirements.txt service/reasoning/tasks.py service/rfid/rfid.py service/rfid_pn532_py/rfid.py service/store/Dockerfile service/store/requirements.txt service/store/store.py service/store/tasks.py service/tinyScreen/requirements.txt service/tinyScreen/tiny_screen.py service/tradfri/requirements.txt service/tradfri/tradfri.py service/wifi/requirements.txt service/wifi/wifi.py service/xidle/requirements.txt
diffstat 40 files changed, 169 insertions(+), 160 deletions(-) [+]
line wrap: on
line diff
--- a/service/arduinoNode/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/arduinoNode/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -15,10 +15,10 @@
 service_identity
 
 cycloneerr
-devices_shared==0.3.0
+devices_shared==0.5.0
 export_to_influxdb==0.1.0
-homeauto_anynode==0.8.0
-patchablegraph==0.5.0
-rdfdb==0.8.0
+homeauto_anynode==0.9.0
+patchablegraph==0.5.0  # pin for py2
+rdfdb==0.8.0  # pin for py2
 standardservice==0.6.0
-patchablegraph==0.5.0
+
--- a/service/arduinoNode/tasks.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/arduinoNode/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -7,7 +7,7 @@
 
 @task
 def build_image(ctx):
-    ctx.run(f'docker build -t {TAG} .')
+    ctx.run(f'docker build --network=host -t {TAG} .')
 
 @task(pre=[build_image])
 def push_image(ctx):
--- a/service/dhcpleases/dhcpleases.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/dhcpleases/dhcpleases.py	Wed Feb 05 00:23:06 2020 -0800
@@ -87,8 +87,8 @@
             [
                 (r"/()", cyclone.web.StaticFileHandler,
                  {"path": ".", "default_filename": "index.html"}),
-                (r'/graph', CycloneGraphHandler, {'masterGraph': masterGraph}),
-                (r'/graph/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
+                (r'/graph/dhcpLeases', CycloneGraphHandler, {'masterGraph': masterGraph}),
+                (r'/graph/dhcpLeases/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
                 (r'/stats/(.*)', StatsHandler, {'serverName': 'dhcpleases'}),
             ], masterGraph=masterGraph
         ))
--- a/service/dhcpleases/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/dhcpleases/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -4,6 +4,6 @@
 rdflib==4.2.2
 
 cycloneerr
-patchablegraph==0.5.0
-rdfdb==0.8.0
-standardservice==0.3.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
+standardservice==0.6.0
--- a/service/dpms/Dockerfile	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/dpms/Dockerfile	Wed Feb 05 00:23:06 2020 -0800
@@ -2,13 +2,12 @@
 RUN apt-get install -y x11-xserver-utils
 
 COPY requirements.txt ./
-RUN pip install -r requirements.txt
-
-ADD https://projects.bigasterisk.com/rdfdb/more.tgz ./
-RUN tar xvzf more.tgz
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements.txt
+# not sure why this doesn't work from inside requirements.txt
+RUN pip3 install -U 'https://github.com/drewp/cyclone/archive/python3.zip?v3'
 
 COPY *.py ./
 
 EXPOSE 9095
 
-CMD [ "python", "./dpms_service.py" ]
+CMD [ "python3", "./dpms_service.py" ]
--- a/service/dpms/dpms_service.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/dpms/dpms_service.py	Wed Feb 05 00:23:06 2020 -0800
@@ -102,8 +102,8 @@
 reactor.listenTCP(9095, cyclone.web.Application([
     (r'/', Root),
     (r'/monitor', Monitor),
-    (r'/graph', CycloneGraphHandler, {'masterGraph': masterGraph}),
-    (r'/graph/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
+    (r'/graph/dpms', CycloneGraphHandler, {'masterGraph': masterGraph}),
+    (r'/graph/dpms/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
 ]), interface='::')
 
 reactor.run()
--- a/service/dpms/makefile	Wed Feb 05 00:22:48 2020 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-build_image:
-	(cd /my/proj/homeauto/lib; tar czf /my/site/projects/rdfdb/more.tgz *.py)
-	docker build --network=host -t bang6:5000/dpms_x86:latest .
-	docker push bang6:5000/dpms_x86:latest
-
-build_image_pi:
-	(cd /my/proj/homeauto/lib; tar czf /my/site/projects/rdfdb/more.tgz *.py)
-	docker build --file Dockerfile.pi --network=host -t bang6:5000/dpms_pi:latest .
-	docker push bang6:5000/dpms_pi:latest
-
-
-shell:
-	docker run --rm -it --cap-add SYS_PTRACE -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /home/drewp/.Xauthority:/root/.Xauthority --net=host bang6:5000/dpms_x86:latest  /bin/sh
-
-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	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/dpms/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -1,10 +1,13 @@
+cyclone
+influxdb==4.1.1
 isodate==0.4.8
 python-dateutil
+rdflib-jsonld==0.3
 rdflib==4.2.2
-twisted
-cyclone
-influxdb==4.1.1
 service_identity
-https://github.com/dirjud/python-dpms/archive/master.zip
-https://projects.bigasterisk.com/rdfdb/rdfdb-0.8.0.tar.gz
-rdflib-jsonld==0.3
+git+https://github.com/thiagokokada/python-dpms.git#egg=dpms
+
+git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
+patchablegraph==0.11.0
+rdfdb==0.21.0
+standardservice==0.6.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/dpms/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -0,0 +1,33 @@
+from invoke import task
+JOB = 'dpms'
+PORT = 9095
+TAG_x86 = f'bang6:5000/{JOB.lower()}_x86:latest'
+TAG_pi = f'bang6:5000/{JOB.lower()}_pi:latest'
+ANSIBLE_TAG = 'homeauto_dpms'
+
+@task
+def build_image_x86(ctx):
+    ctx.run(f'docker build --network=host -t {TAG_x86} .')
+@task
+def build_image_pi(ctx):
+    ctx.run(f'docker build --file Dockerfile.pi --network=host -t {TAG_pi} .')
+
+@task(pre=[build_image_x86])
+def push_image_x86(ctx):
+    ctx.run(f'docker push {TAG_x86}')
+@task(pre=[build_image_pi])
+def push_image_pi(ctx):
+    ctx.run(f'docker push {TAG_pi}')
+
+@task(pre=[build_image_x86])
+def shell(ctx):
+    ctx.run(f'docker run --rm -it --cap-add SYS_PTRACE -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /home/drewp/.Xauthority:/root/.Xauthority --net=host {TAG_x86} /bin/bash', pty=True)
+
+@task(pre=[build_image_x86])
+def local_run(ctx):
+    ctx.run(f'docker run --rm -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /home/drewp/.Xauthority:/root/.Xauthority -p {PORT}:{PORT} -v /etc/resolv.conf:/etc/resolv.conf --net=host {TAG_x86} python3 dpms_service.py -v', pty=True)
+
+@task(pre=[push_image_x86, push_image_pi])
+def redeploy(ctx):
+    ctx.run(f'sudo /my/proj/ansible/playbook -t {ANSIBLE_TAG}')
+    #ctx.run(f'supervisorctl -s http://bang:9001/ restart {JOB}_{PORT}')
--- a/service/environment/Dockerfile	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/environment/Dockerfile	Wed Feb 05 00:23:06 2020 -0800
@@ -2,16 +2,17 @@
 
 WORKDIR /opt
 
-COPY requirements.txt ./
-RUN pip install -r requirements.txt
-
 # upstream this
 RUN apt-get install -y tzdata
 
-COPY twisted_sse_demo ./twisted_sse_demo
+COPY requirements.txt ./
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements.txt
+# not sure why this doesn't work from inside requirements.txt
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -U 'https://github.com/drewp/cyclone/archive/python3.zip?v2'
+
 COPY *.py req* *.n3 *.html ./
 
 
 EXPOSE 9075
 
-CMD [ "python", "environment.py" ]
+CMD [ "python3", "environment.py" ]
--- a/service/environment/environment.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/environment/environment.py	Wed Feb 05 00:23:06 2020 -0800
@@ -74,10 +74,10 @@
                 (r"/()",
                  cyclone.web.StaticFileHandler,
                  {"path": ".", "default_filename": "index.html"}),
-                (r'/graph',
+                (r'/graph/environment',
                  CycloneGraphHandler, {'masterGraph': masterGraph}),
-                (r'/graph/events',
-                 CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
+                (r'/graph/environment/events',
+                 CycloneGraphEventsHandlerWithCors, {'masterGraph': masterGraph}),
                 (r'/doc', Doc), # to be shared
                 (r'/stats/(.*)', StatsHandler, {'serverName': 'environment'}),
             ]
--- a/service/environment/makefile	Wed Feb 05 00:22:48 2020 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-JOB=environment
-PORT=9075
-
-TAG=bang6:5000/${JOB}_x86:latest
-
-build_image:
-	rm -rf tmp_ctx
-	mkdir -p tmp_ctx
-	cp -a Dockerfile ../../lib/*.py ../../lib/twisted_sse_demo *.n3 *.html *.py req* tmp_ctx
-	docker build --network=host -t ${TAG} tmp_ctx
-	docker push ${TAG}
-	rm -r tmp_ctx
-
-shell:
-	docker run --rm -it --cap-add SYS_PTRACE --net=host ${TAG} /bin/bash
-
-local_run: build_image
-	docker run --rm -it -p ${PORT}:${PORT} \
-          -v `pwd`:/mnt \
-	  -v /my/proj/rdfdb/rdfdb:/usr/local/lib/python2.7/dist-packages/rdfdb \
-          --net=host \
-          ${TAG} \
-          python environment.py -v
-
-local_run_strace: build_image
-	docker run --rm -it -p ${PORT}:${PORT} \
-          -v `pwd`:/mnt \
-          --net=host \
-          --cap-add SYS_PTRACE \
-          ${TAG} \
-          strace -f -tts 200 python environment.py -v
-
-local_run_pyspy: build_image
-	docker run --rm -it -p ${PORT}:${PORT} \
-          -v `pwd`:/mnt \
-          --net=host \
-          --cap-add SYS_PTRACE \
-          ${TAG} \
-          py-spy -- python environment.py
-
-
-redeploy: build_image
-	supervisorctl restart $(JOB)_$(PORT)
-
--- a/service/environment/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/environment/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -4,13 +4,12 @@
 service_identity
 twisted
 
-py-spy
-#rdflib==4.2.2
-git+http://github.com/drewp/rdflib.git@5fa18be1231a5e4dfc86ec28f2f754158c6f6f0b#egg=rdflib
-
-#rdflib-jsonld==0.4.0
-#git+http://github.com/RDFLib/rdflib-jsonld@cc5f005b222105724cd59c6069df9982fbd28c98#egg=rdflib_jsonld
 git+http://github.com/drewp/rdflib-jsonld.git@0a560c9f1aa7c7bbb80fea389e1f5fa51d1287f8#egg=rdflib_jsonld
 
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
-https://projects.bigasterisk.com/rdfdb/rdfdb-0.8.0.tar.gz
+
+cycloneerr
+patchablegraph==0.11.0
+rdfdb==0.21.0
+standardservice==0.6.0
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/environment/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -0,0 +1,28 @@
+from invoke import task
+
+JOB='environment'
+PORT=9075
+
+TAG=f'bang6:5000/{JOB}_x86:latest'
+
+
+
+@task
+def build_image(ctx):
+    ctx.run(f'docker build --network=host -t {TAG} .')
+
+@task(pre=[build_image])
+def push_image(ctx):
+    ctx.run(f'docker push {TAG}')
+
+@task
+def shell(ctx):
+    ctx.run(f'docker run --rm -it --cap-add SYS_PTRACE  -v `pwd`:/opt/homeauto_store --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG}  /bin/bash', pty=True)
+
+@task(pre=[build_image])
+def local_run(ctx):
+    ctx.run(f'docker run --rm -it -p {PORT}:{PORT}  -v `pwd`:/opt/homeauto_store --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python3 {JOB}.py -v', pty=True)
+
+@task(pre=[push_image])
+def redeploy(ctx):
+    ctx.run(f'supervisorctl -s http://bang:9001/ restart envgraph_{PORT}')
--- a/service/environment/twilight.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/environment/twilight.py	Wed Feb 05 00:23:06 2020 -0800
@@ -58,5 +58,4 @@
     return not (t1 < standardTime.time() < t2)
 
 if __name__ == '__main__':
-    print isWithinTwilight(datetime.now(tzlocal()))
-        
+    print(isWithinTwilight(datetime.now(tzlocal())))
--- a/service/frontDoorLock/front_door_lock.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/frontDoorLock/front_door_lock.py	Wed Feb 05 00:23:06 2020 -0800
@@ -208,8 +208,8 @@
              {"path": ".", "default_filename": "index.html"}),
             (r"/simple/()", cyclone.web.StaticFileHandler,
              {"path": ".", "default_filename": "simple.html"}),
-            (r"/graph", CycloneGraphHandler, {'masterGraph': masterGraph}),
-            (r"/graph/events", CycloneGraphEventsHandler,
+            (r"/graph/frontDoorLock", CycloneGraphHandler, {'masterGraph': masterGraph}),
+            (r"/graph/frontDoorLock/events", CycloneGraphEventsHandler,
              {'masterGraph': masterGraph}),
             (r'/output', OutputPage),
             (r'/bluetoothButton', BluetoothButton),
--- a/service/frontDoorLock/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/frontDoorLock/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -8,6 +8,6 @@
 cycloneerr
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 mqtt_client==0.5.0
-patchablegraph==0.6.0
-rdfdb==0.8.0
-standardservice==0.5.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
+standardservice==0.6.0
--- a/service/mqtt_graph_bridge/mqtt_graph_bridge.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/mqtt_graph_bridge/mqtt_graph_bridge.py	Wed Feb 05 00:23:06 2020 -0800
@@ -119,11 +119,8 @@
     reactor.listenTCP(port, cyclone.web.Application([
         (r"/()", cyclone.web.StaticFileHandler,
          {"path": ".", "default_filename": "index.html"}),
-        (r"/graph", CycloneGraphHandler, {'masterGraph': masterGraph}),
-        (r"/graph/events", CycloneGraphEventsHandler,
-         {'masterGraph': masterGraph}),
         (r'/output', OutputPage),
-        ], mqtt=mqtt, masterGraph=masterGraph, debug=arg['-v']), interface='::')
+        ], mqtt=mqtt, debug=arg['-v']), interface='::')
     log.warn('serving on %s', port)
 
     for dev, attrs in devs.items():
--- a/service/mqtt_graph_bridge/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/mqtt_graph_bridge/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -6,7 +6,7 @@
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 
 cycloneerr
-patchablegraph==0.6.0
-rdfdb==0.8.0
-standardservice==0.5.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
+standardservice==0.6.0
 mqtt_client==0.7.0
--- a/service/piNode/Dockerfile	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/piNode/Dockerfile	Wed Feb 05 00:23:06 2020 -0800
@@ -1,20 +1,18 @@
 FROM bang6:5000/base_pi
 
-# super slow build
-RUN pip install grpcio==1.22.0
+# fold these into base image
+RUN apt install -y vim
 
 WORKDIR /opt
 
-COPY requirements.txt ./
+COPY requirements_*.txt ./
+RUN pip3 install -v --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements_slow.txt
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements_external.txt
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements_local.txt
 
-RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements.txt
 ## not sure why this doesn't work from inside requirements.txt
 RUN pip3 install -U 'https://github.com/drewp/cyclone/archive/python3.zip?v3'
 
-# fold these into requirements.txt
-RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple "devices_shared==0.4.0"
-RUN apt install -y vim
-
 COPY *.py ./
 COPY config/ ./config/
 
--- a/service/piNode/tasks.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/piNode/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -40,4 +40,4 @@
 
 @task
 def push_config(ctx):
-    ctx.run(f'docker run --rm --net=host -v `pwd`/config:/opt/config bang6:5000/arduino_node python pushConfig.py pi/')
+    ctx.run(f'docker run --name={JOB}_config --rm --net=host --dns 10.2.0.1 --dns-search bigasterisk.com -v `pwd`/config:/opt/config bang6:5000/arduino_node python pushConfig.py pi/')
--- a/service/powerEagle/reader.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/powerEagle/reader.py	Wed Feb 05 00:23:06 2020 -0800
@@ -101,6 +101,8 @@
         cyclone.web.Application(
             [
                 (r'/stats/(.*)', StatsHandler, {'serverName': 'powerEagle'}),
+                (r"/graph/power", CycloneGraphHandler, {'masterGraph': masterGraph}),
+                (r"/graph/power/events", CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
             ],
         ))
     reactor.run()
--- a/service/powerEagle/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/powerEagle/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -1,5 +1,9 @@
 cyclone
 influxdb==3.0.0
-standardservice==0.3.0
+
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 https://github.com/drewp/cyclone/archive/python3.zip
+
+standardservice==0.3.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
--- a/service/powerEagle/tasks.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/powerEagle/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -19,7 +19,7 @@
 
 @task(pre=[build_image])
 def local_run(ctx):
-    ctx.run(f'docker run --rm -it -p {PORT}:{PORT} --net=host {TAG} python3 reader.py -v', pty=True)
+    ctx.run(f'docker run --rm -it -p {PORT}:{PORT} -v /etc/resolv.conf:/etc/resolv.conf --net=host {TAG} python3 reader.py -v', pty=True)
 
 @task(pre=[push_image])
 def redeploy(ctx):
--- a/service/reasoning/reasoning.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/reasoning/reasoning.py	Wed Feb 05 00:23:06 2020 -0800
@@ -269,8 +269,8 @@
             (r'/(jquery.min.js)', Static),
             (r'/(lastInput|lastOutput)Graph', GraphResource),
 
-            (r"/graph/output", CycloneGraphHandler, {'masterGraph': reasoning.outputGraph}),
-            (r"/graph/output/events", CycloneGraphEventsHandler, {'masterGraph': reasoning.outputGraph}),
+            (r"/graph/reasoning", CycloneGraphHandler, {'masterGraph': reasoning.outputGraph}),
+            (r"/graph/reasoning/events", CycloneGraphEventsHandler, {'masterGraph': reasoning.outputGraph}),
 
             (r'/ntGraphs', NtGraphs),
             (r'/rules', Rules),
--- a/service/reasoning/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/reasoning/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -13,7 +13,7 @@
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 
 cycloneerr
-export_to_influxdb==0.1.0
-patchablegraph==0.6.0
-rdfdb==0.8.0
-standardservice==0.5.0
+export_to_influxdb==0.4.0
+patchablegraph==0.6.0  # pinned for py2
+rdfdb==0.8.0 # pinned for py2
+standardservice==0.6.0
--- a/service/reasoning/tasks.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/reasoning/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -15,15 +15,22 @@
 
 @task
 def shell(ctx):
-    ctx.run(f'docker run --rm -it --cap-add SYS_PTRACE -v `pwd`:/mnt --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG}  /bin/bash', pty=True)
+    ctx.run(f'docker run --name {JOB}_shell --rm -it --cap-add SYS_PTRACE -v `pwd`:/mnt --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG}  /bin/bash', pty=True)
 
 @task(pre=[build_image])
 def local_run(ctx):
-    ctx.run(f'docker run --rm -it -p {PORT}:{PORT} -v `pwd`:/mnt  --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python /mnt/{JOB}.py -iro', pty=True)
+    ctx.run(f'docker run --name {JOB}_local --rm -it '
+            f'-p {PORT}:{PORT} '
+            f'-v `pwd`:/mnt '
+            f'-v `pwd`/index.html:/opt/index.html '
+            f'--dns 10.2.0.1 --dns-search bigasterisk.com '
+            f'--net=host '
+            f'{TAG} '
+            f'python /mnt/{JOB}.py -iro', pty=True)
 
 @task(pre=[build_image])
 def local_run_mock(ctx):
-    ctx.run(f'docker run --rm -it -p {PORT}:{PORT} -v `pwd`:/mnt  --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python /mnt/{JOB}.py -iro --mockoutput', pty=True)
+    ctx.run(f'docker run --name {JOB}_local_run_mock --rm -it -p {PORT}:{PORT} -v `pwd`:/mnt  --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python /mnt/{JOB}.py -iro --mockoutput', pty=True)
 
 @task(pre=[push_image])
 def redeploy(ctx):
--- a/service/rfid/rfid.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/rfid/rfid.py	Wed Feb 05 00:23:06 2020 -0800
@@ -177,8 +177,8 @@
     reactor.listenTCP(port, cyclone.web.Application([
         (r"/()", cyclone.web.StaticFileHandler,
          {"path": ".", "default_filename": "index.html"}),
-        (r"/graph", CycloneGraphHandler, {'masterGraph': masterGraph}),
-        (r"/graph/events", CycloneGraphEventsHandler,
+        (r"/graph/rfid", CycloneGraphHandler, {'masterGraph': masterGraph}),
+        (r"/graph/rfid/events", CycloneGraphEventsHandler,
          {'masterGraph': masterGraph}),
         (r'/output', OutputPage),
         (r'/rewrite', Rewrite),
--- a/service/rfid_pn532_py/rfid.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/rfid_pn532_py/rfid.py	Wed Feb 05 00:23:06 2020 -0800
@@ -218,8 +218,8 @@
     reactor.listenTCP(port, cyclone.web.Application([
         (r"/(|.+\.html)", cyclone.web.StaticFileHandler,
          {"path": ".", "default_filename": "index.html"}),
-        (r"/graph", CycloneGraphHandler, {'masterGraph': masterGraph}),
-        (r"/graph/events", CycloneGraphEventsHandler,
+        (r"/graph/rfid", CycloneGraphHandler, {'masterGraph': masterGraph}),
+        (r"/graph/rfid/events", CycloneGraphEventsHandler,
          {'masterGraph': masterGraph}),
         (r'/output', OutputPage),
         (r'/rewrite', Rewrite),
--- a/service/store/Dockerfile	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/store/Dockerfile	Wed Feb 05 00:23:06 2020 -0800
@@ -3,10 +3,12 @@
 WORKDIR /opt
 
 COPY requirements.txt ./
-RUN pip install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements.txt
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -r requirements.txt
+# not sure why this doesn't work from inside requirements.txt
+RUN pip3 install --index-url https://projects.bigasterisk.com/ --extra-index-url https://pypi.org/simple -U 'https://github.com/drewp/cyclone/archive/python3.zip?v2'
 
 COPY *.py *.html ./
 
 EXPOSE 10015
 
-CMD [ "python", "./store.py" ]
+CMD [ "python3", "./store.py" ]
--- a/service/store/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/store/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -5,7 +5,7 @@
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
 
 cycloneerr
-patchablegraph==0.5.0
-rdfdb==0.8.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
 standardservice==0.6.0
-patchablegraph==0.5.0
+
--- a/service/store/store.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/store/store.py	Wed Feb 05 00:23:06 2020 -0800
@@ -75,8 +75,8 @@
     reactor.listenTCP(port, cyclone.web.Application([
         (r"/()", cyclone.web.StaticFileHandler,
          {"path": ".", "default_filename": "index.html"}),
-        (r"/store", CycloneGraphHandler, {'masterGraph': masterGraph}),
-        (r"/store/events", CycloneGraphEventsHandler,
+        (r"/graph/store", CycloneGraphHandler, {'masterGraph': masterGraph}),
+        (r"/graph/store/events", CycloneGraphEventsHandler,
          {'masterGraph': masterGraph}),
         (r'/values', ValuesResource),
     ], masterGraph=masterGraph, dbFile=dbFile, debug=arg['-v']),
--- a/service/store/tasks.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/store/tasks.py	Wed Feb 05 00:23:06 2020 -0800
@@ -19,7 +19,7 @@
 
 @task(pre=[build_image])
 def local_run(ctx):
-    ctx.run(f'docker run --rm -it -p {PORT}:{PORT}  -v `pwd`:/opt/homeauto_store --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python {JOB}.py -v', pty=True)
+    ctx.run(f'docker run --rm -it -p {PORT}:{PORT}  -v `pwd`:/opt/homeauto_store --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python3 {JOB}.py -v', pty=True)
 
 @task(pre=[push_image])
 def redeploy(ctx):
--- a/service/tinyScreen/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/tinyScreen/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -1,6 +1,6 @@
 luma.oled
 rdflib==4.2.2
 cyclone
-https://projects.bigasterisk.com/rdfdb/rdfdb-0.8.0.tar.gz
+https://projects.bigasterisk.com/rdfdb/rdfdb-0.21.0.tar.gz
 rdflib-jsonld==0.3
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
--- a/service/tinyScreen/tiny_screen.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/tinyScreen/tiny_screen.py	Wed Feb 05 00:23:06 2020 -0800
@@ -163,8 +163,8 @@
     reactor.listenTCP(port, cyclone.web.Application([
         (r"/()", cyclone.web.StaticFileHandler,
          {"path": ".", "default_filename": "index.html"}),
-        (r"/graph", CycloneGraphHandler, {'masterGraph': masterGraph}),
-        (r"/graph/events", CycloneGraphEventsHandler,
+        (r"/graph/tinyScreen", CycloneGraphHandler, {'masterGraph': masterGraph}),
+        (r"/graph/tinyScreen/events", CycloneGraphEventsHandler,
          {'masterGraph': masterGraph}),
         (r'/output', OutputPage),
         ], screen=screen, masterGraph=masterGraph, debug=arg['-v']),
--- a/service/tradfri/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/tradfri/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -7,4 +7,4 @@
 rdflib==4.2.2
 rdflib-jsonld==0.4.0
 
-https://projects.bigasterisk.com/rdfdb/rdfdb-0.3.0.tar.gz
+https://projects.bigasterisk.com/rdfdb/rdfdb-0.21.0.tar.gz
--- a/service/tradfri/tradfri.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/tradfri/tradfri.py	Wed Feb 05 00:23:06 2020 -0800
@@ -180,8 +180,8 @@
             "path": "/opt/static", "default_filename": "index.html"}),
         (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "/opt/static"}),
         (r'/boards', Boards),
-        (r"/graph", CycloneGraphHandler, {'masterGraph': masterGraph}),
-        (r"/graph/events", CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
+        (r"/graph/tradfri", CycloneGraphHandler, {'masterGraph': masterGraph}),
+        (r"/graph/tradfri/events", CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
         (r'/output', OutputPage),
         ], hub=hub, debug=arg['-v']), interface='::')
     log.warn('serving on 10009')
--- a/service/wifi/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/wifi/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -10,7 +10,7 @@
 ago==0.0.93
 
 cycloneerr
-patchablegraph==0.5.0
-rdfdb==0.8.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
 standardservice==0.6.0
 
--- a/service/wifi/wifi.py	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/wifi/wifi.py	Wed Feb 05 00:23:06 2020 -0800
@@ -252,8 +252,8 @@
                 (r"/", Index),
                 (r"/build/(bundle\.js)", cyclone.web.StaticFileHandler, {"path": 'build'}),
                 (r'/json', Json),
-                (r'/graph', CycloneGraphHandler, {'masterGraph': masterGraph}),
-                (r'/graph/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
+                (r'/graph/wifi', CycloneGraphHandler, {'masterGraph': masterGraph}),
+                (r'/graph/wifi/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
                 (r'/table', Table),
                 (r'/remoteSuspend', RemoteSuspend),
                 #(r'/activity', Activity),
--- a/service/xidle/requirements.txt	Wed Feb 05 00:22:48 2020 -0800
+++ b/service/xidle/requirements.txt	Wed Feb 05 00:23:06 2020 -0800
@@ -6,6 +6,6 @@
 service_identity
 
 git+http://github.com/drewp/scales.git@448d59fb491b7631877528e7695a93553bfaaa93#egg=scales
-patchablegraph==0.7.0
-rdfdb==0.9.0
+patchablegraph==0.11.0
+rdfdb==0.21.0
 standardservice==0.6.0