Convert the LwM2M JSON encoding written by AVSystem's Coiote Azure integration to nRF Asset Tracker's LwM2M JSON encoding.
Name | AssetTrackerv2 Firmware | Coiote-Azure | LwM2M Asset Tracker v2 |
---|---|---|---|
Device | 3:1.2@1.1 | 3:1.2@1.1 | 3:1.2@1.1 |
Connectivity Monitoring | 4:1.3@1.1 | 4:1.3@1.1 | 4:1.3@1.1 |
Location | 6 | 6 | 6 |
Temperature | 3303:1.1 | 3303 | 3303:1.1 |
Humidity | 3304:1.1 | 3304 | 3304:1.1 |
Pressure | 3323:1.1 | 3323 | 3323:1.1 |
Config | 50009 | 50009 | 50009 |
Where ":
" indicates the object version and "@
" indicates the LwM2M
version. if not present, values will be the default option. Default LwM2M
version is 1.0
. Default object version is 1.0
.
npm install --save-exact
After cloning the repository:
npm ci
npm test
import { converter } from './converter.js'
const deviceTwin = {} // ... full device twin
const result = await converter(deviceTwin)
console.log(result)
See ./src/example.ts for more details.
Result of the integration between Coiote and Azure.
{
"deviceId": "urn:imei:000000000000008",
"etag": "AAAAAAAAAAE=",
"deviceEtag": "MTMwNTk1MzI2",
"status": "enabled",
"statusUpdateTime": "0001-01-01T00:00:00Z",
"connectionState": "Connected",
"lastActivityTime": "0001-01-01T00:00:00Z",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"modelId": "",
"version": 7,
"properties": {
"desired": {
"$metadata": {
"$lastUpdated": "2023-07-05T14:35:14.759071Z"
},
"$version": 1
},
"reported": {
"lwm2m": {
"3": {
"0": {
"0": {
"value": "Nordic Semiconductor ASA"
},
"1": {
"value": "Thingy:91"
},
"2": {
"value": "351358815340515"
},
"3": {
"value": "22.8.1+0"
},
"7": {
"0": {
"value": 80
},
"attributes": {
"dim": "1"
}
},
"11": {
"0": {
"value": 0
},
"attributes": {
"dim": "1"
}
},
"13": {
"value": 1675874731
},
"16": {
"value": "UQ"
},
"19": {
"value": "3.2.1"
}
}
},
"4": {
"0": {
"0": {
"value": 6
},
"1": {
"0": {
"value": 6
},
"1": {
"value": 7
},
"attributes": {
"dim": "2"
}
},
"2": {
"value": -85
},
"3": {
"value": 23
},
"4": {
"0": {
"value": "10.160.120.155"
},
"attributes": {
"dim": "1"
}
},
"8": {
"value": 34237196
},
"9": {
"value": 2
},
"10": {
"value": 242
},
"12": {
"value": 12
}
},
"attributes": {}
},
"6": {
"0": {
"0": { "value": -43.5723 },
"1": { "value": 153.2176 },
"2": { "value": 2 },
"3": { "value": 24.798573 },
"5": { "value": 1665149633 },
"6": { "value": 5 }
}
},
"3303": {
"0": {
"5700": {
"value": 15
}
}
},
"3304": {
"0": {
"5700": {
"value": 30
}
}
},
"3323": {
"0": {
"5601": {
"value": 101697
},
"5602": {
"value": 101705
},
"5700": {
"value": 10
},
"5701": {
"value": "Pa"
}
}
},
"50009": {
"0": {
"0": {
"value": true
},
"2": {
"value": 120
},
"3": {
"value": 600
},
"4": {
"value": 7200
},
"1": {
"value": 60
},
"5": {
"value": 8.5
},
"6": {
"value": true
},
"7": {
"value": true
},
"8": {
"value": 2.5
},
"9": {
"value": 0.5
}
}
}
},
"$metadata": {
"lwm2m": {}
}
},
"$version": 6
},
"capabilities": {
"iotEdge": false
}
}
full device twin object here: ./src/deviceTwinExample.json
export const output = {
"6": {
"0": -43.5723,
"1": 153.2176,
"2": 2,
"3": 24.798573,
"5": 1665149633,
"6": 5,
},
"50009": {
"0": true,
"1": 60,
"2": 120,
"3": 600,
"4": 7200,
"5": 8.5,
"6": true,
"7": true,
"8": 2.5,
"9": 0.5,
},
"3:1.2@1.1": {
"0": "Nordic Semiconductor ASA",
"1": "Thingy:91",
"2": "351358815340515",
"3": "22.8.1+0",
"7": [80],
"11": [0],
"13": 1675874731,
"16": "UQ",
"19": "3.2.1",
},
"4:1.3@1.1": {
"0": 6,
"1": [6, 7],
"2": -85,
"3": 23,
"4": ["10.160.120.155"],
"8": 34237196,
"9": 2,
"10": 242,
"12": 12,
},
"3303:1.1": [{ "5518": 1692369551, "5700": 15 }],
"3304:1.1": [{ "5518": 1692369551, "5700": 30 }],
"3323:1.1": [
{
"5518": 1692369551,
"5601": 101697,
"5602": 101705,
"5700": 10,
"5701": "Pa",
},
],
};
See ./adr.