annotate service/reasoning/actions.py @ 1052:2434e88d8bb0

add bed buttons Ignore-this: 912a92f7a8e173fe64aa4c1df9ef7dba darcs-hash:2e4031a9cacedb28f57c36708d69d6ec3610ef9d
author drewp <drewp@bigasterisk.com>
date Mon, 08 Feb 2016 23:48:29 -0800
parents e3d77b7f16ca
children ba1149814877
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 from rdflib import URIRef, Namespace, RDF, Literal
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 import logging
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 import urllib
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 from cyclone.httpclient import fetch
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 log = logging.getLogger('output')
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 log.setLevel(logging.WARN)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 ROOM = Namespace("http://projects.bigasterisk.com/room/")
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 DEV = Namespace("http://projects.bigasterisk.com/device/")
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 class Actions(object):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 def __init__(self, sendToLiveClients):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 self.sendToLiveClients = sendToLiveClients
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 def putResults(self, deviceGraph, inferred):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 """
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 some conclusions in the inferred graph lead to PUT requests
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 getting made
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 if the graph contains (?d ?p ?o) and ?d and ?p are a device
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 and predicate we support PUTs for, then we look up
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 (?d :putUrl ?url) and (?o :putValue ?val) and call
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 PUT ?url <- ?val
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 If the graph doesn't contain any matches, we use (?d
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 :zeroValue ?val) for the value and PUT that.
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 """
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 self._oneShotPostActions(deviceGraph, inferred)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 for dev, pred in [
1052
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
32 # the config of each putUrl should actually be in the
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
33 # context of a dev and predicate pair, and then that would
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
34 # be the source of this list
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
35 #(DEV.theaterDoorLock, ROOM.state),
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
36 #(URIRef('http://bigasterisk.com/host/bang/monitor'), ROOM.powerState),
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
37 (URIRef('http://bigasterisk.com/host/dash/monitor'), ROOM.powerState),
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
38 (URIRef('http://projects.bigasterisk.com/room/storageCeilingLedLong'), ROOM.brightness),
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
39 (URIRef('http://projects.bigasterisk.com/room/storageCeilingLedCross'), ROOM.brightness),
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
40 (URIRef('http://projects.bigasterisk.com/room/headboardWhite'), ROOM.brightness),
2434e88d8bb0 add bed buttons
drewp <drewp@bigasterisk.com>
parents: 1047
diff changeset
41 (URIRef('http://projects.bigasterisk.com/room/bedLedStrip'), ROOM.color),
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 ]:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 url = deviceGraph.value(dev, ROOM.putUrl)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 if url and dev == DEV.theaterDoorLock: # ew
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 self._put(url+"/mode", payload="output")
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 inferredObjects = list(inferred.objects(dev, pred))
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 if len(inferredObjects) == 0:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 self._putZero(deviceGraph, dev, pred, url)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 elif len(inferredObjects) == 1:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 self._putInferred(deviceGraph, url, inferredObjects[0])
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 elif len(inferredObjects) > 1:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 log.info("conflict, ignoring: %s has %s of %s" %
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 (dev, pred, inferredObjects))
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56 # write about it to the inferred graph?
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 #self._frontDoorPuts(deviceGraph, inferred)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 def _oneShotPostActions(self, deviceGraph, inferred):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 """
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 Inferred graph may contain some one-shot statements. We'll send
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 statement objects to anyone on web sockets, and also generate
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64 POST requests as described in the graph.
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 one-shot statement ?s ?p ?o
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 with this in the graph:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 ?osp a :OneShotPost
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69 ?osp :subject ?s
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 ?osp :predicate ?p
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 this will cause a post to ?o
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 """
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73 # nothing in this actually makes them one-shot yet. they'll
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 # just fire as often as we get in here, which is not desirable
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75 log.info("_oneShotPostActions")
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 def err(e):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77 log.warn("post %s failed", postTarget)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 for osp in deviceGraph.subjects(RDF.type, ROOM['OneShotPost']):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79 s = deviceGraph.value(osp, ROOM['subject'])
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 p = deviceGraph.value(osp, ROOM['predicate'])
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81 if s is None or p is None:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 continue
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
83 for postTarget in inferred.objects(s, p):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
84 log.info("post target %r", postTarget)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 # this packet ought to have 'oneShot' in it somewhere
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86 self.sendToLiveClients({"s":s, "p":p, "o":postTarget})
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 log.info(" POST %s", postTarget)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 fetch(postTarget, method="POST", timeout=2).addErrback(err)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 self._postMpdCommands(inferred)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92 def _postMpdCommands(self, inferred):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
93 """special case to be eliminated. mpd play urls are made of an
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94 mpd service and a song/album/playlist uri to be played.
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
95 Ideally the graph rules would assemble these like
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 http://{mpd}/addAndPlay?uri={toPlay} or maybe toPlay as the payload
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
97 which would be fairly general but still allow toPlay uris to
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
98 be matched with any player."""
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
99
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
100 rootSkippingAuth = "http://brace:9009/"
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101 for mpd in [URIRef("http://bigasterisk.com/host/brace/mpd")]:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103 for song in inferred.objects(mpd, ROOM['startMusic']):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 log.info("mpd statement: %r" % song)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105 assert song.startswith('http://bigasterisk.com/music/')
1047
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
106 self.post(rootSkippingAuth + "addAndPlay" + urllib.quote(song[len("http://bigasterisk.com/music"):]))
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 for state in inferred.objects(mpd, ROOM['playState']):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109 log.info('hello playstate %s', state)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
110 if state == ROOM['pause']:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
111 log.info("mpd %s %s", mpd, state)
1047
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
112 self.post(rootSkippingAuth + "mpd/pause")
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
113 for vol in inferred.objects(mpd, ROOM['audioState']):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
114 if vol == ROOM['volumeStepUp']:
1047
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
115 self.post(rootSkippingAuth + "volumeAdjust?amount=6&max=70")
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116 if vol == ROOM['volumeStepDown']:
1047
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
117 self.post(rootSkippingAuth + "volumeAdjust?amount=-6&min=10")
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
118
1047
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
119
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
120 def _frontDoorPuts(self, deviceGraph, inferred):
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
121 # todo: shouldn't have to be a special case
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
122 brt = inferred.value(DEV.frontDoorLcd, ROOM.brightness)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
123 if brt is None:
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
124 return
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
125 url = deviceGraph.value(DEV.frontDoorLcdBrightness, ROOM.putUrl)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
126 log.info("put lcd %s brightness %s", url, brt)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
127 self._put(str(url) + "?brightness=%s" % str(brt), payload='')
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
128
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
129 msg = "open %s motion %s" % (
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
130 inferred.value(DEV['frontDoorOpenIndicator'], ROOM.text),
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
131 inferred.value(DEV['frontDoorMotionIndicator'], ROOM.text))
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
132 # this was meant to be 2 chars in the bottom row, but the
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
133 # easier test was to replace the whole top msg
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
134 #restkit.Resource("http://slash:9080/").put("lcd", message=msg)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
135
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
136
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
137
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
138
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
139 def _put(self, url, payload):
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
140 def err(e):
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
141 log.warn(" put %s failed (%r)", url, e)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
142 log.info(" PUT %s payload=%r", url, payload)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
143 fetch(url, method="PUT", postdata=payload, timeout=2).addErrback(err)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
144
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
145 def post(self, postTarget):
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
146 log.info("special mpd POST %s", postTarget)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
147 def err(e):
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
148 log.warn("post %s failed", postTarget)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
149 fetch(postTarget, method="POST", timeout=2).addErrback(err)
e3d77b7f16ca rearrange Actions
drewp <drewp@bigasterisk.com>
parents: 1045
diff changeset
150
1045
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
151 def _putZero(self, deviceGraph, dev, pred, putUrl):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
152 # zerovalue should be a function of pred as well.
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
153 value = deviceGraph.value(dev, ROOM.zeroValue)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
154 if value is not None:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
155 log.info("put zero (%r) to %s", value, putUrl)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
156 self._put(putUrl, payload=str(value))
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
157 # this should be written back into the inferred graph
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
158 # for feedback
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
159
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
160 def _putInferred(self, deviceGraph, putUrl, obj):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
161 """
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
162 HTTP PUT to putUrl, with a payload that's either obj's :putValue
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
163 or obj itself.
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
164 """
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
165 value = deviceGraph.value(obj, ROOM.putValue)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
166 if value is not None:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
167 log.info("put %s to %s", value, putUrl)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
168 self._put(putUrl, payload=str(value))
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
169 elif isinstance(obj, Literal):
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
170 log.info("put %s to %s", obj, putUrl)
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
171 self._put(putUrl, payload=str(obj))
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
172 else:
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
173 log.warn("don't know what payload to put for %s. obj=%r",
a328cc370b22 ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff changeset
174 putUrl, obj)