When I tried to use STH to store and receive data sent to OCB, I had a problem with the subscription.
My problem is that creating a subscription is going well. When I create a subscription as follows:
POST /v1/contextSubscriptions HTTP/1.1 Host: <cb_host>:1026 Content-Type: application/json Fiware-Service: myService Fiware-ServicePath: /myServicePath Cache-Control: no-cache { "entities": [ { "type": "cameraSimple", "isPattern": "true", "id": "sensor03" } ], "attributes": [ "class" ], "reference": "http://<cb_host>:8666/notify", "duration": "P1M", "notifyConditions": [ { "type": "ONCHANGE", "condValues": [ "class" ] } ], "throttling": "PT5S" }
I get the following answer:
{ "subscribeResponse": { "subscriptionId": "588b4f38e2066a50fa98df9b", "duration": "P1M", "throttling": "PT5S" } }
but on the Fiware server, I see an error about the conditions on the terminal on which the containers are running, and another about the attributes:
orion | ERROR@14 :06:10 safeMongo.cpp[302]: Runtime Error (field 'conditions' was supposed to be an array but type=4 in BSONObj <{ _id: ObjectId('588b4f96e2066a50fa98df9c'), expiration: 1488116886, reference: "http://<cb_host>:8666/notify", custom: false, throttling: 5, servicePath: "/myServicePath", status: "active", entities: [ { id: "sensor03", isPattern: "true", type: "cameraSimple", isTypePattern: false } ], attrs: [ "class" ], metadata: [], blacklist: false, conditions: [ "class" ], expression: { q: "", mq: "", geometry: "", coords: "", georel: "" }, format: "JSON" }> from caller mongoSubCacheItemInsert:221) orion | ERROR@13 :48:10 safeMongo.cpp[302]: Runtime Error (field 'attrs' was supposed to be an array but type=4 in BSONObj <{ _id: ObjectId('588b4f96e2066a50fa98df9c'), expiration: 1488116886, reference: "http://<cb_host>:8666/notify", custom: false, throttling: 5, servicePath: "/myServicePath", status: "active", entities: [ { id: "sensor03", isPattern: "true", type: "cameraSimple", isTypePattern: false } ], attrs: [ "class" ], metadata: [], blacklist: false, conditions: [ "class" ], expression: { q: "", mq: "", geometry: "", coords: "", georel: "" }, format: "JSON" }> from caller mongoSubCacheItemInsert:215)
Also, when updating the values for my entity
PUT /v2/entities/sensor03/attrs/class/value HTTP/1.1 Host: <cb_host>:1026 Accept: application/json Fiware-Service: myService Fiware-ServicePath: /myServicePath Cache-Control: no-cache "monitor"
I get nothing when requesting STH:
GET /STH/v1/contextEntities/type/myDevice/id/sensor03/attributes/class?lastN=10 HTTP/1.1 Host: <cb_host>:8666 Accept: application/json Fiware-Service: myService Fiware-ServicePath: /myServicePath Cache-Control: no-cache
returns:
{ "contextResponses": [ { "contextElement": { "attributes": [ { "name": "class", "values": [] } ], "id": "sensor03", "isPattern": false, "type": "myDevice" }, "statusCode": { "code": "200", "reasonPhrase": "OK" } } ] }
Note:
- I am using NGSI V1 because I suspect that V2 is not yet supported for STH receiving NGSI V2 notifications regarding this issue . Also, I did not find any documentation regarding "Getting the initial source context information" using NGSI V2, for example, this page
I am using a Docker machine with one Debian 8 virtual machine running on Fiware-Lab with the following images:
mongodb: image: mongo:2.6 hostname: mongodb container_name: mongodb command: --smallfiles orion: image: fiware/orion:develop hostname: orion container_name: orion links: - mongodb expose: - "1026" ports: - "1026:1026" command: -dbhost mongodb fiware-sth-comet: image: telefonicaiot/fiware-sth-comet links: - mongodb ports: - "8666:8666" environment: - STH_HOST=0.0.0.0 - DB_URI=mongodb:27017
EDIT 1: After removing the “development” of the Orion Docker image, I now run verison “1.6.0-next” from Orion and I no longer have a runtime error. However, I cannot get any historical value of the attributes of the object. I have to make a mistake in the request, but I do not know where.
Now my file the file for the dock looks like this:
mongo: image: mongo:3.2 command: --nojournal orion: image: fiware/orion links: - mongo ports: - "1026:1026" command: -dbhost mongo fiware-sth-comet: image: telefonicaiot/fiware-sth-comet links: - mongo ports: - "8666:8666" environment: - STH_HOST=0.0.0.0 - DB_URI=mongo:27017 cygnus: image: fiware/cygnus-ngsi links: -mongo
EDIT 2: Following @ GermánTorodelValle's advice, I'm trying to simulate a notification in an STH container, like CB:
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "Fiware-Service: myService" -H "Fiware-ServicePath: /myServicePath" -d '{ "subscriptionId" : "57a9ce8ae997e37e85a4be39", "originator" : "orion.contextBroker.instance", "contextResponses" : [ { "contextElement" : { "attributes" : [ { "name" : "class", "type" : "Text", "value" : "monitor" } ], "type" : "cameraSimple", "isPattern" : "false", "id" : "sensor03" }, "statusCode" : { "code" : "200", "reasonPhrase" : "OK" } } ] }' "http://172.17.0.1:8666/notify"
Entering the STH container is as follows:
time=2017-02-02T13:50:36.809Z | lvl=ERROR | corr=39638217-c300-48c0-9122-bff6164d5298 | trans=39638217-c300-48c0-9122-bff6164d5298 | op=OPER_STH_POST | from=n/a | srv=myService | subsrv=/myServicePath | comp=STH | msg=Error when getting the raw data collection for storing:MongoError: db already exists with different case already have: [sth_myservice] trying to create [sth_myService] time=2017-02-02T13:50:36.810Z | lvl=WARN | corr=c322ddc8-2140-484b-a123-4e5b9b60742e | trans=c322ddc8-2140-484b-a123-4e5b9b60742e | op=OPER_STH_POST | from=n/a | srv=myService | subsrv=/myServicePath | comp=STH | msg=POST /notify, event={"request":"1486043436805:3577e9b29ee6:1:iym1stlz:10018","timestamp":1486043436810,"tags":["handler","error"],"data":{"msec":3.6443320512771606,"error":"db already exists with different case already have: [sth_myservice] trying to create [sth_myService]","data":{"name":"MongoError","message":"db already exists with different case already have: [sth_myservice] trying to create [sth_myService]","ok":0,"errmsg":"db already exists with different case already have: [sth_myservice] trying to create [sth_myService]","code":13297,"isBoom":true,"isServer":true,"data":null,"output":{"statusCode":500,"payload":{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"},"headers":{}}}},"internal":true} time=2017-02-02T13:50:36.812Z | lvl=ERROR | corr=6c864793-c7ef-462a-a43d-75cdae8d20a3 | trans=6c864793-c7ef-462a-a43d-75cdae8d20a3 | op=OPER_STH_POST | from=n/a | srv=myService | subsrv=/myServicePath | comp=STH | msg=POST /notify, event={"request":"1486043436805:3577e9b29ee6:1:iym1stlz:10018","timestamp":1486043436811,"tags":["internal","error"],"data":{"name":"MongoError","message":"db already exists with different case already have: [sth_myservice] trying to create [sth_myService]","ok":0,"errmsg":"db already exists with different case already have: [sth_myservice] trying to create [sth_myService]","code":13297,"isBoom":true,"isServer":true,"data":null,"output":{"statusCode":500,"payload":{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"},"headers":{"content-type":"application/json; charset=utf-8","cache-control":"no-cache","content-length":96}}},"internal":true} time=2017-02-02T13:50:38.143Z | lvl=INFO | corr=n/a | trans=n/a | op=OPER_STH_SERVER_LOG | from=n/a | srv=n/a | subsrv=n/a | comp=STH | msg=Everything OK, 0 requests attended in the last 60s interval