Mercurial > code > home > repos > homeauto
annotate service/reasoning/actions.py @ 1374:ac127fdace62
build/import update for reasoning service
Ignore-this: 5e2a8d717e7273bf4a84dd467cccab17
darcs-hash:dc2e5f5c0ee7beb2d72f2c585d88480c5a1312df
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Mon, 06 May 2019 00:05:24 -0700 |
parents | ee5698ef64dd |
children | a34dee00a989 |
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 """ |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
29 self._putDevices(deviceGraph, inferred) |
1045
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 | 32 #(URIRef('http://bigasterisk.com/host/bang/monitor'), ROOM.powerState), |
33 (URIRef('http://bigasterisk.com/host/dash/monitor'), ROOM.powerState), | |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
34 (URIRef('http://bigasterisk.com/host/frontdoor/monitor'), ROOM.powerState), |
1069 | 35 (ROOM['storageCeilingLedLong'], ROOM.brightness), |
36 (ROOM['storageCeilingLedCross'], ROOM.brightness), | |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
37 (ROOM['garageOverhead'], ROOM.brightness), |
1069 | 38 (ROOM['headboardWhite'], ROOM.brightness), |
39 (ROOM['changingWhite'], ROOM.brightness), | |
40 (ROOM['starTrekLight'], ROOM.brightness), | |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
41 (ROOM['kitchenLight'], ROOM.brightness), |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
42 (ROOM['kitchenCounterLight'], ROOM.brightness), |
1069 | 43 (ROOM['livingRoomLamp1'], ROOM.brightness), |
44 (ROOM['livingRoomLamp2'], ROOM.brightness), | |
45 (ROOM['bedLedStrip'], ROOM.color), | |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
46 ]: |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
47 url = deviceGraph.value(dev, ROOM.putUrl) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
48 |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
49 log.debug('inferredObjects of dev=%s pred=%s', |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
50 deviceGraph.qname(dev), |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
51 deviceGraph.qname(pred)) |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
52 inferredObjects = list(inferred.objects(dev, pred)) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
53 if len(inferredObjects) == 0: |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
54 self._putZero(deviceGraph, dev, pred, url) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
55 elif len(inferredObjects) == 1: |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
56 log.debug(' inferredObject: %s %s %r', |
1085
dda3f1524a52
lots of logging updates (patch may be imprecise)
drewp <drewp@bigasterisk.com>
parents:
1069
diff
changeset
|
57 deviceGraph.qname(dev), |
dda3f1524a52
lots of logging updates (patch may be imprecise)
drewp <drewp@bigasterisk.com>
parents:
1069
diff
changeset
|
58 deviceGraph.qname(pred), |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
59 inferredObjects[0].toPython()) |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
60 self._putInferred(deviceGraph, url, inferredObjects[0]) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
61 elif len(inferredObjects) > 1: |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
62 log.info(" conflict, ignoring: %s has %s of %s" % |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
63 (dev, pred, inferredObjects)) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
64 # write about it to the inferred graph? |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
65 |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
66 def _oneShotPostActions(self, deviceGraph, inferred): |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
67 """ |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
68 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
|
69 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
|
70 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
|
71 |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
72 one-shot statement ?s ?p ?o |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
73 with this in the graph: |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
74 ?osp a :OneShotPost |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
75 ?osp :subject ?s |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
76 ?osp :predicate ?p |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
77 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
|
78 """ |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
79 # 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
|
80 # 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
|
81 log.info("_oneShotPostActions") |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
82 def err(e): |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
83 log.warn("post %s failed", postTarget) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
84 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
|
85 s = deviceGraph.value(osp, ROOM['subject']) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
86 p = deviceGraph.value(osp, ROOM['predicate']) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
87 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
|
88 continue |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
89 #log.info("checking for %s %s", s, p) |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
90 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
|
91 log.info("post target %r", postTarget) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
92 # 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
|
93 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
|
94 |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
95 log.info(" POST %s", postTarget) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
96 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
|
97 |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
98 def _putDevices(self, deviceGraph, inferred): |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
99 agentFor = {} |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
100 for stmt in inferred: |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
101 if stmt[1] == ROOM['putAgent']: |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
102 agentFor[stmt[0]] = stmt[2] |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
103 for stmt in inferred: |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
104 putUrl = deviceGraph.value(stmt[0], ROOM['putUrl']) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
105 putPred = deviceGraph.value(stmt[0], ROOM['putPredicate']) |
1266
ee5698ef64dd
add separate :matchPredicate support. some build and log edits.
drewp <drewp@bigasterisk.com>
parents:
1197
diff
changeset
|
106 matchPred = deviceGraph.value(stmt[0], ROOM['matchPredicate'], |
ee5698ef64dd
add separate :matchPredicate support. some build and log edits.
drewp <drewp@bigasterisk.com>
parents:
1197
diff
changeset
|
107 default=putPred) |
ee5698ef64dd
add separate :matchPredicate support. some build and log edits.
drewp <drewp@bigasterisk.com>
parents:
1197
diff
changeset
|
108 if putUrl and matchPred == stmt[1]: |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
109 self._put(putUrl + '?' + urllib.urlencode([ |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
110 ('s', str(stmt[0])), |
1266
ee5698ef64dd
add separate :matchPredicate support. some build and log edits.
drewp <drewp@bigasterisk.com>
parents:
1197
diff
changeset
|
111 ('p', str(putPred))]), |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
112 str(stmt[2].toPython()), |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
113 agent=agentFor.get(stmt[0], None)) |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
114 |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
115 def _putInferred(self, deviceGraph, putUrl, obj): |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
116 """ |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
117 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
|
118 or obj itself. |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
119 """ |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
120 value = deviceGraph.value(obj, ROOM.putValue) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
121 if value is not None: |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
122 self._put(putUrl, payload=str(value)) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
123 elif isinstance(obj, Literal): |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
124 self._put(putUrl, payload=str(obj)) |
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
125 else: |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
126 log.warn(" don't know what payload to put for %s. obj=%r", |
1045
a328cc370b22
ipv6 fetch support. refactor Actions to new class and file
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
127 putUrl, obj) |
1197
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
128 |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
129 def _putZero(self, deviceGraph, dev, pred, putUrl): |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
130 # zerovalue should be a function of pred as well. |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
131 value = deviceGraph.value(dev, ROOM.zeroValue) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
132 if value is not None: |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
133 log.info(" put zero (%r) to %s", value.toPython(), putUrl) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
134 self._put(putUrl, payload=str(value)) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
135 # this should be written back into the inferred graph |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
136 # for feedback |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
137 |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
138 def _put(self, url, payload, agent=None): |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
139 assert isinstance(payload, bytes) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
140 def err(e): |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
141 log.warn(" put %s failed (%r)", url, e) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
142 log.info(" PUT %s payload=%s agent=%s", url, payload, agent) |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
143 headers = {} |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
144 if agent is not None: |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
145 headers['x-foaf-agent'] = [str(agent)] |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
146 fetch(url, method="PUT", postdata=payload, timeout=2, |
d8acab2b01f5
mqtt has two devices now. various older cleanups.
drewp <drewp@bigasterisk.com>
parents:
1133
diff
changeset
|
147 headers=headers).addErrback(err) |