Mercurial > code > home > repos > homeauto
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 |