comparison service/reasoning/actions.py @ 242:3f936fb61e4e

rearrange Actions Ignore-this: abd7b4dbaa1e83f071ae898b78344068
author drewp@bigasterisk.com
date Tue, 02 Feb 2016 01:52:29 -0800
parents 0c306e76d8c5
children b0089d1ca4f6
comparison
equal deleted inserted replaced
241:368bb6625b8e 242:3f936fb61e4e
53 (dev, pred, inferredObjects)) 53 (dev, pred, inferredObjects))
54 # write about it to the inferred graph? 54 # write about it to the inferred graph?
55 55
56 #self._frontDoorPuts(deviceGraph, inferred) 56 #self._frontDoorPuts(deviceGraph, inferred)
57 57
58
59 def _put(self, url, payload):
60 def err(e):
61 log.warn(" put %s failed (%r)", url, e)
62 log.info(" PUT %s payload=%r", url, payload)
63 fetch(url, method="PUT", postdata=payload, timeout=2).addErrback(err)
64
65 def _oneShotPostActions(self, deviceGraph, inferred): 58 def _oneShotPostActions(self, deviceGraph, inferred):
66 """ 59 """
67 Inferred graph may contain some one-shot statements. We'll send 60 Inferred graph may contain some one-shot statements. We'll send
68 statement objects to anyone on web sockets, and also generate 61 statement objects to anyone on web sockets, and also generate
69 POST requests as described in the graph. 62 POST requests as described in the graph.
99 mpd service and a song/album/playlist uri to be played. 92 mpd service and a song/album/playlist uri to be played.
100 Ideally the graph rules would assemble these like 93 Ideally the graph rules would assemble these like
101 http://{mpd}/addAndPlay?uri={toPlay} or maybe toPlay as the payload 94 http://{mpd}/addAndPlay?uri={toPlay} or maybe toPlay as the payload
102 which would be fairly general but still allow toPlay uris to 95 which would be fairly general but still allow toPlay uris to
103 be matched with any player.""" 96 be matched with any player."""
104 def post(postTarget):
105 log.info("special mpd POST %s", postTarget)
106 def err(e):
107 log.warn("post %s failed", postTarget)
108 fetch(postTarget, method="POST", timeout=2).addErrback(err)
109 97
110 rootSkippingAuth = "http://brace:9009/" 98 rootSkippingAuth = "http://brace:9009/"
111 for mpd in [URIRef("http://bigasterisk.com/host/brace/mpd")]: 99 for mpd in [URIRef("http://bigasterisk.com/host/brace/mpd")]:
112 100
113
114 for song in inferred.objects(mpd, ROOM['startMusic']): 101 for song in inferred.objects(mpd, ROOM['startMusic']):
115 log.info("mpd statement: %r" % song) 102 log.info("mpd statement: %r" % song)
116 assert song.startswith('http://bigasterisk.com/music/') 103 assert song.startswith('http://bigasterisk.com/music/')
117 post(rootSkippingAuth + "addAndPlay" + urllib.quote(song[len("http://bigasterisk.com/music"):])) 104 self.post(rootSkippingAuth + "addAndPlay" + urllib.quote(song[len("http://bigasterisk.com/music"):]))
118 105
119 for state in inferred.objects(mpd, ROOM['playState']): 106 for state in inferred.objects(mpd, ROOM['playState']):
120 log.info('hello playstate %s', state) 107 log.info('hello playstate %s', state)
121 if state == ROOM['pause']: 108 if state == ROOM['pause']:
122 log.info("mpd %s %s", mpd, state) 109 log.info("mpd %s %s", mpd, state)
123 post(rootSkippingAuth + "mpd/pause") 110 self.post(rootSkippingAuth + "mpd/pause")
124 for vol in inferred.objects(mpd, ROOM['audioState']): 111 for vol in inferred.objects(mpd, ROOM['audioState']):
125 if vol == ROOM['volumeStepUp']: 112 if vol == ROOM['volumeStepUp']:
126 post(rootSkippingAuth + "volumeAdjust?amount=6&max=70") 113 self.post(rootSkippingAuth + "volumeAdjust?amount=6&max=70")
127 if vol == ROOM['volumeStepDown']: 114 if vol == ROOM['volumeStepDown']:
128 post(rootSkippingAuth + "volumeAdjust?amount=-6&min=10") 115 self.post(rootSkippingAuth + "volumeAdjust?amount=-6&min=10")
129 116
117
118 def _frontDoorPuts(self, deviceGraph, inferred):
119 # todo: shouldn't have to be a special case
120 brt = inferred.value(DEV.frontDoorLcd, ROOM.brightness)
121 if brt is None:
122 return
123 url = deviceGraph.value(DEV.frontDoorLcdBrightness, ROOM.putUrl)
124 log.info("put lcd %s brightness %s", url, brt)
125 self._put(str(url) + "?brightness=%s" % str(brt), payload='')
126
127 msg = "open %s motion %s" % (
128 inferred.value(DEV['frontDoorOpenIndicator'], ROOM.text),
129 inferred.value(DEV['frontDoorMotionIndicator'], ROOM.text))
130 # this was meant to be 2 chars in the bottom row, but the
131 # easier test was to replace the whole top msg
132 #restkit.Resource("http://slash:9080/").put("lcd", message=msg)
133
134
135
136
137 def _put(self, url, payload):
138 def err(e):
139 log.warn(" put %s failed (%r)", url, e)
140 log.info(" PUT %s payload=%r", url, payload)
141 fetch(url, method="PUT", postdata=payload, timeout=2).addErrback(err)
142
143 def post(self, postTarget):
144 log.info("special mpd POST %s", postTarget)
145 def err(e):
146 log.warn("post %s failed", postTarget)
147 fetch(postTarget, method="POST", timeout=2).addErrback(err)
148
130 def _putZero(self, deviceGraph, dev, pred, putUrl): 149 def _putZero(self, deviceGraph, dev, pred, putUrl):
131 # zerovalue should be a function of pred as well. 150 # zerovalue should be a function of pred as well.
132 value = deviceGraph.value(dev, ROOM.zeroValue) 151 value = deviceGraph.value(dev, ROOM.zeroValue)
133 if value is not None: 152 if value is not None:
134 log.info("put zero (%r) to %s", value, putUrl) 153 log.info("put zero (%r) to %s", value, putUrl)
149 log.info("put %s to %s", obj, putUrl) 168 log.info("put %s to %s", obj, putUrl)
150 self._put(putUrl, payload=str(obj)) 169 self._put(putUrl, payload=str(obj))
151 else: 170 else:
152 log.warn("don't know what payload to put for %s. obj=%r", 171 log.warn("don't know what payload to put for %s. obj=%r",
153 putUrl, obj) 172 putUrl, obj)
154
155 def _frontDoorPuts(self, deviceGraph, inferred):
156 # todo: shouldn't have to be a special case
157 brt = inferred.value(DEV.frontDoorLcd, ROOM.brightness)
158 if brt is None:
159 return
160 url = deviceGraph.value(DEV.frontDoorLcdBrightness, ROOM.putUrl)
161 log.info("put lcd %s brightness %s", url, brt)
162 self._put(str(url) + "?brightness=%s" % str(brt), payload='')
163
164 msg = "open %s motion %s" % (
165 inferred.value(DEV['frontDoorOpenIndicator'], ROOM.text),
166 inferred.value(DEV['frontDoorMotionIndicator'], ROOM.text))
167 # this was meant to be 2 chars in the bottom row, but the
168 # easier test was to replace the whole top msg
169 #restkit.Resource("http://slash:9080/").put("lcd", message=msg)
170
171