Data mapping for LoRaWAN

IMPACT IoT supports data mapping capability for devices on a LoRaWAN® (Low Power Wide Area Networks) network when using a Protocol Adapter to integrate with the LoRaWAN network.

You can write a custom script and custom logic for decoding the encrypted data. See Example - creating data mapping scripts.

For an example script for this type of data mapping, see nordicmeterscript.js script.

The following are examples when a device uses a Protocol Adapter to send and receive the payload data from IMPACT IoT.

  • For device boot:

    The following payload is received from the device through the Protocol Adapter.

    resourcePath: "uplinkMsg/0/meta"
    value: {
    "type": "uplink",
    "meta":
    { "network": "a653ee9da56a43b9ab308c3b2f06eb81", "packet_hash": "00c8455348893131a71db24740846146", "application": "0000000000000100", "device_addr": "0001dec5", "time": 1617967553.360951, "device": "f80332020001dec5", "packet_id": "272abb89b77b2eeccad0d728cdc6cef0", "gateway": "00001c497be16b8e" } ,
    "params":
    { "rx_time": 1617967553.3218427, "port":*99*, "duplicate": false, "counter_up": 1593, "payload": "*ABYBEkwAAQIQ*", "encrypted_payload": "OBl9efO7cJ+8bs4WiTs8xL4zJObg+KeDADZ1LS0B45fEZQL5151x3g==" } }

    This payload is mapped to the following data which is sent to IMPACT IoT.

    • Device/0/Firmware = 0.1.2
    • Device/0/BootReason = 10

    After the device is registered, the following is used to read the meter.

    resourcePath: "uplinkMsg/0/meta"
    value: {
    "type": "uplink",
    "meta":
    {     "network": "a653ee9da56a43b9ab308c3b2f06eb81",     "packet_hash": "00c8455348893131a71db24740846146",     "application": "0000000000000100",     "device_addr": "0001dec5",     "time": 1617967553.360951,     "device": "f80332020001dec5",     "packet_id": "272abb89b77b2eeccad0d728cdc6cef0",     "gateway": "00001c497be16b8e"   }
    ,
    "params":
    {     "rx_time": 1617967553.3218427,     "port":14,     "duplicate": false,     "counter_up": 1593,     "payload": "gAoAAA==",     "encrypted_payload": "OBl9efO7cg=="   }
    }

    This payload is mapped to the following data which is sent to IMPACT IoT.

    Water/0/UsageinLiters = 2688
  • To downlink data to a device :

    IMPACT IoT initiates the downlink with "Water/0/ReportingInterval"= 600.

    The following data is sent to the Protocol Adapter:
    Method: PUT
    URL: m2m/endpoints/<device>/downlinkMsg/0/data
    Payload: {“resourceValue”:”confirmed:false,pending:false,fport:50,payload:AVgCAAA=”}
  • To write data to a device :

    IMPACT IoT initiates the write data with "Water/0/ReportingInterval"= 600.

    The script manipulates the value to send the following payload:

    { “correlatorId”:”asdfehdga” "write":[ { "resources":"DownlinkMsg/0/data", "endPointClientNames": "T0001dec5", “string”:”AVgCAAA=”, }}
    The adapter resonds with { “correlatorId”:”asdfehdga” "writeResponse":
     { “requestStatus”:0, “responseCode”:0, } } }
  • To read all data from a device :

    IMPACT IoT initiates the read data.

    The following data is sent to the Protocol Adapter:

    GET /Devices/T0001dec5
    The Protocol Adapter can:
    • respond immediately in case of a synchronous read

      or

      accept the response and reply later in case of an asynchronous read

    The Protocol Adapter sends the following in response to the read data:

    { "details":
     { "uplinkMsg/0/meta":”confirmed:false,pending:false,fport:24,payload:-EQAAAE4kAARA”}} 
    This is translated to the following resources which map to:
    • Water/0/UsageinLiters = 17
    • Device/0/mV = 1.248
    • Water/0/Temperature = 24
    • Water/0/Temp Detection = 1
    • Water/0/UserTriggered = 1
    • Water/0/IsAlert = 0
  • To read a single resource from a device:

    IMPACT IoT initiates the following read request.

    The following data is sent to read the millivolts.

    Read device/0/mV
    All data is stored as a blob in the Protocol Adapter so the script translates this to:
    { “correlatorId”:”the correlator value” "read":[ { "resources":"downlinkMsg/0/meta", "endPointClientNames": ["TT0001dec5"]
    The Protocol Adapter responds as follows.
    { “correlatorId”:”the correlator value”, “requestStatus”:0, “responseCode”:0, "response":[ { "uplinkMsg/0/meta": 
     "type": "uplink",
     "meta":
     { "network": "a653ee9da56a43b9ab308c3b2f06eb81", "packet_hash": "00c8455348893131a71db24740846146", "application": "0000000000000100", "device_addr": "0001dec5", "time": 1617967553.360951, "device": "f80332020001dec5", "packet_id": "272abb89b77b2eeccad0d728cdc6cef0", "gateway": "00001c497be16b8e"} ,
     "params":
     { "rx_time": 1617967553.3218427, "port":24, "duplicate": false, "counter_up": 1593, "payload": "gAoAAA==", "encrypted_payload": "OBl9efO7cg==" } }

    The following data is returned to the caller.

    • Device/0/mV = 1.248