Mercurial > code > home > repos > homeauto
annotate service/environment/environment.py @ 1028:70d52fa8373a
add new jsonld/SSE support to environment service as a test
Ignore-this: ae671e71966dbbb9d1f97e3596802d3d
darcs-hash:f724b9da306be00428ef84967f34dfe07a62a4c6
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sun, 24 Jan 2016 07:12:25 -0800 |
parents | a06d9921c2a3 |
children | 596c645a1fc5 |
rev | line source |
---|---|
805 | 1 #!/usr/bin/python |
2 """ | |
3 return some rdf about the environment, e.g. the current time, | |
4 daytime/night, overall modes like 'maintenance mode', etc | |
5 | |
6 """ | |
7 import sys, datetime, cyclone.web | |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
8 from twisted.internet import reactor, task |
805 | 9 from dateutil.tz import tzlocal |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
10 from dateutil.relativedelta import relativedelta, FR |
805 | 11 from rdflib import Namespace, Literal |
12 sys.path.append("/my/proj/homeauto/lib") | |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
13 from patchablegraph import PatchableGraph, writeGraphResponse, GraphEventsHandler |
805 | 14 from cycloneerr import PrettyErrorHandler |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
15 from twilight import isWithinTwilight |
805 | 16 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
17 from rdfdoc import Doc |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
18 |
805 | 19 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
20 DEV = Namespace("http://projects.bigasterisk.com/device/") | |
21 | |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
22 |
805 | 23 class GraphHandler(PrettyErrorHandler, cyclone.web.RequestHandler): |
24 def get(self): | |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
25 writeGraphResponse(self, self.settings.masterGraph, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
26 self.request.headers.get('accept')) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
27 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
28 def update(masterGraph): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
29 stmt = lambda s, p, o: masterGraph.patchObject(ROOM.environment, s, p, o) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
30 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
31 now = datetime.datetime.now(tzlocal()) |
805 | 32 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
33 stmt(DEV.environment, ROOM.localHour, Literal(now.hour)) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
34 stmt(DEV.environment, ROOM.localTimeToMinute, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
35 Literal(now.strftime("%H:%M"))) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
36 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
37 stmt(DEV.environment, ROOM.localTimeToSecond, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
38 Literal(now.strftime("%H:%M:%S"))) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
39 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
40 stmt(DEV.environment, ROOM.localDayOfWeek, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
41 Literal(now.strftime("%A"))) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
42 stmt(DEV.environment, ROOM.localMonthDay, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
43 Literal(now.strftime("%B %e"))) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
44 stmt(DEV.environment, ROOM.localDate, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
45 Literal(now.strftime("%Y-%m-%d"))) |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
46 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
47 for offset in range(-12, 7): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
48 d = now.date() + datetime.timedelta(days=offset) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
49 if d == d + relativedelta(day=31, weekday=FR(-1)): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
50 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset)) |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
51 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
52 stmt(DEV.calendar, ROOM.twilight, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
53 ROOM['withinTwilight'] if isWithinTwilight(now) else ROOM['daytime']) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
54 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
55 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
56 def main(): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
57 from twisted.python import log as twlog |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
58 twlog.startLogging(sys.stderr) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
59 masterGraph = PatchableGraph() |
965
a06d9921c2a3
add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents:
941
diff
changeset
|
60 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
61 class Application(cyclone.web.Application): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
62 def __init__(self): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
63 handlers = [ |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
64 (r"/()", cyclone.web.StaticFileHandler, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
65 {"path": ".", "default_filename": "index.html"}), |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
66 (r'/graph', GraphHandler), |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
67 (r'/graph/events', GraphEventsHandler), |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
68 (r'/doc', Doc), # to be shared |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
69 ] |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
70 cyclone.web.Application.__init__(self, handlers, |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
71 masterGraph=masterGraph) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
72 task.LoopingCall(update, masterGraph).start(1) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
73 reactor.listenTCP(9075, Application()) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
74 reactor.run() |
805 | 75 |
76 if __name__ == '__main__': | |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
77 main() |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
78 |