我有我自己的Orion Context Broker實例,我正在使用IDAS和我自己的fiware服務。我創建了一個實體,我可以更新/查詢信息沒有任何問題。當我訂閱實體通知我,當值發生了變化,我得到以下有效載荷:Orion Context Broker訂閱後沒有通知
* Status Code: 200
{
"subscribeResponse" : {
"subscriptionId" : "555c979c98add18cc3e1839b",
"duration" : "P1M",
"throttling" : "PT5S"
}
}
並具有REST API監聽的主機和端口,我在訂閱請求指示,我得到通知的訂閱:
[20/May/2015 10:22:59] "POST/HTTP/1.1" 200
問題是,當我嘗試更新contextbroker上的值,我不會得到通知該更改的值。
我試着用accumulator-script.py和我得到相同的「錯誤」。
我利用我在一個瓶子框架創建一個python腳本:
import bottle
DEFAULT = {'url': '/'}
@bottle.post(DEFAULT['url'])
def post_default():
print str(bottle.request.json)
if __name__ == '__main__':
bottle.run(host='188.1??.??.??', port=????, debug=True, reloader=True)
(我已經隱伏的主機和端口由於安全問題)
編輯:
要訂閱contextBroker我正在使用Figway中的腳本SetSubscription.py:
python2.7 SetSubscription.py [entity][attribute][server url]
要我用我自己的腳本更新實體:
import json
import urllib
import urllib2
BASE_URL = 'http://188.?.?.?:????'
UPDATE_URL = BASE_URL+'/ngsi10/updateContext'
HEADERS = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Fiware-Service': 'fiwaretestapi'
}
UPDATE_EXAMPLE = {
"contextElements": [
{
"type": "",
"isPattern": "false",
"id": "bustest3",
"attributes": [
{
"name": "temperature",
"type": "int",
"value": "19"
}
]
}
],
"updateAction": "APPEND"
}
def post(url, data):
""""""
req = urllib2.Request(url, data, HEADERS)
f = urllib2.urlopen(req)
result = json.loads(f.read())
f.close()
return result
if __name__ == "__main__":
print post(UPDATE_URL, json.dumps(UPDATE_EXAMPLE))
它的輸出:
[{u'contextElement': {u'attributes': [{u'type': u'int', u'name': u'temperature', u'value': u''}], u'type': u'thing', u'id': u'bustest3', u'isPattern': u'false'}, u'statusCode': {u'code': u'200', u'reasonPhrase': u'OK'}}]}
{u'contextResponses': [{u'contextElement': {u'attributes': [{u'type': u'string', u'name': u'att_name', u'value': u'value', u'metadatas': [{u'type': u'ISO8601', u'name': u'TimeInstant', u'value': u'2015-05-20T14:36:45.752248Z'}]}, {u'type': u'int', u'name': u'temperature', u'value': u'19', u'metadatas': [{u'type': u'ISO8601', u'name': u'TimeInstant', u'value': u'2015-05-20T14:36:45.751958Z'}]}, {u'type': u'ISO8601', u'name': u'TimeInstant', u'value': u'2015-05-20T14:36:45.751958Z'}], u'type': u'thing', u'id': u'bustest3', u'isPattern': u'false'}, u'statusCode': {u'code': u'200', u'reasonPhrase': u'OK'}}]}
我undersand有一直在ContextBroker的更新,但因爲我的問題已經被回事一個星期前。所以我使用0.20。
編輯:
這是我提出用SetSubscription.py確切的請求:
python2.7 SetSubscription.py bustest3 temperature http://188.???.??.???:8082
這是有效載荷我得到一次我讓訂閱:
* Asking to http://188.???.??.???:1026/v1/subscribeContext
* Headers: {'Fiware-Service': 'fiwaretestapi', 'content-type': 'application/json', 'accept': 'application/json', 'X-Auth-Token': 'NULL'}
* Sending PAYLOAD:
{
"reference": "http://188.???.??.???:8082",
"throttling": "PT5S",
"entities": [
{
"type": "",
"id": "bustest3",
"isPattern": "false"
}
],
"attributes": [
"temperature"
],
"duration": "P1M",
"notifyConditions": [
{
"condValues": [
"temperature"
],
"type": "ONCHANGE"
}
]
}
...
* Status Code: 200
{
"subscribeResponse" : {
"subscriptionId" : "555ef47298add18cc3e1839d",
"duration" : "P1M",
"throttling" : "PT5S"
}
}
而在另一部分我正在聽港口,當我訂閱我得到:
"POST/HTTP/1.1" 200 0
{u'originator': u'localhost', u'subscriptionId': u'???????????????????????', u'contextResponses': [{u'contextElement': {u'attributes': [{u'type': u'int', u'name': u'temperature', u'value': u'100', u'metadatas': [{u'type': u'ISO8601', u'name': u'TimeInstant', u'value': u'2015-05-20T14:36:45.751958Z'}]}], u'type': u'thing', u'id': u'bustest3', u'isPattern': u'false'}, u'statusCode': {u'code': u'200', u'reasonPhrase': u'OK'}}]}
188.???.??.??? - - [22/May/2015 05:20:50] "POST/HTTP/1.1" 200 0
的支持,您可以編輯你的答案,所以你正在使用創建預訂,並做更新(包括HTTP報頭),請確切的請求?另外,您使用哪種Context Broker版本?謝謝! – fgalan
回答編輯:) –
這將是很高興知道哪個確切的請求是SetSubscription.py放入電線...您可以添加到您的問題,你從該命令得到的輸出,包括「詢問」,「頭「和」發送PAYLOAD「字段?謝謝! – fgalan