Search code examples
fiwarefiware-orioncratedb

How to add TimeInstant, CreationDate and ModifiedDate into CrateDB with Orion Context Broker?


I'm setting up a Firmware-Framework, where I unforutunately have to add historically Sensor Values. But I also need the creationDate and the modificationDate for other usecases.

Therefore I add the Attribute "Metadata" with the variable "TimeInstant". Then I create an Entity, create an Orion-Subscription for that Entity and update the Entity with my old Sensor-Valses.

The Json-File I send to the Orion-Context Broker to update the Attribute looks like this:

{
"metadata": {
    "TimeInstant": {
        "type": "DateTime",
        "value": "2015-02-02T11:35:25.0000Z"
    }
},
"type": "Number",
"value": 0.0132361 }

The Output in my Mongo-DB like this:

"_id": {
    "id": "urn:ngsi-ld:SensorB-K1200____",
    "type": "Sensor",
    "servicePath": "/test/servicepath"
},
"attrNames": [
    "Sensor_value"
],
"attrs": {
    "Sensor_value": {
        "value": 0.01632361,
        "type": "Number",
        "md": {
            "TimeInstant": {
                "type": "DateTime",
                "value": 1422876989
            }
        },
        "mdNames": [
            "TimeInstant"
        ],
        "creDate": 1568712813,
        "modDate": 1568735930
    }
},
"creDate": 1568712813,
"modDate": 1568735930,
"lastCorrelator": "0a129232-d964-11e9-8e5a-0242ac130009" }

But my Crate-DB only has the columns: entity_id entity_type fiware_servicepath sensor_value time_index

My Subscription File looks like this:

{
"expires": "2019-12-24T18:00:00",
"notification": {
    "http": {
        "url": "http://quantumleap:8668/v2/notify"
    },
    "metadata": [
        "dateCreated",
        "dateModified",
        "TimeInstant"
    ]
},
"subject": {
    "entities": [
        {
            "id": "urn:ngsi-ld:SensorB-K1200____",
            "type": "Sensor"
        }
    ]
},
"throttling": 0 }

I've tried changing the "Metadata" Attributes in the Subscription-File, also tried restartig Crate-DB, ContextBroker e.g..

I excpect the CrateDb to show all three values: "dateCreated", "dateModified" and "TimeInstant".


Solution

  • Did you check what's the message notification actually sent by Orion to QuantumLeap?

    As regards the payload I would try as follow:

    {
      "TimeInstant": {
        "type": "DateTime",
        "value": "2015-02-02T11:35:25.0000Z"
      },
      "type": "Number",
      "value": 0.0132361
    }
    

    Internally we usually use as attribute name for this type of scenario dateObserved, but it would not make any difference w.r.t. TimeInstant.

    I am not actually sure you can attach metadata to the root of NGSI message, I believe they are supposed to be attached only to attributes. Anyhow, QuantumLeaps does not support NGSI metadata (i.e. metadata attached to NGSI attributes). Still it support time indexing based on them.

    The way Quantum Leap handles TimeInstant metadata and other time metadata is via time_index. See documentation here: https://quantumleap.readthedocs.io/en/latest/user/#time-index