annotate service/tradfri/tradfri.py @ 723:b87b6e9cedb2

whitespace Ignore-this: c727f388f197a6fae88595fe6d455c7d
author drewp@bigasterisk.com
date Wed, 05 Feb 2020 00:29:13 -0800
parents a93fbf0d0daa
children cd77bcbfd522
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
1 from __future__ import division
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
2 import sys, logging, socket, json, time, os, traceback
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
3 import cyclone.web
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
4 from cyclone.httpclient import fetch
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
5 from rdflib import Namespace, URIRef, Literal, Graph, RDF, RDFS, ConjunctiveGraph
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
6 from rdflib.parser import StringInputSource
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
7 from twisted.internet import reactor, task
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
8 from docopt import docopt
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
9 import logging
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
10 logging.basicConfig(level=logging.DEBUG)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
11 sys.path.append("/opt")
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
12 from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
13 from rdfdb.rdflibpatch import inContext
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
14 from rdfdb.patch import Patch
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
15 from dateutil.tz import tzlocal, tzutc
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
16 import private
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
17
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
18 sys.path.append('pytradfri')
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
19 from pytradfri import Gateway
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
20 from pytradfri.api.libcoap_api import APIFactory
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
21 from pytradfri.const import ATTR_LIGHT_STATE, ATTR_LIGHT_DIMMER
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
22
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
23 ROOM = Namespace('http://projects.bigasterisk.com/room/')
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
24 IKEADEV = Namespace('http://bigasterisk.com/ikeaDevice/')
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
25 log = logging.getLogger()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
26
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
27 def devUri(dev):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
28 name = dev.name if dev.name else dev.id
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
29 return IKEADEV['_'.join(w.lower() for w in name.split())]
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
30
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
31 class Hub(object):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
32 def __init__(self, graph, ip, key):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
33 self.graph = graph
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
34 self.ip, self.key = ip, key
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
35 self.api = APIFactory(ip, psk=key)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
36 self.gateway = Gateway()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
37
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
38 devices_command = self.gateway.get_devices()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
39 self.devices_commands = self.api.request(devices_command)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
40 self.devices = self.api.request(self.devices_commands)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
41
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
42 self.ctx = ROOM['tradfriHub']
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
43 self.graph.patch(Patch(
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
44 addQuads=[(s,p,o,self.ctx) for s,p,o in self.deviceStatements()]))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
45
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
46 self.curStmts = []
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
47
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
48 task.LoopingCall(self.updateCur).start(60)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
49 for dev in self.devices:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
50 self.startObserve(dev)
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
51
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
52 def startObserve(self, dev):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
53 def onUpdate(dev):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
54 reactor.callFromThread(self.updateCur, dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
55 def onErr(err):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
56 log.warn('%r; restart observe on %r', err, dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
57 reactor.callLater(1, self.startObserve, dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
58 reactor.callInThread(self.api.request, dev.observe(onUpdate, onErr))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
59
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
60 def description(self):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
61 return {
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
62 'uri': 'huburi',
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
63 'devices': [{
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
64 'uri': devUri(dev),
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
65 'className': self.__class__.__name__,
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
66 'pinNumber': None,
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
67 'outputPatterns': [(devUri(dev), ROOM['brightness'], None)],
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
68 'watchPrefixes': [],
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
69 'outputWidgets': [{
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
70 'element': 'output-slider',
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
71 'min': 0, 'max': 1, 'step': 1 / 255,
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
72 'subj': devUri(dev),
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
73 'pred': ROOM['brightness'],
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
74 }] * dev.has_light_control,
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
75 } for dev in self.devices],
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
76 'graph': 'http://sticker:9059/graph', #todo
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
77 }
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
78
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
79 def updateCur(self, dev=None):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
80 cur = [(s,p,o,self.ctx) for s,p,o in
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
81 self.currentStateStatements([dev] if dev else self.devices)]
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
82 self.graph.patch(Patch(addQuads=cur, delQuads=self.curStmts))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
83 self.curStmts = cur
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
84
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
85 def deviceStatements(self):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
86 for dev in self.devices:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
87 uri = devUri(dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
88 yield (uri, RDF.type, ROOM['IkeaDevice'])
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
89 yield (uri, ROOM['ikeaId'], Literal(dev.id))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
90 if dev.last_seen:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
91 utcSeen = dev.last_seen
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
92 yield (uri, ROOM['lastSeen'],
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
93 Literal(utcSeen.replace(tzinfo=tzutc()).astimezone(tzlocal())))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
94 yield (uri, ROOM['reachable'], ROOM['yes'] if dev.reachable else ROOM['no'])
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
95 yield (uri, RDFS.label, Literal(dev.name))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
96 # no connection between remotes and lights?
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
97
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
98 def currentStateStatements(self, devs):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
99 for dev in self.devices: # could scan just devs, but the Patch line needs a fix
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
100 uri = devUri(dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
101 di = dev.device_info
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
102 if di.battery_level is not None:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
103 yield (uri, ROOM['batteryLevel'], Literal(di.battery_level / 100))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
104 if dev.has_light_control:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
105 lc = dev.light_control
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
106 #import ipdb;ipdb.set_trace()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
107
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
108 lightUri = devUri(dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
109 print lc.raw
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
110 if not lc.raw[0][ATTR_LIGHT_STATE]:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
111 level = 0
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
112 else:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
113 level = lc.raw[0][ATTR_LIGHT_DIMMER] / 255
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
114 yield (lightUri, ROOM['brightness'], Literal(level))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
115 #if light.hex_color:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
116 # yield (lightUri, ROOM['kelvinColor'], Literal(light.kelvin_color))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
117 # yield (lightUri, ROOM['color'], Literal('#%s' % light.hex_color))
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
118
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
119
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
120 def outputStatements(self, stmts):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
121 for stmt in stmts:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
122 for dev in self.devices:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
123 uri = devUri(dev)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
124 if stmt[0] == uri:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
125 if stmt[1] == ROOM['brightness']:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
126 try:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
127 self.api.request(dev.light_control.set_dimmer(
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
128 int(255 * float(stmt[2])), transition_time=3))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
129 except:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
130 traceback.print_exc()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
131 raise
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
132 self.updateCur()
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
133
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
134 class OutputPage(cyclone.web.RequestHandler):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
135 def put(self):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
136 arg = self.request.arguments
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
137 if arg.get('s') and arg.get('p'):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
138 subj = URIRef(arg['s'][-1])
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
139 pred = URIRef(arg['p'][-1])
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
140 turtleLiteral = self.request.body
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
141 try:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
142 obj = Literal(float(turtleLiteral))
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
143 except ValueError:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
144 obj = Literal(turtleLiteral)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
145 stmt = (subj, pred, obj)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
146 else:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
147 g = rdfGraphBody(self.request.body, self.request.headers)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
148 assert len(g) == 1, len(g)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
149 stmt = g.triples((None, None, None)).next()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
150
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
151 self.settings.hub.outputStatements([stmt])
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
152
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
153 hostname = socket.gethostname()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
154
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
155 class Boards(cyclone.web.RequestHandler):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
156 def get(self):
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
157 self.set_header('Content-type', 'application/json')
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
158 self.write(json.dumps({
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
159 'host': hostname,
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
160 'boards': [self.settings.hub.description()]
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
161 }, indent=2))
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
162
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
163 def main():
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
164 arg = docopt("""
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
165 Usage: tradfri.py [options]
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
166
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
167 -v Verbose
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
168 """)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
169 log.setLevel(logging.WARN)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
170 if arg['-v']:
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
171 from twisted.python import log as twlog
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
172 twlog.startLogging(sys.stdout)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
173 log.setLevel(logging.DEBUG)
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
174
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
175 masterGraph = PatchableGraph()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
176 hub = Hub(masterGraph, private.hubAddr, key=private.hubKey)
723
b87b6e9cedb2 whitespace
drewp@bigasterisk.com
parents: 722
diff changeset
177
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
178 reactor.listenTCP(10009, cyclone.web.Application([
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
179 (r"/()", cyclone.web.StaticFileHandler, {
364
8bd4e310d6b0 include UI files in docker image
drewp@bigasterisk.com
parents: 358
diff changeset
180 "path": "/opt/static", "default_filename": "index.html"}),
8bd4e310d6b0 include UI files in docker image
drewp@bigasterisk.com
parents: 358
diff changeset
181 (r'/static/(.*)', cyclone.web.StaticFileHandler, {"path": "/opt/static"}),
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
182 (r'/boards', Boards),
722
a93fbf0d0daa dep updates; graph url renames; and other build updates
drewp@bigasterisk.com
parents: 364
diff changeset
183 (r"/graph/tradfri", CycloneGraphHandler, {'masterGraph': masterGraph}),
a93fbf0d0daa dep updates; graph url renames; and other build updates
drewp@bigasterisk.com
parents: 364
diff changeset
184 (r"/graph/tradfri/events", CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
358
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
185 (r'/output', OutputPage),
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
186 ], hub=hub, debug=arg['-v']), interface='::')
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
187 log.warn('serving on 10009')
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
188 reactor.run()
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
189
7096dad37074 tradfri docker update
drewp@bigasterisk.com
parents:
diff changeset
190 main()