Я использую брокер контекста orion GE image orion-psb-image-R5.4 версии 1.7.0, и я зарегистрировал в нем объект устройства, затем я реализовал в своем raspberry pi простой серверный скрипт python, который прослушивает любое входящее сообщение и печатает это в журналах Пи. затем я отправил сообщение о подписке контекстному брокеру, чтобы позволить моему Raspberry Pi подписаться на соответствующий объект в контекстном брокере. Проблема в том, что всякий раз, когда я обновляю атрибуты условия в сущности в брокере контекста, они должны запускать уведомление для Raspberry Pi, а затем серверный скрипт в PI выводит уведомление в журналы Pi. Но что на самом деле происходит, так это то, что брокер контекста может запускать уведомление несколько раз, а затем внезапно прекращает отправку любого уведомления, когда к атрибуту условия применяется какое-либо дополнительное изменение, и при каждой попытке я получаю статус подписки в брокере контекста и я обнаружил, что произошла ошибка, указанная атрибутом lastfailure, который дает мне время моей последней неудачной попытки. Я думал, что проблема может заключаться в подключении к моему Pi или даже в самом скрипте сервера, но когда я запускал прямые запросы с моего терминала на Raspberry Pi, он сразу же печатает все сообщения, даже если обновление выполняется из удаленного места. Итак, я пришел к выводу, что проблема определенно связана с брокером контекста и процессом уведомления самой подписки.
Вот мой запрос на подписку:
curl -v contextbrokeraddress:1026/v2/subscriptions -s -S --header "Fiware-Service: XYZ" --header "Fiware-ServicePath: /XYZ" --header 'Content-Type: application/json' \
-d @- <<EOF
{
"description": " Try",
"subject": {
"entities": [
{
"id": "Controller1",
"type": "Controller"
}
],
"condition": {
"attrs": [
"switch",
"datashow"
]
}
},
"notification": {
"http": {
"url": "http://raspberryPiaddress:8080"
},
"attrs": [
"switch",
"datashow"
]
},
"expires": "2040-01-01T14:00:00.00Z",
"throttling": 5
}
EOF
теперь, когда атрибут переключателя обновляется с другим значением, он может запускать уведомление для raspberry pi только в первый раз, но затем терпит неудачу при любых последующих попытках.
это простой скрипт Python, который прослушивает входящие уведомления и выводит их в свои журналы:
import socket
HOST, PORT = '', 8080
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
while True:
print "listening on port 8080"
client_connection, client_address = listen_socket.accept()
print "notified"
request = client_connection.recv(1024)
print request
client_connection.close()
И вот как уведомление от контекстного брокера печатается в журналах Pi в его успешные времена:
listening on port 8080
notified
POST / HTTP/1.1
User-Agent: orion/1.7.0 libcurl/7.19.7
Host: raspberryPiaddress:8080
fiware-service: XYZ
Fiware-ServicePath: /XYZ
X-Auth-Token: token
Accept: application/json
Content-length: 208
Content-type: application/json; charset=utf-8
Fiware-Correlator: f48ced60-1069-11e7-b743-fa163e7c4daf
Ngsiv2-AttrsFormat: normalized
{"subscriptionId":"58cd49191e9c000de6ea89c7","data":[{"id":"Controller1","type":"Controller","switch":{"type":"command","value":"OFF","metadata":{}},"datashow":{"type":"string","value":"OFF","metadata":{}}}]}
И когда уведомление не получено ни о каких последующих обновлениях объекта, я проверяю, что это был сбой, получая статус подписки, в котором говорится, что произошел сбой в брокере контекста при отправке уведомления в точное время моей попытки. Это статус, который я получаю, чтобы проверить, что:
[
{
"description": " Try",
"expires": "2040-01-01T14:00:00.00Z",
"id": "58cd49191e9c000de6ea89c7",
"notification": {
"attrs": [
"switch",
"datashow"
],
"attrsFormat": "normalized",
"http": {
"url": "http://ahmadpi.ddns.net:8080"
},
**"lastFailure": "2017-03-24T08:22:23.00Z",**
"lastNotification": "2017-03-24T08:22:18.00Z",
"lastSuccess": "2017-03-23T22:09:33.00Z",
"timesSent": 66
},
"status": "failed",
"subject": {
"condition": {
"attrs": [
"switch",
"datashow"
]
},
"entities": [
{
"id": "Controller1",
"type": "Controller"
}
]
},
"throttling": 5
}
]
теперь проблема, похоже, связана с брокером контекста и тем, как внутри него обрабатываются процессы подписки / уведомления. Теперь я хочу знать, касается ли проблема версии изображения контекстного брокера, которую я использовал, или она касается чего-то еще. Я просто хочу знать, в чем проблема и как с ней справиться, пожалуйста, и большое спасибо.
/var/log/contextBroker/contextBroker.log
) как следствие обновления объекта? В этом случае, пожалуйста, отредактируйте свой вопрос, чтобы включить их. Спасибо! - person fgalan   schedule 27.03.2017contextBroker --version
предоставит версию. - person fgalan   schedule 29.03.2017/var/log/contextBroker/contextBroker.log
), когда уведомление не удается, пожалуйста? Отредактируйте журнал вопросов, чтобы добавить журналы. Спасибо! - person fgalan   schedule 03.04.2017