Mercurial > code > home > repos > homeauto
annotate service/environment/environment.py @ 1462:2b29f14eb6bd
try new graph+view widget
Ignore-this: d5f9c5dc52f04324368716ba2f604fdb
darcs-hash:44e85a5c075ef73c34a58deaa3a3c1e8390dae52
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sun, 24 Nov 2019 00:01:00 -0800 |
parents | b63c35e13e18 |
children | a93fbf0d0daa |
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 """ | |
1243
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
7 import sys, datetime, cyclone.web, logging |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
8 from docopt import docopt |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
9 from twisted.internet import reactor, task, defer |
805 | 10 from dateutil.tz import tzlocal |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
11 from dateutil.relativedelta import relativedelta, FR |
805 | 12 from rdflib import Namespace, Literal |
1243
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
13 from greplin import scales |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
14 from greplin.scales.cyclonehandler import StatsHandler |
1029
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
15 from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
16 from twilight import isWithinTwilight |
1243
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
17 from logsetup import log, enableTwistedLog |
805 | 18 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
19 from rdfdoc import Doc |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
20 |
805 | 21 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
22 DEV = Namespace("http://projects.bigasterisk.com/device/") | |
23 | |
1243
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
24 STATS = scales.collection('/root', |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
25 scales.PmfStat('update'), |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
26 ) |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
27 |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
28 @STATS.update.time() |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
29 def update(masterGraph): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
30 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
|
31 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
32 now = datetime.datetime.now(tzlocal()) |
805 | 33 |
1028
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.localHour, Literal(now.hour)) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
35 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
|
36 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
|
37 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
38 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
|
39 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
|
40 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
41 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
|
42 Literal(now.strftime("%A"))) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
43 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
|
44 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
|
45 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
|
46 Literal(now.strftime("%Y-%m-%d"))) |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
47 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
48 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
|
49 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
|
50 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
|
51 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset)) |
876
351292938d7c
twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents:
805
diff
changeset
|
52 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
53 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
|
54 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
|
55 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
56 |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
57 def main(): |
1243
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
58 arg = docopt(""" |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
59 Usage: environment.py [options] |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
60 |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
61 -v Verbose |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
62 """) |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
63 log.setLevel(logging.INFO) |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
64 if arg['-v']: |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
65 enableTwistedLog() |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
66 log.setLevel(logging.DEBUG) |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
67 defer.setDebugging(True) |
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
68 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
69 masterGraph = PatchableGraph() |
965
a06d9921c2a3
add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents:
941
diff
changeset
|
70 |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
71 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
|
72 def __init__(self): |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
73 handlers = [ |
1029
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
74 (r"/()", |
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
75 cyclone.web.StaticFileHandler, |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
76 {"path": ".", "default_filename": "index.html"}), |
1029
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
77 (r'/graph', |
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
78 CycloneGraphHandler, {'masterGraph': masterGraph}), |
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
79 (r'/graph/events', |
4d36cae32a4c
refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents:
1028
diff
changeset
|
80 CycloneGraphEventsHandler, {'masterGraph': masterGraph}), |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
81 (r'/doc', Doc), # to be shared |
1243
b63c35e13e18
environment graph service standardization
drewp <drewp@bigasterisk.com>
parents:
1029
diff
changeset
|
82 (r'/stats/(.*)', StatsHandler, {'serverName': 'environment'}), |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
83 ] |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
84 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
|
85 masterGraph=masterGraph) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
86 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
|
87 reactor.listenTCP(9075, Application()) |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
88 reactor.run() |
805 | 89 |
90 if __name__ == '__main__': | |
1028
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
91 main() |
70d52fa8373a
add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents:
965
diff
changeset
|
92 |